Sebagai bagian dari salah satu proyek SDK saya, kami perlu menambahkan skrip yang memiliki efek paling kecil pada ukuran file biner akhir, tetapi tetap memberikan fungsionalitas yang baik. Ini memunculkan proyek, yang dijelaskan dalam artikel ini. Harap dicatat bahwa sejak itu dalam SDK kami memiliki persyaratan tertentu, mereka sebagian ditransfer ke bahasa skrip, sehingga beberapa bahasa pemrograman tertanam yang cukup terkenal tidak berpartisipasi dalam proyek (tetapi Lua disertakan untuk perbandingan).
Situs web proyek tersedia di sini . Saya akan langsung mengatakan bahwa saat ini, bagi saya pribadi, Skema Chibi adalah pemenangnya. Detail untuk mereka yang tertarik dengan potongan.
Persyaratannya adalah sebagai berikut:
- Portabilitas maksimum (hanya C / C ++).
- Pengetikan yang cukup kuat (yang tidak memungkinkan penambahan jeruk dan apel), oleh karena itu implementasi ECMAScript tidak dipertimbangkan.
- Kemudahan meminimalkan skrip itu sendiri (misalnya, sehingga Anda dapat dengan aman menghapus semua jeda baris), masing-masing, implementasi Forth, Lua dan Python tidak dipertimbangkan.
- Lisensi ramah proyek komersial.
Daftar awal diambil dari sebuah proyek di mana mereka mencoba untuk memperhitungkan semua kemungkinan skrip yang disematkan: https://github.com/dbohdan/embedded-scripting-languages Mungkin daftar tersebut tidak lengkap, dan tidak berisi skrip tambahan yang dapat memenuhi persyaratan di atas ... Jika Anda tahu tentang itu, beri tahu saya melalui PM atau melalui komentar.
Kode pengujian untuk semua bahasa pemrograman termasuk membuat dan memanggil fungsi yang menambahkan "Halo", dan hasil dari memanggil fungsi eksternal (C / C ++) yang mengembalikan "dunia". Kode fungsi disajikan dalam tabel sebagai sintaks sampel. File eksekusi akhir dikompilasi dengan pengoptimalan ukuran dan menghapus semua simbol yang tidak perlu (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
- (chibi net http-server) — HTTP-
Sayangnya, dokumentasinya tidak kaya, tetapi dikompensasikan dengan akses ke semua kode sumber. Plus, Skema Chibi terkenal di lingkarannya sendiri, dan tidak akan berpotensi dibuang atau diberikan dukungan minimal seperti beberapa kandidat potensial lainnya.
Saya akan senang mendengar semua komentar, dan mempertimbangkan YP lain dalam persyaratan yang disebutkan di atas. Penelitian masih berlangsung, dan mungkin pemenangnya akan berubah, tetapi itu sudah tergantung pada Anda.