

빠르게 쓰기, 컴파일 및 실행하도록 설계된 고급 프로그래밍 언어.
Ucode는 게임 엔진과 같은 기존 소프트웨어에 포함되도록 설계된 프로그래밍 언어로, 현대적이고 높은 수준의 기능을 갖춘 저수준 언어입니다.
주로
게임 개발 및 게임 엔진에 완전히 집중하고 전문화됩니다.
그리고 더.
이 언어는 메모리에 대한 저수준 제어를 가능하게하고 반사를 위해 쉽게 분석 할 수있는 GameEngine에 적합한 스크립팅 언어가 없기 때문에 만들어졌습니다.
예를 들어
$Vec2:
float x;
float y;
$Weapon;
$Player:
Vec2 pos;
Weapon[] Weapons;
컴파일 후 모든 클래스, 기능 및 필드를 볼 수있는 어셈블리 데이터를 얻게됩니다. 따라서 가장 인기있는 게임 엔진과 같은 검사관에서 사용할 수 있습니다.
아래 텍스트는 64 CPU에 대해 컴파일 된 것으로 가정합니다. VM은 CPU 포인터 크기를 제외하고 CPU Agnostic입니다. 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 ++ 저수준 NESS가 필요한 경우 가비지 수집기가 모노 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
}
}Ucodelang은 디버깅 이유와 x86 코드 생성에 대한 Zycore 및 Zydis에 의존합니다.
둘 다 제거 할 계획입니다.
프로젝트를 구축하려면 파일을 다운로드하거나 실행하십시오.
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 ++ poject에 쉽게 추가하기가 쉽기 때문에 가능한 한 적은 종속성을 가지고 있습니다.
버그에는 GitHub 문제 탭을 사용하십시오. Github 토론을 사용하여 언어와 새로운 기능 및 언어 디자인에 대해 이야기하십시오. 또한 민사를 유지하십시오.
또한 사물을 구현하는 방법을 비판하는 데 부끄러워하지 마십시오. 저는 코드가 장소에서 더 나을 수 있다는 것을 알고 있습니다.
건설적인 비판은 환영합니다 (너무 가혹하지 마십시오).
간신히 문서화 한 이후 프로젝트에 대해 질문하십시오.
릴리스와 기능을위한 주요 지점은 실제 개발을 수행하는 곳입니다.
프로젝트의 최종 비전은 백엔드를 제공합니다
ucodevm (통역사, Jitinterpreter, NativeInterpreter)
C11
webassembly
Windows (기본 실행 파일),
Linux (기본 실행 파일),
MACOS (원주민 실행 파일),
x86
x86_64
팔
ARM64
Was Language는 Github의 Lostblizzard에 의해 설계되고 개발되었습니다.
누가 현재를 유지하고 있습니다
UcodegameEngine (작업 중)은 언어가 만들어진 주된 이유입니다.
Q : Ucodelang은 C ++와 매우 유사하며 Rust가 Rust 또는 C ++를 사용하지 않는 이유는 무엇입니까?
A : C ++는 언어가 너무 컴파일되어 있으며 컴파일 후 (컴파일러를 해킹하지 않고) 컴파일 한 후에 분석 할 수 없습니다. 메모리 기능은 내 사용 사례에 유용하지 않으며 C ++ 스마트 포인터가 필요한 전부입니다.
Q : C ++로 작성된 이유는 무엇입니까?
A : 대부분의 게임 엔진과 특히 내 게임 엔진은 C ++로 작성되었습니다. C ++는 여전히 게임 엔진을 만드는 데 가장 적합한 도구입니다.
Q : 백엔드에 LLVM을 사용하지 않는 이유는 무엇입니까?
A : LLVM은 종속성이 너무 크며 작성하는 것은 저의 자아가 컴퓨터 (게임 엔진을 만드는 이유)에 대해 배울 수있는 좋은 변명을줍니다. 또한 LLVM 어셈블리 텍스트를 출력합니다.
Q : 왜 중요한 공백인가?
A : 흥미로워 보였습니다.
Q : Ucodelang Killer 기능이란 무엇입니까?
A : Ucodelang은 다음으로 큰 것이 아닙니다. 특정 사용 사례를위한 도구 일뿐입니다. 내가 좋아하는 언어에서 가장 좋은 부분을 가져 와서 초과분을 제거하려고합니다. 그것은 어떤면에서 세련되고 C ++를 간소화합니다.
Q : Ucode는 무엇을 의미합니까?
A : UCODE라는 단어는 아무 의미가 없으며 역사가 없습니다. 단지 프로그래밍 언어 아이디어를 위해 제작 한 이름 일뿐입니다. 아이디어가 C/C ++ 서명되지 않은 키워드를 기반으로 서명되지 않은 코드를 의미 할 때 의미를 의미하기를 원한다면 실제로 의미를 의미합니다.
Q : C ++가 마음에 드십니까?
A : 나는 그것을 사용하여 새로운 언어를 만드는 데 1 년을 보내기에 충분히 좋아하지만 게임 엔진의 사용자가 그것을 사용하도록하기에는 충분하지 않습니다 (죄송합니다).
Q : 다음은 무엇이며 언제 언어를 수행 할 것인가.
A : 리포지토리가 열리면 (바람직하게는 JIT 프로젝트 제작 1 주년 기념일) 대부분의 기능은 수행되며 너무 좋지 않으면 더 많은 기능을 추가 할 계획이 없습니다. 나는 다른 아키텍처와 백엔드를 마무리하기 위해 추가 1 년 동안 주변에있을 것입니다. 그 시점에서 프로젝트가 끝나고 그 게임 엔진 작업을 계속하고 더 크고 더 나은 일을 할 수 있습니다. 너무 많은 기능을 추가하면 언어를 악화시킬 수 있다고 생각합니다.
Q : 새로운 프로그래밍 언어에 대한 귀하의 의견.
A : 특히 시스템 언어에 대한 메리어가 더 많을수록. 모든 언어 실험은 실수로부터 학습함으로써 더 나은 언어를 실험할수록 더 많은 언어를 실험 할 수 있습니다.