سؤال

أنا أبحث عن برنامج مترجم في الواجهة الأمامية LUA يتم فحصه في وقت الترجمة ، لكن يخرج الرمز القياسي LUA 5.1 BYTE (الذي يحتوي على أنواع وقت التشغيل فقط). ما أريده هو كمية لائقة من التحليل النحوي للوقت الثابت ، والكتابة الاختيارية ، لاكتشاف الأخطاء التافهة في وقت أقرب من وقت التشغيل. يجب أن يلعب رمز البايت الناتج بشكل جيد مع رمز بايت LUA الموجود الذي تم تجميعه باستخدام LoadString () القياسي.

لكي تكون واضحًا-لن يحدث أي فرق إلا في وقت التثبيت البايت. في وقت التشغيل ، لن يكون لبرنامج البايت أي فكرة أن أي شيء مختلف/غير عادي حدث له أثناء مرحلة التجميع.

ما يدور في ذهني يشبه إلى حد كبير ActionScript ؛ حتى أنني لن أمانع في برنامج التحويل البرمجي الذي يخرج رمز لوا بايت!

هل سمع أحد عن مثل هذا الجهد؟ لقد رأيت بعض الإشارات إلى استخدام Metalua للقيام بذلك ، لكنني بصراحة لست مشرقًا بما يكفي لجعل رؤوس ذيولها

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

المحلول

في صيف عام 2005 أو ما يقرب من ذلك ، عملت مع طالب جامعي ذكي بشكل لا يصدق حول مشكلة القيام ببعض الاستدلال في نوع الترجمة ل Lua ، وربما يساعدها التعليقات التوضيحية. هذه المشكلة تبين أنها صعبة للغاية! (كتب طالبتي ملاحظة تقنية قصيرة ، لكنها ليست مخصصة حقًا للتداول العام.)

إذا أردت حل المشكلة التي طرحتها ، مع قيود التوأم على ذلك السماح بفحص نوع ثابت كبير وهذا interoperate مع رمز LUA المبلل القياسي, ، أود تصميم لغة جديدة من الصفر لتلبية هاتين القيود. سيكون قدرًا كبيرًا من العمل ولكنه أسهل بكثير من محاولة تعديل نظام النوع إلى LUA.

نصائح أخرى

لطفا أنظر منشور مدونة Metalua هذا.

-{ extension "types" }

function sum (x :: list(number)) :: number
  local acc :: number = 0
  for i=1, #x do acc=acc+x[i] end
  return acc
end

هذا يبدو وكأنه حل وقت التشغيل رغم ذلك.

على أي حال ، لا تتردد في طرح سؤالك في قائمة المراسلات Metalua. إذا كنت ترغب في تمديد Syntax Lua ، فإن MetalUa هو أول أداة للنظر إليها.

ملاحظة: من فضلك لا تكتب LUA أبدًا ككل قفصات!

هذا السؤال عمره ست سنوات ... ولكن إليك إجابة جديدة: http://terralang.org/

مثل C ، Terra هي لغة بسيطة ومغطاة بشكل ثابت ، مع إدارة الذاكرة اليدوية. ولكن على عكس C ، تم تصميمه من البداية إلى التبادل مع لوا. وظائف terra هي قيم LUA من الدرجة الأولى التي تم إنشاؤها باستخدام الكلمة الرئيسية Terra. عند الحاجة ، يتم تجميعها إلى رمز الجهاز.

لا يوجد شيء من هذا القبيل. قد يكون من الممكن تمديد Metalua للقيام بذلك ، لكن لا أحد فعل ذلك ، و AFAIK ، لا توجد خطط للقيام بذلك. من المفترض أن تكون لوا لغة ديناميكية ، إذا كنت تريد لغة مطبوعة بشكل ثابت ، فاستخدم لغة.

ما تبحث عنه بشكل أساسي هو شيء مثل Java أو C#. في هذه الحالة ، يمكنك استخدام مشروع مثل لوا لدمج رمز LUA الحالي مع C#. يوجد ايضا Kahlua لجافا.

هناك ورقة جديدة "Lua المكتوبة: نظام نوع اختياري لـ LUA" من Puc-Rio المنشور للتو في Dyla'14. http://dl.acm.org/citation.cfm؟id=2617553

إنه يتعلق بـ "التصميم الأولي لـ LUA المكتوبة ، وهو امتداد اختياري للغة البرمجة البرمجية LUA". لا يزال قيد التقدم ، ولا يزال نظام النوع بسيطًا نسبيًا. لا يوجد نوع الاستدلال/نوع التحقق من النوع المتوفرة.

فيما يتعلق بنظام الكتابة المستند إلى Metalua ، قفل المد والجزر: فحص النوع الثابت الاختياري واستدلال لوا من فابيان. http://lua-users.org/lists/lua-l/2013-02/msg00403.html.

هناك أيضا رافيhttps://github.com/dibyendumajumdar/Ravi

لغة برمجة Ravi هي مشتق لـ LUA 5.3 مع كتابة محدودة الاختيارية و LLVM و LIBGCCJIT المترجمين JIT

أنا أستمتع حقًا بالبرمجة في تيرا (انظر أعلاه)

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