Partage
  • Partager sur Facebook
  • Partager sur Twitter

comment créer un langage de programmation

    24 novembre 2019 à 18:50:13

    Bonsoir, je voudrais savoir comment on pouvais créer un langage de programmation à partir d'un langage déjà existant, pour le rendre plus sécuriser, plus facile à lire... etc par exemple.

    exemple je veux créer un langage OC en partant du langage C pour améliorer le langage pour des raisons spécifique.

    pouvez vous m'aidez SVP ?

    • Partager sur Facebook
    • Partager sur Twitter
      24 novembre 2019 à 22:24:24

      Bonjour,

      Mauvais forum

      Le sujet est déplacé de la section Discussions générales vers la section Discussions développement

      • Partager sur Facebook
      • Partager sur Twitter
        25 novembre 2019 à 0:24:34

        Bonjour,

        Concrètement un langage c'est juste une chose :

        - Une norme, c'est à dire un document qui explique précisément chaque comportement du langage. Tout est écrit dedans, exactement chaque situation qui peut se présenter, exactement comment le langage se comporte etc... Dans le cas du C, la norme est la C99 (car elle a été éditée pour la dernière fois en 1999), et tu peux la lire ici en anglais : http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf

        Comme tu le vois, c'est un énorme document de plus de 500 pages, incompréhensible pour le commun des mortels :lol:

        Dans la pratique, il faut aussi un compilateur (ou interpréteur ou équivalent) pour pouvoir programmer avec ton langage. Le compilateur transforme le code en programme, selon les règles décrites dans la norme. Par exemple un compilateur de C très connu est GCC. Il est lui même écrit en C et tu peux trouver son code source ici https://github.com/gcc-mirror/gcc

        Code qui est tout aussi incompréhensible par le commun des mortels :lol:

        Techniquement, tout ce qu'il faut faire, c'est définir une nouvelle norme basée sur le C99, et modifier un compilateur tel que GCC pour qu'il applique la norme. Autrement dit, rien de faisable pour un débutant. Mais pour les gens habitués à ce domaine, c'est ce qu'ils font. C'est comme ça que les langages sont régulièrement améliorés : le C++ a évolué en 2011 (C++11), en 2014 (C++14), en 2017 (C++17) et évoluera encore en 2020 (C++20) !

        Pour quelqu'un qui sait déjà bien programmer, pour commencer, le mieux est d'écrire un petit compilateur. Généralement on créé un tout petit langage avec assez peu d'instructions, à partir de rien, et on écrit à la main un compilateur pour ce petit langage. C'est une bonne première expérience dans le domaine de la compilation. Mais c'est assez compliqué de trouver des ressources là dessus si on est pas suffisamment expérimenté en programmation.

        -
        Edité par Bibou34 25 novembre 2019 à 0:25:34

        • Partager sur Facebook
        • Partager sur Twitter
          25 novembre 2019 à 8:06:33

          qu'est ce qui fait la différence entre une nouvelle norme C et un nouveau langage inspiré du C ?

          Comment créer un compilateur et quel langage utilisé pour le créer ?

          -
          Edité par sarazin 25 novembre 2019 à 8:06:56

          • Partager sur Facebook
          • Partager sur Twitter
            25 novembre 2019 à 10:14:36

            Une nouvelle norme C, c'est une norme qui a été approuvée par le comité officiel en charge du langage C. Un nouveau langage inspiré du C peut être fait par n'importe qui, pas besoin d'être approuvé par un comité.

            On peut théoriquement utiliser n'importe quel langage pour créer un compilateur. Sur comment faire, je n'ai pas vraiment de réponse à cette question ni vraiment de ressources à donner :(

            • Partager sur Facebook
            • Partager sur Twitter
              25 novembre 2019 à 16:46:53

              Bibou34 a écrit:

              On peut théoriquement utiliser n'importe quel langage pour créer un compilateur. 

              Ma question est la suivante : Est ce que je peut coder un langage basée sur le PHP par exemple en codant mon compilateur en C (même si le PHP est un langage interpréter) et vis-versa ?

              Bibou34 a écrit:

              Par exemple un compilateur de C très connu est GCC. Il est lui même écrit en C et tu peux trouver son code source ici https://github.com/gcc-mirror/gcc

               Comment un compilateur peut être écrit avec le langage qu'il compile puisque le compilateur est censé le   traduire pour que la machine comprennent et que le programme soit exécuter ?

              -
              Edité par sarazin 25 novembre 2019 à 23:12:46

              • Partager sur Facebook
              • Partager sur Twitter
                25 novembre 2019 à 18:25:54

                > Est ce que je peut coder un langage basée sur le PHP par exemple en codant mon compilateur en C (même si le PHP est un langage interpréter) et vis-versa ?

                Oui bien sûr.

                > Comment un compilateur peut être écrit avec le langage qu'il compile puisque le compilateur est censé le   traduire pour que la machine comprennent et que le programme soit exécuter ?

                Quand tu dis "le" compilateur, tu parles du premier compilateur pour le nouveau langage. C'est pour ça que ça te parait paradoxal.

                Parce que que rien ne t'interdit d'écrire en langage X ton compilateur pour le langage X lui-même, en utilisant un autre compilateur pour le même langage.

                ---

                Et pour de nouveaux langages ? Bonne question.

                Historiquement, pas mal de compilateurs, dans les années 60-70 : Algol, C, Pascal, ...)  ont été écrits par étapes successives, ce qu'on appelle le bootstrapping

                On commence par définir un tout petit sous-ensemble L0 du langage qu'on veut compiler.  On prend un compilateur qu'on a sous la main (Fortran, ou un assembleur, ou Basic, whatever) et on écrit un compilateur sommaire pour le langage L0.

                On sait maintenant faire exécuter un programme écrit en L0. A partir de là, on réécrit le compilateur en L0. On le compile : ça y est on est partis avec C0.

                A partir de là, on modifie le compilateur C0 pour  qu'il accepte une extension L1 de L0. Ca nous donne C1 écrit en L0 qui sait compiler du  L1. Puis on y intègre les améliorations/modifications  apportées par L1, ça nous fait un compilo pour L1 écrit en L1. Et on recommence.

                Et puis souvent ça finit que le code du compilateur est dégueulasse, parce qu'il y a eu des choix initiaux de bricolages forcés par les contraintes du langage de base, qu'on n'a pas pu remettre d'aplomb ensuite.

                De nos jours, force est de constater que faire comme ça est une source ridicule d'emmerdements, puisqu'on n'est plus à l'époque où les machines étaient fournies sans aucun compilateur.

                Et quand c'est (très rarement)  le cas, on fait du développement croisé : on emploie les bons vieux langages de programmation évolués qu'on a sous la main, avec tous les outils et bibliothèques pour l'analyse syntaxique et la génération de code, qu'on fait tourner sur une autre bécane où on a tout son confort : ça ne manque pas.

                Déjà, quand BIll Gates a développé son Basic pour microprocesseurs (Altair 8800), il l'a fait - pas fou - en piratant des heures de calculs sur le PDP 10 de l'université d'Harvard.

                Est aussi passé l'époque où on prétendait mesurer la "puissance" d'un langage à sa capacité à implémenter son propre compilateur.  Ca relevait un peu du concours de quéquettes : tous les langages ne sont pas faits pour ça. Ecrire un compilateur PHP en PHP, c'est pas qu'on ne peut pas le faire, mais ça serait s'emmerder pour rien, et ça servirait à quoi ?

                -
                Edité par michelbillaud 25 novembre 2019 à 18:39:30

                • Partager sur Facebook
                • Partager sur Twitter
                  25 novembre 2019 à 22:53:33

                  Si j'ai bien compris pour créer un langage actuellement plus besoin d'écrire le compilateur avec le langage qu'il  compile car trop compliqué et inutile, le mieux est de l'écrire avec un autre langage. 

                  Comment écrire un code pour compilateur en C, C++ par exemple ?

                  Et comment en peux savoir qu'un langage et plus sécurisé qu'un autre ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 novembre 2019 à 7:39:15

                    Comment on fait ?  On regarde les bouquins qui causent de la compilation, on étudie le code de compilateurs existants.

                    Dans l'idée du compilateur qui se compile lui même  il y'a celle du langage de programmation universel qui est merveilleux pour écrire n'importe quel genre de programme, y compris les compilateurs, une activité qui concerne en réalité un programmeur sur un million à peu près. Les trucs universels, c'est très 70's.

                    -
                    Edité par michelbillaud 26 novembre 2019 à 7:42:27

                    • Partager sur Facebook
                    • Partager sur Twitter
                      26 novembre 2019 à 13:06:24

                      Est ce que t'a des site sur la compilations à me conseillée ?

                      Et j'ai une autre question :  un langage est censé faire ce que tu lui demande donc la sécurité doit venir du programmeur est non du langage alors pourquoi dit-on que certains langage sont plus sécurisé que d'autres? 

                      • Partager sur Facebook
                      • Partager sur Twitter
                        26 novembre 2019 à 15:37:53

                        Des sites ?

                        Non, là, faut être sérieux, ça ne s'apprend pas en regardant trois pages et deux tutoriels de 10 minutes.

                        Certains langages sont plus sécurisés que d'autres, parce que, par exemple, ils permettent un contrôle du typage bien plus poussé.  Le programmeur, que que soit le langage et sa compétence, il lui arrive toujours d'écrire une connerie. La question c'est de savoir si le compilateur va le détecter, ou pas.

                        C avec ses pointeurs à qui on peut faire n'importe quoi, c'est l'exemple du langage où les catastrophes n'attendent que de se produire. A peu près chaque fois qu'on lit une alerte de sécurité "attaque par débordement de tampon", c'est dans un programme écrit en C.

                        -
                        Edité par michelbillaud 26 novembre 2019 à 15:39:34

                        • Partager sur Facebook
                        • Partager sur Twitter
                          27 novembre 2019 à 9:25:07

                          Pour que 2 langages soit interopérable faut-il que modifiez ?

                          exemple : Je veux coder un logiciel utilisant le C et le X (un langages crée) que faudrait-il changer dans le "X"  pour qu'il fonctionnent ensemble(soit interopérable au C) ?

                          -
                          Edité par sarazin 27 novembre 2019 à 9:27:36

                          • Partager sur Facebook
                          • Partager sur Twitter
                            27 novembre 2019 à 10:34:08

                            Je ne suis pas sûr de bien comprendre la question.

                            Interopérabilité à quel niveau ?

                            Si on veut qu'un programme puisse faire des appels à des fonctions écrites en X comme si c'était des fonctions écrites en C, il faut  (notamment) que l'implémentation de X respecte les conventions d'appels utilisées pour C sur la même plateforme.

                            https://fr.wikipedia.org/wiki/Application_binary_interface

                            • Partager sur Facebook
                            • Partager sur Twitter
                              29 avril 2023 à 20:44:15

                              si vous avez des ressources à conseillez n'hésiter pas
                              • Partager sur Facebook
                              • Partager sur Twitter

                              comment créer un langage de programmation

                              × 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