OCaml Toplevel for Android

OCaml Toplevel for Android est une application Android qui vous fournit un toplevel intégral d’Objective Caml (mode interactif) sur votre téléphone. Vous êtes au restaurant et vous avez soudainement l’intuition que la suite de Syracuse ne termine pas sur 314159 (you wish!) ? Vous faîtes vos courses et vous avez besoin de classer les prix des paquets de céréales grâce à un tri par tas ? La solution se trouve désormais dans votre poche.

 

Historique

Je ne suis plus très certain de la réelle origine de cette idée fumeuse qu’est le portage d’OCaml sur Android, mais j’imagine qu’elle doit se rattacher à l’une de mes habituelles diatribes « les iPhone c’est pas terrible, mais sous Android tout est possible » . Je me souviens d’avoir commencé à réfléchir à la question en octobre 2010, quelques jours avant de découvrir qu’un développeur OCaml japonais, Keigo Imai, travaillait déjà sur un projet similaire. Je l’ai rejoint sans tarder dans sa noble quête, qui nous a mené dans les méandres de la compilation pour ARM, de l’exécution de code natif sur le noyau Linux des terminaux Android et de la gestion des threads asynchrones.

 

Fonctionnalités

  • Un toplevel Objective Caml complet
  • Un éditeur de texte adapté à l’écriture de code sur des écrans de téléphones
  • Compilation paragraphe par paragraphe
  • Ouverture/sauvegarde de fichiers source

 

Captures d’écran

Toplevel output
Toplevel output

 

Code Editor
Code Editor

 

 

Performances

Objective Caml s’en sort plutôt bien sur les processeurs ARM équipant la majorité des terminaux Android à l’heure où j’écris ceci. D’après quelques tests de ma création (tri par tas, récursivité massive, calculs sur les flottants), OCaml est « seulement » 12x plus lent sur un Motorola Droid (ARM Cortex A8 @550Mhz) que sur un laptop (Core-i5 @2,3Ghz). Ca devrait suffir pour faire vos courses ou implémenter un algorithme de décomposition en nombre premiers en direct en cours de math pour sauver votre camarade au tableau qui galère.

 

Configuration requise

  • Android 2.1 ou supérieur
  • Ecran tactile
  • Carte SD pour la sauvegarde des sources

 

Installation

  • Si vous lisez ceci depuis votre terminal :
La méthode la plus simple consiste à chercher « OCaml Toplevel for Android » dans l’application Market de votre terminal.
Mais vous pouvez également tenter de cliquer sur ce lien.
  • Si vous lisez ceci depuis un ordinateur :
Vous pouvez demander une installation à distance sur le Market, ou scanner ce QR Code :
QR Code
Scannez-moi sur votre terminal !

 

 

Remerciements

  • Merci à Keigo Imai pour sa patience, son engagement et sa redoutable efficacité !
    N’hésitez pas à lire son tutorial pour compiler les binaires d’OCaml pour Android si ça vous intéresse.
  • Merci à l’équipe de développement d’Objective Caml pour ses petits coups de pouces !

 

13 réflexions sur “ OCaml Toplevel for Android ”

  1. OMG !!!! je te découvre business man accomplié, !!
    vernoux.fr rien que ça
    j’en reste bouchée bé, tu es décidement un homme plein de ressources!
    et maintenant que je t’ai vu en costar, je suis convaincu que nous avons trouvé l’homme de la situation pour gérer nos sponsors !!
    Continue de me faire rêver !!
    La bises
    Ta trésorière

  2. OMG !!!!
    Moi je viens simplement de découvrir qu’il existe un Toplevel Ocaml pour Android ! Un truc de fous…

    Je me suis empressé de l’installer. :)

    Si tu veux, mon téléphone a un processeur dual core 1,2 GHz SnapDragon MSM8260… Si ça t’intéresse toujours de faire des tests, n’hésites pas.

    Cordialement,
    Christophe.

  3. Bonjour ami ne parle pas français, je suis en utilisant le traducteur de google. Je suis intéressé à essayer quelque chose de lourd. J’ai une tablette avec Tegra S 2. Ce que je veux savoir si il génère un fichier exécutable Android Ocaml.
    J’espère que bientôt nous pouvons avoir un contact.
    merci

    1. Hi Ivan.
      Are you more comfortable with english? Actually, my android app does not provide a way to compile executable files on your phone. It is possible to achieve it by command line though, as the entire Ocaml distribution has been compiled for ARM architecture. Your phone needs to be rooted to go in the app internal private directory.

  4. If that was my first idea whether this completely Ocaml. I do not use Ocaml as a language, but there a free code called UNISON. I mention my idea is to compile UNISON for android. The switch to root I will think about as a last option. But could you send me the apk file to test first on the android emulator.

  5. An android version of UNISON would be just great. I don’t have any idea why not everybody uses the only two-way file syncing app that really works under any circumstances. I use it on win and linux, and if I could get it for my android phone that would be nothing more than just great. Problem is, i’m not a developper…

  6. Bonjour Romain. Dans quelle mesure ton travail permettrait d’ecrire une application Android en OCaml (pur), avec l’idee de la commercialiser?

    1. Bonjour,
      Nous avons réussi à compiler entièrement OCaml pour les architectures ARM (qui sont utilisées pour les terminaux Android). Cela veut dire qu’il serait simple de compiler un exécutable qui tournerait sur le noyau Linux en dessous de la machine virtuelle Android, et de le lancer via un Shell sur son téléphone, par exemple.
      Par contre, il n’y a ma connaissance pas de moyen simple d’interfacer directement de l’OCaml avec le système d’exploitation Android (pour coder une application Android avec GUI en OCaml, par exemple, et qu’elle apparaisse dans la liste des applications du système Android).
      Ce genre d’idée demanderait quand même pas mal de bidouilles avec toutes les sécurités de l’OS, et ce n’est absolument pas comme ça que fonctionne mon toplevel dans tous les cas :)

    2. Bonjour Christian.
      Je vous invite tout d’abord a regarder un projet officiel de Google nommé SL4A, qui vise à porter les langages de scripts sur la plate-forme Android : http://code.google.com/p/android-scripting/.
      Pour le moment, Python, Lua, Perl et d’autres sont entièrement portés.

      Et pour chacun de ces langages, le projet apporte une API complète du téléphone (accès aux fonctions d’appels, de connectivité, aux contacts, aux fonctions d’interfaces graphiques etc…). Et apparemment, dans une certaine mesure, il est possible de compiler un tel projet en Python (exemple) en un .apk indépendant du toplevel pour la distribuer. (cf : http://code.google.com/p/android-scripting/wiki/SharingScripts#Scripts_as_APKs)

      Il serait intéressant de donner au projet de Romain la forme requise pour l’intégrer à ce projet SL4A, ou de se renseigner sur la possibilité d’intégrer cette API en OCaml. Il me semble que si il est possible de donner exactement la même API a chaque langage portés dans ce projet, il devrait être possible de la donner aussi pour OCaml (qui, comme Lua ou Python, est « extensible » avec des modules).
      Par exemple, en Python, ceci fait vibrer le téléphone :
       » import android
      droid = android.Android()
      droid.vibrate()
       »
      Ainsi, le plus simple pour apporter une API pour créer des interfaces graphiques, et exploiter les spécificités d’un téléphone, à ce projet d’OCaml Toplevel for Android, me semble être de rechercher comment utiliser ce qui a déjà était fait pour SL4A.
      Si cela vous intéresse, contactez-moi. (lilian.besson [@] ens-cachan.fr) remove the brackets.

      1. Merci pour ta réponse Lilian,
        Ca pourrait en effet être une solution, mais si j’ai bien compris le principe, il y a encore pas mal de travail avant de rendre OCaml compatible avec SL4A.
        D’ailleurs, es-tu certain qu’il s’agit d’un projet de Google ? Ca m’a l’air assez artisanal pour le moment.

        1. Initialement, le projet s’appellait Android Scripting Environment (ASE), et c’était de l’initiative de Google. Je pense qu’il est s’est un peu détaché maintenant.

          Sinon, une autre possibilité pourrait être d’utiliser la libraire camljava de Xavier Leroy (http://forge.ocamlcore.org/projects/camljava/), peut être que ce serait plus simple pour interfacé avec l’API de SL4A ?

          1. Hmm, les JNI de Java (sur laquelle CamlJava se base) et d’Android sont assez différentes, et celle d’Android assez capricieuse. Ca vaut peut-être le coup d’oeil, mais je n’ai vraiment pas le temps là :)

  7. Petit ajout concernant l’éventuel portage de l’API android en ocaml.

    J’ai découvert que pour un langage comme python, la seule modification faite pour ouvrir l’api via SL4A est l’implémentation d’un module appelé android.py qui est en fait une interface avec un serveur RPC (lancé par l’appli SL4A), codée avec les modules JSON (pour plus de détails voir http://codepad.org/N4HGn0iU).

    Comme chaque module utilisé existe en version ocaml, il serait possible de faire pareil pour OCaml.

    Si quelqu’un ayant de l’expérience sur ce genre de technologie lit ce commentaire, il peut me contacter à (lilian.besson [@] ens-cachan.fr) remove the brackets.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>