ما هو ملف NUT؟
يشير NUT إلى ملف NUT Open Container Format. ينتمي تنسيق ملف NUT هذا إلى لغة البرمجة المعروفة باسم Squirrel. إنها لغة برمجة عالية المستوى وموجهة للكائنات وتستخدم في الغالب في الأنظمة المضمنة وألعاب الفيديو.
تعتبر لغة السنجاب لغة نصية خفيفة الوزن يمكن تعديلها بسهولة وفقًا للحجم وعرض النطاق الترددي. إنه ينطوي على ميزة عد المرجع التلقائي وإدارة القمامة في الذاكرة.
يجذب بناء جملة لغة السنجاب المطورين لأنها تشبه C وتتضمن ميزة لغة البرمجة النصية. ولكن مع ذلك ، تتمتع بمزايا أقل مقارنة بغيرها من لغات البرمجة الأكثر شيوعًا لهذا الغرض.
نبذة تاريخية
تم تصميمه بواسطة Alberto Demichelis في عام 2003. ومع ذلك ، تم إصدار نسخة مستقرة من هذه اللغة في عام 2016. تم تصميمها بموجب ترخيص zlib / libpng. في عام 2010 تم تغيير الترخيص ونقله إلى معهد ماساتشوستس للتكنولوجيا. تعتبر هذه اللغة نسخة مستوحاة من LUA (لغة برمجة). توجد قائمة من الاقتراحات للغة السابقة على موقع الويب الذي صممه Alberto لجعلها أكثر فائدة.
المواصفات الفنية
ميزات ومواصفات لغة السنجاب متعددة. يوفر تسهيلات الكتابة الديناميكية ، وخاصية التفويض ، والعديد من الاستخدامات للفئات والواجهات. بناء جملة هذه اللغة له تشابه مع بناء جملة لغة C. تستخدم تطبيقات مثل Enduro / X (خادم تطبيق جماعي) هذه اللغة. نظرًا لاستخدام Squirrel في ألعاب الفيديو أيضًا ، فإن بعض هذه الألعاب عبارة عن OpenTTD و GTA IV وما إلى ذلك.
الإصدار المستقر للغة هو 3.0.7. تستخدم مجموعة أدوات تعرف باسم MirthKit لغة برمجة Squirrel لتوفير مصدر مفتوح ومتعدد المنصات للألعاب ثنائية الأبعاد. طبيعة هذه اللغة ديناميكية ومعظم الميزات مشابهة لـ Python ، LUA ، إلخ. كما أنها تتضمن تنفيذ VM القائم على التسجيل. أداء Squirrel أبطأ بالمقارنة مع LUA.
هناك أيضًا نوع ملف امتداد آخر “.nut” وهذا هو سبب وجوب إلقاء نظرة على حجم الملف لمعرفة أي ملف NUT لديك. تكون ملفات NUT الخاصة بالبرنامج النصي Squirrel أصغر من 1 ميجابايت في حين أن ملفات NUT للفيديو عادة ما تكون أكبر من 1 ميجابايت.
مثال تنسيق ملف NUT
function factorial(x)
{
if (x == 0) {
return 1;
}
else {
return x * factorial(x-1);
}
}
class BaseVector {
constructor(...)
{
if(vargv.len() >= 3) {
x = vargv[0];
y = vargv[1];
z = vargv[2];
}
}
x = 0;
y = 0;
z = 0;
}
class Vector3 extends BaseVector {
function _add(other)
{
if(other instanceof ::Vector3)
return ::Vector3(x+other.x,y+other.y,z+other.z);
else
throw "wrong parameter";
}
function Print()
{
::print(x+","+y+","+z+"\n");
}
}
local v0 = Vector3(1,2,3)
local v1 = Vector3(11,12,13)
local v2 = v0 + v1;
v2.Print();