Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Langage] GhoSt

Anonyme
    9 avril 2012 à 4:07:07

    Image utilisateur

    Salut à tous,

    Pour la présentation, je suis dab, j'ai 14 ans, vous m'avez peut-être croisé sur les forums Site web, mais je touche un peu à tout, notamment au C++, qui sera un point important pour ce post.
    Je vais donc vous présenter un projet dont je suis en partie initiateur, GhoSt, un langage de programmation orienté web.

    En savoir plus sur le projet


    Genèse


    Donc avec la collaboration de quelques amis, nous avons monté un petit groupe pour publier nos "créations", GeekSchmerzen.
    Quelques temps plus tard, j'ai proposé une idée qui me trottait depuis longtemps par la tête, créer un langage de programmation, et, pensant que le plus grand avenir serait dans le web, décider de l'orienter plutôt web, mais en proposant tout de même la posibilité de l'utiliser comme langage système.
    Initialement nommé dabLang (Ho oui que c'est original), la migration vers GeekSchmerzen l'a renommé GhoSt, parce que ça sonnait bien et que ça faisait aussi GS :)

    Généralités et avancement


    Inspiré de nombreux langages, notamment PHP, Python, Perl, JavaScript, C/C++, BASH, et j'en passe, GhoSt possèdera, une fois terminé, naturellement de conditions if, elif, else et switch, des boucles while, do while, for et foreach, de fonctions et de classes.
    Étant orienté web, il possèdera des modules pré-implémentés pour la gestion du réseau et la génération de code HTML, CSS et JavaScript et les SGBD (MySQL, PostGreSQL, Oracle, etc.). Pour exemple, voici le code "type":
    http://jsbin.com/izivuf/6
    Et un exemple de page web: http://jsbin.com/egekij/2
    Il possèdera en revanche d'un compilateur très peu commun, c'est à dire, que le programme sera envoyé à un serveur qui sera chargé de "transformer" le code GhoSt en C++ par le bied d'un script PHP. Le code C++ sera retourné au client qui le compilera en usant de libraires GhoSt. Un binaire sera fourni et l'utilisateur pourra le lancer et le publier.
    Mais il ne s'agit pas d'un langage web ?

    Si, car il suffira de le placer dans le "cgi-bin" d'un serveur pour l'utiliser.
    Nous développons actuellement en parallèle le paser et les classes C++, les secondes étant plus avancées.
    Si cela vous intéresse, voici le Cahier des Charges

    Objectifs


    L'objectif de ce langage n'est pas de "se faire du fric", c'est pour ça que toutes les sources seront accessibles, (il sera d'ailleurs possible de définir à le première ligne du fichier le serveur de compilation (#!ghost.example.org/compile.php)). Le but est d'obtenir une (grande :p) commnunauté d'utilisateurs, aidant à développer et à améliorer le langage. Bien sûr, nous ne nous faisons pas d'illusions sur le fait que ça ne se fera pas, mais nous espérons ! :)
    C'est pour nôtre "groupe" un des projets principaux, (avec notre moteur de recherche, PlooPing), et nous espérons venir à bout des bases assez rapidement, pour nous consacrer aux modules le plus vite possible ^^

    Le projet et son originalité


    Bien que ce ne soit pas les langages de programmation qui manque, nous visons un langage simple (dans une certaine mesure) et complet, sans avoir à faire x manipulations pour afficher un message, mais permettant des manœuvres plus complexes comme la création d'un site web complet.
    Un point que je n'ai trouvé chez aucun autre langage, c'est la possibilité de charger le contenu depuis un site web et de l'utiliser "sur place", petit détail pour certains, mais pour moi, je trouverai ça beaucoup plus pratique.


    Si vous désirez participer, contactez moi par MP :)
    N'hésitez pas à laisser vous impressions et vos suggestions,
    Cordialement,
    dab.
    • Partager sur Facebook
    • Partager sur Twitter
      9 avril 2012 à 9:38:34

      Bonjour :)

      C'est intéressant, je vous encourage a continuer :)
      Une petite question, pour les variables, comment avez vous choisit de les déclarer ?

      Je pose cette question car entre JavaScript et le C il y a pas mal de différences concernant la déclaration :p
      • Partager sur Facebook
      • Partager sur Twitter

      Je vous ai aidé ? Appuyez sur le bouton "Ce message est utile", avec le pouce levé vers le haut !  (en bas à gauche de mon message)

      Anonyme
        9 avril 2012 à 11:26:44

        Salut,
        d'abord merci de t'intérêt que tu y porte ;)
        On a choisi de déclarer les variable ainsi:
        var variable = "toto" // variable = "toto" past too (signify mixed)
        int variable = 35
        str variable = "toto"
        bool variable = true
        bin variable = 01100111
        int !variable = [35,42] // Array
        str §variable = {"Toto"=>"Tonton", "Titi"=>"Tata"} //Object

        Comme tu peux le voir, le type n'est pas obligatoire, mais si une variable est typée, le temps de traitement sera plus rapide (enfin, de quelques microsecondes)
        • Partager sur Facebook
        • Partager sur Twitter
          9 avril 2012 à 12:23:56

          C'est un peu déroutant les types str et string qui apparemment ne sont pas du tout les mêmes :o (ou bien alors c'est un tableau associatif de chaînes), et là je trouve la syntaxe carrément mauvaise (du Perl en moins bien quoi).
          Qui plus est, le caractère §, tout le monde ne l'utilise pas souvent, alors niveau simplicité, j'ai vu mieux (je viens de passer 10 secondes à le chercher sur mon clavier...)

          Je comprends pas non plus la déclaration de la variable binaire (il n'y a pas de signe "=" ?). Une variable est de toute façon toujours binaire, et ce qui change, c'est la façon de l'écrire dans le code (question de simplicité parfois), en aucun cas son type. Parce qu'à ce moment-là, autant créer des types hexa, octa (et puis en base 64 tant qu'on y est).

          Enfin, c'est la partie originalité qui me gêne : j'ai du mal à voir ce que pourrait apporter un langage de plus niveau web. Tu parles de simplicité, j'en suis pas totalement convaincu. Tu parles de compilation, et donc implicitement de rapidité, mouais sur le web y a des langages déjà assez rapides, robustes, et très utilisés (je pense surtout à Ruby).

          Voilà, c'est tout ce que je trouve à critiquer (pour l'instant), mais ne prends pas ça comme une envie de vous descendre, c'est plutôt pour moi mieux comprendre le projet, et pour vous voir ce qui va, ce qui ne va pas, et remettre en question le projet.

          Voilà bonne continuation en tout cas ;)
          • Partager sur Facebook
          • Partager sur Twitter
            9 avril 2012 à 14:52:31

            Salut!

            Tout d'abord, bon courage pour votre projet.

            En gros, vous voulez changer la syntaxe de C++ et y introduire une bibliothèque?

            Le projet pourrait être intéressant, mais je me demande bien ce que ce langage aura de plus avantageux que C++, sans parler des autres solutions largement plus adaptées au web ? Et surtout, je me demande si ça va vous apporter quelque chose pédagogiquement parlant.

            Pourquoi ne pas viser plus simple, partir d'un mini langage d'expression arithmétique, l'implémenter dans un interpréteur, et une fois que ça marche vraiment, y ajouter des structures conditionnelles, fonctions, etc... Et pourquoi pas par la suite, partir de l'interpréteur vers un compilateur et éventuellement machine virtuelle.

            Une fois que vous avez ces connaissances de bases nécessaires, vous pouvez y ajouter une sur-couche pour la programmation web, tout en restant un langage simple, en y ajoutant par exemple un système de template, une gestion native de certain protocole type HTTP etc...

            En plus de cela, ça vous permettrais de revoir un peu la syntaxe et de la simplifier. Le typage aussi semble assez bizarre.

            Essayez de ne pas voir trop gros et de faire quelque chose d'intéressant. Parce que c'est clair que c'est vachement de boulot ce que vous êtes entrain de faire là et que vous allez avoir de grosses prises de têtes parce que ça ou ça ne marche pas comme vous voulez... Vous partez d'une base existante peut-être trop grande.

            Mais y a plus diversifié et intéressant que ça, en essayant de faire un petit interpréteur pour un langage vachement plus simplifié. Et de faire des ajouts par dessus, progressivement, ce qui vous permettra d'avoir une bien meilleure compréhension du tout.

            Bonne chance!
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              9 avril 2012 à 20:36:08

              Bonjour à tous et merci des vos réponses !
              Je vais essayer de répondre à vos remarques de façon plus ou moins sensée :p

              Citation

              C'est un peu déroutant les types str et string qui apparemment ne sont pas du tout les mêmes


              Ouais heu… Vu l'heure où j'ai posé ça, j'ai bien le droit de faire des erreurs non ? :-° (il s'agit donc d'une faute d'inattention )

              Citation


              Qui plus est, le caractère §, tout le monde ne l'utilise pas souvent, alors niveau simplicité, j'ai vu mieux (je viens de passer 10 secondes à le chercher sur mon clavier...)


              Bah, ce caractère est facile à attraper sur les claviers QWERTZ, et ne possédant pas les QWERTY ou AZERTY, nous n'avons pas connaissance de ce problème, j'en parlerai à la prochaine assemblée.

              Citation


              Je comprends pas non plus la déclaration de la variable binaire (il n'y a pas de signe "=" ?)


              De même :-°

              Citation


              Une variable est de toute façon toujours binaire, et ce qui change, c'est la façon de l'écrire dans le code (question de simplicité parfois), en aucun cas son type. Parce qu'à ce moment-là, autant créer des types hexa, octa (et puis en base 64 tant qu'on y est).


              C'est simplement une autre façon de gérer les contenus, personelement je n'y trouve pas d'intérêt, mais d'autres membres de notre "groupe", si.

              Citation


              Enfin, c'est la partie originalité qui me gêne : j'ai du mal à voir ce que pourrait apporter un langage de plus niveau web. Tu parles de simplicité, j'en suis pas totalement convaincu. Tu parles de compilation, et donc implicitement de rapidité, mouais sur le web y a des langages déjà assez rapides, robustes, et très utilisés (je pense surtout à Ruby).


              En effet, personelement je trouve la syntaxe plus "user-friendly", intuitive que d'autres langage tels que le PHP, Python, ou comme tu dis Ruby.
              Question performances, elles seront semblables à celles du C++, du fait qu'il s'agira en fait de C++, une fois compilé.

              Citation


              En gros, vous voulez changer la syntaxe de C++ et y introduire une bibliothèque?


              Je ne suis pas trop d'accord, car en suivant cette logique, le PHP n'est qu'une autre version de C++…

              Citation


              Le projet pourrait être intéressant, mais je me demande bien ce que ce langage aura de plus avantageux que C++, sans parler des autres solutions largement plus adaptées au web ? Et surtout, je me demande si ça va vous apporter quelque chose pédagogiquement parlant.


              Les avantages ? La syntaxe sera, tu me l'accorde, beaucoup plus simple, et bibliothèques "GhoSt" de C++ permettront de ne pas avoir à recoder les mêmes en C++. (comme les sources seront libres, il sera possible d'utiliser "GhoSt" uniquement comme une bibliothèque C++)

              Citation


              Pourquoi ne pas viser plus simple, partir d'un mini langage d'expression arithmétique, l'implémenter dans un interpréteur, et une fois que ça marche vraiment, y ajouter des structures conditionnelles, fonctions, etc... Et pourquoi pas par la suite, partir de l'interpréteur vers un compilateur et éventuellement machine virtuelle.


              Pour deux points:
              • Nous avons déjà l'avons déjà fait
              • Ça ne nous interesse pas autant que ça, surtout parce que nous pensons l'utiliser également dans une autre projet web.


              Citation

              Une fois que vous avez ces connaissances de bases nécessaires, vous pouvez y ajouter une sur-couche pour la programmation web, tout en restant un langage simple, en y ajoutant par exemple un système de template, une gestion native de certain protocole type HTTP etc...


              C'est ce que nous voulons faire.

              Citation

              En plus de cela, ça vous permettrais de revoir un peu la syntaxe et de la simplifier. Le typage aussi semble assez bizarre.


              Comme je l'ai déjà dit, les typages ont étés un peu foirés quand j'ai écrit ça ce matin, je t'invite à voir ma modification.

              Citation


              Essayez de ne pas voir trop gros et de faire quelque chose d'intéressant. Parce que c'est clair que c'est vachement de boulot ce que vous êtes entrain de faire là et que vous allez avoir de grosses prises de têtes parce que ça ou ça ne marche pas comme vous voulez... Vous partez d'une base existante peut-être trop grande.


              It's not a problem, because we have http://www.youtube.com/watch?feature=p [...] Nu8lItu0#t=9s
              Non, plus sérieusement, nous savons que c'est un gros boulot, mais étant mégalomane ( \o/ ) nous voulons viser assez gros directement, car, selon nous, ça apporte une plus grande satisfaction personnelle.
              • Partager sur Facebook
              • Partager sur Twitter
                10 avril 2012 à 1:33:54

                Vous avez déjà fait un interpréteur, pour un langage avec structures de contrôle et fermetures, typage statique etc... Vous maîtrisez l'analyse lexicale et la génération d'AST, la notion de stack, de heap et de garbage collection, que vous avez implémenté dans une machine virtuelle. Ou je me trompe?

                Que je parle du typage qui semble foireux, je parle pas de votre typo. En gros, vous faites pas de vérification de types avant le compilateur C++?

                Ce que je veux dire, c'est que vous êtes limité par le langage cible de votre compilateur, votre projet langage c'est du C++ avec une syntaxe différente. La différence entre ça et PHP ? PHP n'est pas compilé en C++ puis exécuté. PHP a une sémantique totalement différente de C++. Non, si tu veux comparer à quelque chose, c'est à CoffeeScript / Javascript. Il y a une correspondance exacte entre CoffeeScript et Javascript. Ce qui fait le succès du premier, c'est que la syntaxe est plus agréable. Et similairement à votre projet, CoffeeScript se compile en Javascript.

                Je veux pas vous découragez hein, je me demande juste si c'est la chose la plus intéressante dans laquelle vous vous lancez.
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  10 avril 2012 à 1:44:22

                  Citation


                  Vous avez déjà fait un interpréteur, pour un langage avec structures de contrôle et fermetures, typage statique etc... Vous maîtrisez l'analyse lexicale et la génération d'AST, la notion de stack, de heap et de garbage collection, que vous avez implémenté dans une machine virtuelle. Ou je me trompe?


                  Non, mais aussi poussé. Peu importe, mais franchement, en suivant une telle logique, le monde n'avencerait pas, il serait composé d'un plan que tout le monde doit suivre, et avec ça, tu ne serais pas actuellement derrière ton ordinateur, parce qu'il n'existerai pas.

                  Citation


                  Que je parle du typage qui semble foireux, je parle pas de votre typo. En gros, vous faites pas de vérification de types avant le compilateur C++?


                  Je ne vois pas d'où tu sors ça.

                  Citation


                  Ce que je veux dire, c'est que vous êtes limité par le langage cible de votre compilateur, votre projet langage c'est du C++ avec une syntaxe différente. La différence entre ça et PHP ? PHP n'est pas compilé en C++ puis exécuté. PHP a une sémantique totalement différente de C++. Non, si tu veux comparer à quelque chose, c'est à CoffeeScript / Javascript. Il y a une correspondance exacte entre CoffeeScript et Javascript. Ce qui fait le succès du premier, c'est que la syntaxe est plus agréable. Et similairement à votre projet, CoffeeScript se compile en Javascript.


                  Oui, mais non. Finalement tous les langages de haut niveau sont basés sur la "traduction". Après, je pense que c'est sujet à troll donc je ne vais pas m'y attarder.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    10 avril 2012 à 2:40:23

                    Tu dis de faire des choses nouvelles, mais c'est ce que je te proposes de faire. Là vous faites une sur-couche syntaxique du C++. C'est quoi votre argument par rapport au C++?

                    Tu peux nous montrer un exemple de comment vous comptez faire une page web simple dans votre langage?

                    Pour le système de type, vous allez vous y prendre comment alors?

                    Ce que tu nommes "traduction" est appelé compilation. Oui pas mal de langage de haut niveau sont compilé, mais il y en a des tonnes qui ne le sont pas, style Python, Ruby, PHP puisque tu le nommes. En quand on compile un langage, la majorité du temps le langage cible est moins abstrait, de plus bas niveau si tu veux, que le langage source.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      10 avril 2012 à 2:58:54

                      Citation


                      Ce que tu nommes "traduction" est appelé compilation.


                      C'est ce pourquoi j'ai mis des guillemets, merci…

                      Citation


                      C'est quoi votre argument par rapport au C++?


                      Il est évident qu'un petit langage ne sera jamais aussi puissant qu'un beaucoup plus grand avec un très grand nombre d'utilisateurs, en revanche, mon argument est la syntaxe beaucoup plus simple…

                      Citation


                      Tu peux nous montrer un exemple de comment vous comptez faire une page web simple dans votre langage?


                      import web
                      import network
                      
                      web->setDatas(
                            {
                                 'html_version'=>'xhtml1s',
                                 'encoding'=>'utf8'
                            }
                      )
                      web->start()
                      web->startContainer()
                            web->h1('Lorem ipsum dolor')
                            web->p('Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.')
                      web->endContainer()
                      if(!web->formData('pseudo').empty()) {
                            str pseudo = web->formData('pseudo')
                            str email = web->formData('email')
                            if(email.match('#(.*)@([a-zA-Z0-9])\.([a-z]{2,3})#')) {
                                  network->mail('dab@supersitea2ball.es',email,'Bienvenue sur notre super site à 2 balles !','Bonjour,\nSois le bienvenu sur notre super site à 2 balles.\n Ton nom d\'utilisateur est '+pseudo+'!\nNous nous réjouissons de te voir parmi nous!')
                            }
                            else {
                                  web->p('Salut à toi'+pseudo+', tu as essayé de t\'inscrire sur notre site mais ton email n\'est pas valide, désolé!')
                            }
                            print('<p>C\'est fini !</p>')
                      }
                      web->end()

                      Convaincu ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        10 avril 2012 à 3:40:38

                        Juste comme ça, je suis pas là pour vous détruire, mais vous aider!

                        Entre écrire </div> et web->endContener(), tu crois que c'est lequel le plus adapté ?

                        PS: Contener n'existe pas en anglais.

                        Bon, pour la syntaxe, tu dis qu'elle est plus simple que celle du C++, mais ça reste pas terrible non plus...

                        As-tu déjà essayé par exemple de voir du côté de Python? Regarde aussi Django pour leur système de template. Vous pourriez vous en inspirer. Là, tu peux vraiment dire que la syntaxe est meilleure.

                        Ces questions c'est pour vous, pour savoir si vous êtes partis sur le bon design.

                        Bon courage!
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          10 avril 2012 à 3:50:27

                          Citation


                          Entre écrire </div> et web->endContener(), tu crois que c'est lequel le plus adapté ?


                          Non, c'est sûr, mais nous prévoyions de mettre une gestion du CSS, donc oui, c'est un gain de temps

                          Citation


                          PS: Contener n'existe pas en anglais.


                          PS signifie post-scriptum. Au temps pour moi, je le signale et je corrige dans le code que j'ai présenté

                          Citation


                          Bon, pour la syntaxe, tu dis qu'elle est plus simple que celle du C++, mais ça reste pas terrible non plus...


                          Je pense que c'est une histoire de goûts, (pas de coloration syntaxique, ça fait aussi :-°), moi je préfère ça au C++, mais tu es libre de ne pas aimer ;)

                          Citation


                          As-tu déjà essayé par exemple de voir du côté de Python? Regarde aussi Django pour leur système de template. Vous pourriez vous en inspirer. Là, tu peux vraiment dire que la syntaxe est meilleure.


                          Oui, nous avons regardé et ça ne nous botte pas trop, c'est un des points d'ailleurs qui nous a donné l'envie de créer un langage.

                          Citation


                          Bon courage!


                          Merci ;)

                          Edit: j'ai modifié mon premier message, il y a maintenant un lien vers une syntaxe colorée.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            10 avril 2012 à 12:17:16

                            Bon en lisant assez rapidement les posts, ça se voit clairement que l'originalité du langage coince. Je trouve ça dommage, parce que vouloir créer un langage, c'est vachement ambitieux, et que donc il y aurait tellement d'autres moyens plus efficaces d'apporter quelque chose de nouveau au web :(
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              10 avril 2012 à 21:50:37

                              Citation


                              il y aurait tellement d'autres moyens plus efficaces d'apporter quelque chose de nouveau au web


                              Par pure curiosité, as-tu une idée particulière ?
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                10 avril 2012 à 22:01:30

                                Sympa, mais la manière de générer des pages me semble trop calquée sur le HTML.

                                var variable = "toto" // variable = "toto" past too (signify mixed)

                                Ça veut dire quoi ? J'arrive vraiment pas à comprendre le sens du commentaire o.O
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  10 avril 2012 à 22:07:15

                                  Citation


                                  Sympa, mais la manière de générer des pages me semble trop calquée sur le HTML.


                                  Effectivement, ça ressemble au HTML, le but n'étant pas de tout changer (par habitude, en général, on a quelques bases en HTML, ça permet de ne pas tout perturber)

                                  Citation


                                  Ça veut dire quoi ? J'arrive vraiment pas à comprendre le sens du commentaire o.O


                                  Bon, ok, j'avoue que mon anglais n'est pas des meilleurs ^^
                                  Ce qu'il devrait signifier, c'est qu'une variable qui peut contenir n'importe quel type de contenu peut être déclaré soit sous la forme var variable = "toto" soit variable = "toto", pour alléger le code.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    10 avril 2012 à 22:46:11

                                    Le problème des langages qui ne veulent rien changer par habitude, c'est que la valeur ajoutée est très faible. Je ne dis pas ça pour te vexer, mais pour que tu comprennes que ton langage ne va pas susciter beaucoup d'enthousiasme...si c'est juste une autre manière d'écrire du HTML, "par habitude" les programmeurs vont en rester à leurs langages actuels qui peuvent aussi faire ça.
                                    Si tu veux te démarquer, il faut proposer quelque chose de vraiment utile - pas forcément unique, mais utile. Par exemple, si tu connais plusieurs langages, tu peux essayer de combiner leurs avantages en évitant leurs défauts. (je dis bien essayer, c'est pas facile)

                                    PS : Si tu ne sais pas l'anglais, commence par écrire tout en français, puis traduis en anglais quand tu auras le niveau ;)
                                    Tu penses probablement que l'anglais ça fait pro et ça te permet d'atteindre plus de monde ; c'est vrai, mais il faut le parler correctement. L'anglais mal écrit, c'est bien pire que du français.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      10 avril 2012 à 22:55:42


                                      Citation : dab


                                      si c'est juste une autre manière d'écrire du HTML, "par habitude" les programmeurs vont en rester à leurs langages actuels qui peuvent aussi faire ça.


                                      Non, comme tu le vois, et comme je l'ai dit, il inclura vraiment un contenu dynamique

                                      Citation : dab

                                      génération de code HTML, CSS et JavaScript et les SGBD




                                      Citation : Aethec

                                      Si tu veux te démarquer, il faut proposer quelque chose de vraiment utile - pas forcément unique, mais utile. Par exemple, si tu connais plusieurs langages, tu peux essayer de combiner leurs avantages en évitant leurs défauts. (je dis bien essayer, c'est pas facile)


                                      Citation : dab

                                      mais je touche un peu à tout

                                      , c'est donc ce que l'on a _essayé_ de faire.

                                      Citation : Aethec

                                      PS : Si tu ne sais pas l'anglais, commence par écrire tout en français, puis traduis en anglais quand tu auras le niveau ;)
                                      Tu penses probablement que l'anglais ça fait pro et ça te permet d'atteindre plus de monde ; c'est vrai, mais il faut le parler correctement. L'anglais mal écrit, c'est bien pire que du français.


                                      Merci du conseil ;) C'est vrai que l'on n'a pas vraiment (du tout) le niveau en anglais pour faire une doc correcte, enfin, on verra, peut-être demandera-t-on à une personne qui maîtrise bien l'anglais, c'est à voir :)(j'aime Google Translate et ses traductions foirées)
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Anonyme
                                        10 avril 2012 à 23:05:19

                                        J'aime bien le concept du switch avec plusieurs valeurs sans devoir écrire plusieurs "case" ou autres.
                                        Peut-être aller plus loin, et aussi accepter une syntaxe du genre "1..10" (1 à 10), des expressions basiques ("< 10") ou même des lambdas ("x => x % 2 == 1", avec peut-être une variable spéciale genre $ pour faire plus court "$ % 2 == 1") ?

                                        Est-ce que le mot-clé "var" crée des variables faiblement typées ? Si je tape var v = "toto", est-ce que je peux ensuite dire v = 42.00 ?

                                        Pourquoi utiliser des ! pour les import et pas des / ?

                                        Que signifie la dernière ligne de l'exemple ("@myUndefinedFunction()") ?
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Anonyme
                                          10 avril 2012 à 23:12:18

                                          Citation : Aethec


                                          Peut-être aller plus loin, et aussi accepter une syntaxe du genre "1..10" (1 à 10), des expressions basiques ("< 10") ou même des lambdas ("x => x % 2 == 1", avec peut-être une variable spéciale genre $ pour faire plus court "$ % 2 == 1") ?


                                          De très bonnes idées, que je proposera à la prochaine assemblé… c'est à dire demain :p
                                          Par contre, je ne comprends pas trop ce que tu veux dire par "peut-être une variable spéciale genre $ pour faire plus court "$ % 2 == 1")"

                                          Citation : Aethec


                                          Est-ce que le mot-clé "var" crée des variables faiblement typées ? Si je tape var v = "toto", est-ce que je peux ensuite dire v = 42.00 ?


                                          Exactement ;)

                                          Citation : Aethec


                                          Pourquoi utiliser des ! pour les import et pas des / ?


                                          Bonne question, je ne sais plus pourquoi on avait choisi ça, et encore je le proposerai demain :)

                                          Citation : Aethec


                                          Que signifie la dernière ligne de l'exemple ("@myUndefinedFunction()") ?


                                          Ça sert à la gesion des erreurs, c'est à dire que la fonction myUndefinedFunction n'affichera pas d'erreur si elle est afficher, et le @->writeIn(filename) fait qu'elle s'affiche sous forme de log dans le fichier filename :)

                                          Merci pour l'intérêt que tu y portes et tes suggestions !
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Anonyme
                                            10 avril 2012 à 23:17:12

                                            Je comprends pas trop la gestion des erreurs...c'est équivalent à déclarer la fonction en mettant quelque chose dedans ?
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Anonyme
                                              10 avril 2012 à 23:20:48

                                              Par exemple tu appelle la function tunnel qui n'est pas déclarée, cela va générer une erreur fatale.
                                              Dans le cas où elle n'est pas importante, tu peux mettre un @ devant, pour ne pas que l'erreur s'affiche chez le client et qu'elle ne stoppe le programme.
                                              Puis, si tu veux avoir un log des erreurs, tu peux mettre un @->writeIn('my.log'), et l'erreur sera redirigée dans ce fichier :)
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                11 avril 2012 à 2:00:11

                                                Moi il y a un truc qui me turlupine : La compilation du programme se fera en ligne (je parle de la compilation de GhoSt vers C++) ? Donc on pourra pas compiler si on a pas accès à Internet ? Pratique.
                                                Et sinon, bien sûr le script PHP qui fera la compilation GhoSt vers C++ (ce qui est con de le faire en PHP, parce que les principaux outils de réalisation d'analyseurs, Lex et Yacc, sont faits pour le C) sera disponible librement, nous en convenons bien. Et pourquoi le faire tourner sur un serveur web ton script de compilation ? PHP ça marche aussi en CLI. Et pourquoi en PHP ?

                                                Et sérieusement, un compilateur ne se basant pas sur le concept d'un automate à pile ? Bah bonne chance pour en faire un qui vaut le coup, parce que c'est la méthode la plus simple de faire un compilateur. Surtout avec les outils que j'ai cité plus haut.

                                                Et puis, sérieusement, je te vois pas capable de faire ça du haut de tes 14 ans.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Koinko.in, le raccourcisseur d'URL qu'il est bien - Zingwai vaincra.
                                                  11 avril 2012 à 3:01:17

                                                  est-ce que gérez les fonctions curryfiées ?

                                                  sans rapport: le schéma c'est donc:

                                                  mon serveur (A) reçoit une requète d'un client (B).
                                                  mon serveur (A) envoie un code ghost à un autre serveur (C)
                                                  l'autre serveur (C) le traduit en c++ et envoie le résultat à mon serveur (A).
                                                  Mon serveur (A) le compile et l'envoie au client (B).
                                                  Le client (B) l'exécute.

                                                  Déjà, ça comporte un nombre de failles pour un hackeur juste énorme. Entre l'usurpation d'identité du serveur de traduction, la corruption des données script (ghost ou c++) et celle de la modification des binaires, il y a de quoi faire.

                                                  De plus, comment être sur que le client et le serveur ont des machines compatibles ? Si le serveur est sous linux et que le client utilise windows par exemple (car probable dans le monde du web que de rencontrer des serveur sous linux) je ne pourrai pas exécuter ses binaires.

                                                  De plus, la taille d'un binaire est beaucoup plus importante que celle des codes sources (donc surcharge du réseau) et complètement opaque pour l'utilisateur (comment être sur que ce n'est pas un virus ?). De plus, aucun navigateur actuel n'exécute du code natif quand il en reçoit (encore heureux !).

                                                  Mais on va dire que tous ces problèmes pourraient être évité (en faisant que le serveur transmette directement à l'utilisateur le script ghost, l'utilisateur pourrait l'analyser(sécurité) le convertir et le compiler en local). Même si ça "désactive" tout votre système.

                                                  Maintenant, une petite remarque: quand je vois un langage qui dit être fait pour le web, je m'attend à pouvoir spécifier la forme (la présentation) et le fond (le contenu) séparément. Or, dans ton code on voit des trucs comme "web->p('bidule')". Il faut donc bien que je construise le code moi-même.

                                                  Je n'ai pas vu de partie sur les bases de données (même si ce n'est pas à proprement parler du web, la plupart des serveurs utilisant un langage visiblement fait pour des sites dynamiques vont avoir besoin d'une base de donnée). Est-ce que l'on aura le droit au sempiternel (et donc presque inutile) bdd->execute('select machin from truc') ou a quelque chose de plus ... étrange (plus facile à utiliser, qui permettrait de charger plus facilement les objets et qui ferait en sorte que la structure de la base de donnée ne soit pas présente dans le code).


                                                  D'ailleurs, quand j'écris ces lignes je me pose une question: de quel coté est exécuté le code ?
                                                  Si c'est du coté client (comme je l'ai compris) alors tu ne peux avoir aucun accès à une base de données, aucune vérification. En revanche tu auras la possibilité de faire de zouuuulis animation sur son navigateur.
                                                  Si, par contre, le script est exécuté du coté du serveur, tu pourras faire la même chose qu'en php (vérification etc.) mais le contenu créé sera toujours autant statique.

                                                  En fait, on aimerait avoir plus d'explication sur le langage lui-même, plutôt que sur la syntaxe. Je te rappel qu'un langage ce n'est pas son implémentation. Il y a sa définition "parfaite" et ensuite il y a des programmes qui tentent plus ou moins bien de lui donner corps.

                                                  voila. Mais je suis content de voir qu'on a quand même dépassé le stade de l'assembleur (ce n'est pas dur mais la plupart des langages ici n'utilisent pas yacc/flex ou son équivalent en java).
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    11 avril 2012 à 3:40:11

                                                    Salut,
                                                    Intéressant, ça me rappelle un ancien projet.

                                                    Citation : remvst

                                                    Je comprends pas non plus la déclaration de la variable binaire (il n'y a pas de signe "=" ?). Une variable est de toute façon toujours binaire, et ce qui change, c'est la façon de l'écrire dans le code (question de simplicité parfois), en aucun cas son type.


                                                    Ah oui ? Tu essaieras d'afficher une image sur ton navigateur avec un type text/plain.
                                                    Plus sérieusement, les binvars peuvent être extrêmement pratiques selon le niveau de réflexivité du langage.

                                                    Citation : remvst

                                                    Parce qu'à ce moment-là, autant créer des types hexa, octa (et puis en base 64 tant qu'on y est).


                                                    Deja fait depuis 70.

                                                    Pour le ruby, il n'est ni rapide ni peu user-friendly. Teste ton code avec rspec par exemple, plus verbeux et proche du langage humain, tu meurs...
                                                    (sans parler rspec: method do input.read unless map include? key -> c'est pas assez user-friendly pour toi ?)

                                                    Concernant l'utilité du projet, personne n'a demandé à ce que ce langage devienne n°1 à sa sortie, mais si le truc est solide et maintenable, ça peut devenir très intéressant.

                                                    Bref, le truc qui m'intéresse beaucoup, et linkboss m'a devancé, c'est pas tellement la syntaxe du langage final (on s'en fout) mais la méthode. Quel algo de parsing ? Automate ? Quelle grammaire ? LALR ? LR ? Comment est gérée la mémoire ? (si tu traduis en C++, j'imagine que tu disposes d'une simple hashmap des variables du prog avec leur portée & co). Les fonctions sont pointées comment ? Parcours-tu le code en générant des erreurs ou laisse-tu gcc le faire une fois le truc traduit ?
                                                    Tu n'expliques absolument rien, j'espère au moins que tu ne lis pas le source ligne par ligne en testant 3 regexp.
                                                    On sait pas où en est l'avancement, mais avant de parler de POO, fais un truc qui reprend les instructions de base d'un langage, en testant absolument tous les cas d'utilisation (l'erreur n'est pas permise dans ce genre de projet), montre nous, on en discute, etc.

                                                    Bonne chance
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      11 avril 2012 à 7:47:03

                                                      Citation : dab

                                                      Citation


                                                      il y aurait tellement d'autres moyens plus efficaces d'apporter quelque chose de nouveau au web


                                                      Par pure curiosité, as-tu une idée particulière ?


                                                      Haha si j'en avais une, je travaillerais dessus :p
                                                      Nan je sais pas, frameworks, bibliothèques, toussa :) (niveau langages je pense qu'on est déjà blindés)
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        11 avril 2012 à 8:31:58

                                                        Salut !
                                                        Pour la gestion des erreurs, je trouve ca bof, bof. J'aurais trouvé mieux d'avoir un système de log intégré au langage (apparemment c'est le cas) et une variable du langage qui passe debug à true ou false. Genre System.log.debug = true
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Anonyme
                                                          11 avril 2012 à 12:09:20

                                                          Salut à tous !

                                                          Comme je suis totalement logique je vais commencer par la fin.

                                                          Citation : DarkKnife


                                                          Pour la gestion des erreurs, je trouve ca bof, bof. J'aurais trouvé mieux d'avoir un système de log intégré au langage (apparemment c'est le cas) et une variable du langage qui passe debug à true ou false. Genre System.log.debug = true


                                                          Nous pensions à une option au compilateur.

                                                          Citation : remvst


                                                          Nan je sais pas, frameworks, bibliothèques, toussa :) (niveau langages je pense qu'on est déjà blindés)


                                                          Bof bof, il y a déjà suffisament de lib et de frameworks à mon goût.

                                                          @bubuche: Je ne vois pas trop ce que tu veux dire, je crois que tu vas chercher trop loin. On pensait à client(écriture du code)->serveur(parsing PHP)->client(compilation du C++)->utilisateur(execution du code compilé)

                                                          Suite à tous vos commentaires, nous allons revoir notre projet de compilateur, et utiliser probablement FLEX
                                                          Ou éventuellement 2 version, une avec FLEX, et une autre, telle que nous l'avions pensé, en PHP.

                                                          Merci de vos participations :)
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            11 avril 2012 à 13:59:49

                                                            ok, je vais essayer d'expliquer plus clairement, en expliquant le cas du php et celui du javascript.

                                                            Dans le cas du php, le client (toi, moi, mme michu) fait une requète http au serveur pour consulter la page X. Si cette page est en html, le serveur ouvre le fichier qui correspond et balance dans la réponse le contenu du fichier.
                                                            Si, en revanche, le fichier est de type php (je fais abstraction de la configuration du serveur), le serveur va lancer l'interpréteur php en lui donnant des variables (le POST le GET etc.). Là, l'interpréteur php va "cracher" du texte qui sera envoyé vers le client.
                                                            Le client reçoit donc du html et ne sait pas, à priori, que ce html a été généré dynamiquement.
                                                            Pour le javascript, c'est en fait quelque chose qui est envoyé au client, dans la réponse (donc généré dynamiquement ou venant d'un fichier réel). Lorsque le client voit ce code (javascript) il va (je fais abstraction de la configuration du client) l'exécuter.


                                                            On a donc deux choses différentes: le php, qui est exécuté coté serveur, et le javascript qui est exécuté coté client.
                                                            Si par exemple tu veux avoir accès à une base de donnée, comme cette base de donnée est sur le serveur, c'est un langage "coté serveur" qu'il te faut.
                                                            Si en revanche tu veux faire des animations, c'est un langage "coté client" qu'il te faut.

                                                            Je suppose que le code ghost est stocké sur le serveur (c'est logique). Le client fait une requète pour avoir une page.
                                                            Là plusieurs choix:

                                                            1) le serveur envoie le code ghost au client. Le client reçoit le code ghost et le transmet à un autre serveur pour le traduire en c++. L'autre serveur le traduit en c++ et le renvoie au client. Là, deux choix:
                                                            1.1) le client envoie le code c++ à encore un autre serveur pour le compiler. Le serveur le compile et le renvoie au client qui l'exécute.
                                                            1.2) le client le compile (lui-même) et l'exécute.
                                                            2) le serveur envoie le code ghost à un autre serveur pour que cet autre serveur le traduise en c++. L'autre serveur le traduit et le renvoie au premier serveur. Ensuite, deux choix:
                                                            2.1) le serveur envoie le code c++ à encore un autre serveur pour que cet autre serveur le compile. Cet autre serveur le compile et le renvoie au premier serveur. Le premier serveur l'exécute et envoie le résultat (donc, du texte) au client.
                                                            2.2) le serveur compile le code c++ lui-même et envoie la sortie (le texte donc) au client.


                                                            tu as surement encore dix milles autres cas. Bref, est-ce que tu peux faire un petit schéma pour expliquer ce que fait votre langage (chaque choix à des implications en terme de performances, de sécurité et de possibilités).



                                                            Pour les fonctions curryfiées: en gros regarde le code suivant (écrit dans un langage que je sort de ma poche, mais je pense que tu vas le comprendre).

                                                            function addition(a, b) = a+b;
                                                            
                                                            variable1 = addition(5); // maintenant variable1 est une fonction qui attend un argument. 
                                                            
                                                            variable2 = variable1(3); // maintenant variable2 contient 8


                                                            en gros, si un fonction attend n arguments on la voit comme un fonction qui attend 1 (un seul) argument et qui renvoie une fonction qui attend n-1 arguments (en fait, comme un fonction qui attend 1 argument et qui renvoie une fonction qui attend n-2 argument qui est en fait une fonction qui attend 1 argument etc.).

                                                            tu le retrouve dans certain langages.
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            Anonyme
                                                              11 avril 2012 à 14:23:38

                                                              Bon, je n'ai pas été assez clair a priori, alors comme tu l'as demandé, un petit schéma s'impose :)
                                                              Image utilisateur
                                                              Comme je l'ai déjà dit, il pourra aussi être utilisé comme langage système hein ^^
                                                              Quant aux fonction curryfiées, je le proposerai tout-à-l'heure
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              [Langage] GhoSt

                                                              × 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