CLU (langage de programmation) - CLU (programming language)

CLU
Paradigme multi-paradigme : orienté objet , procédural
Conçu par Barbara Liskov et ses élèves
Développeur Massachusetts Institute of Technology
Première apparition 1975 ; il y a 46 ans ( 1975 )
Version stable
Natif CLU 1.5 ( SPARC , VAX ) / 26 mai 1989 ; il y a 32 ans ( 1989-05-26 )

CLU portable / 6 novembre 2009 ; il y a 11 ans ( 2009-11-06 )

Discipline de frappe fort
Site Internet pmg .csail .mit .edu /CLU .html
Les principales mises en œuvre
PDP-10 CLU, CLU natif, CLU portable, CLU2c
Influencé par
ALGOL 60 , Lisp , Simula , Alphard
Influencé
Ada , Argus , C++ , Lua , Python , Ruby , Sather , Swift

CLU est un langage de programmation créé au Massachusetts Institute of Technology (MIT) par Barbara Liskov et ses étudiants à partir de 1973. Bien qu'il n'ait pas été largement utilisé, il a introduit de nombreuses fonctionnalités qui sont largement utilisées aujourd'hui et est considéré comme une étape dans le développement de la programmation orientée objet (POO).

Les contributions clés incluent les types de données abstraits , l' appel par partage , les itérateurs , les valeurs de retour multiples (une forme d' affectation parallèle ), les types paramétrés de type sécurisé et les types variants de type sécurisé . Il est également remarquable pour son utilisation de classes avec des constructeurs et des méthodes, mais sans héritage .

Groupes

La syntaxe de CLU était basée sur ALGOL , alors le point de départ de la plupart des nouvelles conceptions de langage. L'ajout clé était le concept de cluster , le système d'extension de type CLU et la racine du nom du langage (CLUster). Les clusters correspondent généralement au concept de "classe" dans un langage OO. Par exemple, voici la syntaxe CLU pour un cluster qui implémente des nombres complexes :

    complex_number = cluster is add, subtract, multiply, ...
        rep = record [ real_part: real, imag_part: real ]
        add = proc ... end add;
        subtract = proc ... end subtract;
        multiply = proc ... end multiply;
        ...
    end complex_number;

Un cluster est un module qui encapsule tous ses composants à l'exception de ceux explicitement nommés dans la clause "is". Ceux-ci correspondent aux composants publics d'une classe dans les langages OO récents. Un cluster définit également un type qui peut être nommé en dehors du cluster (dans ce cas, "complex_number"), mais son type de représentation (rep) est masqué pour les clients externes.

Les noms de cluster sont globaux, et aucun mécanisme d'espace de noms n'a été fourni pour regrouper les clusters ou leur permettre d'être créés "localement" à l'intérieur d'autres clusters.

CLU n'effectue pas de conversions de types implicites . Dans un cluster, les conversions de type explicite vers le haut et vers le bas changent entre le type abstrait et la représentation. Il existe un type universel any , et une procédure force[] pour vérifier qu'un objet est d'un certain type. Les objets peuvent être mutables ou immuables, ces derniers étant des types de base tels que des entiers, des booléens, des caractères et des chaînes.

Autres caractéristiques

Une autre caractéristique clé du système de type CLU sont les itérateurs , qui renvoient les objets d'une collection en série, l'un après l'autre. Les itérateurs offrent une interface de programmation d'application (API) identique, quelles que soient les données avec lesquelles ils sont utilisés. Ainsi, l'itérateur d'une collection de complex_numbers peut être utilisé de manière interchangeable avec celui d'un tableau de integers. Une caractéristique distinctive des itérateurs CLU est qu'ils sont implémentés en tant que coroutines, chaque valeur étant fournie à l'appelant via une déclaration de rendement . Les itérateurs comme ceux de CLU sont désormais une caractéristique commune de nombreux langages modernes, tels que C#, Ruby et Python, bien que récemment, ils soient souvent appelés générateurs.

CLU inclut également la gestion des exceptions , basée sur diverses tentatives dans d'autres langages ; les exceptions sont levées à l'aide signalet gérées avec except. Contrairement à la plupart des autres langages avec gestion des exceptions, les exceptions ne sont pas implicitement résignées dans la chaîne d'appel. De plus, contrairement à la plupart des autres langages qui fournissent une gestion des exceptions, les exceptions dans CLU sont considérées comme faisant partie du flux d'exécution ordinaire et sont considérées comme un moyen "normal" et efficace de sortir des boucles ou de revenir des fonctions ; cela permet l'attribution directe de valeurs de retour « sauf lorsque » d'autres conditions s'appliquent. Les exceptions qui ne sont ni interceptées ni résignées explicitement sont immédiatement converties en une exception d'échec spéciale qui termine généralement le programme.

CLU est souvent crédité comme étant le premier langage avec des types variants sécurisés , appelés oneofs , avant que le langage ML ne les ait.

Une dernière caractéristique distinctive dans CLU est l' affectation parallèle ( affectation multiple), où plus d'une variable peut apparaître sur le côté gauche d'un opérateur d' affectation . Par exemple, l'écriture x,y := y,xéchangerait les valeurs de xet y. De la même manière, les fonctions peuvent renvoyer plusieurs valeurs, comme x,y,z := f(t). L'affectation parallèle (mais pas les valeurs de retour multiples) est antérieure à CLU, apparaissant dans CPL (1963), nommée affectation simultanée , mais CLU l'a popularisée et est souvent considérée comme l'influence directe menant à l'affectation parallèle dans les langues ultérieures.

Tous les objets d'un programme CLU vivent dans le tas et la gestion de la mémoire est automatique.

CLU prend en charge les abstractions de données définies par l'utilisateur paramétrées par type . C'était le premier langage à offrir des types paramétrés délimités de type sûr, utilisant des clauses de structure where pour exprimer des contraintes sur des arguments de type réels.

Influence

CLU et Ada ont été des inspirations majeures pour les modèles C++ .

Les mécanismes de gestion des exceptions de CLU ont influencé les langages ultérieurs comme C++ et Java .

Sather , Python et C# incluent des itérateurs , qui sont apparus pour la première fois dans CLU.

Perl et Lua ont pris plusieurs affectations et plusieurs retours d'appels de fonction de CLU.

Python et Ruby ont emprunté l' appel en partageant , la déclaration de rendement et l'affectation multiple.

Les références

Liens externes