Lisaac
Lisaac est un langage de programmation impératif à prototype compilé à l'origine conçu afin d'écrire le système d'exploitation IsaacOS et pour être adapté au développement de pilotes de périphériques. Il est principalement utilisé dans le cadre pédagogique[1] et celui de la recherche[réf. nécessaire].
Lisaac | |
Date de première version | 2000 |
---|---|
Paradigmes | prototype, impératif, objet |
Auteur | Benoît Sonntag |
Développeurs | Benoît Sonntag |
Dernière version | 0.42 () |
Typage | Fort, statique |
Influencé par | Self, Eiffel, Smalltalk |
Système d'exploitation | Multiplate-forme |
Licence | Licence publique générale GNU version 3 |
Présentation générale
Lisaac est inspiré du langage Self pour les concepts d'objets à prototypes, ainsi que du langage Eiffel, un langage objet à classes, pour les aspects d'ingénierie logicielle et notamment pour la programmation par contrat. Enfin les concepts utiles à la programmation système comme la gestion des interruptions ont été rajoutés.
Le compilateur Lisaac génère du C ANSI optimisé et est ainsi multi-plateforme.
Caractéristiques
Un langage objet à prototype
Dans ce type de langage, l'objet règne en maître. Un objet est physiquement présent en mémoire, il se clone. L'héritage se situe au niveau des objets, pas des classes.
Un objet héritant d'un autre objet, plusieurs objets peuvent hériter d'un même objet physique. Étant une entité physiquement séparée, il est possible de changer de parent à l'exécution (voir héritage dynamique)
Syntaxe et sémantique
La syntaxe est d'abord inspirée de Smalltalk mais aussi d'Eiffel et de Self, la syntaxe des blocs d'instructions est largement inspirée de C. Il reprend aussi quelques éléments syntaxique de Pascal.
Comme son grand frère Self, ce langage est minimaliste avec l’absence de construction pour les conditionnelles, les boucles et les itérations : Le compilateur Lisaac ne sait pas ce qu'est une conditionnelle, on implémente celle-ci avec les trois objets Boolean, True, False (True et False héritant de Boolean), dans lesquels les méthodes conditionnelles (if ; if/else, etc.) sont définies. Les types de base sont des objets, à la manière des classes de type expanded du langage Eiffel.
Section Header
- name := HELLO_WORLD;
Section Public
- main <-
(
"Hello world\n".print;
);
Spécificités du langage
- Le langage permet de définir des sections SELF, qui comme dans beaucoup d'autres langages permettent de limiter la portée du code (équivalent des blocs imbriqués), ainsi que des sections à types (par exemple
Section NUMERIC
) pour limiter l'usage de ces sections par les types définis; - On peut redéfinir les opérateurs dans n'importe quel objet (comme en Ruby par exemple) vu qu'ils sont des méthodes comme les autres;
- Lisaac implémente la programmation par contrat introduite par Eiffel dont il reprend la syntaxe, il est donc possible de définir des préconditions, postconditions et invariants au sein des méthodes.
Performances
Des benchmarks effectués en 2011[2] ont démontré les performances du code produit par le compilateur : un décodeur MPEG1/2 complet, écrit en C a été traduit en Lisaac en conservant rigoureusement les mêmes structures algorithmiques.
Les résultats sont encourageants : avec 37 % de lignes de code en moins que le source C, Lisaac produit un exécutable 1,9 % plus lent que l'exécutable produit à partir du source C.
Annexes
Liens externes
- Site officiel.
- Sources du système IsaacOS (abandonné depuis 2008)
Notes et références
- « Programmation orientée objets 2 - UFR de mathématique et d'informatique - Université de Strasbourg », sur mathinfo.unistra.fr (consulté le )
- http://isaacos.loria.fr/li_benchs.html
- Portail de l’informatique