سؤال

أفكر في كتابة لغتي الصغيرة.

لقد وجدت بعض الخيارات ، لكن لا تتردد في اقتراح المزيد.

  • JVM
  • ببغاء
  • OSA

تستخدم الكثير من اللغات JVM ، ولكن ما لم تكتب لغة Java-ish ، فإن كل القوة التي تمنحكها stdlib ستشعر بقبيحة ؛ انها ليست جيدة جدا في الأشياء الديناميكية أيضا.

يبدو Parrot VM جيد لتطوير اللغات ، ولكنه يحتوي على رائحة مشروع مهجورة/غير مكتملة/هواية.

OSA هو ما يمنح Applescript ، وليس VM معروفًا بشكل خاص ، لكنني أستخدم Mac ، وهو يوفر تكاملًا جيدًا للنظام.

لا يبدو CLR+MAC مزيجًا جيدًا ...

لغتي ستكون لغة بيانات متزامنة موجهة نحو الكائن مع كتابة قوية ومزيج من البايثون وبناء جملة LISP. يبدو جيدا ، إيه؟

تعديل
قبلت بيثون الآن ، لكنني أود أن أسمع المزيد عن OSA و Parrot.

هل كانت مفيدة؟

المحلول

نهج واحد لعبت معه هو استخدام الثعبان آس الوحدة النمطية لإنشاء شجرة بناء الجملة المجردة تمثل الكود لتشغيله. بيثون compile يمكن أن تقوم الوظيفة بتجميع AST في Python bytecode ، والتي exec يمكن أن يركض بعد ذلك. هذا مستوى أعلى قليلاً من توليد الرمز الباقري مباشرة ، ولكن سيتعين عليك التعامل مع بعض المراوغات في لغة Python (على سبيل المثال ، الفرق الأساسي بين العبارات والتعبيرات).

عند القيام بذلك ، كتبت أيضًا وحدة "Diparse" تحاول تحويل AST مرة أخرى إلى رمز مصدر Python المكافئ ، فقط لتصحيح الأخطاء. يمكنك العثور على رمز في Psil مستودع إذا كنت مهتمًا.

نصائح أخرى

القي نظرة على LLVM. إنه ليس VM نقيًا على هذا النحو ، فهو إطار أكثر مع IR يتيح لك بناء VMs عالية المستوى. لديه أشياء لطيفة مثل تحليل الرمز الثابت ودعم JIT

  • Lua لديه VM صغير ومكتوب جيدًا وسريع
  • Python VM - يمكنك حقًا إرفاق لغة جديدة إذا أردت. أو اكتب (استخدام؟) شيء مثل Tinypy وهو تطبيق صغير وبسيط لـ Python VM.

يتمتع كلا الخيارين أعلاه بإمكانية الوصول إلى مكتبات قياسية مفيدة من شأنها أن توفر لك العمل ، ويتم ترميزها في C نظيفة نسبيا ومعيجة ، لذلك لا ينبغي أن يكون من الصعب الاتصال بها.

ومع ذلك ، لا أوافق على أن الببغاء مهجور/هواية. إنه ناضج تمامًا ، ولديه بعض المطورين الأقوياء الذين يعملون عليه. علاوة على ذلك ، فهي على وجه التحديد VM مصممة لتستهدفها لغات ديناميكية متعددة. وبالتالي ، تم تصميم مع مرونة في الاعتبار.

هل فكرت في Pypy؟ من ما قرأته ، بالإضافة إلى كونه مترجم بيثون JIT ، فإنه لديه أيضًا القدرة على التعامل مع اللغات الأخرى. على سبيل المثال هناك برنامج تعليمي وهو ما يفسر كيفية إنشاء مترجم Brainfuck Jit باستخدام Pypy.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top