مقارنة اللغات المضمنة حسب الحجم في الملف القابل للتنفيذ

كجزء من أحد مشاريع 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-Scheme معروف جيدًا في دوائره الخاصة ، ولن يتم إغراقه أو وضعه في أدنى حد من الدعم مثل بعض المرشحين المحتملين الآخرين.






يسعدني سماع جميع التعليقات ، والنظر في برامج YP الأخرى في إطار المتطلبات المذكورة أعلاه. لا يزال البحث جاريًا ، وربما يتغير الفائز ، لكن هذا سيعتمد عليك بالفعل.




All Articles