

Un lenguaje de programación de alto nivel diseñado para ser rápido para escribir, compilar y ejecutar.
UCode es un lenguaje de programación diseñado para integrarse en el software existente, como los motores de juego, al tiempo que es un lenguaje de bajo nivel con características modernas y de alto nivel.
principalmente
Completamente enfocado y especializado en el desarrollo de juegos y los motores de juego.
Y más.
Este idioma se hizo porque la falta de lenguajes de secuencias de comandos adecuados para un GameEngine's que te permitió un control de bajo nivel sobre la memoria y es fácil de analizar para la reflexión.
Por ejemplo
$Vec2:
float x;
float y;
$Weapon;
$Player:
Vec2 pos;
Weapon[] Weapons;
Después de compilar, obtendremos datos de ensamblaje que se pueden usar para ver todas las clases, funciones y campos. Por lo tanto, se puede usar en su inspector como los motores de juego más populares.
El texto a continuación supone que compiló para una CPU 64 La VM es CPU Agnóstico, excepto para el tamaño del puntero de la CPU. Debe ser compilado para un trivial de 64 bits o 32 bits, lo cual es trivial de hacer.
$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
Queremos que los datos de ensamblaje de C# pero con control de bajo nivel C ++ sobre la memoria y sin recolector de basura de C#.
Además, dado que estamos haciendo un nuevo idioma, podemos aprender errores de idiomas pasados con el uso de tipos de resultados opcionales y de resultados y tipos de variantes enum y eliminar excepciones y más.
A pesar de estar hecho para los motores de juego, UCode no necesita una VM, puede ser utilizada por sí misma y puede compilarse directamente a las bibliotecas de C, WASM y Native Platform.
o directamente al código de la máquina nativa cuando se haga.
Si su caso de uso solo necesita un lenguaje pequeño y no pasará la mayor parte de su tiempo en el lenguaje de secuencias de comandos que usa Lua.
Si necesita mecanografía estática y C ++ de bajo nivel, pero está bien para que un recolector de basura use Mono C# o Terra.
Sitio web
Patio de juegos
Documentación
Extensión VSCODE
Comenzar para los usuarios
Cómo agregar a su proyecto C ++
Ejecute lo siguiente en su terminal para instalar en Linux/MacOS.
curl -L https://github.com/LostbBlizzard/UCodeLang/releases/latest/download/install.sh | sh
O descargue y ejecute UCodelangSetup.exe en la última versión para 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");
Esto se puede usar en UCodeide/Src/AppObject/Ecsexample.hpp y 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 tiene una dependencia de Zycore y Zydis por razones de depuración y generación de código X86.
Ambos están planeados para ser eliminados.
Para construir el proyecto, simplemente descargue archivos o ejecute.
git clone https://github.com/LostbBlizzard/UCodeLang.git
cd ./UCodeLang
Después de ejecutar los archivos del proyecto.
InstallTools.bat
./InstallTools.sh
El último paso no tiene educación si no necesita construir UCodeide.
Siguiente carrera.
./VS_2019.bat
./VS_2022.bat
./GNU_Make.sh
make
./GNU_Make.sh
make
./XCode.sh
La estructura del proyecto del archivo es muchacho de esta
/Dependencias
/UC
/UCAPP
/UCODEAPI
/Ucodelang
"El núcleo de UCode-Lang si está utilizando esto como una biblioteca, agregue esto a su directorio de incluido"
/Dependencias
/Ucodeanalyzer
/Ucodelang
/Ucodelanguagesever
/Ucodelanguageseverlib
/UCODEDOCUMENTACIÓN
/UCODEIDE
/Ucodewebsite
El proyecto también tiene la menor cantidad de dependencias posible porque está destinado a ser fácil de agregar a cualquier poject de C ++.
Use la pestaña Problema de GitHub para errores. Use las discusiones de GitHub para hablar sobre el lenguaje y las nuevas características y el diseño del idioma. También manténgalo civil.
Tampoco sea tímido para criticar cómo se implementan las cosas. Sé que el código puede ser mejor en los lugares.
La crítica constructiva es bienvenida (no seas demasiado dura).
Haga preguntas sobre cualquier proyecto ya que apenas documenté nada.
La rama principal para los lanzamientos y la característica es donde hago el desarrollo real.
La visión final del proyecto tiene backends para
UCODEVM (intérprete, jitinterpreter, nationInterpreter)
C11
Aviso web
Windows (ejecutable nativo),
Linux (ejecutable nativo),
MacOS (ejecutable nativo),
X86
X86_64
Brazo
Brazo
El lenguaje WAS fue diseñado y desarrollado por Lostblizzard en Github.
Quien actualmente mantiene el
El UCodeGameEngine (que se trabaja) en la razón principal por la que se hizo el lenguaje.
P: UCodelang es muy similar a C ++ y Rust, ¿por qué no usar Rust o C ++?
R: C ++ está demasiado compilcado de un lenguaje y no es analizable después de compilar (sin piratear el compilador). Las características de memoria del alquiler no son tan útiles para mis casos de uso y C ++ Smart Pointer es todo lo que necesito.
P: ¿Por qué está escrito en C ++?
R: La mayoría de los motores de juego y específicamente mi motor de juego está escrito en C ++. C ++ sigue siendo la mejor herramienta para hacer motores de juego.
P: ¿Por qué no usar LLVM para su backend?
R: LLVM es una dependencia demasiado grande y escribir backends me da una buena excusa para aprender sobre las computadoras (la razón por la que estoy haciendo un motor de juego). También acabas de emitir el texto de ensamblaje LLVM.
P: ¿Por qué un espacio en blanco significativo?
R: Simplemente parecía interesante también se ve mejor.
P: ¿Cuál es la característica asesina de Ucodelang?
R: Ucodelang no es la próxima gran cosa, es solo una herramienta hecha para mi caso de uso específico. Toma las mejores partes de los idiomas que me gustan e intenta eliminar el exceso. Es un C ++ refinado y racionalizado de alguna manera.
P: ¿Qué significa UCode?
R: La palabra UCode no significa nada y no tiene antecedentes, solo un nombre que compensé para una idea de lenguaje de programación. Si realmente quiere un significado, lo que significa cuando se hizo la idea que representa un código sin firmar basado en la palabra clave sin signo C/C ++.
P: ¿Te gusta C ++?
R: Me gusta lo suficiente como para pasar un año haciendo un nuevo idioma usando, pero no lo suficiente como para que mis usuarios para mi motor de juego lo usen (lo siento, irreal). Aunque realmente me gusta C ++, pero también soy consciente de sus defectos.
P: ¿Qué sigue y cuándo se hará el idioma?
R: Cuando se abre el repositorio (preferiblemente el 1/2/2023, el aniversario de un año de hacer el proyecto JIT), la mayoría de las funciones se realizarían y realmente no planean agregar más a menos que sea demasiado bueno. Estaré por un año extra para terminar las otras arquitecturas y los backends y estable. En ese punto, el proyecto se realizará y puedo seguir trabajando en ese motor de juego y ir a trabajar en cosas más grandes y mejores. También creo que agregar demasiadas características puede empeorar un lenguaje.
P: ¿Cuál es su opinión sobre los nuevos lenguajes de programación?
R: Cuanto más, más feliz, especialmente para los lenguajes de sistemas. Cada idioma experimenta cuanto más experimentamos, mejores idiomas aprendemos de sus errores.