Bonjours, je présente un nouveau langage, le CWave. Intuitif, simple et générique. Il permet de développer facilement de façon modulaire, en bibliothèques intelligente et accessible, pour un maximum de réutilisabilité.
Basé sur le C++, c'est une surcouche de plus haut niveau. Il est possible en tout temps de mélanger CW/C++, d'une ligne de code à l'autre. Il comprend aussi le Glslet le Javascript, tout comme le C++, dans un même fichier les variables des différents langages peuvent communiquer.
Il est aussi performant que le C++, car il ne le remplace pas, tout en restant simple et facile d'accès. Il se charge pour vous de générer tout le C++ complexe de bas niveau, ce qui vous sauve du temps et bien des casse-têtes.
Avec une syntaxe est très proche du Java/AS3, ceux qui connaissent ces langages n'auront aucune difficulté à utiliser celui-ci.
Les fichiers sont sous forme .cw, puis convertie en .cpp/.h. Ceci à pour avantage de pourvoir utilisé n'importe quel bibliothèques C++ et vice versa, avec le projet générer. Pour simplifier l'importation dans un projet C++ et maximisé les optimisations, le tout possède un système compilation groupé, un seul fichier .cpp à compiler est nécessaire.
Pour une utilisation complète, voir les projets relatif :
Voici les principales caractéristiques unique, par rapport à Java et ses semblables :
Multithreading :
Lock-free : Très performant, car en aucun cas une tâche n'est mise en attente
Thread-safe : Il n'est pas possible d'écrire ou de lire une zone mémoire appartenant à différent threads (sauf si Readonly), ce qui élimine toutes data race
Éléments statiques: Les variables de type static ont leur propre zone mémoire relatif au thread courant, on peut par exemple utilisé le principe du singletonsans problème de concurrence.
Accès: On peut accéder au thread courant en tout temps avec le mot cléthread (tel le mots clé this), utilisable dans n'importe quel fonction (même pour les fonctions statique).
Communication: - Variables atomiques, le changement de valeur est direct - Système de messages par Gate, possibilité d’envoyer de l'information plus complexe
Portable: -Passage en Multithread/Monothread de façon totalement invisible, si la plateforme le supporte ou non.
Overplace : (Un terme inventé pour le principe que j'introduis)
Overplace de classes :
Héritage :
Ride de fonctions : Pour permettre une bonne modularité, le système d'héritage doit être efficace, ce qui permet le bon fonctionnement pour avoir des bibliothèques "Plug & Play"
Par sécurité, l'override de fonction hérité doit être spécifié (ridefunction), de façon standard, ceci remplace la fonction.
Comme nouveauté, au lieu de remplacé et perde l'appel cette fonction, elle peut être appelé avant (preridefunction), après (postridefunction) et même pendant.
Il est aussi possible de forcé la fonction à se faire overrider (pureridefunction)
Parent/enfant :
Accès au parent :Tout objets créé (avec new) conserve l'information de son créateur, le parent et les parents de parents sont ainsi accessible en tout temps avec le mots réservé parent
Mémoire :
Aucun garbage collector : Comme avec Java, leGC simplifie la gestion des variables, mais ça demande un traitement périodique lourd, consume la mémoire de façon instable et cause des lag aléatoire. De plus aucun contrôle de mémoire propriétaire n'est possible, ce qui peu causer des erreurs de mémoire par références cycliques jamais libérer et ainsi faire sans cesse augmenter le GC et sont traitement. Le CW empêche ce genre d'erreur avec le type weak.
RAII/Shared_Ptr : La logique est inspiré du C++, plus complexe, mais par chance en CW, le tout est invisible, pour seul exception les variables weak. Les variables utilisent en quelque sorte un compte et sont détruites dès qu'elles ne sont plus référencé. La consommation de la mémoire est stable et avec un compte par référence ultra optimisé.
Weak Var : Les weak_ptr sont obligatoire pour utiliser le comptage par référence, car on peut se retrouver avec des références cycliques et ainsi la mémoire n'est jamais libéré. Les variables par défaut sont propriétaire de la ressource auquel elles font références et leur ressource n'est libérer que quand ces propriétaires n’existe plus. La variable weak permet à l'objet référencer d'être détruit même si cette variable existe toujours, si c'est le cas, elle passe à null. C'est en quelque sorte un avantage de pouvoir contrôler la propriété et duré de vie d'une ressource, par rapport à un GC.
Pas de référence cyclique (TODO) : Les références cycliques sont détecté à la compilation pour indiqué qu'il requière la propriété weak, ce qui évite ainsi tout "memory leak" possible.
Typage :
Typage Fort: Les conteneurs comme les tableaux sont fortement typé, ce qui élimine un grand nombre d'erreurs possibles, au lieu d'un tableau fourre tout, où l'on oublie quel type de variable se retrouve à l'index X. Les conteneurs ont un aspect template (C++). Par exemple un tableau contenant des chaines : var aMonTbl : Array<String>.
Typage Dynamique: De façon la plus intuitive possible ce typage est présent dans la résolution de types, comme avec les chaines par exemple : var sExemple : String = "Moteur v" + 2;
Compilation :
Cpp : Compiler en Cpp il permet de partager son code à la communauté C++. Cela permet également d'utiliser son propre compilateur.
Native: Basé sur Clang, la compilation donne directement un binaire exécutable (.exe, etc)
LLVM IR (TODO): C'est la représentation intermédiaire de la compilation juste avant l'assembleur. La différence c'est qu'il fini la compilation sur la plateforme cible et que celle-ci peut apporter les optimisations approprié, par exemple si la machine supporte tel type d'instructions SSE, il peut l'activer. C'est plus performant que du C++ standard en plus d'être plus portable et modulable. Ceci requière la machine virtuel qui peut être inclue au projet.
En savoir plus sur le projet
Genèse
Le langage était déjà "fonctionnel" il y a un moment, car GZE, mon moteur C++, est réalisé en parties avec celui-ci. GZE à été réalisé initialement pour le lui, mais il sert aussi comme moteur C++, conçu pour n'importe quel projet.
Généralités et avancement
Le compilateur est "fonctionnel", mais il manque encore beaucoup de choses.
Compilateur & Codes sources :
Je vous invite à essayer le langage ici, un petit tutoriel est inclue :
@tsez je répondais au "je n'ai pas réussi à savoir à quoi il ressemblait", non au "tu devrais mettre une référence du langage" auquel cas je suis d'accord.
Bonjours, faire une référence du langage est une excellente idée, le lien du vers le PHP est un bon exemple sur lequel on peut se baser.
Je travaille en même temps sur GZE, je pense pouvoir faire quelque chose d'assez impressionnant bientôt par le fait de pouvoir afficher des dizaines de milliers de sprites et la gestion de la lumière.
La référence langage est ma prochaine priorité.
GZE, un moteur multiplateforme, adapté pour de la 2D, 3D et création de logiciels.
Merci, Cpcdos est un projet très intéressant, en ce moment, j’essaie d'avancer le plus possible ce langage et l'IDE pour l'utiliser facilement, ensuite je vais pouvoir faire du concret entre autre pour l'OS oui.
Ce n'est vraiment pas évidant de trouver un bon nom , mais je me suis finalement décidé. Évidement, ce n'est que le nom qui change, je conserve tout
- Edité par Maeiky 5 août 2016 à 6:37:04
GZE, un moteur multiplateforme, adapté pour de la 2D, 3D et création de logiciels.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
GZE, un moteur multiplateforme, adapté pour de la 2D, 3D et création de logiciels.
GZE, un moteur multiplateforme, adapté pour de la 2D, 3D et création de logiciels.
GZE, un moteur multiplateforme, adapté pour de la 2D, 3D et création de logiciels.