Duktape: JavaScript sur TI-Nspire ! Exemples de maths...
Posted: 27 Jun 2015, 01:59
Sommaire
Table of contents
1) IntroductionGo to top
En 2013, Sami Vaarala a commencé à travailler sur Duktape, un moteur JavaScript engine axé sur la portabilité et une faible empreinte, avec une intégration aisée au sein d'autres programmes C/C++.
Entre autre, Duktape est utilisé en tant qu'interpreteur JS dans les appareils d'AllJoyn (https://allseenalliance.org) IoT (Internet of Things), dans l'Atomic Game Engine, etc.
Plusieurs mois après le port de MicroPython sur la plateforme Nspire, dont nous avons parlé plus tôt, un port de Duktape pour Nspire platform a été effectué par Legimet (d'après une suggestion de Lionel Debroux), et il s'avère que le travail initial pour le faire compiler a été remarquablement concis, preuve de code de qualité Il a cependant fallu un peu plus de code pour avoir une console etc. sur la calculatrice.
Entre autre, Duktape est utilisé en tant qu'interpreteur JS dans les appareils d'AllJoyn (https://allseenalliance.org) IoT (Internet of Things), dans l'Atomic Game Engine, etc.
Plusieurs mois après le port de MicroPython sur la plateforme Nspire, dont nous avons parlé plus tôt, un port de Duktape pour Nspire platform a été effectué par Legimet (d'après une suggestion de Lionel Debroux), et il s'avère que le travail initial pour le faire compiler a été remarquablement concis, preuve de code de qualité Il a cependant fallu un peu plus de code pour avoir une console etc. sur la calculatrice.
In 2013, Sami Vaarala started working on Duktape, a JavaScript engine focused on portability and a small footprint, with easy embeddability in other C/C++ programs.
Among other purposes, Duktape is used as the JS interpreter in AllJoyn (https://allseenalliance.org) IoT (Internet of Things) devices, the Atomic Game Engine, etc.
Six months after a port of MicroPython to the Nspire platform, which we covered earlier, a port of Duktape to the Nspire platform was performed by Legimet (on Lionel Debroux’s suggestion), and in fact the initial work to make it compile for it was remarkably concise, proof of good coding Though a bit more code had to be written to have a console etc. for the calculator.
Among other purposes, Duktape is used as the JS interpreter in AllJoyn (https://allseenalliance.org) IoT (Internet of Things) devices, the Atomic Game Engine, etc.
Six months after a port of MicroPython to the Nspire platform, which we covered earlier, a port of Duktape to the Nspire platform was performed by Legimet (on Lionel Debroux’s suggestion), and in fact the initial work to make it compile for it was remarkably concise, proof of good coding Though a bit more code had to be written to have a console etc. for the calculator.
Veuillez noter que Ndless est requis pour pouvoir profiter de Duktape. Veuillez bien suivre le tutorial... Mais attention, si vous avez une CX (CAS) avec un OS 4.0 (ou ultérieur), ce qui est le cas de toutes les machines CX (CAS) neuves récemment, Ndless n'y existant pas, vous pouvez continuer à envoyer un mail de protestation contre le verrouillage de la plate-forme à ti-cares@ti.com et en faveur de son ouverture... un modèle est proposé à la fin de la news précédente à propos de Micro Python.
Please note that Ndless is required to enjoy Duktape. Please follow the tutorial(s) ... But beware, if you have an Nspire CX (CAS) with OS 4.0 (or later), which is the case of all recent CX (CAS) devices, Ndless not existing for this OS, you can continue to send an email of protest against the locking of the platform to ti-cares@ti.com and wish for a more open view... a template is proposed at the end of the previous Micro Python news article.
Enfin, du code "ECMAScript", techniquement, mais tout le monde connaît plutôt le terme "JavaScript".
Duktape gère l'ECMAScript 5.1 et implèmente même un très petit nombre de fonctionnalités du récent ECMAScript 6, aussi connu sous le nom d'Harmony.
Duktape gère l'ECMAScript 5.1 et implèmente même un très petit nombre de fonctionnalités du récent ECMAScript 6, aussi connu sous le nom d'Harmony.
Well, "ECMAScript" code, technically, but everyone rather knows the "JavaScript" term.
Duktape supports ECMAScript 5.1 and even implements very few features from the recently released ECMAScript 6, also known as Harmony.
Duktape supports ECMAScript 5.1 and even implements very few features from the recently released ECMAScript 6, also known as Harmony.
Voici un exemple simple (Calcul de fibonacci(n)) écrit de la même façon dans les différentes langages désormais disponibles sur la TI-Nspire :
Here is a simple example (computing fibonacci(n)) written the same way in the different languages now available on the TI-Nspire:
Basic | Lua | Python | JavaScript |
|
|
|
|
Note: ce code JavaScript là est plus lent que son équivalent Lua ou Python à cause d'un problème connu dans Duktape.
Mais même s'il est plus lent que le Lua ou le Python, il en demeure bien plus rapide que le TI-Basic intégré !
Mais même s'il est plus lent que le Lua ou le Python, il en demeure bien plus rapide que le TI-Basic intégré !
Note: this particular JavaScript code runs slower than Lua or Python due to a specific known issue in Duktape.
But still, while it is currently slower than the integrated Lua, it is much faster than the integrated TI-Basic!
But still, while it is currently slower than the integrated Lua, it is much faster than the integrated TI-Basic!
Un autre exemple classique est le tracé d'un Mandelbrot. Pour ceci, le TI-Basic n'est tout simplement pas capable de le faire, puisqu'il n'existe pas de moyens de contrôler des pixels sur un/l'écran graphique…. Mais Duktape peut le faire
Alors qu'une version Lua optimisée et une version Micro Python finissent le tracé (16 itérations) en environ 30 secondes, la version Duktape est plus lente, avec environ une minute au chrono. Note: Une version C, sans optimisation particulière, les ridiculise tous, en quelques secondes...
Alors qu'une version Lua optimisée et une version Micro Python finissent le tracé (16 itérations) en environ 30 secondes, la version Duktape est plus lente, avec environ une minute au chrono. Note: Une version C, sans optimisation particulière, les ridiculise tous, en quelques secondes...
Another classic example is a Mandelbrot set plot. For that, TI-Basic is simply not capable of doing it since there is no way to control pixels from a/the graph screen It is however possible to do it with Duktape
While optimized Lua and Micro Python finish the plot (16 iterations) in about 30 seconds, Duktape's version is slower and takes about a minute. Note: A C version, without any specific optimization, blows them all out of the water, in a few seconds...
While optimized Lua and Micro Python finish the plot (16 iterations) in about 30 seconds, Duktape's version is slower and takes about a minute. Note: A C version, without any specific optimization, blows them all out of the water, in a few seconds...
Voici quelques autres exemples en lien avec les maths:
Here are some other math-related examples:
Changement de base numérique
Numerical base conversion
Renvoie une liste des "chiffres" de l'écriture de n en base b / Returns list of the "figures" of the representation of n in the b baseLe chiffre de poids le plus fort est le plus à gauche / The most significant figure is leftmost
Show/Hide spoilerAfficher/Masquer le spoiler
Basic | Lua | Python | JavaScript |
|
|
|
|
Calcul de Pi (algorithme du compte-goutte)
Compute Pi digits
Renvoie une chaîne contenant les n premières décimales de Pi / Returns a string containing the n first digits of PiShow/Hide spoilerAfficher/Masquer le spoiler
Basic | Lua | Python | JavaScript |
|
|
|
|
Liste des premiers nombres premiers (crible d'Eratosthène)
List of the first prime numbers (Eratostenes' sieve)
Renvoie la liste des nombres premiers inférieurs ou égaux à n par le crible d'Ératosthène / Returns the list of the prime numbers <= n using Eratostenes' sieveShow/Hide spoilerAfficher/Masquer le spoiler
Basic | Lua | Python | JavaScript |
|
|
|
|
4) Comparaison globale des langages disponibles
4) Overall comparison of available languages
Go to topNspire-Basic | Nspire-Lua | Micro Python | JavaScript (Duktape) | C / C++ | |
Supporté officiellement par TI | Oui | Oui (OS 3.x+ requis) | Non (Ndless requis) | Non (Ndless requis) | Non (Ndless requis) |
Répandu dans l'informatique en général | Non (calculatrices TI seulement) | Oui (plugins) Faiblement (standalone) | Très (tous domaines) | Très (souvent sur le Web) | Très (tous domaines) |
Intérêt potentiel de professeurs | Bon | Moyen + | Elevé | Plutôt élevé | Moyen - |
Vitesse d'exécution | Basse | Moyenne | Moyenne + | Moyenne - | La plus élevée |
Commandes graphiques | Non | Oui | Oui | Oui | Oui |
Lecture du clavier | Non (sauf popup d'input) | Oui (une touche à la fois) | Non (console pour le moment) | Oui (une touche à la fois) | Oui (multi-touches possible) |
Lecture du touchpad | Non | Non (sauf clics) | Non (pour le moment) | Non (pour le moment) | Oui |
Intégration au moteur de calcul & CAS | Oui | Oui | Non (*) | Non (*) | Non (*) |
Editable directement sur calculatrice | Oui | Oui (éditeurs tiers) | Oui (console interactive et éditeur tiers) | Oui (console interactive et éditeur tiers) | Non (nécessiterait un compilateur) |
Peut utiliser des fichiers externes | Non | Non | Oui | Oui | Oui |
Idéal pour apprendre à programmer | Oui (algorithmes) | Oui | Oui | Oui | Moyennement (plus bas niveau, plus difficile) |
Nspire-Basic | (Nspire-)Lua | Micro Python | JavaScript (Duktape) | C / C++ | |
Official support by TI | Yes | Yes (OS 3.x+ required) | No (Ndless required) | No (Ndless required) | No (Ndless required) |
Widely used in general computer science | No (TI calculators only) | Yes (plugins) Low (standalone) | Very (everywhere) | Very (Web especially) | Very (everywhere) |
Potential interest for teachers | Good | Average + | High | High | Average - |
Execution speed | Low | Average | Average + | Average - | Highest |
Graphical commands | No | Yes | Yes | Yes | Yes |
Keyboard input | No (except input popup) | Yes (single key at a time) | No (console only for now) | Yes (single key at a time) | Yes (multiple keys at a time) |
Touchpad reading | No | No (except clicks) | No (for now) | No (for now) | Yes |
Integration to the built-in computation engine & CAS | Yes | Yes | No (*) | No (*) | No (*) |
Direct calculator-side edit | Yes | Yes (third-party editors) | Yes (interactive console and third-party editors) | Yes (interactive console and third-party editors) | No (would require a compiler) |
Can use external files | No | No | Yes | Yes | Yes |
Good choice for a first programming language | Yes (algorithms) | Yes | Yes | Yes | Midly (lower level, harder) |
(*): intégration au CAS difficile à réaliser sans doc de TI, même s'il y a eu les PoC de Lionel Debroux et Excale.
(*): CAS integration is hard without documentation from TI, even if Lionel Debroux and Excale made PoC programs.
- Davantage de liasons ("bindings") avec l'OS, comme une API de graphique étendue, et l'accès à d'autres fonctionnalités de l'OS
- debugage -- c'est géré depuis Duktape 1.2.0, mais il faut maintenant programmer la couche de transport et l'interface graphique
- gestion du multi-ligne dans le "REPL" (la console, en gros)
- gestion du JavaScript dans PyWrite
- gestion de modules externes natifs (ce qui nécessiterait le support de bibliothèques partagées dans Ndless)
- more OS bindings, such as an expanded graphics API and access to other OS features
- debugging -- support was added in Duktape 1.2.0, but a debug transport and UI would have to be written
- multiline support in the REPL
- JavaScript support in PyWrite
- support for external native modules (would require shared library support in Ndless)
- Duktape-nspire (requiert Ndless)
- Code source : sur GitHub
- Tutoriaux JavaScript
- Tutoriaux et Référence JavaScript
- Duktape-nspire (requires Ndless)
- Source code: on GitHub
- JavaScript Tutorials
- JavaScript Tutorials and Reference
Have fun
Article by/par Adriweb & Legimet