# Objective C - performance ?



## Brips (4 Décembre 2006)

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 )

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


----------



## Céroce (5 Décembre 2006)

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.


----------



## DualG4 (5 Décembre 2006)

Brips a dit:


> 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)


----------



## Céroce (6 Décembre 2006)

DualG4 a dit:


> Petite confusion avec Cocoa, qui peut s'utiliser avec Objective C ou Java (enfin jusqu'&#224; 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&#234;me quand on ne l'utilise pas avec Cocoa.


----------



## DualG4 (6 Décembre 2006)

Céroce a dit:


> 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.



Tout à fait: à vouloir répondre trop vite, je n'avais pas compris correctement sa phrase.....


----------



## SuperCed (13 Décembre 2006)

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.


----------



## Brips (17 Décembre 2006)

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


----------



## tatouille (17 Décembre 2006)

Brips a dit:


> 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&#233;f&#233;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++


----------



## Céroce (18 Décembre 2006)

Brips a dit:


> 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++.


----------



## claw59 (18 Décembre 2006)

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.


----------



## Brips (18 Décembre 2006)

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 ?


----------



## ntx (18 Décembre 2006)

Pour la vidéo : Core Video


----------



## tatouille (20 Décembre 2006)

claw59 a dit:


> 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


----------



## tatouille (20 Décembre 2006)

Brips a dit:


> 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 ...
> 
> ...



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


----------



## Céroce (20 Décembre 2006)

claw59 a dit:


> 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.


----------



## Brips (20 Décembre 2006)

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



gné 
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  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  qui espère bien apporter son petit caillou à l'édifice


----------



## tatouille (20 Décembre 2006)

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&#233;n&#233;ration batarde le 32 extends 64 
la prochaine &#233;tape sera le full x86_64 

donc d'apr&#232;s tes propos cela a une importance


----------



## claw59 (21 Décembre 2006)

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.


----------



## Brips (21 Décembre 2006)

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:


----------



## Joelaloose (22 Décembre 2006)

Un petit article qui compare Java & C++ (il y a peut être un peu de partit pris puisqu'il provient du site java.sys-con.com
Mais si ça peut aider à te faire une idée


----------



## tatouille (26 Décembre 2006)

Joelaloose a dit:


> Un petit article qui compare Java & C++ (il y a peut &#234;tre un peu de partit pris puisqu'il provient du site java.sys-con.com
> Mais si &#231;a peut aider &#224; te faire une id&#233;e



comparer D,C,CPP , CAML ... 

comparer le cpp avec un language bytecod&#233;
avec un runtime &#233;crit en cpp et c ? cela s'appel du foutage de gueule en terme de perf java n'atteindra jamais cpp

apr&#232;s comparer la structure objet des 2 lang c'est differents
il ne faut pas tout m&#233;langer

un comparatif java/python/ruby est bien plus interressant


----------

