Developpez.com - Programmation

Le Club des Développeurs et IT Pro

Le langage fonctionnel et impératif Janet, qui reprend des fonctionnalités de Lua et Clojure,

S'apparente à une version légère de Lisp implémentée en C

Le 2020-05-15 15:56:48, par Stéphane le calme, Chroniqueur Actualités
Janet, un langage fonctionnel et impératif ainsi qu'un interprète de bytecode, est en cours de développement en tant que plateforme polyvalente pour le code expressif. Le langage, nommé d'après un personnage de l'émission télévisée The Good Place (plus précisément une intelligence artificielle presque omnisciente et amicale), se compose d’une bibliothèque principale, d’un interpréteur, du compilateur et de l'assembleur.

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 :
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 ?
  Discussion forum
4 commentaires
  • web bea
    Membre habitué
    Aucun intérêt...
    Ha bon? Mais pourquoi donc? Peut-être auriez-vous pu argumenter un peu plus...
    En l'occurrence il me semble que c'est plutôt votre commentaire qu'on pourrait qualifier d'inintéressant...

    Aviez-vous seulement pris la peine de jeter un coup d'oeil à la documentation?

    Il faut parfois faire preuve d'un peu de curiosité, regarder ce qui se fait ailleurs, ce qui sort de nouveau...

    Personnellement j'ai trouvé la présentation qui en est faite sur https://janet-lang.org fort intéressante.
  • vanskjære
    Membre averti
    Qu'elle ne ressemble pas à la vrai Janet......Remboursé!!!

    Sinon on rentre dans l'éternel débat du "Encore un langage qui seras utilisé que par son créateur et trois barbus hipsters" ou autres phrases du genre.
  • Neuromancien2
    Membre averti
    Ce langage me paraît très intéressant. J'ai regardé rapidement les exemples de code sur le site. Je trouve la syntaxe simple, claire, concise et élégante. Je suis habitué à Racket, qui a une syntaxe plus verbeuse et lourde pour les dictionnaires et la POO, et qui impose par défaut l'utilisation de listes non mutables. Avec Janet, on a le choix entre des types de données mutables et non mutables. C'est un langage multi-paradigme, qui permet la programmation fonctionnelle mais sans l'imposer.
  • Aiigl59
    Membre actif
    Ne pleure pas janeeette ! .... Aucun intérêt...