Google vient d’annoncer un projet visant à produire un convertisseur pour Java. La porte de sortie ? L’Objective-C, le langage d’Apple pour créer des applications sous OS X et iOS. Une manœuvre qui a plusieurs significations.
Réexploiter les connaissances
Aujourd’hui, le succès d’une plateforme repose plus que jamais sur l’attrait pour les développeurs tiers. Ils sont à la racine du cercle vertueux qui engendre à son tour la notion d’écosystème : un éditeur propose une plateforme équipée d’API, les développeurs sont séduits, des applications apparaissent, augmentent le capital d’attractivité de ladite plateforme aux yeux des clients.
L’iPhone a presque été dans ce domaine une image d’Épinal tant le système d’exploitation, iOS, a joué un rôle de plus en plus important dans son succès. Aujourd’hui, acheter un iPhone, un iPod Touch ou un iPad, c’est la garantie pour le client de disposer de dizaines voire de centaines de milliers d’applications. Cette réserve crée un centre de gravité très important pour l’acheteur, et le cas s’est répété de la même manière avec Android.
Mais si l’écosystème attire les développeurs et les clients, il trace des lignes dans le sable et impose ses propres règles. C’est notamment le cas des langages utilisés pour la création des applications. Ainsi, plus l’attraction de l’App Store s’exerce sur les développeurs, plus l’Objective-C croit en popularité. Aussi, plusieurs sociétés se sont posées la question : comment récupérer les compétences actuelles des développeurs sur certains langages pour les viabiliser vers d’autres plateformes ?
Traduire le Java en Objective-C
Google a donc publié la première préversion d’un tel convertisseur. Estampillé « J2ObjC », il signifie littéralement « Java vers Objective-C ». À terme, il permettra de traduire des pans entiers de code Java pour en écrire l’équivalent dans le langage d’Apple. L’intérêt ? Récupérer les compétences des développeurs Java pour leur permettre de travailler sur OS X ou iOS sans être nécessairement des experts en Objective-C.
Seulement voilà, il existe des différences fondamentales entre Java et l’Objective-C, et les développeurs seront dans tous les cas mis à contribution. Par exemple, Java est un langage possédant un ramasse-miettes (ou Garbage Collector) mais travaillant différemment de celui d'Objective-C. Google recommande du coup aux développeurs d'utiliser la méthode ARC (automatic ressource counting).
Google se focalise sur la mécanique interne
Autre élément important à savoir : la conversion ne pourra s’effectuer que sur le code ne touchant pas l’interface. Hors de question pour Google de produire un type d’interface valable pour plusieurs plateformes. Seuls l’intéressent les mécanismes internes de l’application. En outre, le projet débute et la qualité est estimée à mi-chemin entre alpha et bêta, ce qui signifie que de nombreux points sont encore à améliorer.
Le processus de conversion traite les éléments du code Java pour en trouver les équivalents Objective-C. Il existe des cas simples, comme boolean vers BOOL ou encore java.lang.Object vers NSObject, mais d’autres sont moins précis, comme les tests JUnit. Google utilise d’ailleurs l’exemple suivant en Java :
int getLength(List list, int index) { return list.get(index).length(); }
Traduit en Objective-C par J2ObjC, le code devient :
- (int)getLengthWIthJavaUtilList:(JavaUtilList *)list withInt:index { return [(NSString *) [list getWithInt:index] length]; }
Et pour ceux qui se demanderaient pourquoi Google travaille sur un tel projet, la réponse est très simple : accélérer le travail des développeurs qui voudraient créer des applications à la fois pour Android et pour iOS. L’éditeur pourrait ainsi court-circuiter l’obligation de devoir choisir entre l’un et l’autre.
Ceux qui souhaitent en savoir davantage pourront se rendre sur le page officielle du projet sur Google Code.
Commentaires (60)
#1
Minecraft portable sous iOS? " />" />
#2
2 remarques : sous Chrome 21 il semble y avoir un effet de bord du surlignage du code, i.e. des balises {code} {/code} en trop.
de 2, c’est pas plutôt getLengthWithJavaUtilList ? ^^
#3
#4
C’est une très bonne chose que cet outil ne touche pas à l’interface. Il y a déjà trop de devs feignants qui ont une seule interface pour toutes les plateformes " />
#5
#6
#7
Au départ je me daisait “Pourquoi ne pas avoir fait l’inverse” afin de profiter de l’écosystème et des développeurs IOS. Mais en fait leur tactique est bien mieux, ils font en sorte que les dev ne s’embête plus a faire leur dev en Objective-C. Tout en Java (et donc Android) puis avec leur moulinette en Objective-C. Du coup les dev Java sont avantagé puisque leurs applis peuvent aussi bien tourner sur Android que IOS, donc un marché bien plus large et rentable pour eux. Au final le dev uniquement Objective-C devrait réduire " />
#8
#9
#10
Sous Java, pour des soucis de performance, le ramasse-miette est quasiment désactivé…
#11
Hum… Vive le .Net
En fait il faut développer en .Net, transformer ça en java, puis en ObjC? ^^
#12
#13
#14
Quand je lis ça je me rend compte qu’il manque clairement un editeur d’appli pour smartphone qui aurait son propre language et qui ‘compilerait’ soit en .Net soit en java soit en ObjC suivant la plateforme cible choisie.
Bref un peu comme en C/C++.
Hormis un acteur tiers je pense que le seul qui aurait un réel intéret à le faire c’est Microsoft, ainsi si WP8 ne cartonne pas ils se retrapperont sur VS.
#15
#16
#17
#18
#19
Oui ça se voit que tu n’utilises pas l’Obj-C, car le nom de ta fonction f1 est beaucoup trop court " />
#20
#21
#22
C’est intéressant.
Le contraire m’aurait plus intéressé en fait… " />
Cependant je ne me fais pas la moindre illusion sur le résultat : quand on veut niveler, c’est par le bas que ça se passe.
Java et objective-C ont chacun des qualités que l’autre n’a pas, sans parler des APIs.
Donc, je ne crois pas un instant à la faisabilité d’une telle entreprise pour des apps performantes, complexes et ergonomiques.
En tous cas, de mon côté, je me casse tellement les dents à essayer de comprendre comment porter sous android certaines de mes apps que j’imagine que
#23
Codeur… " />
Un métier polyglotte où chacun y va de son dialecte " />
" />
#24
#25
Quand on voit le résultat donné dans l’exemple, ça ne fait vraiment pas rêver, notamment avec tous ces get qui traînent partout dans les noms de méthodes.
Mais comme première passe pour adapter le plus gros du code d’une bibliothèque indépendante de la plateforme avant de nettoyer le résultat à la main à grands coups de refactoring, ça peut être intéressant.
Ce qui est triste, en revanche, c’est que comme toujours il y aura des flemmards incompétents pour utiliser ça directement pour pondre la version finale de leur code, qui plus est en l’appliquant à des parties de plus haut niveau de leurs applis au lieu d’en développer une version spécifique à chaque plateforme.
#26
Pour ceux qui ne connaîtraient pas, il y a MonoTouch et Mono for Android. Ce sont des implémentations propriétaires de Mono et .NET (fait par les développeurs eux-mêmes de Mono) sur respectivement iOS et Android. Cela permet de faire du code 100% portable entre les deux plateformes (seul l’interface ne l’est pas, puisqu’elles utilisent directement des bindings vers les langages natifs des plateformes respectives).
Je travaille sur ça au boulot, ça marche très bien et c’est très performant. Tu développes en C# (quand même plus agréable que le Java et encore plus que l’Objective-C) et 80% du code est crossplateform.
http://xamarin.com
#27
Mais si l’écosystème attire les développeurs et les clients, il trace des lignes dans le sable et impose ses propres règles. C’est notamment le cas des langages utilisés pour la création des applications. Ainsi, plus l’attraction de l’App Store s’exerce sur les développeurs, plus l’Objective-C croit en popularité.
Il serait pertinent de ne pas oublier de mentionner que restreindre ainsi les appStores à certaines technologies précises n’est pas non plus une fatalité ou une limitation technique, mais bel et bien un choix stratégique des acteurs. Cela afin d’enfermer les développeurs dans tel ou tel écosystème (ou de populariser son petit langage maison, ce qui revient grosso modo au même).
C’est aussi une pratique qu’Apple a introduite dans le monde de l’IT avec le succès de son iPhone. Et autant il est évident que ça leur est profitable, autant je suis beaucoup, beaucoup moins sûr que ça le soit pour le client final, notamment à long terme.
#28
Préférant de loin coder en C# et .NET, il existe aussi le Framework MVVMCross qui permet facilement de faire du multiplateforme :
#29
Ce qui est dommage c’est que cette hétérogénéité des plateformes ainsi que des langages aurait pu ouvrir la voie au HTML5…
J’attends de voir ce que firefox OS donnera comme résultat.
#30
#31
tiens, on commence a se rendre compte des betises faites…..
allez un convertisseur c++ vers le c serait le bienvenu aussi qu’on puisse enfin se débarasser du compilateur de fou et du runtime de dingue du c++
#32
#33
#34
#35
#36
#37
#38
#39
#40
#41
#42
#43
#44
#45
#46
#47
#48
#49
#50
#51
#52
#53
#54
" />
#55
#56
#57
#58