In einem meiner SDK-Projekte mussten wir Skripte hinzufügen, die sich am wenigsten auf die Größe der endgültigen Binärdatei auswirken, aber dennoch eine gute Funktionalität bieten. Daraus entstand das Projekt, das in diesem Artikel beschrieben wird. Bitte beachten Sie, dass seit Im SDK haben wir bestimmte Anforderungen, die teilweise in die Skriptsprache übertragen wurden, sodass einige ziemlich bekannte eingebettete Programmiersprachen nicht an dem Projekt teilgenommen haben (Lua ist jedoch zum Vergleich enthalten).
Die Projektwebsite finden Sie hier . Ich werde gleich sagen, dass im Moment für mich persönlich Chibi-Scheme der Gewinner ist. Details für Interessierte unter dem Schnitt.
Die Anforderungen waren wie folgt:
- Maximale Portabilität (nur C / C ++).
- Ausreichend starke Typisierung (die das Hinzufügen von Orangen und Äpfeln nicht zulässt), daher wurden ECMAScript-Implementierungen nicht berücksichtigt.
- Die Implementierung von Forth, Lua und Python wurde nicht berücksichtigt, da die Skripte selbst minimiert werden konnten (z. B. um alle Zeilenumbrüche sicher zu entfernen).
- Kommerzielle freundliche Lizenz.
Die ursprüngliche Liste stammt aus einem Projekt, in dem versucht wird, alle möglichen eingebetteten Skripte zu berücksichtigen: https://github.com/dbohdan/embedded-scripting-languages Möglicherweise ist die Liste nicht vollständig und enthält keine zusätzlichen Skripte, die die oben genannten Anforderungen erfüllen könnten ... Wenn Sie davon wissen, lassen Sie es mich bitte entweder per PM oder per Kommentar wissen.
, "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) - JSON-Operationen
- (chibi net http-server) - HTTP-Server
Leider ist die Dokumentation nicht reichhaltig, wird aber durch den Zugriff auf den gesamten Quellcode kompensiert. Darüber hinaus ist das Chibi-Programm in seinen eigenen Kreisen bekannt und wird möglicherweise nicht wie einige andere potenzielle Kandidaten abgeladen oder in ein Minimum an Unterstützung versetzt.
Ich würde mich freuen, alle Kommentare zu hören und andere YPs innerhalb der oben genannten Anforderungen zu berücksichtigen. Die Forschung ist noch nicht abgeschlossen, und vielleicht wird sich der Gewinner ändern, aber das hängt bereits von Ihnen ab.