Le Python et la Nspire enfin réunis grâce à "Micro Python" !
Posted: 02 Sep 2014, 21:00
TL;DR : Initial TI-Nspire port of Micro Python now available !
Download / Téléchargement : here / ici.
Download / Téléchargement : here / ici.
Un peu d'histoire
History
Depuis avril 2011 avec l’OS 3.0.1.1753, en plus de son habituel langage BASIC spécifique, la série TI-Nspire a inclus une implémentation d’un langage de programmation adapté aux plates-formes mobiles de par sa légèreté et ses performances raisonnables (pour un langage interprété) : Lua.
Since OS 3.0.1.1753 in April 2011, in addition to the usual platform-specific BASIC language, the Nspire series has provided an implementation of an established programming language originally made for other platforms and well-suited to embedded platforms due to its relatively limited footprint and reasonable execution efficiency (for an interpreted language), namely Lua.
Même si l’implémentation du Lua sur TI-Nspire est amputée par la suppression des bibliothèques standard ‘io’ et ‘os’ (rendant impossible la lecture/écriture de fichiers, entre autres), elle devint rapidement un outil de développement populaire pour TI-Nspire : contrairement au BASIC qui est également beaucoup plus lent, le Lua permet de dessiner des pixels individuels sur l’écran et de lire l’état des touches clavier
Even if the Nspire’s Lua implementation is crippled by the removal of standard io and os packages (making it unable to e.g. read and write files on the FS), it immediately became a popular development option for the Nspire: the Nspire’s Lua can draw single pixels to the screen and read from the keyboard, unlike the BASIC (which is much slower too)
Avançons de trois ans. Lua est toujours léger, il est un choix de développement populaire pour plusieurs types de programmes (notamment l’IA et les couches supérieures des moteurs de jeux vidéo), et il y a même LuaJIT pour faire tourner les programmes plus vite.
Toutefois, au sein de la sphère des développeurs il est facile de trouver des classements de langages par popularité (entre autres http://blog.codeeval.com/codeevalblog/2014 , http://www.tiobe.com/index.php/content/ ... index.html , http://spectrum.ieee.org/static/interac ... -languages ); qui montrent que le Lua est (beaucoup) moins populaire que nombre d’autres langages de script bien connus, tout particulièrement Javascript, Perl, PHP, Python, Ruby (par ordre alphabétique).
Toutefois, au sein de la sphère des développeurs il est facile de trouver des classements de langages par popularité (entre autres http://blog.codeeval.com/codeevalblog/2014 , http://www.tiobe.com/index.php/content/ ... index.html , http://spectrum.ieee.org/static/interac ... -languages ); qui montrent que le Lua est (beaucoup) moins populaire que nombre d’autres langages de script bien connus, tout particulièrement Javascript, Perl, PHP, Python, Ruby (par ordre alphabétique).
Fast forward three years. Lua keeps being lightweight, it remains a popular development option for several classes of programs (e.g. the AI and suchlike higher-level functionality of game engines), and there’s LuaJIT for making programs run faster.
However, in the general developer population, it’s easy to find language popularity contests (e.g. http://blog.codeeval.com/codeevalblog/2014 , http://www.tiobe.com/index.php/content/ ... index.html , http://spectrum.ieee.org/static/interac ... -languages ) which concur that Lua is (much) less popular than multiple other well-known scripting-type languages, especially Javascript, Perl, PHP, Python, Ruby (in alphabetical order).
However, in the general developer population, it’s easy to find language popularity contests (e.g. http://blog.codeeval.com/codeevalblog/2014 , http://www.tiobe.com/index.php/content/ ... index.html , http://spectrum.ieee.org/static/interac ... -languages ) which concur that Lua is (much) less popular than multiple other well-known scripting-type languages, especially Javascript, Perl, PHP, Python, Ruby (in alphabetical order).
Motivations
Compte tenu de tout ceci, il est assez naturel de vouloir [essayer de] porter d’autres langages de script comme le Javascript, Perl, PHP, Python, Ruby… sur calculatrice - d'une part parce que l'on peut le faire, et d'autre part car une partie des utilisateurs de calculatrices qui deviendront développeurs professionnels un jour peuvent avoir envie d'apprendre des langages populaires en premier
Avant même de commencer ceci, on sait que réussir à faire tenir/fonctionner des environnements d'exécutions de ces langages (programmés en C ou C++), même sur les calculatrices les plus puissantes (TI-Nspire, HP Prime), est un défi en soi, car :
Avant même de commencer ceci, on sait que réussir à faire tenir/fonctionner des environnements d'exécutions de ces langages (programmés en C ou C++), même sur les calculatrices les plus puissantes (TI-Nspire, HP Prime), est un défi en soi, car :
- La puissance brute du CPU, les quantités de RAM et d'espace de stockage sont généralement bien en-dessous des standards modernes du marché ;
- La Nspire est une plateforme hostile au développement natif, même si cela a été amélioré dernièrement grâce aux efforts pour mettre en place le C++ et newlib (Vogtinator, Ikj…) pour le SDK - déjà utilisé pour le portage de giac/xcas (cf. KhiCAS). La HP Prime est une plateforme ouverte et a un CPU plus puissant et plus de Flash (mais moins de RAM) que la TI-Nspire CX, mais son logiciel n’est pas documenté à l'heure de ce post, et la plateforme n'est pas vraiment populaire parmi les utilisateurs.
Based on the above, it makes lots of sense to (try and) port other established scripting languages among Javascript, Perl, PHP, Python, Ruby to calculators - just because we can, and also because the subset of calculator users who will become professional software developers one day might want to learn popular languages first
Before even starting the process, we know that fitting the execution environments (written in C or C++) for these languages, on even the most powerful calculators (TI Nspire, HP Prime), is a challenge due to:
Before even starting the process, we know that fitting the execution environments (written in C or C++) for these languages, on even the most powerful calculators (TI Nspire, HP Prime), is a challenge due to:
- the raw CPU power, amount of RAM and amount of persistent storage of calculators being generally highly sub-par by modern market standards;
- the TI Nspire being a hostile platform for developing native code programs, even if this improved recently with the expanded Ndless SDK featuring C++ support and newlib (Vogtinator, lkj et al.), already used for porting giac/xcas to the Nspire (cf. KhiCAS). The HP Prime is an open platform, it has a faster CPU and more Flash (althrough less RAM) than the Nspire CX, but its software is undocumented at the time of this writing, and the platform is not really popular among users.
Ainsi, nous (admins de TI-Planet) avons initié le projet de port d'un interpréteur Python pour la TI-Nspire. Le Python est clairement le choix le plus populaire parmi les 5 listés plus haut, et il est devenu le langage le plus populaire à des fins éducatives d'après un récent sondage :
Therefore, we (TI-Planet staff) sparked the port of some Python flavor to the Nspire. Python is clearly the most popular choice among the 5 ones listed above, and it has become the most popular language for learning purposes, according to a recent survey:
http://www.pcworld.com/article/2451880/ ... guage.html .Le portage
Porting process
En gros, la totalité du travail a été faite par Fabian “Vogtinator” Vogt, bien connu dans la communauté pour des réalisations dont nous nous sommes faits l’echo par le passé, comme :
* contributions au portage Nspire de Linux et au système de build automatisé ( http://tiplanet.org/nspire-linux-builds/ )
* contributions à la librairie de base et à la toolchain Ndless, ayant notamment permis KhiCAS sus-mentionné;
* lecteur de fichiers WAV sur Nspire;
* Crafti, un Minecraft-like en code natif, démonstration du moteur 3D nGL qu’il a également programmé
* contributions au portage Nspire de Linux et au système de build automatisé ( http://tiplanet.org/nspire-linux-builds/ )
* contributions à la librairie de base et à la toolchain Ndless, ayant notamment permis KhiCAS sus-mentionné;
* lecteur de fichiers WAV sur Nspire;
* Crafti, un Minecraft-like en code natif, démonstration du moteur 3D nGL qu’il a également programmé
- Portage de CPython + libs : il n’a pas été réalisé, car cela prendrait un temps considérable et poserait vraisemblablement d’importants défis de portabilité. Il est probablement mieux de s'attaquer à quelque chose de plus simple en premier lieu
- Portage de python-on-a-chip, a.k.a “p14p” (que Lionel Debroux avait d'ailleurs déjà partiellement porté pour la plateforme TI-68k/AMS) : portage effectué, et rapidement. Cependant, il ne pouvait qu'exécuter du bytecode généré par une version spécifique de CPython et non du code source Python directement ; p14p est assez limité au niveau des fonctions disponibles et des types de données. On note aussi qu'il y a eu assez peu de changements dans la base de code au cours des trois dernières années.
- Portage de MicroPython (un projet Kickstarter qui a réussi) : portage effectué aussi, et tout aussi rapidement. MicroPython supporte une version plus récente de Python que p14p, a plus de fonctionnalités et sa base de code est encore active actuellement.
Sa performance sur un calcul de Fibonacci était correcte, mais néanmoins inférieure au Nspire Lua.
Afin d'augmenter la vitesse, Fabian s'est mis à écrire un émetteur de code ARM natif, qu'il a d'ailleurs contribué à l'upstream de Micro Python (rapidement intégré)
Des premiers tests sur une version de développement montrent qu'avec ce "JIT", le Lua est alors dépassé par le Python.
Pretty much all of the work was done by the well-known Fabian “Vogtinator” Vogt, famous for multiple pieces of work that we mentioned in the past, such as:
* contributions to the Nspire port of Linux and the automated build system ( http://tiplanet.org/nspire-linux-builds );
* contributions to the base library and toolchain of Ndless, which made it possible to port the powerful Giac/Xcas engine to the Nspire, mentioned above;
* Nspire WAV file player;
* Crafti, a native code Minecraft-like program, showcasing the nGL 3D engine that he programmed as well.
* contributions to the Nspire port of Linux and the automated build system ( http://tiplanet.org/nspire-linux-builds );
* contributions to the base library and toolchain of Ndless, which made it possible to port the powerful Giac/Xcas engine to the Nspire, mentioned above;
* Nspire WAV file player;
* Crafti, a native code Minecraft-like program, showcasing the nGL 3D engine that he programmed as well.
- porting full-blown CPython + libs: it was not done, as it would be (much ?) more work and pose interesting portability challenges. It’s probably better trying something simpler first
- porting python-on-a-chip, known as “p14p” (which Lionel Debroux had already partially ported to the TI-68k/AMS platform) : the port is done and it was pretty quick. However, it could only execute bytecode generated by a specific version of CPython and not python source; it was quite limited in available functions and data-types; fairly few code changes have been performed over the past three years.
- porting MicroPython (a successful Kickstarter project): that, too, was a quick success. Micro Python supports a newer version of Python than p14p does, it’s more featureful than p14p is, and it’s still under active development.
Performance on the Fibonacci test was decent, though lower than Nspire Lua. In order to improve speed, Fabian set to write a native ARM code emitter, which he contributed to upstream micropython; it was quickly integrated
Some tests on developement versions show that Micro Python is then faster than Lua when using the "JIT".
Bien que la taille du code (quelques centaines de Ko sur la Nspire) et la consommation de RAM de Micro Python soient ridiculement minuscules selon les normes modernes, elles dépassent les capacités de la plupart des modèles de calculatrices sur le marché ... Seule la famille TI Nspire et la HP Prime peuvent exécuter facilement Micro Python ; peut-être aussi la Casio fx-CP400, qui a des caractéristiques moindres (en particulier la quantité de RAM), qui est encore plus chère, et qui est une plate-forme fermée sur laquelle personne n'a encore exécuté de code natif arbitraire. Cependant, certainement pas la série des TI-Z80, presque certainement pas la série TI-68k (même en utilisant l'exécution depuis la Flash, les programmes complexes poseraient probablement problème), et d'autres non plus, comme les Casio fx-98*, Prizm, ou les HP-49G + / 50G pour la même raison: elles n'ont que trop peu de RAM (disponible).
While the code size (several hundreds of KBs on the Nspire) and RAM consumption of Micro Python are laughably tiny by modern standards, they’re above the specs of most calculator models on the marketplace... Only the Nspire family, the Prime can easily run Micro Python; maybe the Casio fx-CP400, which has lower specs (especially the amount of RAM), is even more expensive, and is a closed platform on which nobody has yet executed arbitrary native code, could do it too. However, definitely not the TI-Z80 series, almost certainly not the TI-68k series (even when executing from Flash, complex programs would probably be troublesome), and AFAICT not Casio fx-98*, Prizm or HP-49G+/50G for the same reason: too little (available) RAM.
(News article by Lionel Debroux, Adriweb and Critor; A less technical article, more on an educational level, about Python is available here)
(Article par Lionel Debroux, Adriweb et Critor. Une autre news d'un point de vue moins technique et plus éducatif est disponible ici)