

Un langage de programmation de haut niveau conçu pour être rapide à écrire, à compiler et à exécuter.
UCode est un langage de programmation conçu pour être intégré à des logiciels existants tels que les moteurs de jeu tout en étant un langage de bas niveau avec des fonctionnalités modernes et de haut niveau.
principalement
Complètement concentré et spécialisé sur le développement de jeux et les moteurs de jeu.
Et plus.
Cette langue a été réalisée parce que le manque de langages de script appropriés pour un jeu de gibier qui vous a permis de contrôler de faible niveau sur la mémoire et est facile à analyser pour la réflexion.
Par exemple
$Vec2:
float x;
float y;
$Weapon;
$Player:
Vec2 pos;
Weapon[] Weapons;
Après la compilation, nous obtiendrons des données d'assemblage qui peuvent être utilisées pour voir toutes les classes, les fonctions et les champs. Il peut donc être utilisé dans votre inspecteur comme les moteurs de jeu les plus populaires.
Le texte ci-dessous supposait que vous avez compilé pour un CPU de 64 CPU. La machine virtuelle est Agnostic CPU à l'exception des tailles de pointeur CPU. Il doit être compilé pour 64 bits ou 32 bits, ce qui est trivial à faire.
$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
Nous voulons que les données d'assemblage C # aiment mais avec un contrôle de niveau de faible niveau C ++ sur la mémoire et sans collecteur de poubelles C #.
De plus, depuis que nous faisons une nouvelle langue, nous pouvons apprendre les erreurs de langues passées avec l'utilisation de types de résultats et de variants de résultats facultatifs et de supprimer les exceptions et plus encore.
En dépit d'être conçu pour les moteurs de jeu, UCode n'a pas besoin d'une machine virtuelle, elle peut être utilisée par elle-même et peut être compilée directement avec C, Wasm et Native Platform Librarys.
ou directement au code machine natif lorsque cela est fait.
Si votre cas d'utilisation n'a besoin que d'une petite langue et ne passera pas la plupart de son temps dans la langue de script que vous utilisez Lua.
Si vous avez besoin de typage statique et de ness de bas niveau C ++, mais OK pour avoir un collecteur de déchets, utilisez mono c # ou terra.
Site web
Aire de jeux
Documentation
Extension VScode
Débutant pour les utilisateurs
Comment ajouter à votre projet C ++
Exécutez ce qui suit dans votre terminal pour installer sur Linux / MacOS.
curl -L https://github.com/LostbBlizzard/UCodeLang/releases/latest/download/install.sh | sh
Ou téléchargez et exécutez le ucodelangsetup.exe sur la dernière version de 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");
Cela peut être furieux dans ucodeide / src / appobject / ecsexample.hpp et 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 dépend de Zycore et Zydis pour des raisons de débogage et de la génération de code x86.
Les deux devraient être supprimés.
Pour construire le projet, téléchargez simplement des fichiers ou exécutez.
git clone https://github.com/LostbBlizzard/UCodeLang.git
cd ./UCodeLang
Après avoir exécuté les fichiers du projet.
InstallTools.bat
./InstallTools.sh
La dernière étape est entourée si vous n'avez pas besoin de construire Ucodeide.
Prochaine exécution.
./VS_2019.bat
./VS_2022.bat
./GNU_Make.sh
make
./GNU_Make.sh
make
./XCode.sh
La structure du projet de fichier est LAD comme ça
/ Dépendances
/ Uc
/ Ucapp
/ Ucodeapi
/ Ucodelang
"Le cœur d'Ucode-Lang si vous utilisez ceci comme bibliothèque, ajoutez ceci à votre répertoire inclue"
/ Dépendances
/ Ucodeanalyzer
/ Ucodelang
/ Ucodelanguagesever
/ Ucodelanguageseverlib
/ Ucodéocumentation
/ Ucodeide
/ Ucodewebsite
Le projet est également censé avoir aussi peu de dépendances que possible car il est censé être facile à ajouter à toutes les Pojects C ++.
Utilisez l'onglet Issue GitHub pour les bogues. Utilisez les discussions GitHub pour parler de la langue et de nouvelles fonctionnalités et de la conception du langage. Gardez également Civil.
Ne soyez pas timide de critiquer la façon dont les choses sont mises en œuvre Je sais que le code peut être meilleur dans les endroits.
La critique constructive est la bienvenue (ne soyez pas trop dur).
Veuillez poser des questions sur tout le projet car j'ai à peine documenté quoi que ce soit.
La branche principale des versions et la fonctionnalité est l'endroit où je fais un développement réel.
La vision finale du projet a des backends pour
UCODEVM (interprète, JiTinterpreter, nativeInterpreter)
C11
Webassembly
Windows (exécutable natif),
Linux (exécutable natif),
MacOS (exécutable natif),
X86
X86_64
Bras
ARM64
Le langage était conçu et développé par Lostblizzard sur Github.
Qui maintient actuellement le
L'UcodegameEngine (étant travaillé) la principale raison pour laquelle la langue a été faite.
Q: Ucodelang est très similaire à C ++ et Rust Pourquoi ne pas utiliser Rust ou C ++?
R: C ++ est trop compilcaire d'une langue et est unanalyzable après la compilation (sans pirater le compilateur). Les fonctionnalités de mémoire de la cuve ne sont pas si utiles pour mes cas d'utilisation et le pointeur intelligent C ++ est tout ce dont j'ai besoin.
Q: Pourquoi est-il écrit en C ++.
R: La plupart des moteurs de jeu et spécifiquement mon moteur de jeu est écrit en C ++. C ++ est toujours le meilleur outil pour fabriquer des moteurs de jeu.
Q: Pourquoi ne pas utiliser LLVM pour votre backend.
R: LLVM est une dépendance trop importante et l'écriture de mon moi me donne une bonne excuse pour en savoir plus sur les ordinateurs (la raison pour laquelle je fais un moteur de jeu). Vous venez également de sortir du texte d'assemblage LLVM.
Q: Pourquoi un espace blanc significatif?
R: Il semblait juste intéressant aussi plus agréable.
Q: Quelle est la fonction Ucodelang Killer.
R: Ucodelang n'est pas la prochaine grande chose, c'est juste un outil conçu pour mon cas d'utilisation spécifique. Il prend les meilleures parties des langues que j'aime et tente de supprimer l'excès. C'est un raffiné et rationaliser C ++ à certains égards.
Q: Que signifie ucode?
R: Le mot ucode ne signifie rien et n'a pas d'histoire, c'est juste un nom que j'ai inventé pour une idée de langage de programmation. Si vous voulez vraiment une signification un sens lorsque l'idée a été faite pour un code non signé basé sur un mot-clé c / c ++ non signé.
Q: Aimez-vous C ++?
R: Je l'aime suffisamment pour passer un an à faire une nouvelle langue en l'utilisant mais pas assez pour que mes utilisateurs pour mon moteur de jeu l'utilisent (désolé Unreal). Bien que j'aime vraiment C ++ mais aussi je suis conscient de ses défauts.
Q: What Next et quand sera la langue.
R: Lorsque le référentiel s'ouvre (de préférence au 1/2/2023, le premier anniversaire de la fabrication du projet JIT) la plupart des fonctionnalités seraient effectuées et ne prévoient pas vraiment d'en ajouter plus à moins que ce soit trop bon. Je serai là pendant une année supplémentaire pour terminer les autres architectures et backends et avec peu de temps.
Q: Quelle est votre opinion sur les nouveaux langages de programmation.
R: Plus il y a de plus que plus les langues des systèmes. Chaque langue expérimente plus nous expérimentons les meilleures langues en apprenant à partir des erreurs.