Parallèlement au développement de ML, Milner rédigea en 1978 l'article « A theory of type polymorphism in programming » , qui exposait les concepts de typage optimal d'un programme dans le contexte d'un système de types polymorphes (génériques). Il utilisa ML comme étude de cas pour illustrer les théorèmes développés et souligna les défis théoriques rencontrés lors du développement, défis qui restaient à résoudre. La conception de la première version de ML fut finalisée, puis documentée dans l'ouvrage « Edinburgh LCF » de 1979 , coécrit par Milner, Gordon et Wadsworth.
Après la création d'Edinburgh LCF et la publication de l'ouvrage éponyme, l'intérêt pour le langage s'est accru et plusieurs implémentations, présentant de légères variations de conception et de fonctionnalités, ont été développées par différents acteurs. Luca Cardelli a créé Cardelli ML , ou VAX ML , qui est finalement devenu un dialecte autonome adapté à l'informatique générale, spécifié dans l'article ML sous Unix . Gérard Huet, à l' Inria, a entrepris le portage du code source de Stanford Lisp vers divers autres dialectes de Lisp dans le cadre du « Projet Formel ». Le portage vers Franz Lisp a été poursuivi par Larry Paulson , dont la version a finalement été baptisée Cambridge LCF . Cette version du LCF a ensuite été mise à jour pour utiliser une version préliminaire de Standard ML et est disponible sur GitHub .
L'intérêt et l'enthousiasme suscités par ML, LCF et d'autres technologies connexes, comme le langage de programmation Hope , à l'époque, suite à la publication d' Edinburgh LCF et à d'autres développements, ont conduit à la tenue d'une réunion intitulée « ML, LCF et Hope » en novembre 1982. Les inquiétudes liées à la fragmentation de la conception et de l'implémentation, susceptible d'entraîner des doublons, ont été soulevées lors de cette réunion. Bien que Milner se soit montré ouvert à l'expérimentation, des discussions et des réunions ultérieures ont eu lieu entre Bernard Sufrin et Milner, au cours desquelles Sufrin a incité Milner à unifier la conception de ML. Ces échanges ont été ultérieurement cités dans la deuxième version de la proposition de Milner pour Standard ML.
Aperçu
Exemples
Les exemples suivants sont tirés directement du LCF d'Édimbourg et offrent un aperçu de la syntaxe et des fonctionnalités de ML. Le Les liaisons sont introduites avec `\bind` comparées par motif à gauche.
curryfiées : passer un paramètre à la fonction renverra une fonction qui acceptera le second, et ainsi de suite. Les fonctions récursives requièrent `.` `cons`Les variables mutables sont déclarées avec `mutable` des alias de types plus simples . Voici un type abstrait récursif qui définit un arbre binaire avec quelques opérations de base : (*, **) tree) comptree = - : ((** # (*, **) tree # (*, **) tree) -> (*, **) tree) istip = - : ((*, **) tree -> bool) tipof = - : ((*, **) tree -> *) labelof = - : ((*, **) tree -> **) sonsof = - : ((*, **) tree -> ((*, **) tree # (*, **) tree))"}},"i":0}}] (*, **) tree) comptree = - : ((** # (*, **) tree # (*, **) tree) -> (*, **) tree) istip = - : ((*, **) tree -> bool) tipof = - : ((*, **) tree -> *) labelof = - : ((*, **) tree -> **) sonsof = - : ((*, **) tree -> ((*, **) tree # (*, **) tree))" - absrectype (*, **) arbre = * + ** # (*, **) arbre # (*, **) arbre
- avec tiptree x = abstree(inl x)
- et comptree (y, t1, t2) = abstree(inr(y, t1, t2))
- et istip t = isl(reptree t)
- et tipof t = outl(reptree t) ? failwith `tipof`
- et labelof t = fst(outr(reptree t)) ? failwith `labelof`
- et fils de t = snd(outr(reptree t)) ? failwith `sonsof`;;
tiptree = - : (* -> (*, **) arbre) comptree = - : ((** # (*, **) arbre # (*, **) arbre) -> (*, **) arbre) istip = - : ((*, **) arbre -> booléen) tipof = - : ((*, **) arbre -> *) labelof = - : ((*, **) arbre -> **) fils de = - : ((*, **) arbre -> ((*, **) arbre # (*, **) arbre))
Dans les définitions d'opérations (le box` pour encadrer les valeurs et les types somme (unions étiquetées) et les types produit (tuples), `sum`
Plus d articles de Worldlex Wiki
Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.
Explorer l index