

高级编程语言,旨在快速编写,编译和运行。
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项目的一周年纪念日),大多数功能都将完成,除非太好了,否则不打算添加更多功能。我将额外待一年,以完成其他架构和后端和刺伤。这一点将要完成,我可以继续使用该游戏引擎工作,并继续从事更大,更好的事情。我也相信,添加太多功能会使语言变得更糟。
问:您对新编程语言的看法。
答:特别是系统语言的越来越大。每种语言实验的越多,我们通过从那里学习的错误来实验更好的语言。