![]()
Précédent : Systèmes de types Remonter : Systèmes de
types Suivant : Sous-typage
Didier Rémy a continué à s'intéresser au typage des objets dans les langages fonctionnels. Bien que plusieurs solutions presque satisfaisantes aient déjà été proposées pour des langages explicitement typés, l'ajout d'objets dans les langages avec synthèse de types restait un problème difficile mais essentiel pour la crédibilité de ML.
Didier Rémy et Jérôme Vouillon ont conçu une extension de ML avec des objets [14]. La proposition reprend les idées du langage ML-ART, mais en fournissant maintenant des constructions primitives pour les objets et les classes. Cette proposition a été intégrée par Jérôme Vouillon dans le langage Objective Caml [18]. Objective Caml est le premier langage à objets fortement typé avec synthèse des types à être publiquement distribué.
Les choix de conception du langage Objective ML sont un compromis minutieusement équilibré entre l'expressivité, la simplicité et la conformité aux opérations standards. De ce fait, les constructions sur les objets d'Objective Caml sont très proches de celles que l'on peut trouver par exemple dans le langage Java. Mais à la différence de Java, les classes peuvent être naturellement paramétriques, et les types sont synthétisés. Simultanément le langage conserve la simplicité du langage ML. Cela fait d'Objective Caml un langage très attractif.
Le langage a toutefois une limitation qui peut a priori paraître importante : l'affaiblissement de l'interface des objets n'est pas automatique ; elle doit être demandée par une opération de sous-typage explicite. Cependant, le polymorphisme de l'envoi de messages réduit considérablement le besoin de sous-typage. De plus, si les travaux de Francois Pottier sur la synthèse du sous-typage s'avèrent positifs, ils devraient permettre de corriger ce défaut immédiatement. Parallèlement, Didier Rémy a travaillé en collaboration avec Jacques Garrigue (Université de Tokyo) sur un mécanisme autorisant des méthodes polymorphes dans les objets qui devrait réduire encore davantage le besoin de sous-typage.
Les recherches concernant les objets de ML vont se poursuivre dans principalement deux directions. D'une part, il est actuellement possible de cacher dans une sous-classe certaines variables d'instance d'une classe parente mais pas ses méthodes. Pour des raisons de symétrie, il est nécessaire de choisir entre simplifier davantage le language en renonçant aux deux aspects, ou les autoriser simultanément en perdant un peu en simplicité. D'autre part, le langage Objective Caml possède maintenant des objets et des modules expressifs. Il est devenu nécessaire de bien comprendre l'interaction entre ces deux paradigmes de la programmation à grande échelle, pour si possible les intégrer dans un mécanisme unifié.