

高級編程語言,旨在快速編寫,編譯和運行。
UCODE是一種編程語言,旨在將其嵌入現有軟件(例如游戲引擎)中,同時是具有現代和高級功能的低級語言。
主要是
完全專注於遊戲開發和遊戲引擎。
還有更多。
之所以製作這種語言,是因為缺少適合GameEngine的腳本語言,該語言使您可以低水平控制記憶,並且易於分析反射。
例如
$Vec2:
float x;
float y;
$Weapon;
$Player:
Vec2 pos;
Weapon[] Weapons;
編譯後,我們將獲取可以用來查看所有類,功能和字段的組裝數據。因此,它可以像大多數流行的遊戲引擎一樣在您的檢查員中使用。
下面的文本假設您為64 CPU編譯了VM,除了CPU指針尺寸外,VM為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#垃圾收集器。
另外,由於我們正在製作一種新語言,因此可以使用可選的,結果類型和枚舉變體類型以及刪除異常等等來學習過去的語言錯誤。
儘管用於遊戲引擎UCODE並不需要VM,它可以由其自身使用,並且可以直接編譯為C,WASM和本地平台庫。
完成後直接到本機機器代碼。
如果您的用例只需要一種小語言,並且不會花費大部分時間在腳本語言上使用LUA。
如果您需要靜態打字和C ++低級NES,但可以讓垃圾收集器使用Mono C#或Terra。
網站
操場
文件
VSCODE擴展
開始為用戶開始
如何添加到您的C ++項目
在終端中運行以下內容,以在Linux/MacOS上安裝。
curl -L https://github.com/LostbBlizzard/UCodeLang/releases/latest/download/install.sh | sh
或在Windows的最新版本中下載並運行UCodelangsetup.exe。
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
}
}由於調試原因和X86代碼生成,UCODELANG對Zycore和Zydis具有依賴性。
兩者都計劃被刪除。
要構建項目,只需下載文件或運行即可。
git clone https://github.com/LostbBlizzard/UCodeLang.git
cd ./UCodeLang
在運行項目文件後。
InstallTools.bat
./InstallTools.sh
如果您不需要構建usodeide,則最後一步是不受歡迎的。
下一個運行。
./VS_2019.bat
./VS_2022.bat
./GNU_Make.sh
make
./GNU_Make.sh
make
./XCode.sh
文件項目結構是這樣的
/依賴項
/uc
/UCAPP
/ucodeapi
/ucodelang
“如果您將其用作庫,則UCODE-LANG的核心將其添加到您的Include Directory”
/依賴項
/UCODEAN分析儀
/ucodelang
/ucodelanguagesever
/ucodelanguageseverlib
/ucodedocumition
/ucodeide
/ucodewebsite
該項目也意味著盡可能少的依賴項,因為它可以易於添加到任何C ++督中。
使用GitHub問題選項卡進行錯誤。使用GitHub討論來討論語言,新功能和語言設計。還要保持民事。
同樣,不要害羞地批評如何實施事物,我知道代碼在某些地方可以更好。
歡迎建設性批評(不要太苛刻)。
請詢問有關任何項目的問題,因為我幾乎沒有記錄任何內容。
發行的主要分支和該功能是我進行實際開發的地方。
該項目的最終願景有
UCODEVM(解釋器,JitinterPreter,native Interpreter)
C11
WebAssembly
Windows(本機可執行),
Linux(本機可執行),
macOS(本機可執行),
x86
x86_64
手臂
ARM64
該語言是由Github上的Lostblizzard設計和開發的。
目前維持的
UcodeGameEngine(正在處理)該語言的主要原因。
問:UCodelang與C ++非常相似,Rust為什麼不使用Rust或C ++?
答:C ++太多的語言編譯,並且在編譯後是無效的(無需黑客編譯器)。 RUST內存功能對我的用例並不有用,而C ++智能指針是我所需要的。
問:為什麼用C ++編寫。
答:大多數遊戲引擎,尤其是我的遊戲引擎是用C ++編寫的。 C++仍然是製造遊戲引擎的最佳工具。
問:為什麼不將LLVM用於後端。
答:LLVM的依賴性太大,寫作後端我的自我給我一個很好的藉口來了解計算機(即即時此刻生產遊戲引擎的原因)。另外,您只需輸出LLVM組裝文本即可。
問:為什麼要大量的空白?
答:看起來很有趣,也看起來更好。
問:什麼是Ucodelang殺手級功能。
答:ucodelang並不是下一個大事,它只是為我的特定用例製作的工具。它從我喜歡的語言中獲取最佳零件,並嘗試去除多餘的零件。它在某些方面是一種精緻而簡化的C ++。
問:UCODE是什麼意思?
答:ucode一詞沒有任何意義,沒有歷史記錄,只是我為編程語言創意所構成的名稱。如果您確實想要一個含義的含義,那麼當這個想法被認為是基於C/C ++無簽名的關鍵字的無符號代碼時的意思。
問:您喜歡C ++嗎?
答:我很喜歡它使用它花一年的時間使用它,但不足以使我的用戶使用遊戲引擎(對不起,Unreal)。儘管我真的很喜歡C ++,但我也知道它的缺陷。
問:下一步是什麼,什麼時候可以完成語言。
答:當存儲庫打開時(最好在1/2/2023在製作JIT項目的一周年紀念日),大多數功能都將完成,除非太好了,否則不打算添加更多功能。我將額外待一年,以完成其他架構和後端和刺傷。這一點將要完成,我可以繼續使用該遊戲引擎工作,並繼續從事更大,更好的事情。我也相信,添加太多功能會使語言變得更糟。
問:您對新編程語言的看法。
答:特別是系統語言的越來越大。每種語言實驗的越多,我們通過從那裡學習的錯誤來實驗更好的語言。