

書き込み、コンパイル、実行に迅速に設計された高レベルのプログラミング言語。
UCodeは、ゲームエンジンなどの既存のソフトウェアに埋め込まれ、最新の高レベルの機能を備えた低レベルの言語であるように設計されたプログラミング言語です。
主に
ゲーム開発とゲームエンジンに完全に焦点を当て、特化しています。
もっと。
この言語は、メモリを低レベルで制御できるようにし、反射を簡単に分析できるゲームエンジンに適したスクリプト言語がないために作成されました。
例えば
$Vec2:
float x;
float y;
$Weapon;
$Player:
Vec2 pos;
Weapon[] Weapons;
コンパイル後、すべてのクラス、機能、フィールドを確認するために使用できるアセンブリデータが取得されます。そのため、最も人気のあるゲームエンジンのように、検査官に使用できます。
以下のテキストは、64 CPUのためにコンパイルされたと仮定します。VMはCPUポインターサイズを除き、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#Garbage Collectorを使用しています。
また、新しい言語を作成しているので、オプションの結果タイプ、列挙型の種類を使用し、例外を削除することで、過去の言語の間違いを学ぶことができます。
ゲームエンジン用に作られているにもかかわらず、UCodeはVMを必要とせず、単独で使用でき、C、WASM、ネイティブプラットフォームライブラリに直接コンパイルできます。
または、それが完了したら、ネイティブマシンコードに直接。
ユースケースには小さな言語のみが必要であり、そのほとんどの時間をスクリプト言語で費やしていない場合は、luaを使用します。
静的タイピングとC ++低レベルのネスが必要な場合は、ゴミコレクターにモノC#またはテラを使用しても構いません。
Webサイト
遊び場
ドキュメント
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コード生成のために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 ++ Pojectsに簡単に追加できることを意図しているため、できるだけ少ない依存関係を持つことも意味します。
バグにはGitHub Issueタブを使用します。 GitHubの議論を使用して、言語と新機能、言語デザインについて説明します。また、それを市民に保ちます。
また、物事がどのように実装されているかを批判するために恥ずかしがらないでください。
建設的な批判は歓迎されます(あまりにも厳しいことではありません)。
私はほとんど何も文書化しなかったので、プロジェクトについて質問してください。
リリースと機能のメインブランチは、実際の開発を行う場所です。
プロジェクトの最終的なビジョンには、バックエンドがあります
ucodevm(通訳、jitinterpreter、nativeinterpreter)
C11
WebAssembly
Windows(ネイティブ実行可能ファイル)、
Linux(ネイティブ実行可能ファイル)、
MacOS(ネイティブ実行可能ファイル)、
x86
x86_64
アーム
ARM64
WAS言語は、GitHubのLostblizzardによって設計および開発されました。
現在、誰が維持していますか
ucodeGameEngine(作業中)言語が作成された主な理由。
Q:ucodelangはc ++に非常に似ており、錆びしているのはなぜですか?
A:C ++は言語を編集しすぎており、コンパイル後(コンパイラをハッキングせずに)分析できません。RUSTメモリ機能は私のユースケースにはそれほど役に立ちません。C++スマートポインターは必要です。
Q:なぜC ++で書かれているのか。
A:ほとんどのゲームエンジン、特に私のゲームエンジンはC ++で記述されています。C++は、ゲームエンジンを作成するための最良のツールです。
Q:バックエンドにLLVMを使用してみませんか。
A:LLVMは依存関係が大きすぎます。また、LLVMアセンブリテキストを出力するだけです。
Q:なぜ重要な空白?
A:面白いように見えました。
Q:ucodelangキラー機能は何ですか。
A:ucodelangは次の大きなものではありません。特定のユースケースのために作られたツールです。私が好きな言語から最高の部分を取り、過剰を削除しようとします。その洗練されたものであり、いくつかの点でC ++を合理化します。
Q:UCodeとはどういう意味ですか?
A:ucodeという言葉は何も意味しません。歴史はありません。それは、プログラミング言語のアイデアのために作った名前だけです。アイデアがC/C ++ unsignedキーワードに基づいて符号なしコードの意味を意味する場合、それを意味する場合。
Q:C ++は好きですか?
A:私はそれを使用して新しい言語を作るのに1年を費やすのが好きですが、ゲームエンジンのユーザーがそれを使用するのに十分ではありません(申し訳ありませんが非現実的です)。
Q:次はいつ言語になりますか。
A:リポジトリがオープンすると(できれば2023年1月2日にJITプロジェクトを作成してから1年の記念日)、ほとんどの機能が行われ、あまりにも良すぎない限り追加する予定はありません。他のアーキテクチャとバックエンドを完成させ、安定させて、プロジェクトが完了し、そのゲームエンジンで作業し続け、より大きなものに取り組むことができます。
Q:新しいプログラミング言語に関するあなたの意見。
A:特にシステム言語の陽気なほど。すべての言語が実験するほど、私たちはそこの間違いから学ぶことによってより良い言語を実験します。