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

Algorithmes et structures de données Discussion :

Théorie des compilateurs & algos


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut Théorie des compilateurs & algos
    Bonjour, j'ai développé un petit langage interprété.
    Maintenant j'aimerais qu'il puisse générer du code natif compilé, j'y suis presque arrivé sauf que la phase de compilation est plutôt longue et le code généré loin d'être optimal ...

    Donc je suis à la recherche de tout type d'informations sur le sujet.
    En particulier et en vrac :
    - algorithmes optimisés de compilation pour une compilation plus rapide
    - algorithmes et heuristiques d'optimisation de code compilé
    - site internet sur les algorithmes spécialisés en compilation
    - pointeurs (FAQ, livres, initiation, ...) aux théories de la compilation
    - petits langages compilés en licences code libre (source d'inspiration) ...

    Pour les sites Web, il y a bien Tony's Brook Algorithms repository, mais les algorithmes ne sont pas adaptés à mon pb.

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Je pense que LLVM est fait pour toi
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #3
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut


    Waou, m'a l'air pas mal du tout ... avec plein d'articles.

    Je ne pensais pas que l'on pouvait faire autant chose sur du mid-code.

    Passer de l'interprété au compilé c'est un vrai projet en soit.

  4. #4
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par pseudocode
    Je pense que LLVM est fait pour toi
    J'avais déjà réalisé un petit compilateur, qui compilait vers un langage 3 adresses (une sorte de langage universelle, assez proche de l'assembleur). Mais je me suis souvent dit que si je le refaisais, j'aurais tendance à compiler vers un langage de plus haut niveau, genre C, ou C++. Je limiterai ainsi le développement, et ce serait à gcc de faire pas mal d'optimisation, et à gcc de faire le code machine. Ce qui fait que d'un coup, le langage deviendrait multiplateforme en plus.

  5. #5
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Merci millie , cela m'éclaire grandement sur la façon dont je vais m'y prendre.
    A vrai dire je n'y avais pas pensé, mais avec le recul ça me semble trés naturel.
    D'ailleurs gcc ne fait-il pas la même chose (au niveau en dessous) en s'appuyant sur l'assembleur gas ?

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    De ce qu'il me reste de mes cours de compilations, on nous avait dit qu'une stratégie intéressante pour faire un compilateur était de faire ça en plusieurs étapes.

    Une étapes où l'on compile dans un langage "universel", et une étape où l'on compile le langage universel vers un langage assembleur (et puis l'assembleur fait le reste).

    Souvent (mais alors, je ne sais pas avec quel langage ils le font), il compile vers un langage 3 adresses (assez proche de l'assembleur, mais assez différent pour qu'il puisse être traduit dans n'importe quel langage assembleur).

    Maintenant, on peut aussi penser qu'on dispose de langage intérmediaire de plus haut niveau et bien plus pratique, donc, on peut aisément se demander pourquoi on se priverait pas de compiler vers un langage comme le C (ce qui permet d'emblée de supprimer la deuxième étape)

    Il me semble par exemple (ce n'est pas une certitude, mais les souvenirs que j'ai) que le langage Ocaml réalise ce genre de chose. Il y a une étape où il transforme le code camL en code C. J'espère ne pas dire de bêtise

    EDIT : J'ai dit le C car c'est le langage que je connais le mieux, mais évidemment, il est possible de compiler vers un autre langage

  7. #7
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par millie
    J'avais déjà réalisé un petit compilateur, qui compilait vers un langage 3 adresses (une sorte de langage universelle, assez proche de l'assembleur). Mais je me suis souvent dit que si je le refaisais, j'aurais tendance à compiler vers un langage de plus haut niveau, genre C, ou C++. Je limiterai ainsi le développement, et ce serait à gcc de faire pas mal d'optimisation, et à gcc de faire le code machine. Ce qui fait que d'un coup, le langage deviendrait multiplateforme en plus.
    C'est une technique classique qui permet d'avoir un code raisonnablement efficace tout en se concentrant sur le front-end, qui contient normalement la partie la plus intéressante pour un nouveau langage. Mais on a facilement des dépendances sur la taille des types, la boutitude, le format des pointeurs, etc.

  8. #8
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Par défaut
    Ah ben c'est sur que si tu peux ecrire un traducteur de ton langage vers le C, ca va beaucoup te simpifier la vie ! Une simple regle a ajouter dans ton makefile, et hop... compilation par gcc avec toutes les optims.

    Mais bon, je ne faisais que répondre a ton 1er post qui parlait de techniques de compilation et optimisation. D'une maniere générale, on compile toujours le langage de départ vers un langage intermediaire. C'est sur ce langage intermédiaire qu'on applique les optimisations. Ensuite vient la génération du code machine spécifique (jeu d'instruction).

    Ce découpage permet de faire evoluer indépendamment les langages de départ supportés (front-end), les techniques d'optimisation (mid-level) et les architecture matérielles supportées (back-end).
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  9. #9
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Merci encore pour tous ces conseils.
    Je vais effectivement dans un premier temps généré du C|C++
    tant que ca reste un projet perso.

    Si jamais un jour le langage devient publique je suivrait
    tes conseils "pseudocode".

    Pour ce qui est du bootstrap est-ce que c'es un pb. spécifique aux
    compilateurs ?
    Parce que en interprété soit j'en ai fait sans le savoir, soit je suis un
    lol

Discussions similaires

  1. Théorie des graphes
    Par millie dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 08/12/2008, 21h59
  2. Théorie des graphes : algo de Kruskal et files de priorités
    Par AlKoLiK dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/05/2007, 10h47
  3. Question à propos des compilateurs
    Par elf dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 20/07/2005, 17h00

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