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

Mon programme Discussion :

[Open-source][C]GOLO : langage de programmation de type LOGO


Sujet :

Mon programme

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 50
    Points : 103
    Points
    103
    Par défaut [Open-source][C]GOLO : langage de programmation de type LOGO
    Bonjour à tous,

    Je me permets de créer ce post afin de présenter un petit programme que je suis en train de développer.
    Il s'agit d'un interpréteur pour un langage que j'ai nommé GOLO et qui permet de générer des images à l'instar des langages de type LOGO.

    Le langage est très simple, il n'y a par exemple qu'un seul type de donnée (nombres réels) et pas de tableaux.
    La grammaire et les sources sont disponibles ici : https://bitbucket.org/mcc/golo. Il y a aussi quelques exemples dans le dossier 'examples'.

    Je sais que ce type de projet existe déjà sous de nombreuses déclinaisons, mais j'avais envie depuis longtemps de faire mon propre langage de programmation.

    Tout est programmé en C pur sans utilisation de bibliothèque tierce. Il suffit donc d'un compilateur C pour générer l'interpréteur (il y a aussi un Makefile). J'ai écrit pas mal de tests unitaires mais il est fort possible que des bugs soient encore présents. Le code est documenté et pas trop mal commenté (en anglais).

    Si j'ai la motivation j'ajouterai peut-être d'autres éléments au langage (comme les tableaux) et je concevrai éventuellement une interface graphique avec un débogueur pas à pas permettant de suivre la génération de l'image au fil de l'exécution du programme.

    Je suis ouvert à toute idée ou critique. Par ailleurs, comme c'est un projet open source (licence ISC), vous pouvez le forker ou l'utiliser dans vos propres projets si ça vous chante.

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 50
    Points : 103
    Points
    103
    Par défaut
    Je viens de terminer la version 0.2. Elle n'ajoute pas de nouvelles fonctionnalités mais améliore la gestion des variables et des fonctions. En effet, dans la v0.1 les variables et les fonctions étaient recherchées dans une table à chaque utilisation dans l'interpréteur, ce qui était très peu optimal. Maintenant on y accède directement par adresse.

    Voici un exemple de programme et l'image correspondante produite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    # draws a n-gon with a incircle radius of r
    # the circle in the polygon is centered at (x,y)
    function NGon n r x y
      set oldx @x
      set oldy @y
      set oldangle @angle
      
      set PI 3.14159
      set i 0
      set l 2 * r * (Tan (PI / n)) # edge length
      set a 360 / n                # angle
      
      # we place the turtle at the center of the canvas
      up
      goto x - l / 2 y - r
      down
      
      # we draw the n-gon
      while i < n
        move l
        turn a
        set i i + 1
      end
      
      # we restore the old values of @x @y and @angle
      up
      goto oldx oldy
      turn -@angle + oldangle
      down
    end
    
    
    begin 500 500
      set min 3
      set max 20
      set i min
      
      # we draw some polygons
      while i <= max
        NGon i 100 @w / 2 @h / 2
        set i i + 1
      end
    end
    Nom : ngon.png
Affichages : 611
Taille : 5,9 Ko

    Pour information le programme dessine des polygones à n côtés (de 3 à 20 côtés en l'occurrence) avec le centre de leur cercle inscrit placé au centre du canevas.

    Voici d'autres images qu'il est possible de générer (elles ont été réduites) :
    Nom : gradient.png
Affichages : 579
Taille : 1,4 KoNom : koch.png
Affichages : 387
Taille : 19,2 Ko

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Pouvons nous avoir un exemple (genre Hello World ) du langage et des exemples des images générées, dans le post, s'il vous plait.
    Quelle bibliothèque utilisez vous pour les tests unitaires ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 50
    Points : 103
    Points
    103
    Par défaut
    J'ai modifié mon second message pour y introduire un exemple et une image (je ne peux visiblement plus modifier le premier car le temps imparti est dépassé).
    Pour les tests unitaires j'ai opté pour la simplicité. En effet, je n'utilise qu'un seul #define pour toutes les assertions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define golo_assert(test) do { \
      if (!(test)) printf("%s : " #test " failed\n", __func__); \
    } while(0);
    Je me suis inspiré de cette page : http://www.jera.com/techinfo/jtns/jtn002.html.

    Pour lancer les tests unitaires il faut taper 'make tests', ce qui produit l'exécutable 'golo_tests' dans le dossier 'bin'. Il se lance sans argument.
    Comme je développe sous GNU/Linux, j'utilise aussi l'outil Valgrind qui est très utile pour détecter les fuites mémoire ou les variables non initialisées par exemple.

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    C'est cool le rendu. Il est rendu en temps réel, ou juste dans un BMP (ou autre) puis on ouvre avec un éditeur externe ?
    Pour valgrind, d'après moi, c'est la base
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 50
    Points : 103
    Points
    103
    Par défaut
    Pour l'instant le programme génère une image BMP mais en interne c'est un simple tableau qui pourrait être affiché à l'écran. Comme je l'ai indiqué dans mon premier message, je ferai peut-être une interface graphique plus tard.

    Voici un autre exemple de rendu possible (issu de l'exemple wave.golo) :
    Nom : wave.png
Affichages : 551
Taille : 6,2 Ko

Discussions similaires

  1. [Bénévole] Projet Open Source (Java) dev's : création d'un langage de programmation
    Par izanagi1995 dans le forum Autres
    Réponses: 0
    Dernier message: 10/01/2014, 10h46
  2. Réponses: 2
    Dernier message: 10/04/2013, 14h54
  3. Réponses: 0
    Dernier message: 05/05/2010, 12h33
  4. Réponses: 0
    Dernier message: 05/05/2010, 12h33
  5. [LZW] utilisation dans un programme open source
    Par Muesko dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 02/04/2007, 11h47

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