IRILL - Research and Innovation on Free Software
Jussieu, Paris

Extension des interactions avec OCaml sur calculatrices graphiques.

Objectifs

Le projet OMicroB [1, 2] est un environnement d’exécution pour le langage de programmation fonctionnel OCaml. Par rapport à l’environnement OCaml standard, OMicroB est optimisé pour s’exécuter sur des systèmes à faibles ressources et sans système d’exploitation (”bare-metal”). OMicroB supporte par exemple l’architecture AVR (cartes Arduino, etc), PIC32, ainsi que la carte éducative micro:bit, basée sur l’architecture ARM. Ces systèmes sont généralement programmés dans des langages de bas niveau, comme C. Cependant, utiliser un langage de plus haut niveau comme OCaml permet de gagner en expressivité, en sécurité, en particulier au niveau de la mémoire, et de profiter de bibliothèques OCaml existantes. Par ailleurs, OMicroB a aussi une vocation pédagogique : il a été établi que l’aspect ludique de la programmation de systèmes basés sur des cartes électroniques peut stimuler l’apprentissage de la programmation [3]. De la même manière, on peut espérer utiliser OMicroB pour stimuler l’apprentissage d’OCaml. Plus récemment, OMicroB a été porté sur la calculatrice graphique NumWorks, qui utilise un microprocesseur ARMv7 cadencé à 216MHz, avec 256kb de mémoire RAM et 8Mo de mémoire flash. Ces caractéristiques font de la Numworks l’appareil le plus puissant sur lequel OMicroB ait été porté à ce jour. Par ailleurs, une calculatrice offre, par nature, des possibilités d’interaction très différentes d’une carte électronique. Pour cela une version simplifiée de la boucle d'interaction OCaml, utilisant l'environnement camlboot [4], a été réalisée sur Numworks [5].

L'objectif de ce stage est :
* d'une part d'étendre ces possibilités d'interactions en intégrant la bibliothèque "graphics" [6] au portage d'OMicroB sur Numworks, y compris au niveau de la boucle d'interaction * et d'autre part d'étudier les différentes pistes de portage d'OMicroB, et de la boucle d'interaction, sur d'autres calculatrices graphiques (Casio Graph 35+E II [7] et TI-83 Premium CE [8]).

Tâches à réaliser

Un des avantages des calculatrices graphiques est d'avoir des capacités d'interaction : écran graphique, touches de clavier ainsi qu'un systèmes de fichiers. Une première tâche sera de tester la chaîne de compilation OMicroB sur Numworks en particulier pour une application simple avec interactions, entrées/sorties textuelles, en utilisant les primitives de la calculatrice. Ce sera l'occasion de mesurer l'occupation mémoire (Flash et Ram) de programmes existants.

Une deuxième tâche préliminaire sera de lister l'ensemble des fonctionalités de la bibliothèque graphics d'OCaml à intégrer dans la bibliothèque OMicroB, ainsi que de sélectionner différentes petites applications graphiques OCaml existantes, ou à réaliser, pour les tests.

La troisème tâche, plus conséquente, sera alors d'effectuer le portage de graphics en mode compilé OMicroB et de porter les applications sélectionnées en tenant compte des empreintes mémoire. Il sera intéressant de comprendre les besoins mémoire pour pouvoir l'utiliser dans la boucle d'interaction.

La quatrième tâche sera d'étudier les différentes contraintes de portage de l'environnement OCaml sur Numworks vers une autre calculatrice graphique comme la Casio Graph 35+E II ou la TI-83 Premium CE, et si le temps le permet d'effectuer un portage.

Prérequis

  • avoir des bases de programmation en C et en OCaml
  • des connaissances en compilation et en programmation des microcontrôleurs sont un plus

Références

  1. Steven Varoumas, Benoı̂t Vaugon et Emmanuel Chailloux. “A Generic Virtual Machine Approach for Programming Microcontrollers : the OMicroB Project”. In : 9th European Congress on Embedded Real Time Software and Systems (ERTS’18). 2018, p. 1-10.
  2. Steven Varoumas, Basile Pesin, Benoit Vaugon et Emmanuel Chailloux. “Programming microcontrollers through high-level abstractions : The OMicroB project”. In : J. Comput. Lang. 77 (2023), p. 101228. doi : 10.1016/J.COLA.2023.101228. url : https://doi.org/10.1016/j.cola.2023.101228.
  3. Jonny Austin et al. “The BBC micro:bit : from the UK to the world”. In : Communications of the ACM 63.3 (2020), p. 62-69. 4.
  4. Nathanaëlle Courant, Julien Lepiller et Gabriel Scherer. “Debootstrapping without Archeology - Stacked Implementations in Camlboot”. In : Art Sci. Eng. Program. 6.3 (2022), p. 13. doi : 10 . 22152 / PROGRAMMING - JOURNAL . ORG / 2022 / 6 / 13. url : https://doi.org/10.22152/programming-journal.org/2022/6/13.
  5. Laura Ly, Lilian Besson, Basile Pesin et Emmanuel Chailloux "Programmer en OCaml pour et sur les calculatrices Numworks". In : JFLA 2026 -- 37ème Journées Francophones des Langages Applicatifs, 2026. url : https://hal.science/hal-05428160v1/file/jfla2026-final86.pdf
  6. graphics library : https://github.com/ocaml/graphics
  7. planet-casio : https://www.planet-casio.com/Fr/infos/g35+e2
  8. TI-planet : https://tiplanet.org/forum/archives_cat.php

Le stagiaire devra être d'accord pour que ses contributions soient distribuées sous licence libre.

Contacts : Contacts : Basile Pesin, Emmanuel Chailloux & Lilian Besson