Google travaille sur la conversion du code Java en Objective-C
Jeter un pont entre Android et iOS
Le 17 septembre 2012 à 14h51
4 min
Logiciel
Logiciel
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.
Google travaille sur la conversion du code Java en Objective-C
-
Réexploiter les connaissances
Commentaires (58)
Vous devez être abonné pour pouvoir commenter.
Déjà abonné ? Se connecter
Abonnez-vousLe 17/09/2012 à 16h04
Hum… Vive le .Net
En fait il faut développer en .Net, transformer ça en java, puis en ObjC? ^^
Le 17/09/2012 à 17h07
Le 17/09/2012 à 17h28
Le 17/09/2012 à 17h46
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.
Le 17/09/2012 à 18h00
Le 17/09/2012 à 18h45
Le 17/09/2012 à 18h48
Le 17/09/2012 à 18h56
Le 17/09/2012 à 18h58
Oui ça se voit que tu n’utilises pas l’Obj-C, car le nom de ta fonction f1 est beaucoup trop court " />
Le 17/09/2012 à 19h05
Le 17/09/2012 à 19h22
Le 17/09/2012 à 19h27
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
Le 17/09/2012 à 20h04
Codeur… " />
Un métier polyglotte où chacun y va de son dialecte " />
" />
Le 17/09/2012 à 20h22
Le 17/09/2012 à 20h31
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.
Le 17/09/2012 à 23h27
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
Le 18/09/2012 à 16h26
Le 18/09/2012 à 16h33
Le 18/09/2012 à 16h48
Le 18/09/2012 à 16h56
Le 18/09/2012 à 22h36
Le 19/09/2012 à 08h16
Le 19/09/2012 à 09h37
Le 19/09/2012 à 10h26
Le 19/09/2012 à 10h45
Le 19/09/2012 à 11h01
Le 19/09/2012 à 11h34
Le 19/09/2012 à 12h05
Le 19/09/2012 à 12h37
Le 19/09/2012 à 12h47
" />
Le 19/09/2012 à 13h16
Le 19/09/2012 à 14h00
Le 17/09/2012 à 14h57
Minecraft portable sous iOS? " />" />
Le 17/09/2012 à 15h05
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 ? ^^
Le 17/09/2012 à 15h10
Le 17/09/2012 à 15h11
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 " />
Le 17/09/2012 à 15h12
Le 17/09/2012 à 15h15
Le 17/09/2012 à 15h18
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 " />
Le 17/09/2012 à 15h20
Le 17/09/2012 à 15h32
Le 17/09/2012 à 15h32
Sous Java, pour des soucis de performance, le ramasse-miette est quasiment désactivé…
Le 19/09/2012 à 14h09
Le 19/09/2012 à 14h29
Le 18/09/2012 à 07h03
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.
Le 18/09/2012 à 07h35
Préférant de loin coder en C# et .NET, il existe aussi le Framework MVVMCross qui permet facilement de faire du multiplateforme :
Le 18/09/2012 à 07h53
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.
Le 18/09/2012 à 07h58
Le 18/09/2012 à 10h20
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++
Le 18/09/2012 à 10h32
Le 18/09/2012 à 11h00
Le 18/09/2012 à 11h02
Le 18/09/2012 à 11h54
Le 18/09/2012 à 12h57
Le 18/09/2012 à 13h04
Le 18/09/2012 à 13h05
Le 18/09/2012 à 13h16
Le 18/09/2012 à 16h15