Neuroshok Generic Language
Le but de ce projet est de créer un langage de programmation orienté généricité.
Serveur discord du projet : https://discord.gg/8sB4rTF
Concept général
Le langage défini toute information en tant que data. Ces informations seront connectées entre elles de différentes façons afin de créer une logique.
Afin d’ajouter du sens à ces informations, elles doivent être décrites par une entité logique appelé descriptor. Une entité logique est une information concrète qui possède des concepts et une logique. La description d’une information se fait à partir d’un descripteur, qui devra donc se décrire lui même
Les data sont séparées en deux grandes parties, les concept ajoutant une logique à une information et les concrete représentant une concrétisation d’un concept dans l’environement du programme.
Voici un aperçu des spécificités prévues:
-
Syntaxe
- Le code devra être facile à lire et à écrire (pas d’excès de symboles)
- La syntaxe sera uniforme (pas de spécificité selon la sémantique)
-
Logique
-
Le langage utilisera des concepts pour la généricité des programmes
-
Une même entité logique (programme, IA ..) possèdera une seule version de ses concepts
-
Les concepts de différentes entités seront compatibles et substituables (dans le but d’éviter la redondance de concepts similaires au sein d’un programme utilisant plusieurs dépendances)
-
Chaque concept du langage sera parametrable
-
-
Concrétisation
- Le code source d’un programme étant un concept, il sera concrétisé en passant par plusieurs phases
- La concrétisation d’un concept doit permettre de pouvoir modifier le concept en cours de concrétisation (metaprog)
- La librairie du langage fournira les concepts nécessaires à la création de programme/projets (un système de build externe ne sera pas nécessaire)
Objectif
Dans un premier temps, le but sera de définir le langage, écrire la documentation et quelques concepts de la librairie standard tout en écrivant du code de test pour vérifier la cohérence du langage.
Une fois les bases du langage bien définies, l’écriture du compilateur sera envisageable. Il sera codé en C++ avec LLVM.
Recrutement
Je cherche donc des personnes intéressées par
- la définition du langage et de ses concepts
- l’écriture de code ngl de test
- l’implémentation expérimentale de fonctionnalités du compilateur
Et pour finir, voici un exemple simple de code
ngl:concept:container matrix
{
ngl:concept:number <rows> // 1
ngl:concept:number <columns> // 2
ngl::concept:size ( rows * columns )
<data_type> :data // 3, redescribe :data from ngl::container
}
// parameters order
matrix<4, 2, ngl::float> float_matrix;