FREN

#FF00AA


1 fév. 2006

Premier contact avec Objective-C

@misc@

Tout a commencé sous Windows 3.1, avec Borland C++. Le langage était assez simple, les classes Borland plutôt bien conçues (je n’ai jamais eu le malheur de toucher aux MFC), et pour l’époque c’était un environnement de développement plutôt bon. (Il n’y a pas de hasard, l’application sur laquelle j’ai passé le plus de temps à l’époque était un clone de l’interface NeXTstep — à une époque où la personnalisation de Windows et l’émulation d’autres OS n’était pas aussi populaire que maintenant.) Par la suite, j’ai un peu essayé BeOS, et on sentait tout de suite qu’il était conçu dès le départ pour que le développement soit facile, pas comme une certaine antiquité Windows. Mais on sait ce qu’il est advenu de BeOS, et je n’ai recommencé à programmer que quand .NET a commencé à prendre du poids. Même si pouvait très vite devenir cauchemardesque quand on voulait faire quelque chose que ne prévoyaient pas les classes .NET et qu’il fallait communiquer avec les API Win32, le C# était incroyablement pratique à écrire : comme le C++ mais en tellement plus simple, avec un garbage collector et tout ce qu’il faut. (C’est à ce moment que j’ai créé Ghrone, une horloge transparente skinnable qui n’est pas encore obsolète.) Ah, et bien sûr je pratique le PHP couramment.

Au moment où je me suis mis à la programmation Windows, les magazines d’informatique (il devait y en avoir deux, à cette époque) débordaient d’articles sur NeXTstep, expliquant à quel point il était moderne et bien conçu et facile à programmer et le paradis du programmeur et qu’il allait révolutionner le développement d’applications. Inutile de dire que, quand j’ai fini par acheter un Mac presque vingt ans plus tard, sachant qu’OS X avait hérité la majeure partie de sa plateforme de programmation de NeXT, j’avais hâte de voir ça. Jusqu’à ce que je commence à voir du code Objective-C.

Oh boy.

Il faut dire que je me suis lancé de la pire façon qui soit : un tutoriel rapide qui montre comment écrire de l’Objective-C quand on vient du monde C++. Mais c’est quoi, cette syntaxe à la con ? Pourquoi il y a des crochets partout, et quand même de la syntaxe C au milieu ? S’il y a encore du C, c’est quoi l’intérêt de cette syntaxe complètement tarée pour tout ce qui est objets ? Et ces définitions de méthodes ? Comment quelqu’un a jamais pu trouver ça cohérent ? Et les appels des méthodes ? Celui qui a conçu ça a dû finir à l’asile !

Je crois que le secret, quand on se met à la programmation OS X, est de ne surtout pas commencer comme ça. Un peu d’histoire, ça fait du bien : ça m’a beaucoup aidé quand j’ai réalisé qu’Objective-C avait été conçu il y a bien des années (grosso modo en même temps que le C++, mais avec une philosophie différente) et qu’on ne peut pas lui en vouloir d’être moins avancé et moderne que le C# qui date de vingt ans plus tard. Et que la syntaxe hallucinante est due à la décision de garder le langage et les compilateurs à 100% compatibles avec le C. Et que les ingénieurs de NeXT ne l’ont pas choisi parce qu’ils trouvaient la syntaxe marrante, mais parce qu’il a des mécanismes très malins pour faciliter la vie du programmeur sur des projets complexes, même si ce n’est pas tout à fait évident au premier coup d’oeil.

Je n’ai pas encore vraiment commencé à programmer, je n’en suis qu’à la documentation (j’ai l’habitude bizarre de lire toute la doc avant de me lancer, plutôt que d’essayer les exemples au fur et à mesure — je sais qu’on n’est pas censé faire comme ça, mais j’ai toujours fonctionné comme ça) mais je dois dire que la façon dont le langagre remplace le garbage collector (tellement pratique en C#, mais clairement trop lourd pour les machines des années 80) par un simple “comptage de références”, avec des subtilités comme “autorelease”, est franchement maline — les programmeurs sous Windows ont dû attendre vingt ans pour se débarrasser du dilemme “mais qui est censé s’occuper de libérer ce pointeur que j’ai reçu/renvoyé ?” et, même aujourd’hui, les classes .NET ne sont pas assez complètes pour se débarrasser complètement des appels système qui jouent avec des pointeurs. Après .NET ou le PHP j’ai encore du mal avec l’idée que je vais me remettre à programmer sans garbage collector ou équivalent et que je vais devoir garder un oeil sur tous mes pointeurs, mais je me sens beaucoup plus à l’aise en sachant que les concepteurs du langage avaient une bonne idée de comment faciliter leur gestion — suffisamment bien pensée pour que je ne ressente pas le besoin d’attendre que Leopard implémente un garbage collector.

Je ne suis quand même pas fan de certaines différences entre .NET et Cocoa — .NET et Visual Studio sont beaucoup plus automatisés, et ça fait bizarre de voir qu’Interface Builder ne génère pas la moindre ligne de code (c’est volontaire) — mais malgré ma réaction initiale j’ai plutôt hâte de m’y mettre. Il me faudra juste suffisamment de temps libre, ce qui va être plus compliqué maintenant que j’ai un loyer à payer.

 

[02/02] Quelques pages (en anglais) qui peuvent vous aider si vous passez du C++ à l’Obj-C, dans l’ordre dans lesquelles je les ai lues :

  • Les équivalents syntaxiques entre C++ et Obj-C — comme je le disais, ça manque d’explications et ça ne prend pas en compte les différences conceptuelles entre les deux langages, mais ça vous permettra de lire le code Obj-C et de mieux comprendre la suite

  • Wikipedia a une page assez complète pour en apprendre plus (même tout ce n’est pas toujours extrêmement clair)

  • Plus d’informations sur la gestion de la mémoire en Obj-C sur MacDevCenter et Stepwise (ça doit être la partie la plus importante à apprendre quand on vient d’un autre langage)

  • Les autres articles de la section “Cocoa Basics” sur Stepwise, bien explicatifs (vous verrez que certains articles datent des toutes premières betas OS X, donc certains détails peuvent être obsolètes, mais pas les bases)

Hope this helps.

Vous voulez savoir quand je poste du contenu sur mon blog ? Il suffit de vous inscrire gratuitement à un agrégateur RSS (Feedly, NewsBlur, Inoreader, …) et d'ajouter www.ff00aa.com à vos flux (ou www.garoo.net pour vous abonner à tous les sujets). On n'a pas besoin de newsletters, pas besoin de Twitter, le RSS existe toujours.

Mentions légales : ce blog est hébergé par OVH, 2 rue Kellermann, 59100 Roubaix, France, www.ovhcloud.com.

Les données des visiteurs de ce blog ne sont pas utilisées ni transmises à des tiers. Les posteurs de commentaires peuvent demander leur suppression par e-mail.

Tous contenus © de l'auteur ou couverts par le droit de citation.