
لغة خاصة بالمجال لكتابة نماذج أجهزة وظيفية سريعة للمنصات الافتراضية. يقوم بترجمة DML إلى C مع استدعاءات API مخصصة لمحاكي Intel Simics، مما يتيح محاكاة الأجهزة واختبار الأمان.
لغة نمذجة الأجهزة (DML) هي لغة خاصة بالمجال لكتابة نماذج أجهزة وظيفية سريعة أو على مستوى المعاملات للمنصات الافتراضية. توفر DML تجريدات عالية المستوى مناسبة لنماذج الأجهزة الوظيفية، بما في ذلك بنيات مثل بنوك التسجيلات، السجلات، حقول البتات، نشر الأحداث، الواجهات بين النماذج، والتسجيل. يتم ترجمة كود DML بواسطة مترجم DML (DMLC)، مما ينتج كود C مع استدعاءات API مصممة لمحاكٍ معين.
حاليًا، يدعم المترجم بناء نماذج لمحاكي Intel® Simics®، ولكن قد تُضاف واجهات خلفية أخرى في المستقبل.
لبناء DMLC، تحتاج إلى تثبيت محاكي Simics وإعداد مشروع Simics.
إذا لم يكن لديك بالفعل تثبيت محاكي Simics أو إمكانية الوصول إلى محاكي Simics عبر القنوات التجارية، فقم بتثبيت الإصدار العام من محاكي Intel Simics وأنشئ مشروع Simics (تلقائيًا في سير التثبيت الافتراضي).
في مشروع Simics الخاص بك، قم بسحب مستودع DML إلى الدليل modules/dmlc. على المستوى الأعلى للمشروع، نفّذ make dmlc (أو bin\make dmlc على Windows).
لتشغيل اختبارات الوحدة المقدمة مع DMLC، قم بتشغيل make test-dmlc أو bin/test-runner --suite modules/dmlc/test من المستوى الأعلى للمشروع.
متغيرات البيئة التالية مفيدة عند تطوير DMLC. إذا كنت تعمل بانتظام مع DMLC مبني محليًا، ففكر في ضبط المتغيرات DMLC_DIR وT126_JOBS وDMLC_PATHSUBST وPY_SYMLINKS في ملف .bashrc الخاص بك. أما المتغيرات المتبقية فمن الأفضل تمكينها فقط عند الحاجة.
بعد بناء DMLC، تحتاج إلى ضبط DMLC_DIR على <your-project>/<hosttype>/bin في عمليات استدعاء make اللاحقة من أجل بناء الأجهزة باستخدام المترجم المبني محليًا. <hosttype> هو إما linux64 أو win64 اعتمادًا على نوع مضيفك.
عند ضبطه، يتم تشغيل العدد المحدد من الاختبارات بالتوازي.
يقوم بناء DMLC بنسخ عدد قليل من ملفات مكتبة DML، مثل dml-builtins.dml، إلى <hosttype>/bin. عند حدوث خطأ في الترجمة، ستشير رسائل الخطأ عادةً إلى هذه النسخة بدلاً من المصدر. من خلال ضبط DMLC_PATHSUBST إلى <hosttype>/bin/dml=modules/dmlc/lib، ستتم إعادة كتابة رسائل الخطأ للإشارة إلى ملف المصدر بدلاً من ذلك. <hosttype> هو إما linux64 أو win64 اعتمادًا على نوع مضيفك.
عند ضبطه على 1، سيقوم make dmlc بإنشاء روابط رمزية لملفات Python بدلاً من نسخها. هذا له تأثيران: ستأخذك تتبعات Python إلى ملف المصدر في المستودع، ولن تحتاج إلى إعادة تشغيل make بعد تعديل ملفات Python.
عند ضبطه على 1، يتم عرض الاستثناءات غير المتوقعة في المترجم على stderr. الإعداد الافتراضي هو إخفاء التتبعات في ملف dmlc-error.log.
يتجاوز المترجم الافتراضي في اختبارات الوحدة.
عند ضبطه، يقوم DMLC بإجراء ملف تعريف ذاتي ويكتب الملف التعريفي إلى ملف .prof.
عند ضبطه، يقوم DMLC بإصدار أرشيف .tar.bz2 يحتوي على جميع ملفات مصدر DML، معبأة بشكل يمكن من ترجمتها بشكل مستقل. هذا مفيد عندما تظهر مشكلة DML ضمن بيئة بناء معقدة، وتريد إعادة إنتاج المشكلة بشكل معزول. في الأرشيف الذي تم إنشاؤه، توجد جميع ملفات DML في نفس الدليل (إما المستوى الأعلى أو تحت سلسلة من الدلائل الفرعية المسماة _)، ويتم التعامل مع الواردات النسبية من خلال تضمين روابط رمزية في الأرشيف أيضًا. على Windows، يكون DMLC أحيانًا غير قادر على حل هذه الروابط الرمزية بشكل صحيح؛ لهذا السبب، يوصى باستخراج الأرشيف وتجميعه فقط على Linux.
عند ضبطه، يقوم DMLC بإخراج ملف ينتهي بـ -size-stats.json، والذي يظهر إحصائيات توليد الكود المفيدة لتقليل حجم الكود المُنشأ وزيادة سرعة الترجمة. يسرد الملف مقدار كود C الذي يتم إنشاؤه لكل أسلوب DML. المخرجات هي قائمة من ثلاثيات [tot_size, location, num]، حيث tot_size هو إجمالي عدد بايتات كود C المُنشأة من إعلان أسلوب واحد، num هو عدد مرات إنشاء كود C من هذا الإعلان (لأنه تم توسيعه بواسطة قالب)، وlocation هو موقع المصدر للإعلان.
يمكن تقليل إدخال ذي tot_size كبير وnum كبير عن طريق إعلان الأسلوب على أنه shared؛ يجب أن يقسم هذا الحجم تقريبًا على num. الإدخال ذو tot_size كبير مع num يساوي 1 يعني عادةً أن الأسلوب يهيمن عليه بنية مثل #foreach أو #select، ويمكن تقليله عن طريق استخراج جسم الحلقة إلى أسلوب منفصل، أو عن طريق إعادة صياغة الحلقة بطريقة أخرى إلى بنية مثل foreach.
لاحظ أن الإحصائيات تشمل فقط الكود المُنشأ مباشرة من إعلانات الأساليب؛ إجمالي حجم الكود يتضمن أكثر من ذلك بكثير. عادةً ما يساهم ميغابايت واحد من حجم الكود من إعلانات الأساليب ببضع ثوانٍ من وقت الترجمة.