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.