Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Les_séquences
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Diego Olivier Fernandez Pons <Diego-Olivier.FERNANDEZ-PONS@c...>
Subject: [Caml-list] Les_séquences
On a pu lire dans certains messages concernant la syntaxe de Caml des
remarques concernant les séquences (let ... in let ... in ...)

> let foo = bar in
>   let baz = quux in
>     let fnord = fnarp in
>       ...

contre 

> let* foo = bar;
>      baz = quux;
>      fnord = fnarp; 
> in
> (Possibly even without the "in", it is also ugly.)

Supposons que l'on veuille calculer z = x * x + y * y

La séquence force l'ordre d'évaluation des termes, par exemple

	let carreX = x * x in
	let carreY = y * y in
	let z = carreX + carreY

calculera d'abord carreX puis carreY, enfin z (carreX -> carreY -> z) 

Il n'existe cependant aucune raison logique d'adopter cet ordre plutôt
que l'ordre inverse (carreY -> carreX -> z) car il n'existe aucune
dépendance entre le calcul de carreX et celui de carreY.

Raison pour laquelle, il vaut mieux laisser l'implémentation libre de
choisir l'ordre qui lui convient

	let
	    carreX = x * x and
	    carreY = y * y
	in
	    z = carreX + carreY

Supposons en effet que le calcul de carreX et carreY soit un tant soit
plus complexe. Si les relations de dépendance dans votre code sont
correctement explicitées, un compilateur sur une machine
multiprocesseurs pourrait à moindres frais lancer les deux calculs
indépendamment. Par contre, la parallélisation automatique d'un code
quelconque devient autrement plus ardue. 

L'inconvénient est que ce type de code aboutit à un graphe acyclique,
or notre format habituel est le fichier texte, lui purement
séquentiel. L'empilement de séquences et de "tranches" (let ... and
... in) devenant très vite illisible, ce mode de programmation est en
l'absence d'un environnement de programmation visuelle à adopter avec
précaution. 

Une chose est sûre, la syntaxe Caml a le mérite de permettre
d'expliciter les dépendances logiques entre les calculs ce qui n'est
pas le cas d'autres langages ou de syntaxes alternatives que nous
avons pu voir proposées sur cette liste.

	Diego Olivier
-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr