Objective C - performance ?

Brips

Membre confirmé
4 Mars 2006
73
3
Bonjour,
j'aimerais trouver quelques informations sur la rapidité d'exécution d'un programme écrit en objective C. J'ai effectué mes recherches en vain. Si vous avez un lien vers un tableau comparatif entre objective C, C++, Java, C#

Pour l'instant, ce que j'en sais, c'est qu'objective C utilise un run-time comme java et C#, donc au niveau rapidité c'est kif kif ?

La plate-forme Mono (portage du C#) est-il assez abouti désormais ? (il était instable il y a quelques années encore)

J'ai besoin de puissance pour des calculs mathématiques poussés, et je me suis déja penché sur les instructions SSE3 (oui j'ai un mactel :p)

voila, si quelqu'un aurait quelques infos pertinentes et objectives :D je suis preneur !
 
Salut,

ObjC utilise un Runtime, mais attention, ça n'a rien à voir avec Java et son compilateur Just in Time. Le code ObjC est bien déjà compilé pour le processeur auquel il est destiné.

Le Runtime d'ObjC sert surtout à la résolution dynamique des appels de méthode. Contrairement au C++, on peut demander à n'importe quel objet d'executer n'importe quelle méthode, quel que soit le type de l'objet. Cependant, le mécanisme est relativement intelligent (une simple indirection par un tableau de pointeurs de fonctions, comme expliqué dans le manuel d'Objective-C), il n'y a donc pas une perte importante de performances lors des appels de méthodes.

Bref, ObjC joue dans la cour de C et C++, d'autant plus que la bibliothèque d'objets de base de Cocoa (Fundation), notamment dans les traitement des tableaux et la gestion de la mémoire, est particulièrement efficace.
 
Pour l'instant, ce que j'en sais, c'est qu'objective C utilise un run-time comme java et C#, donc au niveau rapidité c'est kif kif ?

Petite confusion avec Cocoa, qui peut s'utiliser avec Objective C ou Java (enfin jusqu'à maintenant car les nouvelles API ne seront semblent-ils pas compatibles Java)
 
Petite confusion avec Cocoa, qui peut s'utiliser avec Objective C ou Java (enfin jusqu'à maintenant car les nouvelles API ne seront semblent-ils pas compatibles Java)

Non, aucune confusion de la part de Brips. ObjC utilise bien un runtime, comme je l'indique plus haut, même quand on ne l'utilise pas avec Cocoa.
 
Dans ton cas, si tu veux faire de l'OpenGL ou de la 3D temps réel, Objectif C est suffisament rapide.
Donc pas d'inquiêtude sur les perfs. Ca n'a rien à voir avec la vitesse java.

Pour t'en convaincre, tu peux faire un tour sur mon site ou il y a un jeu (Puissance3D). Il y a une version Java/SWING/Java3D et une version ObjectiveC/Cocoa/OpenGL. Tu verras que la version ObjectiveC est beaucoup plus rapide.
 
ok cool, me reste plus qu'a prendre un bouquin d'objective C, je connais bien le c++ et le java, mais j'ai cru lire qu'il est préférable d'utiliser objective C, pour appeler certaines fonctions de l'API
fonctions qu'on ne peut appeler avec du c++ si j'ai bien compris
 
ok cool, me reste plus qu'a prendre un bouquin d'objective C, je connais bien le c++ et le java, mais j'ai cru lire qu'il est préférable d'utiliser objective C, pour appeler certaines fonctions de l'API
fonctions qu'on ne peut appeler avec du c++ si j'ai bien compris

pour faciliter l'integration cpp apple a mis en place Obj-c++
:zen:
 
ok cool, me reste plus qu'a prendre un bouquin d'objective C, je connais bien le c++ et le java, mais j'ai cru lire qu'il est préférable d'utiliser objective C, pour appeler certaines fonctions de l'API
fonctions qu'on ne peut appeler avec du c++ si j'ai bien compris

C'est pas tout à fait ça. Les couches de bas niveau sont accessibles par des API écrites en C (donc accessibles en C, C++ ou ObjC directement).
Mais Apple fournit aussi une bibliothèque de développement rapide ("Application framework" comme on dit chez nous) qu'on appelle Cocoa. Il s'agit d'un ensemble d'objets écrit en ObjC.
Les appels aux méthodes de Cocoa se font forcément en ObjC (ou par Java, par le Java Bridge, mais c'est une autre histoire). Tu as cependant la possibilité de mélanger ObjC et C++ avec ce qu'on appelle l'Objective-C++. Ca peut être intéressant si tu veux développer l'interface utilisateur en ObjC et garder le noyau de ton appli en C++.
 
où peut on trouver de la littérature objective-c++ sur le web... jusqu'à présent je n'ai pas trouvé grand chose.. ?

et pourtant, j'aimerai bien essayer de mélanger c++ et objective-c dans le but de les comparer en terme de gestion de complexité pour implémenter des fonctionnalités basiques.
 
merci de vos remarques, ça commence à s'éclaircir la :)

j'ai pas trouvé beaucoup de doc la dessus non plus, donc si quelqu'un a quelques références ... :)

sinon mon appli sera surtout orienté traitement lourd de vidéos, et donc je ne sais plus trop quel API utiliser,
le mieux serait donc l'IHM en objective C, les traitements lourd en C++ (voir meme avec du code optimisé assembleur en utilisant le SSE)
ou bien je peux tout gérer en objective C sans trop de perte de performance ?

et quid de l'API quicktime pour tout ce qui touche a la vidéo ? vous me préconisez quicktime ?
 
où peut on trouver de la littérature objective-c++ sur le web... jusqu'à présent je n'ai pas trouvé grand chose.. ?

et pourtant, j'aimerai bien essayer de mélanger c++ et objective-c dans le but de les comparer en terme de gestion de complexité pour implémenter des fonctionnalités basiques.

les scr de abiword cocoa/cpp binding te donneront cette litterature
 
merci de vos remarques, ça commence à s'éclaircir la :)

j'ai pas trouvé beaucoup de doc la dessus non plus, donc si quelqu'un a quelques références ... :)

sinon mon appli sera surtout orienté traitement lourd de vidéos, et donc je ne sais plus trop quel API utiliser,
le mieux serait donc l'IHM en objective C, les traitements lourd en C++ (voir meme avec du code optimisé assembleur en utilisant le SSE)
ou bien je peux tout gérer en objective C sans trop de perte de performance ?

et quid de l'API quicktime pour tout ce qui touche a la vidéo ? vous me préconisez quicktime ?

attention pour l'alignement SSE, d8 est designé pour des jeux SSE2/3 alors que d7 non

pour les perf il faut tester : "differents animaux" pour "differentes choses"
cela dépend de ce que tu fais dans la majorité des cas je pense que cela suffira
mais seul toi sait quicktime / corevideo / ou attaquer opengl directement et SDL
avec l'API DirectMedia Layer
 
où peut on trouver de la littérature objective-c++ sur le web... jusqu'à présent je n'ai pas trouvé grand chose.. ?

et pourtant, j'aimerai bien essayer de mélanger c++ et objective-c dans le but de les comparer en terme de gestion de complexité pour implémenter des fonctionnalités basiques.

Par exemple ici:

http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Articles/chapter_4_section_10.html

Y'a pas 50 000 articles sur le sujet non plus, qui n'est pas très vaste.
 
attention pour l'alignement SSE, d8 est designé pour des jeux SSE2/3 alors que d7 non

gné :confused:
c'est quoi d8 et d7 ? directX ? :rateau:

et quand tu parles de l'alignement, c'est l'alignement des bits ? poids forts/faibles en premier etc ... ?

en fait je crois que j'ai pas tout compris :D j'ai déja utilisé en son temps les instructions MMX mais sous windows:hein:

sinon je suis d'accord avec toi, le mieux, ca va être de me faire un petit programme représentatif de mon appli finale en cout des ressources, et comparer les différentes méthodes ;)

désolé si je me perds encore un peu les pédales sur certaines abréviations du monde mac, je ne suis qu'un petit switcheur :zen: qui espère bien apporter son petit caillou à l'édifice :p
 
:D

if x 16, subtraction 16/16 SSE
if x 8, subtraction 8/8 MMX
default subtraction 4/4

Float from 4 to 8 octets SSE2
mmx -> registers xmm SSE2 (entier)

en gros oui :

D7 Darwin7-x86 (en version ppc cela donne Panther)
D8 Darwin8-x86 (Tiger) Tiger est une génération batarde le 32 extends 64
la prochaine étape sera le full x86_64

donc d'après tes propos cela a une importance

:zen:
 
merci pour les liens.....

L'installation d'Xcode propose adhoc un ensemble de code d'exemple d'objective-c++ (n'hésiter pas à chercher avec spotlight) mélangé avec du code objective-c. Seulement, il faut déjà si connaître pas mal dans l'usage des différents framework pour comprendre réellement quelque chose dans leur code.
 
c'est un peu le probleme, mais ces exemples sont très pratiques, je me suis déja grandement inspiré de leur code pour commencer

le probleme c'est parfois de dicerner l'object C++ du objec C le tout saupoudré de framework :rose: