Dans l'un de mes projets SDK, nous devions ajouter un script qui aurait le moins d'effet sur la taille du fichier binaire final, tout en offrant de bonnes fonctionnalités. Cela a donné naissance au projet, qui est décrit dans cet article. Veuillez noter que depuis dans le SDK, nous avons certaines exigences, elles ont été partiellement transférées vers le langage de script, donc certains langages de programmation embarqués assez connus n'ont pas participé au projet (mais Lua est inclus à titre de comparaison).
Le site web du projet est disponible ici . Je dirai tout de suite que Chibi-Scheme est le gagnant pour moi en ce moment. Détails pour ceux intéressés sous la coupe.
Les exigences étaient les suivantes:
- Portabilité maximale (C / C ++ uniquement).
- Typage suffisamment fort (ne permettant pas d'ajouter des oranges et des pommes), les implémentations d'ECMAScript n'ont donc pas été prises en compte.
- Commodité de minimiser les scripts eux-mêmes (par exemple, pour pouvoir supprimer en toute sécurité tous les sauts de ligne), respectivement, les implémentations de Forth, Lua et Python n'ont pas été prises en compte.
- Licence commerciale conviviale.
La liste initiale a été tirée d'un projet dans lequel ils essaient de prendre en compte tous les scripts embarqués possibles: https://github.com/dbohdan/embedded-scripting-languages La liste n'est peut-être pas complète et ne contient pas de scripts supplémentaires qui pourraient satisfaire les exigences ci-dessus ... Si vous en connaissez, merci de me le faire savoir soit par PM, soit par commentaire.
, "Hello, " (C/C++) , "world". . (GCC -s
).
, , 8 (Lua ):
() | ||
---|---|---|
TinyScheme | 86824 | (define fn(lambda () (string-append "Hello, " (read)))) |
Lua | 252880 | function fn() return "Hello, " .. read() end |
Chibi-Scheme | 261480 | (define fn(lambda () (string-append "Hello, " (read)))) |
Squirrel | 277008 | function fn() { return "Hello, " + read(); } |
ArkScript | 449792 | (let fn(fun() (+ "Hello, " (read)))) |
Gravity | 507896 | extern var read; func fn() { return "Hello, " + read(); } |
Janet | 537560 | (defn fn[] (string "Hello, " (read))) |
ChaiScript | 1374976 | def fn() { return "Hello, " + read(); } |
AngelScript | 1923960 | string fn() { return 'Hello, ' + read(); } |
GitLab-, :
- TinyScheme R5RS, GIMP. Chibi-Scheme R7RS, . SourceForge SVN trunk-.
- ChaiScript — , . , , , ( Dell XPS 13 2-3 ). , .
- Gravity Swift. , , . .
- Squirrel , ( — ).
Chibi-Scheme , .. Scheme (R7RS) ( Scheme ). , , ( init-7.scm
, string-append
).
( , Chibi-Scheme C):
res = sexp_define_foreign(*ctx, sexp_context_env(*ctx), "read", 0,
[](sexp ctx, sexp self, sexp_sint_t n) -> sexp {
return sexp_c_string(ctx, "world", -1);
});
:
- (chibi crypto rsa) — RSA-
- (chibi json) - Opérations JSON
- (chibi net http-server) - serveur HTTP
Malheureusement, la documentation n'est pas riche, mais elle est compensée par l'accès à tout le code source. De plus, Chibi-Scheme est bien connu dans ses propres cercles et ne sera pas potentiellement abandonné ou soumis à un soutien minimal comme certains autres candidats potentiels.
Je serais heureux d'entendre tous les commentaires et d'envisager d'autres PJ dans le cadre des exigences ci-dessus. La recherche est toujours en cours et peut-être que le gagnant changera, mais cela dépendra déjà de vous.