human
Comment quelqu'un crée un langage de programmation Je commence à apprendre la programmation informatique, et je me demandais comment un langage comme Java ou C# est créé. Explique comme si j'avais cinq ans.
gpt
Il existe deux types de programmes différents que les gens écrivent pour créer un langage de programmation. L'un s'appelle un interpréteur et l'autre un compilateur. Ils fonctionnent différemment , mais n'importe quel langage * pourrait * ( en théorie ) être créé avec l' un ou l' autre . (Quelques mots pour définir : Le *langage source* est le nouveau langage que nous créons, et le *code source* est le code écrit dans ce langage.) Un *compilateur* traduit le code du langage source vers un langage plus simple. Il s'agit généralement de * code machine * , qui est le langage spécial que les processeurs des ordinateurs comprennent déjà . ( Sous Windows , les fichiers EXE sont écrits en code machine . ) Un * interprète * parcourt le code source et , au lieu de le traduire , * fait * simplement ce que le code source dit de faire . Si le code dit " print ' Hello ' " , l' exécution d' un compilateur dessus crée un fichier de code machine qui , si vous l' exécutez , affichera " Hello " ... tandis que l' exécution d' un interpréteur dessus affichera simplement " Hello " tout de suite . Le code compilé est généralement plus rapide que le code interprété. Cependant, les compilateurs et les interpréteurs ont certaines choses en commun. Un compilateur et un interpréteur ont tous deux besoin d'une partie qui reconnaît les instructions dans le langage source. C'est ce qu'on appelle un * analyseur * . Le code source est écrit dans des fichiers texte et le travail de l'analyseur consiste à reconnaître la structure du texte — à le regrouper en instructions , expressions , noms de variables , etc. L'analyseur contrôle des choses comme si vous avez besoin de parenthèses autour des expressions ; si vous placez des points-virgules à la fin des lignes et quels types de caractères sont autorisés dans les noms de variables. C'est aussi le travail de l'analyseur de signaler au programmeur les erreurs de syntaxe. La sortie d'un parseur est un arbre de syntaxe, qui ressemble un peu à la création de diagrammes de phrases à l'école. Si vous avez déjà dû schématiser des phrases , vous savez que vous devez dire à quelle partie du discours appartient chaque mot , et comment ils s'enchaînent : dans " le gros homme a couru devant l' arbre " , vous dites que " gros " est un adjectif modifiant « man » par exemple, et vous dessinez « fat » attaché à « man » au lieu de l'un des autres mots. Un analyseur fait la même chose mais pour le code source au lieu de l'anglais. ( Soit dit en passant , l' analyse est le point de rencontre entre l' informatique et la linguistique ; les informaticiens et les linguistes utilisent la même théorie mathématique sur l' analyse . ) Après l' analyse , les compilateurs et les interprètes peuvent tous les deux effectuer une * optimisation * sur l' arbre de syntaxe . Ils appliquent des règles qui rendent le code plus petit ou plus rapide. Par exemple , si vous aviez du code disant " ajoutez un , puis ajoutez un encore , puis ajoutez encore un " , il pourrait être remplacé par " ajoutez trois " . Après cela, cependant, un compilateur et un interpréteur sont assez différents. Un compilateur a un * générateur de code * ou * un backend de compilateur * qui prend l' arbre syntaxique et le transforme en instructions de code machine . Il dispose alors d'un *linker* qui relie ce nouveau morceau de code machine avec d'autres morceaux déjà existants (librairies) fournis par le système d'exploitation ou livrés avec le langage. Un interpréteur a un *évaluateur* (ou simplement *eval* pour faire court) qui parcourt l'arbre de syntaxe et fait ce que dit chaque instruction. Beaucoup de langages, comme Perl et Python, sont en fait écrits comme un mélange de compilateur et d'interpréteur. Ils compilent le code source en un code simple qui est similaire à un code machine, mais pas tout à fait aussi simple ; puis ils exécutent ce * bytecode * dans un interpréteur spécial . Cela présente certains des avantages de la compilation (le code s'exécute plus rapidement) et certains des avantages de l'interprétation (le langage peut offrir certains types d'aide au programmeur que les compilateurs ne peuvent généralement pas).