Linotte, la programmation en français en version 1.6

Posté par . Édité par Nÿco et Xavier Claude. Modéré par Xavier Claude.
15
23
jan.
2012
Technologie

Linotte est un langage de programmation particulier dans le sens où sa syntaxe est en français. Riche et facile à appréhender, il se veut accessible à des personnes débutantes en programmation informatique.

Sept ans après sa création, la version 1.6 est sortie en ce début d'année. Mais que peut-on ajouter dans un langage en français en bout de sept ans de développement ? Les principales nouveautés se sont focalisées sur la réduction du code pour écrire des algorithmes simples et la correction des bogues.

NdM : Linotte est sous licence GPLv3

Les nouveautés

Voici la liste des nouveautés apparues depuis la version 1.4 à la version 1.6 :

  • La possibilité de déclarer des fonctions en tant que variables :

    Fonction Lambda :
     Principal :
      Rôles :
       x & y :: nombre
       multiplication :: lambda x | y <- x * y
      Actions :
       multiplication (5,6) !
    
  • L'opérateur ternaire :

    Opérateur ternaire :
     Principal :
      Rôles :
       note <- 15
      Actions :
       ter (note<10,"refusé", "admis") !
    
  • L'écriture de certains algorithmes peut être écrite de façon très concise :

    Nombre de Fibonacci :
     Principal :
      Rôles :
       n :: nombre
       fibo :: lambda n <- ter (n<2, n, fibo (n-1) + fibo (n-2))
      Actions :
       fibo (20) !
    
  • Des évolutions de l'Atelier de programmation :

L'environnement de développement du langage Linotte a évolué. Il a été simplifié pour rendre plus accessible les exemples et il ajoute la notion d'espace de travail :

Atelier Linotte 1.6

  • La possibilité d’écrire des livres courts en préfixant son code par un pied-de-mouche :

Pas besoin de spécifier le nom du livre et le nom du premier paragraphe en utilisant le pied-de-mouche en début du programme mais cette structure courte interdit de découper son programme en plusieurs fonctions :

    ¶
    durée <- 0
    e :: nombre
    demande e
    tant que e != 1, lis
        durée vaut durée + 1
        si (e mod 2) == 0 alors e vaut e / 2
        sinon, e vaut e * 3 + 1
    ferme
    affiche durée

  • Ajout de l’inférence de types pour les types nombre et texte :

L'inférence permet de raccourcir la définition des types simples, ainsi l'expression :

    nb :: nombre <- 3.14

peut être raccourcie en :

    nb <- 3.14

  • Ajout de l’interpolation des acteurs :

    ¶
    message <- "Vous utilisez la version ${version} du langage !"
    
  • Le gestionnaire de greffons :

Le gestionnaire de greffons permet de télécharger automatiquement des greffons avec un minimum d'intervention de l'utilisateur en ajoutant dans son programme une ligne définissant le greffon souhaité, la version et le lieu de téléchargement :

    ~greffon 1 imprimeur 0.1 "http://abaque.googlecode.com/files/Imprimeur.zgl"

L'exemple complet est disponible ici : imprimeur.liv

Le gestionnaire est pour l'instant très simple mais permet au développeur d'avoir à éviter d'expliquer à l'utilisateur de son livre la procédure d'installation des greffons.

Quel est le futur du langage ?

Les évolutions structurelles du langage vont ralentir, non pas par manque de temps ou d'idées, mais par souci de consolider l'existant (moins de bogues, plus rapide et surtout, une meilleur documentation).

Bonne programmation !

  • # Objectifs du langage ?

    Posté par . Évalué à 6.

    Bonjour,

    Je viens de rapidement faire un tour sur le site de Linotte et je n'ai pas trouvé cette information : à qui se destine avant tout ce langage ?

    Pour la découverte de l'ordinateur, il me semble très pertinent de franciser des langages comme LOGO. Pour ce public, Linotte semble par contre un brin compliqué.

    Pour ceux qui se lancent dans des études d'informatique, il me semble que savoir chercher dans la doc est au moins aussi important que la maîtrise du langage. Et là, difficile de passer à côté de l'anglais.

    Un cas d'utilisation auquel Linotte est certainement bien adapté est la découverte de l'algorithmique. Pourtant je dois avouer qu'avec ces mots clefs en français et sa syntaxe pleine de deux points, le langage me semble pas intuitif. Enfin, c'est certainement juste une déformation due à mon utilisation des langages à la syntaxe de type C.
    Quel sont vos retours à ce sujet ? Est-ce qu'il vaut mieux changer complètement de syntaxe quand on change de langage pour ne pas faire de confusion ou bien est-ce qu'un air de déjà-vu aide à s'y retrouver ?

    • [^] # Re: Objectifs du langage ?

      Posté par (page perso) . Évalué à 10.

      Et j'ajoute qu'on se demande qui est à la tête de Linotte.

    • [^] # Re: Objectifs du langage ?

      Posté par . Évalué à 1.

      Pour ceux qui se lancent dans des études d'informatique, il me semble que savoir chercher dans la doc est au moins aussi important que la maîtrise du langage. Et là, difficile de passer à côté de l'anglais.

      plus que la doc c'est deja savoir penser et creer un algo.

      hors finalement linotte, c'est exactement ce que tu as ecrit dans ton algo
      sans avoir à le traduire dans un langage

      • [^] # Re: Objectifs du langage ?

        Posté par . Évalué à 5.

        Sauf que Linotte possède une syntaxe et que l'effort pour faire correspondre la syntaxe de ton algo avec celle de Linotte existe bel et bien.

        Elle est peut-être même plus compliquée, si tu prends en compte la complexité de la langue française par rapport à quelque chose de plus concis en langue anglaise.

        Sans aller jusque là, le language possède de belles caractéristiques, mais j'ai du mal à appréhender sa syntaxe, même françisée - peut-être suis-je trop habitué à la syntaxe C.

      • [^] # Re: Objectifs du langage ?

        Posté par (page perso) . Évalué à 10.

        Rien avoir avec la choucroute mais je m'inquiète pour ma santé à force de lire ces derniers temps nombre de « hors » là où je comprends « or ». Si quelqu'un pouvait me rassurer...

        « J'ai pas Word, j'ai pas Windows, et j'ai pas la télé ! »

        • [^] # Re: Objectifs du langage ?

          Posté par . Évalué à 6.

          Je ne te rassure pas, ta santé est atteinte :
          "Rien avoir avec la choucroute" -> Rien à voir avec la choucroute.
          A moins que ce soit dû à un abus de Riesling...

      • [^] # Re: Objectifs du langage ?

        Posté par . Évalué à 0.

        plus que la doc c'est deja savoir penser et creer un algo.

        Tout à fait d'accord et je trouve l'idée excellente même si elle n'est pas nouvelle (langage de certains tableurs par exemple). Penser la logique dans sa langue maternelle, c'est tout simplement ce que l'on fait en math scolaire. L'avantage de Linotte, capitaliser les réflexes acquis là et dans la vie quotidienne pour perfectionner son raisonnement donc son analyse informatique.

        Ça n'a rien de révolutionnaire puisque c'est ce que font tous les jours... les anglophones, les veinards.

        Question : Ceux qui auraient travailler longtemps sur Linotte peuvent-ils s'adapter facilement aux langages anglophones ? Peut-être pas si on regarde la difficulté des anglophones à s'adapter aux autres langues. À moins que ce ne soit qu'un problème de manque d'habitude dans la traduction ?

      • [^] # Re: Objectifs du langage ?

        Posté par (page perso) . Évalué à 7.

        hors finalement linotte, c'est exactement ce que tu as ecrit dans ton algo
        sans avoir à le traduire dans un langage

        C'est vrai que :
        "durée <- 0"
        C'est tellement plus naturel que :
        "durée = 0"

        ou :
        "durée vaut durée + 1"
        Gni?
        En math à l'école, j'ai appris "durée = durée + 1". Tiens, comme en C (bon, ok ++durée est moins naturel), mais C c'est pourri, donc faut pas mettre "=" alors que c'est le signe qui correspond en français.

        "ferme"? Je ferme quoi?
        "sinon," (noter la virgule) : désolé, pas de virgule après "sinon" en français.

        Désolé, mais c'est juste un discours marketing : si je lis le code, je ne comprend pas plus que du C, tellement c'est du français tarabiscoté. Ca n'a absolument rien à voir avec l'algo qu'on a dans la tête, il faut traduire dans tous les cas.

        Sans compter que va essayer de trouver des contributeurs non francophones...
        Les français, les meilleurs pour se croire le centre du monde, le seul hic par rapport aux anglophones, c'est que ça fait bien longtemps qu'ils ne le sont plus.

        • [^] # Re: Objectifs du langage ?

          Posté par (page perso) . Évalué à 8.

          En math à l'école, j'ai appris "durée = durée + 1"

          Euh… lol.
          Moi j'ai appris que durée < durée + 1 (sauf pour 1=0 ou pour de grande valeur de durée).
          La notion de variable (au sens informatique du terme) n'existe pas en math. Le signe « = » signifie l'égalité, voire à la rigueur la définition (soit x=3). Mais en aucun cas la modification d'une variable !

          D'ailleurs, c'est une source récurrente d'erreur en C

          if (x=1) {
          ...
          }

          au lieu de

          if (x==1) {
          ...
          }

          Avoir un signe différent pour un nouveau concept, moi je trouve que ça se défends.

          • [^] # Re: Objectifs du langage ?

            Posté par (page perso) . Évalué à 3.

            voire à la rigueur la définition (soit x=3)

            Ben... Voila.

            Avoir un signe différent pour un nouveau concept, moi je trouve que ça se défends.

            Ca ce défends. Je n'ai pas spécialement critiqué ça.
            Ce que je critique, c'est faire du pseudo-français (digne de mon niveau en anglais, et non, ce n'est pas une qualité) et dire ensuite que c'est fait pour que ça suive l'algo qu'on a pensé (en français donc) pour les français (et uniquement eux, le français étant une langue qu'on apprend de moins en moins dans les écoles de pays non francophones).

            Non : il faut apprendre une autre langue (personnellement, je ne la trouve pas du tout plus facile que le C, parait que c'est en français, admettons, mais d'une les enfants apprennent l'anglais au primaire de nos jours donc il peuvent très bien comprendre "while" pour "tant que", de deux bonjour le renfermement sur soit même ce serait sponsorisé par le FN que ça ne m'étonnerait pas, et de trois "<-" pour l'assignation je ne vois pas le rapport avec le français).

            • [^] # Re: Objectifs du langage ?

              Posté par (page perso) . Évalué à 3.

              Non mais je te rassure, sinon je suis d'accord avec toi. Surtout que du code, c'est très loin de ressembler à l'anglais... Mise à part trois malheureux mots clef (if then else if while...) qui sont les même dans tous les langages de programmation, c'est plus une série de symboles et une logique à part (donc une nouvelle langue à apprendre).

              En fait je répondais car en bon matheux, je ne me suis jamais fais à ce signe « = ». C'est pour ça que je préfère la programmation fonctionnelle où les variables ne sont pas modifiables et où le signe = à la même sémantique qu'en math (définitions et test).

              À la rigueur, si on veut faire programmer des jeunes qui ne parlent pas anglais, c'est plus le nom des fonctions des bibliothèques qu'il faut traduire que le langage lui même (par exemple avoir une fonction tracer_cerle au lieu de draw_circle).

            • [^] # Re: Objectifs du langage ?

              Posté par . Évalué à 1.

              voire à la rigueur la définition (soit x=3)

              Ben... Voila.

              Une définition, ça se fait une seule fois : maintenant que tu as dit que x ça valait 3, tu ne va pas dire trois lignes plus loin que ça vaut 4 !! Sale menteur !

              Bien sûr on peut avoir d'autres définitions de x dans un autre contexte mais ça c'est acceptable, ce n'est pas vraiment le même x (les définitions sont locales).

              Dans les langages de programmation fonctionnelle (Haskell, OCaml, Scala, F#, ...) le signe égal est réservé aux définitions, une fois un nom défini, la valeur désignée ne peut plus changer. Lorsqu'ils ont une notion de "variables" et d'affectation, ces langages utilisent une autre syntaxe que le "=", comme d'ailleurs certains langages impératifs autres que C (Pascal par exemple).

              L'emploi d'un "=" pour l'affectation est à mon sens l'un des choix les plus discutable du C, malheureusement hérité par la plupart des langages mainstream.

              L'exemple d'erreur fourni n'est pas vraiment convaincant car finalement peu fréquent, c'est plus la perversion de l'égalité mathématique, et le manque de clarté dans le raisonnement qui en résulte chez beaucoup d'étudiants, que je déplore.

              Jedaï

          • [^] # Re: Objectifs du langage ?

            Posté par . Évalué à 1.

            D'ailleurs, c'est une source récurrente d'erreur en C
            Récurrente jusqu'à quel niveau ?

            J'ai du arrêter de la faire passé la page 2 de mon manuel de programmation...

            • [^] # Re: Objectifs du langage ?

              Posté par (page perso) . Évalué à 2. Dernière modification le 24/01/12 à 07:17.

              Et un bon compilo affiche un avertissement.
              A noter que le "beau" langage ici utilise == aussi (et <- pour l'assignation si j'ai bien compris, donc... Pas plus compréhensible)

              • [^] # Re: Objectifs du langage ?

                Posté par . Évalué à -1.

                A vrai dire je n'aime pas trop ce que j'ai pu voir de ce "beau" langage, mais le choix du "==" se défend car il ne s'agit pas d'une égalité mais d'un test d'égalité ! On peut écrire "2 == 3", c'est une expression légitime et valide, donc comme égalité...

                En bref "x == y" correspond à la question "x et y sont-ils égaux ?" et non pas au "x = y" des Mathématiques, il est donc justifié d'utiliser un autre symbole (et c'est un choix qu'on retrouve dans la plupart des langages fonctionnels conçus par des gens fort en théorie et en formalisme).

                Jedaï

        • [^] # Re: Objectifs du langage ?

          Posté par . Évalué à 5.

          En math à l'école, j'ai appris "durée = durée + 1".

          Je coinche ! Si un étudiant m'avait écrit cela, je lui aurai répondu que les nombres cardinaux sont hors sujet.
          Presque toujours en mathématique, le symbole "=" désigne l'égalité, alors que dans l'exemple ci-dessus c'est une affectation.
          En maths, quand on écrit x = f(x) on ne modifie pas x, on affirme juste que deux expressions sont égales. Pour que x soit inchangé en lui ajoutant 1, il faut... qu'il soit infini. La caractéristique d'un ensemble infini, c'est qu'on peut lui ajouter un élément sans changer sa taille (sa cardinalité, en vocabulaire ensembliste).

          Pour le reste, je suis d'accord que ce langage n'est absolument pas une expression directe de l'algorithme, pas plus que les autres langages. Plutôt moins que d'autres.
          En lisant uniquement les exemples, j'ai même eu du mal avec la syntaxe. Rôles désigne apparemment la section des définitions/déclarations. La distinction entre Lambda et lambda dans le premier exemple est un peu perturbante. L'opérateur ter() n'est pas assez lisible pour un langage qui se veut proche du français courant.

          Par contre, je ne lui connais pas de concurrent sur le créneau des "langages fonctionnels pour débutants en programmation". Chez les lisp, Clojure et Scheme me semblent rébarbatifs pour un premier contact. Chez les ML, j'aime bien Haskell que je trouve peu abordable (cf E/S ou nombres aléatoires), et je ne connais pas (O)Caml. Le peu que j'ai vu d'Erlang l'élimine immédiatement de cette catégorie.

          • [^] # Re: Objectifs du langage ?

            Posté par (page perso) . Évalué à 0.

            C'est bizarre, car j'utilise souvent des « variables » en mathématique ou en physique pour raccourcir les expressions longues. Mes professeurs aussi d'ailleurs.

            C'est autorisé et je ne vois pas le problème. Ça s'utilise même en démonstration (les changements de variables ne sont pas des affectations par hasard ?)

            Tout dépend de type de chacun des membres aussi derrière… comme en programmation quoi.

            • [^] # Re: sens de = en maths et programmation

              Posté par . Évalué à 7.

              Non, désolé, mais tes professeurs ne font pas d'affectation dans leurs démonstrations. Même les physiciens ! Tu ne les verras pas écrire x = x + 1, ils prennent une nouvelle inconnue au lieu de réutiliser la même.
              D'ailleurs, la rédaction est plutôt Posons y = 2x ou Si y = 2x. On déclare une égalité, et on peut donc remplacer partout y par 2x. Cela impose qu'y n'existe pas encore, sinon il faudrait écrire Supposons que y=2x et cela préfigure plutôt un raisonnement par l'absurde. Le sens profond de = est que y désigne le même objet mathématique que 2x. Rien à voir avec une variable de stockage dans un programme procédural.
              Si je disais qu'il existe des exceptions pour le sens du signe "=" en maths, je pensais à p(n) = O(n²). C'est très prisé en algo. Dans ce cas, le symbole = désigne l'appartenance à un ensemble de fonctions, ce n'est pas une égalité.

      • [^] # Re: Objectifs du langage ?

        Posté par . Évalué à 2.

        plus que la doc c'est deja savoir penser et creer un algo.

        Oui enfin à partir du moment ou on apprend à quelqu'un à créer un algo il faudra qu'il saute le pas à un moment de toute façon. C'est nécessaire pour implémenter, et même si tu restes dans le côté 100% académique toute la littérature est en anglais. Ce n'est que reculer pour mieux sauter.

        sans avoir à le traduire dans un langage

        Ah bon ce n'est pas un langage ? Il ne me semble pas que ce soit du langage naturel ni même un CNL...

    • [^] # Re: Objectifs du langage ?

      Posté par . Évalué à 2.

      Du Logo à l'étude d'informatique tu passe de la primaire (à l'époque du PIT) à BAC+1.

      J'ai lu y'a longtemps de ça (ça devait être vers 2002) un article sur une adaptation en japonais du langage Python, l'argument était, que la langue anglaise, peu maîtrisé, rendais la compréhension des concepts de base de la programmation difficile alors même qu'il s'agit de principes simples. C'était un prof qui avait fait cette conversion, pour un public de collégiens.

  • # Quelqu'un comprend ?

    Posté par (page perso) . Évalué à 5.

    Après des années de langage C ou Python, je crois que je n'ai jamais trouvé un langage aussi verbeux. La syntaxe me semble inutilement lourde et difficile à interpréter.

    comme je le disais, je trouve cela trop verbeux, il y a trop de mots différents qu'on en perd la construction des conditions logique et du programme. Remplacer les if et autres rares mots clés directement auraient suffit je pense. Je pense que tout gamin est capable de comprendre un « si(x > 3) », sinon c'est qu'il manque des bases en maths. C'est beaucoup plus simple à lire et naturel que les mêmes expressions en Linotte.

    En plus je ne pige pas les bases du programme. Ils entendent quoi par rôles ? C'est la zone de déclaration et affectation initiale ? Ils n'ont pas vu que la conception des fonctions étaient terriblement mal faite car illisibles et difficilement compréhensibles ?

    Est-ce que traduire les mots clés du langage C n'aurait pas été mieux ? On aurait l'élégance du C avec une syntaxe claire et peu de mots clés, lire si au lieu de if et tant que au lieu de while ne changerait pas la lisibilité pour les non francophones et cela serait bien plus formateur pour les débutants francophones.

    • [^] # Re: Quelqu'un comprend ?

      Posté par (page perso) . Évalué à 5.

      l'élégance du C

      Un gros :-)

      Note: J'aime bien le C, de là à dire qu'il est élégant…

      • [^] # Re: Quelqu'un comprend ?

        Posté par . Évalué à 3.

        Quand c'est moi qui le code le C, ou quelques autres dans le monde, c'est élégant.
        Quand quelques autres le codent, ça l'est nettement moins.
        Et certains sont passés maîtres dans l'art de la lourdeur déprimante en programmation C.

        Le C, t'en fais ce que tu veux, et ça peut être très élégant, naturel, et joli !

        La différence majeure avec par exemple le Python, c'est qu'il est plus aisé d'être élégant en Python, et plus difficile d'être imbitablement lourd. Alors qu'en C il n'y a pas de contraintes, il est aussi facile de faire du laid que du beau, à toi de savoir ce que tu préfères.
        Et pour troller et poursuivre, par exemple en PHP, il est nettement plus facile de faire des trucs très laids, lourds et moches que de coder élégamment, même si ça s'avère possible, avec beaucoup d'efforts.

        Yth, vive Python, na !

      • [^] # Re: Quelqu'un comprend ?

        Posté par . Évalué à 1.

        Chacun voit midi à sa porte, l'élégance est une notion extrêmement subjective. Personnellement, et sans troller, je trouve que le C a un côté simple et minimaliste qui ne manque pas d'élégance. On manipule des fonctions, des entiers et des pointeurs sur des tableaux de bytes, et c'est à peu près tout... Évidemment c'est une élégance très différente du côté mathématique pur de, disons, Haskell, ou de l'uniformité syntaxique des lisp-like (parler d'élégance pour Java, par contre, me paraît plus osé).

        The cake is a lie.

  • # et LSE

    Posté par . Évalué à 1.

    Il y a plus de 20 ans, j'avais utilisé le LSE, langage symbolique d'enseignement...

    • [^] # Re: et LSE

      Posté par (page perso) . Évalué à 2.

      Y'a vingt ans je faisais du LEM(*) sur un bidule comme ça : http://www.silicium.org/oldskool/france/sfena5_20.htm

      Et en français ! C'est pas un truc que je regrette ceci dit.

      (*) langage évolué pour la micro(mini?) informatique de mémoire.

      les pixels au peuple !

      • [^] # Re: et LSE

        Posté par . Évalué à 2.

        1983 : Le SFENA 5-20 est basé sur un processeur Intel x86[...]"Meteor 5" similaire à Unix, multitâche, préemptif et multi-utilisateurs [...] avec 1 Mo de RAM embarqué, ce système supportait jusqu'à 64 terminaux connectés !

        quand on pense que maintenant il faut 1Go de RAM pour faire tourner les applications pour UN utilisateur

        ;)

        • [^] # Re: et LSE

          Posté par (page perso) . Évalué à 4.

          Heu, 1Go ça fait à peine tourner les applications sur mon téléphone, alors 1Go sur un ordi ...

          Pardon, je recommence :

          Heu, 1Go ça fait à peine tourner les applications sur mon téléphone, alors 1Go sur un ordi ...

    • [^] # Re: et LSE

      Posté par . Évalué à 2.

      Y'a aussi le WLangage

      []<-----------------------Pars très loin avant que les grenades n’explosent.

    • [^] # Re: et LSE

      Posté par . Évalué à 2.

      C'était il y a plus longtemps que ça !
      Le LSD créé chez SupÉlec en 1970/1971 adopté par l'éducation nationale et devenu LSE en 1975, il me semble donc ça fait presque 40 ans...
      Éternel recommencement, un nouveau langage en français !
      @+

      • [^] # Re: et LSE

        Posté par (page perso) . Évalué à 7.

        Le LSD créé chez SupÉlec en 1970/1971 [...]

        J'ai toujours cru que le LSD avait été synthétisé par Albert Hofmann en 1938 chez Sandoz à Bâle ...

        "It was a bright cold day in April, and the clocks were striking thirteen" - Georges Orwell

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.