

Bahasa pemrograman tingkat tinggi yang dirancang agar cepat menulis, untuk dikompilasi dan dijalankan.
UCODE adalah bahasa pemrograman yang dirancang untuk tertanam ke dalam perangkat lunak yang ada seperti mesin game sambil menjadi bahasa tingkat rendah dengan fitur modern dan tingkat tinggi.
terutama
Benar -benar fokus dan berspesialisasi pada pengembangan game dan mesin game.
Dan lebih banyak lagi.
Bahasa ini dibuat karena kurangnya bahasa skrip yang cocok untuk GameEngine yang memungkinkan Anda untuk kontrol tingkat rendah atas memori dan mudah dianalisis untuk refleksi.
Misalnya
$Vec2:
float x;
float y;
$Weapon;
$Player:
Vec2 pos;
Weapon[] Weapons;
Setelah menyusun kami akan mendapatkan data perakitan yang dapat digunakan untuk melihat semua kelas, fungsi, dan bidang. Jadi dapat digunakan dalam inspektur Anda seperti kebanyakan mesin game yang populer.
Teks di bawah ini mengasumsikan Anda dikompilasi untuk 64 CPU VM adalah cpu agnostik kecuali untuk ukuran pointer CPU. Perlu dikompilasi untuk 64-bit atau 32-bit yang sepele untuk dilakukan.
$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
Kami ingin C# menyukai data perakitan tetapi dengan kontrol level rendah C ++ atas memori dan tanpa pengumpul sampah C#.
Juga karena kami membuat bahasa baru, kami dapat mempelajari kesalahan bahasa masa lalu dengan menggunakan opsional, jenis hasil dan jenis varian enum dan menghapus pengecualian dan banyak lagi.
Meskipun dibuat untuk mesin game UCode tidak memerlukan VM, ini dapat digunakan dengan sendirinya dan dapat dikompilasi langsung ke perpustakaan C, WASM dan Platform Asli.
atau langsung ke kode mesin asli saat itu selesai.
Jika kasus penggunaan Anda hanya membutuhkan bahasa kecil dan tidak akan menghabiskan sebagian besar waktunya dalam bahasa skrip yang Anda gunakan untuk menggunakan Lua.
Jika Anda membutuhkan pengetikan statis dan C ++ Ness tingkat rendah tetapi ok untuk memiliki kolektor sampah menggunakan mono c# atau terra.
Situs web
Tempat bermain
Dokumentasi
Ekstensi VScode
Memulai untuk pengguna
Cara Menambahkan ke Proyek C ++ Anda
Jalankan yang berikut di terminal Anda untuk menginstal di Linux/MacOS.
curl -L https://github.com/LostbBlizzard/UCodeLang/releases/latest/download/install.sh | sh
Atau unduh dan jalankan ucodelangsetup.exe pada rilis terbaru untuk 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");
Ini dapat disukai di ucodeide/src/appObject/ecsexample.hpp dan 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 memiliki ketergantungan pada Zycore dan Zydis karena alasan debugging dan pembuatan kode x86.
Keduanya direncanakan akan dihapus.
Untuk membangun proyek, cukup unduh file atau jalankan.
git clone https://github.com/LostbBlizzard/UCodeLang.git
cd ./UCodeLang
Setelah menjalankan file proyek.
InstallTools.bat
./InstallTools.sh
Langkah terakhir tidak diunggulkan jika Anda tidak perlu membangun ucodeide.
Lari berikutnya.
./VS_2019.bat
./VS_2022.bat
./GNU_Make.sh
make
./GNU_Make.sh
make
./XCode.sh
Struktur proyek file adalah Lad keluar seperti ini
/Dependensi
/Uc
/Ucapp
/UCODEAPI
/Ucodelang
"Inti UCode-Lang Jika Anda menggunakan ini sebagai perpustakaan menambahkan ini ke direktori include Anda"
/Dependensi
/UCodeAnalyzer
/Ucodelang
/Ucodelanguagesever
/Ucodelanguageseverlib
/Ucodedocumentation
/Ucodeide
/Ucodewebebsite
Proyek ini dimaksudkan juga memiliki dependensi sesedikit mungkin karena dimaksudkan untuk mudah ditambahkan ke poject C ++.
Gunakan tab masalah GitHub untuk bug. Gunakan diskusi GitHub untuk berbicara tentang bahasa dan fitur baru serta desain bahasa. Juga jaga agar tetap sipil.
Juga jangan malu untuk mengkritik bagaimana hal -hal yang diterapkan, saya tahu kodenya bisa lebih baik di tempat -tempat.
Kritik konstruktif diterima (jangan terlalu keras).
Silakan ajukan pertanyaan tentang proyek apa pun karena saya hampir tidak mendokumentasikan apa pun.
Cabang utama untuk rilis dan fitur adalah tempat saya melakukan pengembangan yang sebenarnya.
Visi terakhir dari proyek ini memiliki cadangan
UCODEVM (juru bahasa, jitinterpreter, native interpreter)
C11
WebAssembly
Windows (yang dapat dieksekusi asli),
Linux (yang dapat dieksekusi asli),
MacOS (yang dapat dieksekusi),
X86
X86_64
Lengan
ARM64
Bahasa Was dirancang dan dikembangkan oleh Lostblizzard di GitHub.
Yang saat ini mempertahankan
Ucodegameengine (sedang dikerjakan) alasan utama bahasa dibuat.
T: Ucodelang sangat mirip dengan C ++ dan Rust Mengapa tidak menggunakan Rust atau C ++?
A: C ++ terlalu dikompilasi dari suatu bahasa dan tidak dapat dianalisis setelah dikompilasi (tanpa meretas kompiler). Fitur memori Not tidak berguna untuk kasus penggunaan saya dan C ++ Smart Pointer's adalah semua yang saya butuhkan.
T: Mengapa ditulis dalam C ++.
A: Sebagian besar mesin game dan khususnya mesin game saya ditulis dalam C ++. C ++ masih merupakan alat terbaik untuk membuat mesin game.
T: Mengapa tidak menggunakan LLVM untuk backend Anda.
A: LLVM terlalu besar ketergantungan dan menulis backends sendiri memberi saya alasan yang bagus untuk belajar tentang komputer (alasan saya membuat mesin permainan). Anda juga hanya mengeluarkan teks perakitan LLVM.
T: Mengapa ruang putih yang signifikan?
A: Tampak menarik juga hanya terlihat lebih bagus.
T: Apa itu fitur pembunuh ucodelang.
A: Ucodelang bukanlah hal besar berikutnya itu hanya alat yang dibuat untuk kasus penggunaan spesifik saya. Ini mengambil bagian terbaik dari bahasa yang saya sukai dan mencoba untuk menghilangkan kelebihan. Ini adalah C ++ yang disempurnakan dan merampingkan dalam beberapa hal.
T: Apa arti UCode?
A: Kata UCode tidak berarti apa -apa dan tidak memiliki riwayat itu hanya nama yang saya buat untuk ide bahasa pemrograman. Jika Anda benar -benar menginginkan makna yang berarti ketika ide itu dibuat untuk kode tanpa tanda berdasarkan kata kunci C/C ++ yang tidak ditandatangani.
T: Apakah Anda suka C ++?
A: Saya cukup menyukainya untuk menghabiskan satu tahun membuat bahasa baru menggunakannya tetapi tidak cukup untuk membuat pengguna saya untuk mesin game saya menggunakannya (maaf tidak nyata). Meskipun saya benar -benar menyukai C ++ tetapi juga saya sadar akan kekurangannya.
T: Apa selanjutnya dan kapan bahasa akan dilakukan.
A: Ketika repositori dibuka (lebih disukai pada 1/2/2023 peringatan satu tahun membuat proyek JIT) sebagian besar fitur akan dilakukan dan tidak benar -benar berencana untuk menambahkan lebih banyak kecuali terlalu bagus. Saya akan ada selama satu tahun ekstra untuk menyelesaikan arsitektur lain dan backends dan stabitly. Pada titik itu proyek akan selesai dan saya dapat terus mengerjakan mesin permainan itu dan bekerja pada hal -hal yang lebih besar dan lebih baik. Juga saya percaya menambahkan terlalu banyak fitur yang dapat membuat bahasa menjadi lebih buruk.
T: Apa pendapat Anda tentang bahasa pemrograman baru.
A: Semakin banyak lebih meriah untuk bahasa sistem. Setiap bahasa bereksperimen semakin banyak kita bereksperimen dengan bahasa yang lebih baik dengan kita belajar dari kesalahan.