IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langages de programmation Discussion :

Nim est-il un transpilateur


Sujet :

Langages de programmation

  1. #1
    Membre expérimenté

    Homme Profil pro
    Retraite
    Inscrit en
    Octobre 2005
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraite
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 479
    Points : 1 348
    Points
    1 348
    Billets dans le blog
    1
    Par défaut Nim est-il un transpilateur
    article: de https://peterme.net/
    Nim est-il un transpileur ?
    19 octobre 2021 - Conception du langage , Nim , Programmation

    C'est une question qui revient maintes et maintes fois sur le canal IRC, lorsque l'on parle aux gens en personne, et dans la section des commentaires à peu près à chaque fois que Nim a un article sur Hackernews ou l'un des plus gros sous-programmes de programmation. C'est aussi une question qui a été maintes fois répondue, à la fois par un « non » court et efficace, mais aussi sous une forme plus longue. Cet article expliquera en détail pourquoi la réponse est «non» et pourra, espérons-le, servir de référence la prochaine fois que cette question sera posée.
    Qu'est-ce qu'un compilateur de toute façon?

    Ceux qui posent la question « Nim est-il un transpileur ? signifie généralement "par opposition à un compilateur", donc pour comprendre pourquoi la réponse est "non", nous devons comprendre la différence entre un compilateur et un transpileur. Bien que ces mots soient parfois utilisés de manière interchangeable, il existe une distinction subtile mais importante dans leur sens. Mais avant d'entrer dans le vif du sujet, qu'est-ce qu'un compilateur exactement ? Les compilateurs existent depuis presque aussi longtemps que les ordinateurs sont utilisés. Les premiers ont commencé à apparaître au début des années 50, alors que les ordinateurs devenaient de plus en plus performants. Le travail d'un compilateur est de prendre un programme écrit dans un langage abstrait et de le convertir en quelque chose de plus concret. De nombreux compilateurs compileront à partir du langage de votre choix directement en code binaire, comme GCC, ou dans un format de bytecode VM particulier, comme le compilateur Java. D'autres compilateurs prendront un langage d'abstraction supérieure et le compileront simplement en une implémentation plus concrète dans un langage différent. Un exemple de ceci est TypeScript, qui compile son code en JavaScript, exécutant toutes les vérifications de type statique et autres avant de sortir uniquement du code JavaScript valide.
    Mais je pensais qu'un transpiler venait de convertir entre les langues?

    Cela semble être l'idée fausse qui amène les gens à poser la question qui intitule cet article. S'il est vrai qu'un transpileur convertit d'une langue à une autre, la distinction réside dans les niveaux d'abstraction. En compilant C en assembleur, vous utilisez essentiellement des informations dans le langage C pour prendre des décisions sur le code assembleur à générer, supprimez les informations dans le processus. Un transpiler en revanche est un outil qui convertit entre deux langues tout en gardant le même niveau d'abstraction. Une transpilation théorique parfaite est donc un processus à double sens où l'on peut faire des allers-retours entre les langues. Cependant, ce n'est généralement pas le cas en raison des changements structurels et des hypothèses nécessaires pour transpirer entre deux langues différentes. Des exemples de transpileurs incluent JSweet qui convertit de Java en TypeScript, f2c qui transpile Fortran 77 en C, ou J2ObjC qui convertit de Java en Objective-C, ou encore l'outil c2nim qui est livré avec Nim et compile de C à Nim. Les transpileurs sont généralement utilisés lorsque vous souhaitez utiliser le code d'un langage qui se trouve au même niveau d'abstraction et l'utiliser dans un langage d'abstraction identique ou supérieure. Et même cette liste utilise le terme un peu vaguement, f2c par exemple faisait partie de la chaîne pour compiler Fortran en code machine, et traduit donc les fonctionnalités Fortran en C.
    Alors, qu'est-ce qui fait que Nim n'est pas un transpileur ?

    Le compilateur Nim prend le code Nim et génère du code C, C++, Objective-C ou JavaScript. Cela peut ressembler étrangement à un transpiler. Surtout quand il s'agit de compiler dans les langages dactylographiés. Mais encore une fois, le point clé est le niveau d'abstraction. Nim a non seulement un système de types beaucoup plus strict que par exemple C, mais il prend également en charge la métaprogrammation la meilleure de sa catégorie. Cela signifie que le compilateur Nim ne convertira pas seulement le code Nim en code C, mais il permet au programme lui-même de générer du code Nim avec le code Nim. Cela se fait à l'aide de modèles et de macros et constitue une grande partie de ce qui rend Nim si flexible. En fait, vous pouvez écrire un transpileur dans Nim qui lit un fichier de code à partir d'une langue différente et le convertit en code Nim pendant la compilation. Donc non, Nim n'est pas simplement un transpileur, le code qu'il produit n'est pas convertible en Nim qui l'a créé et le niveau d'abstraction a considérablement baissé. En fait, le code C que Nim produit n'est même pas destiné à être lu ou compris par un humain, il est généré pour être aussi rapide que possible, et Nim fait quelques astuces astucieuses pour que le compilateur C crache du code machine plus efficace. Ces fonctionnalités placent Nim confortablement dans l'espace du compilateur.
    Alors n'y a-t-il rien qui soit un vrai transpiler ?

    La définition ci-dessus est assez stricte, et après l'avoir lu, beaucoup de gens se poseront cette question. Et tout dépend de la rigueur avec laquelle vous voulez être dans votre définition. Une syntaxe différente est-elle une abstraction ? Java et Objective-C sont-ils suffisamment similaires pour qu'ils ne franchissent pas les limites de l'abstraction ? La réalité de la situation est que toutes les langues ont des différences, après tout, quelle serait la raison de créer une copie exacte d'une langue ? Mais en général, le terme est le plus souvent appliqué aux outils autonomes qui prennent un projet déjà complet dans une langue et le convertissent dans une autre langue. Parfois, ces outils peuvent même ne pas effectuer la conversion à 100% avec précision ou même échouer carrément sur des parties qui ne peuvent pas être traduites avec précision. Ces outils sont souvent utilisés pour effectuer une conversion ponctuelle d'une langue vers une autre, ou simplement pour pouvoir utiliser une certaine bibliothèque dans une autre langue que celle qui a été écrite. Cependant, le terme est également utilisé dans des termes plus décontractés pour décrire, par exemple, Babel qui convertit du JavaScript de nouvelle génération en JavaScript compatible avec les navigateurs (Babel lui-même se définit comme un compilateur), ou même CoffeeScript qui est principalement une transformation syntaxique élaborée en JavaScript (et se réfère également à lui-même en tant que « compilation vers JavaScript »). Comme l'utilisateur "mst" l'a mis en discutant de cela sur IRC :

    transpiler, n. : le compilateur de quelqu'un d'autre

    Remarques finales

    En résumé, le mot transpiler a été assez galvaudé ces derniers temps. Et tandis qu'une définition plus détendue que celle que j'ai utilisée ici peut certainement être appliquée, vous devrez l'assouplir presque jusqu'à l'absurdité afin de catégoriser Nim comme transpileur. Nim utilise C à peu près de la même manière que Rust utilise le LLVM par exemple, simplement une cible pour la compilation qui s'optimisera bien et s'exécutera sur de nombreuses cibles différentes. Après tout, se tenir sur les épaules de géants est un excellent moyen d'atteindre un long chemin sans avoir à faire beaucoup d'escalade.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    En gros, tout cet article (dont l'usage abusif du mot "langue" fait penser à une traduction automatique) avance juste l'argument «Un "transpileur" (transcompilateur) ça convertit en un langage du même niveau d'abstraction, donc Nim n'en est pas un», une définition qui me parait controversée depuis que les premiers "compilateurs" C++ et Objective-C existaient (qui transcompilaient vers C, justement parce que c'est le niveau d'abstraction immédiatement inférieur).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre expérimenté

    Homme Profil pro
    Retraite
    Inscrit en
    Octobre 2005
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraite
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 479
    Points : 1 348
    Points
    1 348
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    .
    Si tu compiles et demande la sortie du code tu verras que ce n'est pas du C tel qu'on le conçoit...

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par JPLAROCHE Voir le message
    En résumé, le mot transpiler a été assez galvaudé ces derniers temps..
    votre message est très bien c'est parfait cependant j'arrive pas trop bien à saisir quel problème précisément il veut solutionner...
    l'intérêt de développer un langage plus abstrait bref une couche au-dessus des langages "classiques" comme Java,C# ou C++ ou tout ce que l'on veut.. c'est justement de produire du code qui soit indépendant des spécificités de chacun de ses langages.

    Par exemple si vous devez créer un formulaire sur un écran pour la saisie de données avec des zones de saisies texte et des boutons sur lesquels on clique le problème de prendre un langage en particulier c'est qu'il ne sera pas "cross-plateform",les exécutables doivent pouvoir tourner sous Linux ou Windows sauf à prendre Java et dérivés .

  5. #5
    Membre expérimenté

    Homme Profil pro
    Retraite
    Inscrit en
    Octobre 2005
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraite
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 479
    Points : 1 348
    Points
    1 348
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    votre message est très bien c'est parfait cependant j'arrive pas trop bien à saisir quel problème précisément il veut solutionner...
    l'intérêt de développer un langage plus abstrait bref une couche au-dessus des langages "classiques" comme Java,C# ou C++ ou tout ce que l'on veut.. c'est justement de produire du code qui soit indépendant des spécificités de chacun de ses langages.

    Par exemple si vous devez créer un formulaire sur un écran pour la saisie de données avec des zones de saisies texte et des boutons sur lesquels on clique le problème de prendre un langage en particulier c'est qu'il ne sera pas "cross-plateform",les exécutables doivent pouvoir tourner sous Linux ou Windows sauf à prendre Java et dérivés .
    Bonjour,
    justement ce langage est cross-plateforme. Perso je ne développe que sur Linux, j'ai connu win3.0 ... win10 "travaille oblige"et dos il y a 45 ans(encore en fonction pour des machines industrielles).... mais je vois beaucoup de personnes qui développe sur windows et linux et font part de leurs open-source.
    Perso j'ai fait quelque chose uniquement pour Linux, mais je pourrais ouvrir une abstraction qui permettrait de travailler avec Windows (le projet est de reproduire le 5250/3270)
    par contre, le développement avec wxwidget ou gtk fonctionne sur les plateformes Linux Windows Mac , les modules SQL sont multiplateformes (pour l'avoir testé)
    les modèles OpenGL sont aussi de la partit et multiplateforme.

    j'ai développé un module qui permet de faire du web interactif (synchrone) il peut être mis sur les 3 plateformes aujourd'hui ce genre de programme est quelque chose de frugal (perso je préfère les bonnes et vrais app.) par contre l'aspect connexion, je reconnais que cela peut et est pratique et sans faire du cloud

    Pour vous répondre ce n'est pas uniquement une couche au-dessus de langage classique, il introduit des notions de sécurité avec une logique un peu comme le Pascal, le code GCC produit n'est pas du "C" lisible tel que l'on peut le pratiquer, il ne faut pas espérer décompiler et lire le code même Rust fait du "C" mais revu et corrigé et introduit une nouvelle conception, il en va de même pour Nim . on est quand même loin du "C" 99 mais plus poche du C++ avec un contrôle beaucoup plus dur.

    ps: mon projet est de remettre au gout du jour le travaille avec les applications type console avec fenêtre etc... étant à la retraite je prends mon temps je sais que certain aurait voulue que j'introduis le hack avec Windows je préfère finir mon générateur de code par la suite peut-être je ferai la partie du hack Windows ce n'est pas très compliqué aujourd'ui utf8 est pratiquable sur Windows. Mais aussi d'avoir un Linux dans Windows d'ailleurs Microsoft la dit ....

    @bientôt

Discussions similaires

  1. Réponses: 11
    Dernier message: 20/12/2021, 03h23
  2. Réponses: 1
    Dernier message: 19/10/2020, 11h49
  3. Réponses: 0
    Dernier message: 05/04/2020, 14h37
  4. Qu'est ce qu'un grand projet ?
    Par Geronimo dans le forum Débats sur le développement - Le Best Of
    Réponses: 62
    Dernier message: 04/04/2013, 14h52
  5. Quelle est la fiabilité du protocole SSL ?
    Par Anonymous dans le forum Développement
    Réponses: 5
    Dernier message: 05/09/2002, 13h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo