ما هي اللغات التي يتم كتابتها وتجميعها ديناميكيًا (والتي يتم كتابتها وتفسيرها بشكل ثابت)؟

StackOverflow https://stackoverflow.com/questions/2329460

سؤال

في قراءتي عن الكتابة الديناميكية والساكنة ، ما زلت أواصل الافتراض بأن اللغات المكتوبة بشكل ثابت يتم تجميعها ، بينما يتم تفسير اللغات المكتوبة ديناميكيًا. أعلم أن هذا صحيح بشكل عام ، لكنني مهتم بالاستثناءات.

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

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

المحلول

إليك قائمة ببعض الأنظمة المثيرة للاهتمام. أنه ليس شاملة!

كتابته وتجميعها ديناميكيا

  1. مترجم مخطط المناورة ، مخطط Chez, ، ويل كلنجر مخطط مخطط السرقة ، بيجلو برنامج التحويل البرمجي ، وربما العديد من الآخرين.

    لماذا ا؟

    الكثير من الناس يحبون المخطط حقًا. برامج كبيانات ، نظام ماكرو جيد ، 35 عامًا من التطوير ، المجتمع الكبير. لكنهم يريدون الأداء. وبالتالي ، فإن عدد من المترجمين الأصليين الجيد-المخطط CHEZ هو منتج تجاري ناجح (Bytecodes المفسرة مجانية ؛ الرموز الأصلية التي تدفعها مقابل).

  2. برنامج التحويل البرمجي Luajit Just في الوقت المناسب لـ لوا.

    لماذا ا؟

    لإظهار أنه يمكن القيام به. وبعد ذلك ، بدأ الناس مثل الحصول على تسريع 3x على برامج LUA الخاصة بهم. لوا في الكثير من الألعاب ، حيث يهم الأداء ، بالإضافة إلى أنه يتسلل إلى منتجات أخرى أيضًا. 70 ٪ من الكود في Adobe Lightroom هو لوا.

  3. ال iconc أيقونة-TO-C مترجم.

    لماذا ا؟

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

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

تم كتابتها وتفسيرها بشكل ثابت

هذه الفئة أقل شيوعًا ، لكن ...

  1. الهدف CAML. لهجة ML ، مركبة ل الكثير من التجارب المبتكرة في تصميم اللغة.

    لماذا ا؟

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

  2. موسكو مل. ML القياسية مع بعض الميزات الإضافية لنظام الوحدات النمطية.

    لماذا ا؟

    أوقات التجميع المحمولة والسريعة ، من السهل عمل حلقة قراءة/تقييم/طباعة تفاعلية. أصبح مترجم تدريس شعبي.

  3. C-terp. منتج قديم ، أعتقد أنه ربما من برنامج Gimpel. Saber C - منتج لا أعتقد أنه يمكنك شراء المزيد.

    لماذا ا؟

    تصحيح الأخطاء. خاصة ، تصحيح الأخطاء على أجهزة الثمانينات تحت MS-DOS. بالنسبة للموارد القليلة جدًا ، يمكنك الحصول على مساعدة جيدة حقًا في تصحيح رمز C على أجهزة محدودة للغاية (فكر: معالج 4.77 ميجا هرتز مع حافلة 8 بت ، 640 ألف من ذاكرة الوصول العشوائي المحملة بالكامل). من المستحيل تقريبًا الحصول على مصحح تصحيح بصري جيد للرمز المدمج الأصلي ، ولكن مع المترجم الفوري ، سهل إلى حد ما.

  4. UCSD Pascal-النظام الذي جعل "P-Code" كلمة منزلية.

    لماذا ا؟

    أحب المعلمون تصميم لغة نيكلوس ويرث ، ويمكن للمترجم أن يعمل عليه جداً آلات صغيرة. صنع تصميم Wirth النظيف ونظام UCSD P مزيج لا يهزم ، وكان باسكال ال لغة التدريس القياسية في السبعينيات. قد يجد الأصغر سنا صعوبة في تقدير ذلك في سبعينيات القرن الماضي كان هناك لا مناقشة حول اللغة التي يجب تدريسها في الدورة الأولى. اليوم أعرف البرامج التي تستخدم C و C ++ و Haskell و Java و ML و Scheme. في سبعينيات القرن الماضي ، كان دائمًا Pascal ، وكان نظام UCSD P سبب كبير.

    في حال كنت تتساءل ، وقف P ل محمول.

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

نصائح أخرى

يتم تجميع الهدف-C ويدعم الكتابة الديناميكية (بالتأكيد عند الاتصال بالأساليب عبر [target doSomething] بناء الجملة). بمعنى أنه يمكنك إرسال أي رسالة إلى هدف (باستخدام بناء جملة اللغة العادية ، دون برمجة ضد واجهة برمجة تطبيقات الانعكاس) ، وتلقي فقط تحذيرًا في وقت الترجمة الذي قد لا يتم التعامل معه ، واحصل على استثناء فقط في وقت التشغيل إذا كان الهدف لا يفعل ذلك 'ر استجابة لهذا المحدد (الذي يشبه توقيع الطريقة) ؛ ويمكنك أن تسأل أي كائن (يمكن أن يكون كل شيء من النوع الثابت id إذا كان الكود الخاص بك لا يعرف أي شيء أفضل أو لا يهتم) سواء كان ذلك respondsToSelector: للتحقيق في قدراتها.

يتم تجميع Java (لغة مكتوبة بشكل ثابت) إلى JVM bytecode ، والتي تم تفسيرها على الإصدارات القديمة من JVM ، في حين أنها تستخدم الآن في تجميع الوقت (JIT) ، وهذا يعني أن رمز الجهاز يتم إنشاؤه في وقت التشغيل. أعتقد أيضًا أن ML ولهجاتها يمكن تفسيرها ، ومن المؤكد أن ML يتم كتابتها بشكل ثابت.

ActionScript لديه كتابة ديناميكية وتجمع إلى Bytecode.

وتجمع حتى مباشرة إلى رمز الجهاز الأصلي إذا كنت ترغب في إصدار تطبيق فلاش على iPhone.

Python هي لغة ديناميكية تحتوي على مجمعين.

يرى هذا السؤال جدا - Python - why compile?, ، على سبيل المثال.

بشكل عام ، يجعل التجميع البرنامج يعمل بشكل أسرع بكثير.

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