

Язык программирования высокого уровня, предназначенный для быстрого питания, компиляции и запуска.
UCode-это язык программирования, предназначенный для того, чтобы быть встроенным в существующее программное обеспечение, такое как игровые двигатели, в то же время является низкоуровневым языком с современными и высокими функциями.
в основном
Полностью сосредоточен и специализируется на разработке игр и игровых двигателях.
И еще.
Этот язык был сделан из-за отсутствия подходящих языков сценариев для GameEngine, что позволило вам контролировать память низкого уровня и легко анализировать для отражения.
например
$Vec2:
float x;
float y;
$Weapon;
$Player:
Vec2 pos;
Weapon[] Weapons;
После компиляции мы получим данные об сборе, которые можно использовать для просмотра всех классов, функций и полей. Таким образом, его можно использовать в вашем инспекторе, как большинство популярных игровых двигателей.
Приведенный ниже текст предположим, что вы составлены для 64 -й процессора, виртуальная машина является агностикой ЦП, за исключением размеров указателей ЦП. Он должен быть скомпилирован для 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# Collector.
Кроме того, поскольку мы делаем новый язык, мы можем изучить прошлые ошибки языков с использованием дополнительных типов результатов и типов вариантов перечисления и удаления исключений и многого другого.
Несмотря на то, что он создан для игровых двигателей, Ucode не нуждается в виртуальной машине, он может использоваться сам по себе и может быть скомпилирован непосредственно в C, WASM и нативные библиотеки платформы.
Или непосредственно к нативному машинному коду, когда это будет сделано.
Если ваш вариант использования нуждается в небольшом языке, и он не будет тратить большую часть своего времени на языке сценариев, вы используете LUA.
Если вам нужна статическая набор и низкоуровневый NESS C ++, но в порядке, чтобы сборщик мусора используйте моно C# или Terra.
Веб -сайт
Детская площадка
Документация
Расширение VSCODE
Начало начала для пользователей
Как добавить в свой проект C ++
Запустите следующее в вашем терминале для установки на Linux/MacOS.
curl -L https://github.com/LostbBlizzard/UCodeLang/releases/latest/download/install.sh | sh
Или загрузите и запустите Ucodelangsetup.exe на последнем выпуске для 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");
Это может быть FUOUND в 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 имеет зависимость от Zycore и Zydis по отладки причинам и генерации кода X86.
Оба планируются быть удаленными.
Чтобы создать проект, просто загрузите файлы или запустите.
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 ++.
Используйте вкладку GitHub «Проблема» для ошибок. Используйте дискуссии GitHub, чтобы поговорить о языке и новых функциях и дизайне языка. Также сохраняйте это гражданским.
Также не стесняйтесь критиковать, как обстоят дела, я знаю, что код может быть лучше в местах.
Конструктивная критика приветствуется (не будь слишком резким).
Пожалуйста, задавайте вопросы о чем угодно, так как я почти ничего не задокументировал.
Основная ветвь для выпусков и функция - это то, где я делаю реальную разработку.
Окончательное видение проекта имеет бэкэнды для
Ucodevm (интерпретатор, Jitinterpreter, NativeInterpreter)
C11
Webassembly
Windows (собственный исполняемый файл),
Linux (собственный исполняемый файл),
MacOS (собственный исполняемый файл),
X86
X86_64
Рука
ARM64
Язык был спроектирован и разработан Lostblizzard на GitHub.
Кто в настоящее время поддерживает
UcodegameEngine (работающий над) основная причина, по которой язык был сделан.
Q: Ucodelang очень похож на C ++ и ржавчину, почему бы не использовать Rust или C ++?
A: C ++ слишком компилирован из языка и ненанализируется после компиляции (без взлома компилятора). Функции памяти, не так уж и полезны для моих вариантов использования, а Smart Pointer C ++ - это все, что мне нужно.
В: Почему это написано в C ++.
О: Большинство игровых двигателей и, в частности, мой игровой двигатель написан в C ++. C ++ по -прежнему является лучшим инструментом для изготовления игровых двигателей.
В: Почему бы не использовать LLVM для вашего бэкэнда.
О: LLVM слишком велика зависимости, и написание бэксингах, которое я дает мне хорошее оправдание, чтобы узнать о компьютерах (причина, по которой я делаю игровой двигатель). Также вы просто выводите текст сборки LLVM.
В: Почему значительное белое пространство?
A: Просто казалось интересным и просто выглядит лучше.
Q: Что такое Ucodelang Killer.
A: Ucodelang - это не следующая большая вещь, это просто инструмент, созданный для моего конкретного варианта использования. Он берет лучшие части от языков, которые мне нравятся, и пытаются удалить избыток. Это изысканный и оптимизированный C ++ в некоторых отношениях.
В: Что означает Ucode?
A: Слово Ucode ничего не означает, и не имеет истории, это просто имя, которое я задумал идею языка программирования. Если вы действительно хотите, чтобы это значение было значением, когда идея была сделана для безписанного кода на основе ключевого слова C/C ++.
В: Вам нравится C ++?
Ответ: Мне это нравится достаточно, чтобы потратить год на создание нового языка, используя его, но недостаточно, чтобы заставить моих пользователей для моего игрового двигателя использовать его (извините, нереально). ЧТО Я действительно люблю C ++, но также я знаю его недостатки.
Q: Что дальше и когда будет сделан язык.
A: Когда репозиторий открывается (предпочтительно 2/2/2023, годовщину создания проекта JIT) большинство функций будут сделаны и не планируют добавлять больше, если это не слишком хорошо. Я буду рядом с дополнительным год, чтобы закончить другие архитектуры, бэкэнды и стабильно. На этом пункте проект будет выполнен, и я могу продолжать работать над этим игровым двигателем и работать над более широкими и лучшими вещами. Я также считаю, что добавление слишком многих функций может усугубить язык.
В: Какое ваше мнение о новых языках программирования.
A: Чем больше, тем лучше, особенно для системных языков. Каждый язык экспериментирует, чем больше мы экспериментируем с лучшими языками, когда мы учимся из -за ошибок.