La création d’un langage de programmation

Cet article est le premier d’une série d’articles traitant du développement du langage Triumph.

Ceux qui me connaissent savent que j’aime particulièrement le langage Eiffel. Ce langage, qui peut sembler particulier à première vue a une caractéristique que j’apprécie particulièrement. Ce que j’apprécie particulièrement n’est pas la syntaxe très verbale du langage; ni l’éditeur complètement intégré au langage Eiffel. Ce qui m’intéresse le plus dans ce langage est le fait qu’il respecte, en tout point, les concepts de programmation orientée objet; ce qui n’est pas étonnant considérant que son créateur, Bertrand Meyer, est l’auteur d’un des livres les plus influant sur la technologie objet: « Object-Oriented Software Construction ».

Par contre, force est de constater, après discussion avec plusieurs collègues et étudiants, que le langage est assez difficile d’approche; particulièrement pour ceux qui ont toujours utilisé les langages de programmation moderne (Java, Python, C#, etc.) En effet, au niveau syntaxique, Eiffel est basé sur des langages beaucoup plus verbaux et moins symboliques, comme le langage Pascal ou ALGOL. De plus certaines structures rendent le langage plus difficile d’approche (les clauses « feature », « local », « note », etc.)

Dans ma volonté de bien conseiller mes collègues programmeurs (et sachant que la syntaxe est loin d’être l’élément le plus important d’un langage), je me suis mis à la recherche d’un langage de programmation avec une syntaxe plus proche des langages modernes, mais respectant réellement l’idéologie de la programmation orientée objet. Voici les caractéristiques de langage que je cherchais exactement:

  • Syntaxe similaire à C,
  • Déclaratif,
  • Fortement typé,
  • Par classe,
  • Avec héritage multiple (pas d’interface),
  • Avec mécanisme de protection de classe (par exemple, contrats) n’étant pas basée sur la portée privée style C++ (Pourquoi?),
  • Pas de type primitif (un atout)

J’ai donc recherché ce mystérieux langage, sans jamais réussir à le trouver. Pour ceux qui seraient curieux, voici des langages qui s’en rapprochaient:

  • Python: Non déclaratif et mécanisme de protection des classes inexistantes (ou presque);
  • D: Pas d’héritage multiple;
  • Cobra: Pas d’héritage multiple;
  • C#: Pas d’héritage multiple;
  • Erlang: Syntaxe de programmation fonctionnelle (encore plus loin du C que le langage Eiffel)

Bref, je n’ai pas réussi à trouver un langage qui permettait de joindre la programmation orientée objet et une syntaxe C. Si vous en connaissez un, je suis preneur.

Dans la communauté du logiciel libre, nous avons un dicton: « Si quelque chose n’existe pas, créez-le ». Ayant par le passé étudié dans le domaine des langages de programmation, je me suis dit que j’étais tout désigné pour démarrer ce projet. De plus, je me suis également dit qu’en tant que pédagogue, je pourrais également documenter les étapes de développement de ce langage afin que tous puissent voir comment est conçu un langage de programmation.

Donc, durant le développement du langage, je tâcherai d’écrire des articles afin de documenter les différentes étapes du développement du langage.