سؤال

أرغب في القيام ببعض metaprogramming بلغة مكتوبة بشكل ثابت ، حيث سيتم كتابة كلا من برامجي وبروغراماتي الوصفية. أعني هذا بالمعنى القوي: إذا كان مولد البرنامج الخاص بي يجمع ، فأريد أن يكون نظام النوع قويًا بدرجة كافية بحيث يمكن إنشاء برامج محلية فقط.

بقدر ما أعرف ، فقط metaocaml تستطيع فعلها. (لا ، لا تناسب قوالب Haskell أو C ++ الفاتورة - انظر هذه الورقة). سؤال: ما هي اللغات/الأنظمة الأخرى التي تسمح بذلك؟

تحرير: بقدر ما أستطيع أن أقول ، ميتوكامل مات. أوليغ حاول إحياءها, ، لكن هذا لا يزال عالقًا عدة إصدارات خلف Ocaml نفسها. إذا أراد المرء أن يذهب بلغات تجريبية (أي أكثر من metaocaml ، فيبدو ذلك أور وربما إدريس تناسب الفاتورة. أي مقالات جديدة أخرى إلى هذا المجال؟

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

المحلول

F# يمكن أن تفعل هذا أيضا من خلال اقتباسات رمز.

نصائح أخرى

للقيام بذلك ، عليك التأكد من أن نظام النوع للغات الأساسية يتم تكريمه/فحصه مباشرة بواسطة metaprogram نفسه. كمسألة عملية ، فإن هذا يجبر تقريبًا metaprogramming على أن تكون في اللغة الأساسية ... لذلك أعتقد أنني لست مندهشًا لأنك قد تكون قادرًا على القيام بذلك في metaocaml.

معظمنا لا يحصل على أدوات metaprogramming مدمجة في اللغة الأساسية (كون C ++ استثناءً ، وأنا أرفض أنظمة قائمة على الانعكاس على أنها ضعيفة جدًا لتنفيذ التحولات التعسفية).

نظام يمكن أن ينفذ اعتباطيا التحولات (أو metaprograms المكونة من مجموعات من تلك) على الكود هي مجموعة أدوات إعادة هندسة برامج DMS. DMS له نهايات أمامية للعديد من langauges الحقيقية ، وإنشاء هياكل بيانات التحويل البرمجي عند التحليل (بما في ذلك ASTS). يوفر DMS التحولات برنامج المصدر إلى المصدر التي تمثل التحولات كـ AST-REWRITES باستخدام بناء جملة السطح للغة المستهدفة. يفي بمتطلباتك إلى درجة معينة: إذا كانت قواعد التحول الخاصة بك صحيحة بشكل نحلي (ويتم فحصها بواسطة DMS) ، فسيكون البرنامج المحول صحيحًا بشكل حيوي. لا يحقق متطلبات التصحيح الخاصة بك ، حيث يتم تنفيذ آليات فحص النوع خارج اللغة المستهدفة. من حيث المصرفي ، يمكن للمرء أن يتجاهل نوعًا آمنًا لزيادة تحويلات البرنامج ؛ في الممارسة العملية ، وجدنا أنه يمكننا رمز التحولات بشكل كافٍ.

وحتى إذا كان لديك تحويلات آمنة من النوع ، فلن يكون لديك ضمان متعلق بدلالات الألفاظ السلامة فيما يتعلق ببرنامجك الأصلي. لذلك ، لا يزال يتعين عليك تصحيح metaprograms.

تجميع وقت metaprogramming في سكالا.

Our flavor of macros is reminiscent of Lisp macros, adapted to incorporate type safety and rich syntax. Unlike infamous C/C++ preprocessor macros, Scala macros: 1) are written in full-fledged Scala, 2) work with expression trees, not with raw strings, 3) cannot change syntax of Scala.

من المفترض/الإرادة شين (Qi lisp II)http://groups.google.com/group/qilang/browse_thread/thread/d62fc0d9f576838c

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