Version Lisp implémentée dans une norme C précédente connue sous le nom de C99, le langage Janet reprend les fonctionnalités de Lua et Clojure. Il peut servir de langage de script ou être intégré à d'autres programmes. Janet convient au prototypage et fonctionne sur Windows, MacOS et Linux, et il peut être porté sur d'autres systèmes.
Sur la page dédiée à ce langage, il est expliqué « Janet fait un bon langage de script système ou un langage à intégrer dans d'autres programmes. Pensez Lua ou Guile. Janet peut également être utilisée pour le prototypage rapide, les systèmes dynamiques et d'autres domaines où Lisp brille. Implémentée principalement dans la norme C99, Janet fonctionne sur Windows, Linux et macOS. Les quelques fonctionnalités qui ne sont pas standard C (chargement dynamique de bibliothèque, optimisations spécifiques au compilateur) sont assez simples. Janet peut être facilement portée sur de nouvelles plateformes ».
Les fonctionnalités de Janet sont :
- configuration minimale - un binaire et vous pouvez commencer!
- Fermetures de première classe
- Récupérateur de mémoire
- Green threads (threads qui sont planifiés par une bibliothèque d'exécution ou une machine virtuelle au lieu d'être natifs par le système d'exploitation sous-jacent) de première classe
- Générateurs de style Python (implémentés comme une macro)
- Tableaux mutables et immuables (tableau / tuple)
- Tables de hachage mutables et immuables (table / struct)
- Chaînes mutables et immuables (buffer/string)
- Macros Lisp
- Interprète de code d'octets avec une interface d'assemblage, ainsi que la vérification de bytecode
- Optimisation de Tailcall
- Interopérabilité directe avec C via des types abstraits et des fonctions C
- Chargement dynamique des bibliothèques C
- Bibliothèque standard fonctionnelle et impérative
- Programmation impérative et fonctionnelle
- REPL
- Analyse des grammaires d'expression intégrées à la bibliothèque principale
- Plus de 300 fonctions et macros dans la bibliothèque principale
- Environnement interactif avec des traces de pile détaillées
- Exportez vos projets vers des exécutables autonomes avec un outil de compilation compagnon, jpm
Utilisation
Un repl est lancé lorsque le binaire est appelé sans arguments. Passez l'indicateur -h pour afficher les informations d'utilisation. Des scripts individuels peuvent être exécutés avec ./janet myscript.janetSi vous cherchez à faire de l’exploration, vous pouvez imprimer une liste de toutes les macros, fonctions et constantes disponibles en entrant la commande (all-bindings) dans le repl.
Code Janet : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | $ janet Janet 1.7.1-dev-951e10f Copyright (C) 2017-2020 Calvin Rose janet:1:> (+ 1 2 3) 6 janet:2:> (print "Hello, World!") Hello, World! nil janet:3:> (os/exit) $ janet -h usage: build/janet [options] script args... Options are: -h : Show this help -v : Print the version string -s : Use raw stdin instead of getline like functionality -e code : Execute a string of janet -r : Enter the repl after running all scripts -p : Keep on executing if there is a top level error (persistent) -q : Hide prompt, logo, and repl output (quiet) -k : Compile scripts but do not execute (flycheck) -m syspath : Set system path for loading global modules -c source output : Compile janet source code into an image -n : Disable ANSI color output in the repl -l path : Execute code in a file before running the main script -- : Stop handling options |
S’ils sont installés, vous pouvez exécuter man janet et man jpm pour avoir les informations sur les usages.
Intégration
Janet peut être intégrée très facilement dans un programme hôte. La build normale créera un fichier build/janet.c, qui est un seul fichier C qui contient toute la source de Janet. Ce fichier, avec src/include/janet.h et src/conf/janetconf.h, peut être glissé dans n'importe quel projet C et compilé dans le projet. Janet devrait être compilée avec -std=c99 sur la plupart des compilateurs, et devra être liée à la bibliothèque mathématique, -lm, et à l'éditeur de liens dynamique, -ldl, si l'on veut pouvoir charger des modules dynamiques. S'il n'y a pas besoin de modules dynamiques, ajoutez le define -DJANET_NO_DYNAMIC_MODULES aux options du compilateur.
Source : langage Janet (GitHub), langage Janet (site officiel), documentation
Et vous ?
Que pensez-vous de Janet ?