كجزء من أحد مشاريع SDK الخاصة بي ، احتجنا إلى إضافة البرمجة النصية التي سيكون لها أقل تأثير على حجم الملف الثنائي النهائي ، ولكنها لا تزال توفر وظائف جيدة. أدى هذا إلى ظهور المشروع الموصوف في هذه المقالة. يرجى ملاحظة أنه منذ ذلك الحين في SDK لدينا متطلبات معينة ، تم نقلها جزئيًا إلى لغة البرمجة النصية ، لذلك لم تشارك بعض لغات البرمجة المضمنة المعروفة جيدًا في المشروع (ولكن تم تضمين Lua للمقارنة).
موقع المشروع متاح هنا . سأقول على الفور أن Chibi-Scheme هو الفائز بالنسبة لي في الوقت الحالي. تفاصيل للمهتمين تحت الخفض.
كانت المتطلبات على النحو التالي:
- إمكانية النقل القصوى (C / C ++ فقط).
- كتابة قوية بما فيه الكفاية (والتي لا تسمح بإضافة البرتقال والتفاح) ، لذلك لم يتم النظر في تطبيقات ECMAScript.
- ملاءمة تقليل البرامج النصية نفسها (على سبيل المثال ، بحيث يمكنك إزالة جميع فواصل الأسطر بأمان) ، على التوالي ، لم يتم النظر في تطبيقات Forth و Lua و Python.
- رخصة مشروع تجاري صديق.
تم أخذ القائمة الأولية من مشروع يحاولون فيه مراعاة جميع البرامج النصية المضمنة الممكنة: https://github.com/dbohdan/embedded-scripting-languages ربما تكون القائمة غير كاملة ولا تحتوي على نصوص إضافية يمكن أن تفي بالمتطلبات المذكورة أعلاه ... إذا كنت تعرف ذلك ، فيرجى إبلاغي بذلك إما عبر PM أو عن طريق التعليق.
اشتمل اختبار التعليمات البرمجية لجميع لغات البرمجة على إنشاء واستدعاء دالة تضيف "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
- (chibi net http-server) — HTTP-
لسوء الحظ ، فإن الوثائق ليست غنية ، ولكن يتم تعويضها من خلال الوصول إلى جميع التعليمات البرمجية المصدر. بالإضافة إلى ذلك ، فإن Chibi-Scheme معروف جيدًا في دوائره الخاصة ، ولن يتم إغراقه أو وضعه في أدنى حد من الدعم مثل بعض المرشحين المحتملين الآخرين.
يسعدني سماع جميع التعليقات ، والنظر في برامج YP الأخرى في إطار المتطلبات المذكورة أعلاه. لا يزال البحث جاريًا ، وربما يتغير الفائز ، لكن هذا سيعتمد عليك بالفعل.