From: Xavier Leroy <xleroy@pauillac.inria.fr>
To: raffalli@cs.chalmers.se (Christophe Raffalli)
Cc: caml-light@pauillac.inria.fr, caml-list@pauillac.inria.fr
Subject: Re: Caml Special Light 1.07
Date: Thu, 28 Sep 1995 16:10:02 +0100 (MET) [thread overview]
Message-ID: <199509281510.QAA05926@pauillac.inria.fr> (raw)
In-Reply-To: <199509271305.OAA02246@muppet42.cs.chalmers.se> from "Christophe Raffalli" at Sep 27, 95 02:05:01 pm
> J'ai remarque plus d'incompatibilite avel Caml-light que le document html ne
> le dit (il serait bon de les y ajouter) :
Oui, la liste donnee dans "Questions & Answers" n'est pas complete.
> - where rec a disparu ?
Exact. "where" aussi, d'ailleurs. Redondant avec "let" et "let rec".
> - fun ne marche qu'avec une seul cas de matching ?
Oui. C'est une simplification pour reduire la redondance entre "fun"
et "function" -- a defaut de la faire disparaitre -- que Pierre Weis
et moi-meme voulions faire depuis longtemps. La version francaise du
``Manuel de reference'' de Caml Light ne documente d'ailleurs pas le
"fun" a plusieurs cas.
Il suffit d'ecrire a la place:
let f x y z =
match (x,y,z) with
(..., ..., ...) ->
| (..., ..., ...) ->
C'est aussi efficace que le "fun" a plusieurs cas en Caml Light: le
compilateur Caml Special Light n'alloue pas le n-uplet (x,y,z).
> - == dans les definition de type remplace par = (le script convert ne fait
> pas cette transformation automatiquement)
Oui, c'est une erreur dans le script.
> - le pattern matching sur les streams. C'est dans le document html, mais le
> point d'interrogation m'inquiete car j'ai un gros parser qui ne peut
> s'ecrire avec yacc et que je n'ai pas tres envie de reecrire ....
Le stream matching est un peu penible a implementer dans le
compilateur, c'est pourquoi je ne l'ai pas encore fait. Aussi, le
rapport "quantite de code dans le compilateur pour traiter le stream
matching" sur "vitesse des parsers produits" est legerement
decevant. Je reve parfois d'un systeme de parsing ou bien moins lourd
a implementer (pas de "support" dans le compilateur, juste une
bibliotheque de fonctions de parsing) ou bien nettement plus efficace.
> - le matching sur les constructeurs a plus d'un arguments a change ?
> #type b = B of int * int;;
> type b = B of int * int
> #let f (B c) = c;;
> The constructor B expects 2 argument(s), but is here
> applied to 1 argument(s)
Oui, les constructeurs de Caml Special Light ont une arite (un nombre
d'arguments) fixe. On distingue entre
type b = B of int * int (2 arguments entiers)
type b = B of (int * int) (1 argument qui est une paire)
Cette restriction est necessaire pour representer de maniere efficace
les types concrets (B(x,y) est un seul bloc contenant x et y, non pas
un bloc contenant un pointeur vers la paire (x,y)). Caml Light
utilisait cette representation efficace tout en maintenant l'illusion
que l'argument du constructeur est un n-uplet, mais en presence du
calcul de module il est extremement difficile de continuer a maintenir
cette illusion. Exemple:
module type SIG =
sig
type t
type u = B of t
...
end
module S =
struct
type t = int * int
type u = B of int * int
...
end
module S' = (S : SIG)
Les utilisateurs de S et les fonctions de S font l'hypothese que
B(x,y) est represente a plat (deux champs avec x et y), mais les
utilisateurs de S', voyant S'.t abstrait, supposent B(x,y) represente
avec une indirection supplementaire, d'ou code incorrect.
Mettre une arite aux constructeurs assure que S ne remplit pas la
specification SIG et elimine le probleme.
> Mais alors pourquoi ne pas ecrire les
> constructeurs a plus d'un argument sous forme "uncurried"
Ca devient une question de syntaxe uniquement.
> (et aussi pouquoi
> ne pas autoriser l'application partielle d'un constructeur) ?
Je ne sais pas si ca servirait tres souvent.
- Xavier Leroy
next prev parent reply other threads:[~1995-09-29 7:59 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
1995-09-20 15:05 Xavier Leroy
1995-09-27 13:05 ` Christophe Raffalli
1995-09-28 15:10 ` Xavier Leroy [this message]
1995-09-28 15:33 ` Christophe Raffalli
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=199509281510.QAA05926@pauillac.inria.fr \
--to=xleroy@pauillac.inria.fr \
--cc=caml-light@pauillac.inria.fr \
--cc=caml-list@pauillac.inria.fr \
--cc=raffalli@cs.chalmers.se \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox