سؤال

إذا كان هناك أي لغة المصممين هناك (أو الناس ببساطة في معرفة), أنا غريبة عن المنهجية وراء إنشاء المكتبات القياسية عن تفسير اللغات.على وجه التحديد ، ما يبدو أن أفضل نهج ؟ تحديد الوظائف القياسية/طرق في تفسير اللغة ، أو أداء معالجة تلك المكالمات في ترجمة اللغة التي المترجم هو مكتوب ؟

ما جعلني أفكر في هذا حتى السؤال عن stripslashes () مثل وظيفة في بيثون.كانت فكرتي الأولى "لماذا لا تعرف بنفسك و الاتصال فقط عندما كنت في حاجة إليها" ، لكنه أثار السؤال:هو الأفضل لهذه الوظيفة ، للسماح تفسير لغة التعامل مع هذا الحمل ، أو سيكون من الأفضل أن تكتب امتداد والاستفادة جمعت اللغة وراء مترجم ؟

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

المحلول

الخط الفاصل بين "تفسير" و "تجميع" اللغات هو غامض حقا في هذه الأيام.على سبيل المثال, أول شيء الثعبان عندما يرى شفرة المصدر هو ترجمة ذلك إلى بايت كود التمثيل أساسا نفس ما جافا لا عند تجميع ملفات فئة.هذا هو ما *.بيك تحتوي على الملفات.ثم python runtime ينفذ بايت كود دون الإشارة إلى المصدر الأصلي.تقليديا بحتا تفسير اللغة الرجوع إلى التعليمات البرمجية المصدر بشكل مستمر عند تنفيذ البرنامج.

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

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

فقط لأن لغة مثل الثعبان يجمع إلى بايت كود وينفذ هذا لا يعني أنها بطيئة.ليس هناك سبب لماذا شخص لا يستطيع كتابة فقط في الوقت (JIT) compiler for Python, على غرار ما جاوة .صافي بالفعل إلى زيادة الأداء.في الواقع ، IronPython يجمع الثعبان مباشرة .صافي بايت كود, ثم تشغيل باستخدام .صافي بما في ذلك نظام JIT.

للإجابة على سؤالك مباشرة, المرة الوحيدة اللغة مصمم تنفيذ دالة في اللغة وراء وقت التشغيل (على سبيل المثال.ج في حالة الثعبان) سيكون لتعظيم أداء تلك الوظيفة.هذا هو السبب في وحدات مثل العادية التعبير اللغوي هي مكتوبة في ج بدلا من مواليد الثعبان.من ناحية أخرى ، مثل وحدة getopt.py يتم تنفيذها في بيثون نقية لأنه يمكن أن يكون كل ذلك هناك فائدة من استخدام المقابلة ج المكتبة.

نصائح أخرى

هناك أيضا اتجاها متزايدا من reimplementing اللغات التي تعتبر تقليديا "تفسيره" على منصة مثل JVM أو CLR-ثم مما يتيح سهولة الوصول إلى "الأم" رمز التشغيل البيني.لذلك من Jython و JRuby ، يمكنك الوصول بسهولة كود جافا, من IronPython و IronRuby ، يمكنك الوصول بسهولة .صافي رمز.

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

انظر 'أوراق' قسم www.lua.org.

خاصة تنفيذ لوا 5.0

لوا يعرف جميع الوظائف القياسية في الأساسية (ANSI C) رمز.وأعتقد أن هذا هو الغالب لأسباب تتعلق بالأداء.في الآونة الأخيرة, أيفي 'السلسلة.*' وظائف حصلت بديل التنفيذ في نقي لوا ، والتي قد تكون حيوية بالنسبة الفرعية حيث لوا تشغيل أعلى .صافي أو جافا (حيث C رمز لا يمكن استخدامها).

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

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