

لغة برمجة عالية المستوى تهدف إلى أن تكون سريعة للكتابة والتجميع والتشغيل.
UCode هي لغة برمجة مصممة لتضمينها في البرامج الحالية مثل محركات الألعاب مع كونها لغة منخفضة المستوى مع ميزات حديثة وعالية المستوى.
خاصة
تركز تماما وتخصص على تطوير اللعبة ومحركات الألعاب.
وأكثر.
تم صنع هذه اللغة لأن الافتقار إلى لغات البرمجة النصية المناسبة لـ GameEngine التي سمحت لك بالتحكم في المستوى المنخفض على الذاكرة وسهلة التحليل للتفكير.
على سبيل المثال
$Vec2:
float x;
float y;
$Weapon;
$Player:
Vec2 pos;
Weapon[] Weapons;
بعد التجميع ، سنحصل على بيانات التجميع التي يمكن استخدامها لرؤية جميع الفصول والفوانيات والحقول. بحيث يمكن استخدامه في المفتش مثل أكثر محركات اللعبة شعبية.
يفترض النص أدناه أنك قمت بتجميعها في وحدة المعالجة المركزية 64 و VM هي لدراسة وحدة المعالجة المركزية باستثناء أحجام مؤشرات وحدة المعالجة المركزية. يجب تجميعها ل 64 بت أو 32 بت وهو تافهة للقيام به.
$Vec2: //class size 8
float x;//field offset 0
float y;//field offset 4
$Weapon;//size 0
$Player: //class size 32
Vec2 pos;//field offset 0
Vector<Weapon> Weapons;//field offset [8-12 depending if the compiler added padding]
$Vector<Weapon>: //class size 24
Weapon[&] _Data; //field offset 0
uintptr _Size; //field offset 8
uintptr _Capacity; //field offset 16
نريد C# مثل بيانات التجميع ولكن مع التحكم في المستوى المنخفض C ++ على الذاكرة وبدون C# جمعية القمامة.
أيضًا نظرًا لأننا نصنع لغة جديدة ، يمكننا تعلم أخطاء اللغات السابقة باستخدام استخدام أنواع الاختيارية وأنواع المتغيرات والتعداد وإزالة الاستثناءات والمزيد.
على الرغم من كونها مصنوعة لمحركات اللعبة UCode لا تحتاج إلى VM يمكن استخدامها بمفرده ويمكن تجميعها مباشرة إلى C و WASM ومكتبات المنصات الأصلية.
أو مباشرة إلى رمز الجهاز الأصلي عندما يتم ذلك.
إذا كانت حالة الاستخدام الخاصة بك تحتاج فقط إلى لغة صغيرة ولن تقضي معظم وقتها في لغة البرمجة النصية التي تستخدمها لوا.
إذا كنت بحاجة إلى كتابة ثابتة و C ++ NESS منخفضة المستوى ولكن موافق للحصول على جامع القمامة يستخدم Mono C# أو Terra.
موقع إلكتروني
ملعب
الوثائق
تمديد VSCODE
البدء للمستخدمين
كيفية إضافة إلى مشروع C ++ الخاص بك
قم بتشغيل ما يلي في المحطة الخاصة بك للتثبيت على Linux/MacOS.
curl -L https://github.com/LostbBlizzard/UCodeLang/releases/latest/download/install.sh | sh
أو قم بتنزيل وتشغيل ucodelangsetup.exe على أحدث إصدار لنظام التشغيل Windows.
use ULang;//include standard Library.
|main[] -> int:
int a = 10;
int b = 20;
var c = a + b;
int[] List;
List.Push(c);
int&? LastItem = List.Back();
match LastItem:
Option(out myvalue):
if myvalue == 30:
Fmt::Print("myvalue does equal 30");
Null: panic("List size was 0");
يمكن أن يكون هذا freound في Ucodeide/src/appobject/ecsexample.hpp و ucodeide/src/appobject/test.uc.
use API;//Imgui,Vec2,Time
use ECS;//Component,Entity
$Player[Component]:
float Speed = 1;
|Start[this&]:
entity().position2d() = [2,5];
|Update[this&] -> void:
var& pos = entity().position2d();//get rereference to entity position.
float deltatime = Time::DeltaTime();
if Imgui::KeyDown(ImKey::W):
pos.Y += Speed * deltatime;
if Imgui::KeyDown(ImKey::S):
pos.Y -= Speed * deltatime;
if Imgui::KeyDown(ImKey::A):
pos.X -= Speed * deltatime;
if Imgui::KeyDown(ImKey::D):
pos.X += Speed * deltatime;
# include < UCodeLang/UCodeLang.hpp >
int main ()
{
const char * MyUCode = " |main[] => 1; " ;
UCodeLang::Compiler myCompiler;
auto comilerRet = myCompiler. CompileText (MyUCode);
if (!comilerRet. IsError ())
{
// your ucode was Compiled
UCodeLang::RunTimeLangState State;
UCodeLang::RunTimeLib Lib;
Lib. Init (comilerRet. GetValue (). OutPut . value ()); // initialize RunTimeLib using our Compiled code.
State. AddLib (&Lib); // Add RunTimeLib
State. LinkLibs (); // Link libraries
UCodeLang::Interpreter interpreter;
interpreter. Init (&State);
interpreter. Call (StaticVariablesInitializeFunc); // initialize our Static Variables.
interpreter. Call (ThreadVariablesInitializeFunc); // initialize thread local/Interpreter local Variables.
int Value = interpreter. RCall < int >( " main " ); // Call main
std::cout << " Got Value " << Value;
interpreter. Call (ThreadVariablesUnLoadFunc); // Call Thread local Variables destructors.
interpreter. Call (StaticVariablesUnLoadFunc); // Call Static Variables destructors.
}
else
{
// your code some how failed to compile
}
}يبعث Ucodelang على Zycore و Zydis لأسباب تصحيح الأخطاء وتوليد رمز X86.
كلاهما مخطط لإزالته.
لبناء المشروع فقط تنزيل الملفات أو التشغيل.
git clone https://github.com/LostbBlizzard/UCodeLang.git
cd ./UCodeLang
بعد الحصول على ملفات المشروع تشغيل.
InstallTools.bat
./InstallTools.sh
يتم إلغاء الخطوة الأخيرة إذا لم تكن بحاجة إلى بناء Ucodeide.
الجولة التالية.
./VS_2019.bat
./VS_2022.bat
./GNU_Make.sh
make
./GNU_Make.sh
make
./XCode.sh
بنية مشروع الملفات هي LAD مثل هذا
/التبعيات
/UC
/UCAPP
/ucodeapi
/Ucodelang
"جوهر Ucode-Lang إذا كنت تستخدم هذا كمكتبة أضف هذا إلى دليل تضمينك"
/التبعيات
/Ucodeanalyzer
/Ucodelang
/UcodelanguageSever
/UcodelanguageSeverLib
/UCODEDOCINECTION
/ucodeide
/Ucodewebsite
من المفترض أن يكون للمشروع أيضًا أقل عدد ممكن من التبعيات لأنه من المفترض أن يكون من السهل إضافته إلى أي أوهام C ++.
استخدم علامة التبويب GitHub Issue للأخطاء. استخدم مناقشات GitHub للحديث عن اللغة والميزات الجديدة وتصميم اللغة. احتفظ بها أيضًا مدنيًا.
لا تخجل أيضًا من انتقاد كيفية تنفيذ الأشياء ، وأنا أعلم أن الكود يمكن أن يكون أفضل في أماكن الأشياء.
النقد البناء موضع ترحيب (لا تكون قاسيًا جدًا).
يرجى طرح أسئلة حول أي شيء مشروع لأنني بالكاد وثقت أي شيء.
الفرع الرئيسي للإصدارات والميزة هو المكان الذي أقوم فيه بتطوير فعلي.
الرؤية النهائية للمشروع
Ucodevm (مترجم ، JitInterpreter ، NativeInterpreter)
C11
webassembly
Windows (القابل للتنفيذ الأصلي) ،
Linux (القابل للتنفيذ الأصلي) ،
ماكوس (مواطن تنفيذي) ،
x86
x86_64
ذراع
ARM64
تم تصميم اللغة وتطويرها بواسطة LostBlizzard على Github.
الذين يحافظون حاليا على
ucodegameengine (يجري العمل عليها) والسبب الرئيسي الذي تم صنعه اللغة.
س: Ucodelang يشبه إلى حد كبير C ++ و Rust لماذا لا تستخدم Rust أو C ++؟
ج: تم تجميع C ++ للغاية من لغة ولا يمكن تحليلها بعد التجميع (دون اختراق المترجم). إن ميزات الذاكرة ليست مفيدة لحالات الاستخدام الخاصة بي ، كما أن المؤشر الذكي C ++ هو كل ما أحتاجه.
س: لماذا مكتوبة في C ++.
ج: معظم محركات الألعاب وخاصة محرك اللعبة مكتوب في C ++. لا يزال C ++ أفضل أداة لصنع محركات الألعاب.
س: لماذا لا تستخدم LLVM لظهرك الخلفي.
ج: LLVM كبير جدًا من التبعية وكتابة الخلفية ، يعطيني نفسي عذرًا جيدًا للتعرف على أجهزة الكمبيوتر (السبب في أنني صنع محرك لعبة). كما يمكنك فقط إخراج نص التجميع LLVM.
س: لماذا مساحة بيضاء كبيرة؟
ج: بدا الأمر مثيرًا للاهتمام أيضًا يبدو فقط أجمل.
س: ما هي ميزة قاتل Ucodelang.
ج: UCodelang ليس الشيء الكبير التالي ، إنه مجرد أداة تم إجراؤها لحالة الاستخدام الخاصة بي. إنها تأخذ أفضل الأجزاء من اللغات التي أحبها ومحاولات إزالة الفائض. إنه C ++ المكرر وتبسيطه في بعض النواحي.
س: ماذا يعني Ucode؟
ج: كلمة Ucode لا تعني شيئًا وليس لها تاريخ ، إنها مجرد اسم قمت بتكوينه لفكرة لغة البرمجة. إذا كنت تريد حقًا معنى لها معنى عندما تم جعل الفكرة قائمة على رمز غير موقّع استنادًا إلى الكلمة الرئيسية غير الموقعة C/C ++.
س: هل تحب C ++؟
ج: يعجبني ذلك بما يكفي لقضاء عام في صنع لغة جديدة باستخدامها ولكن ليس بما يكفي لجعل المستخدمين لمحرك اللعبة يستخدمونه (آسف غير واقعي). على الرغم من أنني أحب C ++ حقًا ولكنني أيضًا على دراية بعيوبه.
س: ماذا بعد ومتى سيتم تنفيذ اللغة.
ج: عندما يفتح المستودع (يفضل أن يكون ذلك في 1/2/2023 في الذكرى السنوية الأولى لصنع مشروع JIT) سيتم تنفيذ معظم الميزات ولا تخطط حقًا لإضافة المزيد إلا إذا كانت جيدة جدًا. سأكون موجودًا لمدة عام إضافي لإنهاء البنى الأخرى والخلفية ، وبطارية. في هذه النقطة ، سيتم تنفيذ المشروع ويمكنني الاستمرار في العمل على محرك اللعبة هذا والذهاب إلى العمل على أشياء أفضل وأفضل.
س: ما رأيك في لغات البرمجة الجديدة.
ج: كلما زاد عدد اللغات اللغوية للأنظمة. كل لغة تجرب أكثر كلما نجرب اللغات الأفضل من خلال نتعلمها من هناك أخطاء.