يمكن أن روبي, PHP او Perl خلق قبل تجميعها ملف التعليمات البرمجية مثل الثعبان ؟

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

سؤال

لبيثون, فإنه يمكن إنشاء جمعت قبل إصدار الملف.بيك بحيث يمكن تشغيل البرنامج دون تفسير مرة أخرى.يمكن أن روبي, PHP و Perl تفعل الشيء نفسه في سطر الأوامر ؟

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

المحلول

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

YARV يجمع دائما إلى بايت كود قبل تنفيذ التعليمات البرمجية، ولكن هذا هو عادة يتم إلا في الذاكرة. هناك طرق لتفريغ بايت كود إلى القرص. في هذه اللحظة، لا توجد وسيلة لقراءة مرة أخرى <م> في ، ولكن. سيؤدي ذلك إلى تغيير في المستقبل: العمل جار على المدقق بايت كود لYARV، ومتى تم ذلك، بايت كود يمكن بأمان يتم تحميل في VM، دون خوف من الفساد. أيضا، وقد أشار المطورين JRuby أنهم على استعداد لتنفيذ <وأ href = "https://GitHub.Com/JRuby/JRuby/blob/da23e51968ffc17d750fca340f4b9538e5e2b425/src/org/jruby/ast/executable/YARVMachine.java" يختلط = "noreferrer"> YARV VM محاكي داخل JRuby ، وبمجرد أن شكل YARV بايت كود والمدقق واستقرت، بحيث يمكن تحميل YARV بايت كود في JRuby. (لاحظ أن هذا الإصدار هو عفا عليها الزمن ).

Rubinius أيضا يجمع دائما إلى بايت كود، ولها <لأ href = "https://GitHub.Com /EvanPhx/Rubinius/blob/master/kernel/compiler/compiled_file.rb "يختلط =" noreferrer "> تنسيق لتجميع ملفات (ملفات .rbc، مماثلة لملفات .class JVM) وهناك حديث عن تنسيق أرشيف بايت كود (ملفات .rba، مماثلة لJVM .jar الملفات). هناك فرصة أن Rubinius قد تنفيذ محاكي YARV، إذا نشر التطبيقات كما YARV بايت كود يصبح من أي وقت مضى شعبية. أيضا، وقد أشار المطورين JRuby أنهم على استعداد لتنفيذ <وأ href = "https://GitHub.Com/JRuby/JRuby/blob/da23e51968ffc17d750fca340f4b9538e5e2b425/src/org/jruby/ast/executable/RubiniusMachine.java" يختلط = "noreferrer"> Rubinius بايت كود محاكي داخل JRuby أو إذا أصبح Rubinius بايت كود وسيلة شائعة لنشر التطبيقات روبي. (لاحظ أن هذا الإصدار هو عفا عليها الزمن ).

XRuby هو مترجم النقي، فإنه يجمع روبي المصدرية مباشرة إلى JVM بايت كود (ملفات .class). يمكنك نشر هذه الملفات .class تماما مثل أي تطبيق جافا آخرين.

JRuby بدأت كمترجم، لكنه لا يملك كل من مترجم JIT و<لأ href = "HTTPS: //GitHub.Com/JRuby/JRuby/tree/master/src/org/jruby/compiler/ "يختلط =" noreferrer "> مترجم عثمان (وjrubyc) التي يمكن تجميع روبي المصدرية لJVM بايت كود (ملفات .class) . أيضا، يجري العمل على إنشاء <م> الجديد مترجم التي يمكن تجميع (المشروح نوع) روبي الرمز إلى JVM بايت كود التي تبدو فعلا مثل فئة جافا ويمكن استخدامها من شفرة جافا دون حواجز.

Ruby.NET هو مترجم النقي الذي يجمع روبي المصدرية لبايت كود CIL (.dll PE أو ملفات .exe) . يمكنك نشر هذه تماما مثل أي تطبيق CLI آخرين.

آيرن روبي يجمع أيضا بايت كود CIL، ولكن عادة ما يفعل هذا في الذاكرة. ومع ذلك، يمكنك تمرير <لأ href = "https://GitHub.Com/IronRuby/IronRuby/blob/master/Merlin/Main/Languages/Ruby/Ruby/Hosting/RubyOptionsParser.cs#L275-276" يختلط = "noreferrer "> فلكس SWITالكولينستراز إليها ، لذلك مقالب .dll و.exe الملفات إلى القرص. وبمجرد الانتهاء من تلك، فإنها يمكن نشرها بشكل طبيعي.

BlueRuby تلقائيا قبل يوزع روبي المصدرية في BRIL (BlueRuby المتوسطة اللغة)، الذي هو في الأساس parsetree تسلسل. (راجع < م> الأزرق روبي - روبي VM في SAP ABAP (PDF) للحصول على تفاصيل)

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

نصائح أخرى

وبيرل 5 يمكن تفريغ bytecodes إلى القرص، ولكن من عربات التي تجرها الدواب وسيئة. بيرل 6 لديه طريقة نظيفة جدا لخلق التنفيذية بايت كود أن <لأ href = "HTTP: //www.parrot كافيه / "يختلط =" noreferrer "> الببغاء يمكن تشغيلها.

وبيرل هو ترجمة في الوقت المناسب هو سريع بما فيه الكفاية أن هذا لا يهم في معظم الحالات. مكان واحد حيث لا يهم غير في بيئة CGI وهو ما mod_perl عبارة عن.

بالنسبة هستيري الزبيب, Perl 5 يبحث عن .pmc الملفات قبل .pm الملفات عند البحث عن الوحدة.هذه الملفات قد تحتوي على بايت كود, على الرغم من بيرل لا يكتب بايت كود الخروج افتراضيا (على عكس بيثون).

وحدة::تجميع (أو:ما هذا PMC الامر؟) يذهب إلى بعض أكثر عمقا حول هذه غامضة المعالم.إنهم لا تستخدم كثيرا ، ولكن...

الناس ذكية من كتب وحدة::ترجمة الاستفادة من هذا, إلى ما قبل ترجمة كود بيرل في...حسنا, انها لا تزال Perl, لكنه معالجة.

من بين المزايا الأخرى, هذا يسرع وقت التحميل و يجعل التصحيح أسهل عند استخدام مرشحات المصدر (كود بيرل تعديل بيرل البرمجية المصدر قبل أن يتم تحميلها من قبل المترجم).

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

ولا توجد طريقة أنا على علم أن يحصل فعلا في بايت كود من خلال سطر الأوامر.

لبيرل يمكنك محاولة استخدام B :: بايت كود و <لأ href = "http://search.cpan.org/dist/BC/script/perlcc.PL" يختلط = "نوفولو noreferrer"> perlcc . ومع ذلك، كل من هذه التجريبي للغاية. وبيرل 6 قادم قريبا (نظريا) وسيكون على الببغاء وسوف تستخدم بايت كود مختلفة وذلك كل هذا سيكون موضع نقاش إلى حد ما في ذلك الوقت.

وهنا بعض الأمثلة الكلمات السحرية لسطر الأوامر

perl -MO=Bytecode,-H,-o"Module.pm"c "Module.pm"

وفقا للطبعة الثالثة من البرمجة بيرل ، فمن الممكن لتقريب هذا في بعض الطرق التجريبية.

إذا كنت تستخدم الحرس زند على مخطوطات PHP الخاص بك، فإنه precompiles أساسا مخطوطات لبايت رمز، ومن ثم يمكن تشغيل بواسطة محرك PHP إذا تم تحميل تمديد زند محسن.

وهكذا، نعم، يسمح زند الحرس / محسن قبل تجميعها مخطوطات PHP لاستخدامها.

لPHP، و مشروع Phalanger يجمع صولا الى المجالس .NET. أنا لست متأكدا مما إذا thats ما كنت تبحث عنه على الرغم من.

وقد أي شخص يعتبر استخدام بايت كود LLVM، وبدلا من بعد-آخر-خصيصا بايت كود؟

وروبي 1.8 لا فعلا استخدام بايت كود على الإطلاق (حتى داخليا)، لذلك ليس هناك خطوة ما قبل تجميعها.

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