caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* Caml Special Light 1.07
@ 1995-09-20 15:05 Xavier Leroy
  1995-09-27 13:05 ` Christophe Raffalli
  0 siblings, 1 reply; 4+ messages in thread
From: Xavier Leroy @ 1995-09-20 15:05 UTC (permalink / raw)
  To: caml-list, comp-lang-ml

Release 1.07 of Caml Special Light is now available.
This is a bug-fix release that corrects the main problems
reported with 1.06:

* syntax: optional ;; allowed in compilation units and structures
  (back by popular demand)
* cslopt:
    generic handling of float arrays fixed
    direct function application when the function expr is not a path fixed
    compilation of "let rec" over values fixed
    multiple definitions of a value name in a module correctly handled
    no calls to ranlib in Solaris
* csltop: #trace now working
* standard library: added List.memq; documentation of Array fixed.

The complete sources and diffs from 1.06 are available by anonymous
FTP at the usual place ftp://ftp.inria.fr/lang/caml-light.

General info about Caml Special Light can be found on the Web, at
http://pauillac.inria.fr/csl/.

- Xavier Leroy




^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Caml Special Light 1.07
  1995-09-20 15:05 Caml Special Light 1.07 Xavier Leroy
@ 1995-09-27 13:05 ` Christophe Raffalli
  1995-09-28 15:10   ` Xavier Leroy
  0 siblings, 1 reply; 4+ messages in thread
From: Christophe Raffalli @ 1995-09-27 13:05 UTC (permalink / raw)
  To: caml-light; +Cc: caml-list


Bonjour,

J'ai essaye CSL, et dans l'esemble je suis tres content d'avoir enfin un
compilateur petit et rapide.

J'ai remarque plus d'incompatibilite avel Caml-light que le document html ne
le dit (il serait bon de les y ajouter) :

  - where rec a disparu ?
  - fun ne marche qu'avec une seul cas de matching ?
  - == dans les definition de type remplace par = (le script convert ne fait
       pas cette transformation automatiquement)
  - 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 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)

   je pense comprendre pourquoi ce changement (le cout cache de la
   construction de la paire ?). Mais alors pourquoi ne pas ecrire les
   constructeurs a plus d'un argument sous forme "uncurried" (et aussi pouquoi
   ne pas autoriser l'application partielle d'un constructeur) ?

A par ca, 
Encore merci a toute l'equipe ...
Christophe Raffalli





^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Caml Special Light 1.07
  1995-09-27 13:05 ` Christophe Raffalli
@ 1995-09-28 15:10   ` Xavier Leroy
  1995-09-28 15:33     ` Christophe Raffalli
  0 siblings, 1 reply; 4+ messages in thread
From: Xavier Leroy @ 1995-09-28 15:10 UTC (permalink / raw)
  To: Christophe Raffalli; +Cc: caml-light, caml-list

> 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




^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Caml Special Light 1.07
  1995-09-28 15:10   ` Xavier Leroy
@ 1995-09-28 15:33     ` Christophe Raffalli
  0 siblings, 0 replies; 4+ messages in thread
From: Christophe Raffalli @ 1995-09-28 15:33 UTC (permalink / raw)
  To: Xavier.Leroy; +Cc: caml-light, caml-list


>>   - where rec a disparu ?

> Exact. "where" aussi, d'ailleurs. Redondant avec "let" et "let rec".

J'aimerai bien qu'il revienne : cela rend souvent le code plus agreable a
lire. mais peu-etre qu'il faudrait ajouter un "do" "end"

  do .... where [rec] .... end

car le scope de where etait un peu embetant a manipuler.

>>   - fun ne marche qu'avec une seul cas de matching ?

> 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).

Si c'est aussi efficace, il serait utile que le tool convert fasse cette
transformation automatiquement (meme pour les fun a un seul cas).

>>    Mais alors pourquoi ne pas ecrire les
>>    constructeurs a plus d'un argument sous forme "uncurried"
>
>Ca devient une question de syntaxe uniquement.

Cela aiderait a eliminer la confusion entre 
        type b = B of int * int         (2 arguments entiers)
        type b = B of (int * int)       (1 argument qui est une paire)

De plus ca faciliterait le portage des programmes caml-light :

on pourrait ecrire        
       type b = B of int & int    pour B avec deux arguments 
                                 (le & est un choix arbitraire... )
et
       type b = B of int * int  pour B avec un seul argument

Ainsi les vieux programmes caml-light tournerait (avec une perte d'efficacite)
sans que l'on ait a modifier les matchings du genre "B c -> ..."

>>    (et aussi pouquoi
>>    ne pas autoriser l'application partielle d'un constructeur) ?
>
>Je ne sais pas si ca servirait tres souvent.

J'appelle souvent map ou it_list avec un constructeur partiellement ou
pas du tout applique, et c'est un peu penible d'avoir a ecrire (fun x -> B x)
a la place de B ! Bien sur cela est loin d'etre important !

Christophe.

PS: for the parser problem, I just realised that $1 in a semantic-action could
be a function and So i could rewrite my parser quite easely with camlyacc
which therefore is not only a context-free parser !





^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~1995-09-29  8:04 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1995-09-20 15:05 Caml Special Light 1.07 Xavier Leroy
1995-09-27 13:05 ` Christophe Raffalli
1995-09-28 15:10   ` Xavier Leroy
1995-09-28 15:33     ` Christophe Raffalli

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).