| Anonymous | Login | Signup for a new account | 2013-06-20 13:45 CEST | ![]() |
| Main | My View | View Issues | Change Log | Roadmap |
| View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||||||
| ID | Project | Category | View Status | Date Submitted | Last Update | ||||||
| 0002717 | OCaml | OCaml general | public | 2004-06-14 17:51 | 2004-06-14 18:40 | ||||||
| Reporter | administrator | ||||||||||
| Assigned To | |||||||||||
| Priority | normal | Severity | feature | Reproducibility | always | ||||||
| Status | acknowledged | Resolution | open | ||||||||
| Platform | OS | OS Version | |||||||||
| Product Version | |||||||||||
| Target Version | Fixed in Version | ||||||||||
| Summary | 0002717: feature wish: renommage des types | ||||||||||
| Description | Bonjour à vous, Dans: Parameterized Programming and Software Architecture, de Joseph Goguen, dans Proceedings, Fourth International Conference on Software Reuse, IEEE Computer Society, April 1996, pages 2-11. (http://www.cs.ucsd.edu/users/goguen/pps/orlando96.ps [^]), l'auteur décrit des opérateurs (du langage LILEANA) qui permettent de renommer a posteriori les types contenus dans un module ou une signature. Je me demandais donc dans quelle mesure cela pourrait être également possible en OCaml. En effet, le programmeur ML est confronté à un dilemme: soit il tente de nommer la plupart de ses types par un nom uniforme (en général "t"), soit il tente d'en distinguer les appelations. Le nommage uniforme permet de maximiser la compatibilité avec les signatures disponibles. Mais ça n'est pas très informatif et ça ne marche évidemment pas pour les multi-sortes. Accessoirement, cela pose aussi des problèmes lors de l'union de deux signatures ou modules par simples inclusions: module type OPER = sig type t val oper : t -> t -> t end module type EQUAL = sig type t val equal: t -> t -> bool end;; module type OPER_EQUAL = sig include OPER include EQUAL end;; ==> CLASH Alors que si l'on en distingue les noms, il est possible d'écrire: module type OPER = sig type t val oper : t -> t -> t end module type EQUAL = sig type s val equal: s -> s -> bool end;; module type OPER_EQUAL = sig include OPER include EQUAL with type s = t end;; On pourrait aussi probablement rendre plus élégantes les manips du genre de celles qui ont été faites dans la bibliothèque standard pour les modules String, Char, Int32 ou Int64 (cf. leurs deux dernières lignes). Le renommage permettrait d'adapter donc parfois les noms des types à ses besoins. Ceci dit, je ne mesure pas toutes les implications que cette opération pourrait avoir pour le système de type. pn | ||||||||||
| Tags | No tags attached. | ||||||||||
| Attached Files | |||||||||||
Issue History |
|||
| Date Modified | Username | Field | Change |
| 2005-11-18 10:13 | administrator | New Issue | |
| Copyright © 2000 - 2011 MantisBT Group |