Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Langage] CWave

Nouveau langage simple, qui surf sur le C++, inspiré de l'AS3/Java

    12 juillet 2015 à 19:38:04

      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 Glsl et 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  :

    Simacode (IDE)  | CW (Langage) | CWC (Compilateur)| GZE (Moteur)

    Le projet et son originalité

    Ce qui rend le langage unique

    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 singleton sans 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é (ride function), 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 (preride function), après (postride function) et même pendant.

        Il est aussi possible de forcé
        la fonction à se faire overrider (pureride function)

    • 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, le GC 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 :

    Github Source (En maintenance)

    Soyer indulgent, c'est encore au niveau bêta

    -
    Edité par Maeiky 6 août 2016 à 17:10:41

    • Partager sur Facebook
    • Partager sur Twitter

    GZE, un moteur multiplateforme, adapté pour de la 2D, 3D et création de logiciels.

      13 juillet 2015 à 4:29:41

      Gros projet avec beaucoup d'ambitions pour le futur.

      Félicitations.

      -
      Edité par invalidip 13 juillet 2015 à 4:29:50

      • Partager sur Facebook
      • Partager sur Twitter
        13 juillet 2015 à 8:03:14

        Salut

        tu devrais mettre une référence du langage même incomplète, je n'ai pas réussi à savoir à quoi il ressemble 

        • Partager sur Facebook
        • Partager sur Twitter
          9 août 2015 à 12:43:45

          tsez a écrit:

          Salut

          tu devrais mettre une référence du langage même incomplète, je n'ai pas réussi à savoir à quoi il ressemble 


          Tu n'as pas réussi à cliquer 2 ou 3 fois dans les files Github en cherchant un .cw ?

          • Partager sur Facebook
          • Partager sur Twitter
          La vie est belle, lalala :D | Nouvelle version de winky.fr [beta]
            9 août 2015 à 13:26:56

            @wkl

            relis-moi stp, je parle de référence du langage, pas de code source.

            • Partager sur Facebook
            • Partager sur Twitter
              9 août 2015 à 15:34:21

              @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.

              -
              Edité par wkl 9 août 2015 à 15:38:02

              • Partager sur Facebook
              • Partager sur Twitter
              La vie est belle, lalala :D | Nouvelle version de winky.fr [beta]
                9 août 2015 à 16:58:43

                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é.

                • Partager sur Facebook
                • Partager sur Twitter

                GZE, un moteur multiplateforme, adapté pour de la 2D, 3D et création de logiciels.

                Anonyme
                  29 octobre 2015 à 17:19:19

                  Est-il toujours au projet d’intégrer GZE a Cpcdos ?

                  Sinon super projet (je poste pour suivre -> aussi) ! tu reprend des parties de Nx2 ?

                  -
                  Edité par Anonyme 29 octobre 2015 à 17:20:15

                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 octobre 2015 à 18:28:25

                    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

                    • Partager sur Facebook
                    • Partager sur Twitter

                    GZE, un moteur multiplateforme, adapté pour de la 2D, 3D et création de logiciels.

                      16 novembre 2015 à 15:03:47

                      J'ai bien envie de tester ce nouveau langage.
                      • Partager sur Facebook
                      • Partager sur Twitter

                      [Langage] CWave

                      × 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.
                      • Editeur
                      • Markdown