سؤال

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

وأنا حاليا لا أعرف كيفية القيام بذلك، ونود النصائح حول ما يجب قراءة لمعرفة كيفية القيام بذلك.

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

إذا أنه من غير الواضح ما أنا أسأل، قل لي حتى أتمكن من توضيح.

وشكرا!

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

المحلول

وبعض برامج محاكاة وحدة المعالجة المركزية علاج رمز الجهاز كما لو كان رمز بايت ويفعلون الترجمة JIT، تقريبا كما لو كان جافا. هذا هو فعالة جدا، ولكنه يعني أن المطورين بحاجة إلى إرسال نسخة من مترجم لكل CPU يعمل المحاكي على ولكل وحدة المعالجة المركزية يحتذى به.

وهذا يعني عادة أنها لا تعمل إلا على x86 و هو مزعج لمن ترغب في استخدام شيء مختلف.

ويمكنهم أيضا ترجمتها إلى LLVM أو رمز بايت جافا أو صافي CIL ثم ترجمة عليه، والذي ستعمل أيضا.

في قضيتك ولست متأكدا من هذا النوع من الشيء هو أفضل وسيلة للذهاب. أعتقد أن أفعل ذلك عن طريق استخدام المكتبات الديناميكية. جعل الدليل الذي من المفترض أن تحتوي على "الإضافات" والسماح للمستخدم تجميع خاصة بهم. جعل البرنامج تفحص الدليل وتحميل كل DLL أو. حتى يجدها.

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

نصائح أخرى

هل روتين التي سيتم تجميعها حيوي يجب أن تكون في أي لغة معينة. إذا كان الجواب على هذا السؤال هو "نعم، يجب أن يكون C ++" ربما كنت من الحظ. C ++ هو عن أسوأ خيار ممكن لإعادة تجميع على الانترنت.

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

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

إذا كنت يمكن أن يكتب ملحقات الديناميكية في C (وليس C ++)، قد تجد صغير C مترجم لتكون ذات فائدة. انها متوفرة تحت LGPL، انها متوافقة ويندوز ولينكس، وانها للتنفيذ صغير (أو مكتبة) في ~ 100KB لالمعالج، مترجم، رابط والمجمع، وكلها فإنه سريع جدا. الجانب السلبي لهذا، بطبيعة الحال، هو أنه لا يمكن مقارنة للتحسينات التي يمكنك الحصول عليها مع دول مجلس التعاون الخليجي. الجانب السلبي آخر محتمل هو أنه X86 فقط AFAIK.

إذا <م> لم قررت أن تكتب التجمع، TCC يمكن التعامل مع هذا - <وأ href = "http://bellard.org/tcc/tcc-doc.html#SEC10" يختلط = " نوفولو noreferrer "> وثائق تقول انها تؤيد بناء الجملة مثل الغاز، وأنه لا يدعم أكواد العمليات X86.

وTCC أيضا تؤيد تماما ANSI C، وانها تقريبا متوافقة تماما مع C99.

وأن يقال، هل يمكن إما تشمل TCC كما قابل للتنفيذ مع التطبيق الخاص بك أو استخدام libtcc (وليس هناك الكثير من الوثائق من libtcc الانترنت، ولكن لأنها متاحة في حزمة المصدر). وفي كلتا الحالتين، يمكنك TCC لتوليد المكتبات الديناميكية أو مشتركة أو التنفيذية . إذا ذهبت الطريق مكتبة ديناميكية، وكنت وضعت للتو في Render (أو أيا كان) وظيفة في ذلك، وdlopen أو LoadLibrary على ذلك، وندعو Render لتشغيل أخيرا تقديم مصممة المستخدم. بدلا من ذلك، هل يمكن أن تجعل مستقل قابل للتنفيذ و popen في هذا الشأن، والقيام كل ما تبذلونه من الاتصالات من خلال stdin المستقل وstdout.

ومنذ كنت توليد بكسل للظهور على الشاشة، هل تعتبر استخدام HLSL مع تظليل ديناميكي تجميع؟ وهذا يوفر لك الوصول إلى الأجهزة SIMD مصممة للبالضبط هذا النوع من الشيء، وكذلك مترجم الديناميكي يبنى الحق في دايركت.

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

Nanojit هو مثال جيد جدا من ما تريد. فهو يولد رمز الجهاز من الناطقة المتوسط. انها C ++، وانها صغيرة وعبر منصة. أنا لم تستخدم على نطاق واسع جدا، ولكن استمتعت اللعب في جميع أنحاء لمجرد العروض.

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

هل هناك سبب لماذا لا يمكن استخدام الحلول المستندة إلى GPU؟ ويبدو أن هذا الصراخ واحد.

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