

ภาษาการเขียนโปรแกรมระดับสูงออกแบบมาให้เขียนได้อย่างรวดเร็วเพื่อรวบรวมและทำงาน
UCode เป็นภาษาการเขียนโปรแกรมที่ออกแบบมาเพื่อฝังลงในซอฟต์แวร์ที่มีอยู่เช่นเครื่องยนต์เกมในขณะที่เป็นภาษาระดับต่ำที่มีคุณสมบัติที่ทันสมัยและระดับสูง
ส่วนใหญ่
มุ่งเน้นและมีความเชี่ยวชาญอย่างสมบูรณ์ในการพัฒนาเกมและเครื่องยนต์เกม
และอื่น ๆ
ภาษานี้ถูกสร้างขึ้นเนื่องจากการขาดภาษาสคริปต์ที่เหมาะสมสำหรับ GameEngine ที่อนุญาตให้คุณควบคุมระดับต่ำในหน่วยความจำและง่ายต่อการวิเคราะห์เพื่อการสะท้อน
ตัวอย่างเช่น
$Vec2:
float x;
float y;
$Weapon;
$Player:
Vec2 pos;
Weapon[] Weapons;
หลังจากรวบรวมเราจะได้รับข้อมูลแอสเซมบลีที่สามารถใช้เพื่อดูคลาสทั้งหมดฟังก์ชั่นและฟิลด์ ดังนั้นจึงสามารถใช้ในผู้ตรวจการของคุณเช่นเอ็นจิ้นเกมยอดนิยม
ข้อความด้านล่างถือว่าคุณรวบรวมสำหรับ 64 CPU VM คือ CPU Agnostic ยกเว้นขนาดตัวชี้ CPU มันจะต้องมีการรวบรวมสำหรับ 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#
นอกจากนี้เนื่องจากเรากำลังทำภาษาใหม่เราสามารถเรียนรู้ข้อผิดพลาดภาษาที่ผ่านมาด้วยการใช้ตัวเลือกประเภทผลลัพธ์และประเภทตัวแปร enum และลบข้อยกเว้นและอื่น ๆ
แม้จะถูกสร้างขึ้นสำหรับเครื่องยนต์เกม UCode ไม่จำเป็นต้องใช้ VM แต่ก็สามารถใช้งานได้ด้วยตัวเองและสามารถรวบรวมได้โดยตรงกับ C, WASM และไลบรารีแพลตฟอร์มพื้นเมือง
หรือโดยตรงไปยังรหัสเครื่องจักรดั้งเดิมเมื่อเสร็จสิ้น
หากกรณีการใช้งานของคุณต้องการภาษาขนาดเล็กเท่านั้นและจะไม่ใช้เวลาส่วนใหญ่ในภาษาสคริปต์ที่คุณใช้ Lua
หากคุณต้องการการพิมพ์แบบคงที่และ C ++ ระดับต่ำ แต่ก็โอเคที่จะมีตัวเก็บขยะใช้ 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");
สิ่งนี้สามารถเกิดขึ้นได้ใน 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
โครงสร้างโครงการไฟล์เป็นแบบนี้
/การพึ่งพา
/UC
/ucapp
/Ucodeapi
/Ucodelang
"แกนกลางของ Ucode-lang ถ้าคุณใช้สิ่งนี้เป็นไลบรารีเพิ่มสิ่งนี้ลงในไดเรกทอรีรวมของคุณ"
/การพึ่งพา
/ucodeanalyzer
/Ucodelang
/UCodelanguagesever
/UCodelanguageseverlib
/UCodeDocumentation
/ucodeide
/ucodewebsite
โครงการมีความหมายเกินไปมีการพึ่งพาน้อยที่สุดเท่าที่จะเป็นไปได้เพราะมันมีความหมายที่จะเพิ่มลงในบทกวี C ++ ใด ๆ
ใช้แท็บปัญหา GitHub สำหรับข้อบกพร่อง ใช้การอภิปราย GitHub เพื่อพูดคุยเกี่ยวกับภาษาและคุณสมบัติใหม่และการออกแบบภาษา ยังรักษามันให้เป็นพลเรือน
อย่าอายที่จะวิพากษ์วิจารณ์ว่าสิ่งต่าง ๆ ถูกนำไปใช้อย่างไรฉันรู้ว่ารหัสสามารถดีขึ้นในสถานที่
การวิจารณ์เชิงสร้างสรรค์ยินดีต้อนรับ (อย่ารุนแรงเกินไป)
โปรดถามคำถามเกี่ยวกับโครงการใด ๆ เพราะฉันแทบจะไม่ได้บันทึกอะไรเลย
สาขาหลักสำหรับการเผยแพร่และคุณสมบัติคือที่ที่ฉันทำการพัฒนาจริง
วิสัยทัศน์สุดท้ายของโครงการมีแบ็กเอนด์สำหรับ
UCODEVM (Interpreter, Jitinterpreter, NativeAnterpreter)
C11
การใช้เว็บ
Windows (Native Executable),
Linux (Native Conecutable),
MacOS (Native Consacutable),
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 ++ ไหม?
ตอบ: ฉันชอบมากพอที่จะใช้เวลาหนึ่งปีในการใช้ภาษาใหม่โดยใช้มัน แต่ไม่เพียงพอที่จะทำให้ผู้ใช้ของฉันสำหรับเครื่องมือเกมของฉันใช้มัน (ขออภัย Unreal) ฉันชอบ C ++ จริงๆ แต่ฉันก็ตระหนักถึงข้อบกพร่องของมัน
ถาม: จะทำอย่างไรต่อไปและเมื่อใด
ตอบ: เมื่อพื้นที่เก็บข้อมูลเปิดขึ้น (โดยเฉพาะอย่างยิ่งในวันที่ 1/2/2023 ครบรอบหนึ่งปีของการทำโครงการ JIT) คุณสมบัติส่วนใหญ่จะทำและไม่ได้วางแผนที่จะเพิ่มมากขึ้นเว้นแต่ว่ามันจะดีเกินไป ฉันจะอยู่ใกล้ ๆ ปีพิเศษเพื่อให้สถาปัตยกรรมและแบ็กเอนด์อื่น ๆ เสร็จสิ้นและ stabitly ณ จุดนั้นโครงการจะเสร็จสิ้นและฉันสามารถทำงานกับเอ็นจิ้นเกมนั้นและไปทำงานกับสิ่งที่ยิ่งใหญ่และดีกว่าฉันเชื่อว่าการเพิ่มคุณสมบัติจำนวนมากอาจทำให้ภาษาแย่ลง
ถาม: ความคิดเห็นของคุณเกี่ยวกับภาษาการเขียนโปรแกรมใหม่
ตอบ: ยิ่ง merrier มากขึ้นโดยเฉพาะอย่างยิ่งสำหรับภาษาระบบ ทุกภาษาทดลองยิ่งเราทดลองภาษาที่ดีขึ้นโดยเราเรียนรู้จากความผิดพลาดที่นั่น