[nem-pl] Zmiany składniowe
Michal Moskal
malekith at pld-linux.org
Wed Oct 15 16:14:09 CEST 2003
On Wed, Oct 15, 2003 at 03:50:59PM +0200, rzyjontko wrote:
> Michal Moskal napisał:
> >
> > {
> > ref x = 3;
> > while (x < 7) {
> > x = x + 1; // ERROR
> > foo ()
> > }
> > }
>
> Najpierw taka marginalna uwaga. Czy
> ref x <- 3;
> nie byłoby bardziej konsekwentne?
Z jednej strony racja (bo to pierwsze przypisanie), a z drugiej = jest
używane do definicji wartości (a definiujemy nową wartość). Więc nie
wiem.
> Podany błąd jest analogiczny do tych, które powstają w językach bez
> deklaracji zmiennych. Ale ludzie się czepiają wszystkiego.
> Ostatecznym argumentem zawsze będzie, że Nemerle to nie C#. Każdy
> manual do Lispa zawiera coś na kształt "common pitfalls in local
> bindings".
>
> Wydaje mi się, że problemem jest to, że dla zwyczajnego człowieka '='
> wydaje się bardziej naturalne niż <-. Więc może zamienić '<-' z '='?
Ale <- dobrze obrazuje przypisanie.
Myślałem też nad:
{
let ref x = 3; // lub "ref x = 3", lub też '<-' zamiast '='
let y = x + 3;
x <- 3;
}
A czegoś takiego jak "x = 3;" by po prostu nie było. Oczywiście ktoś
może ciągle myśleć, że "let x = 3;" to jest przypisanie, ale teraz już
sam jest sobie winny. Znaczy pomyłkę = vs <- można zrozumieć, ale
dopisanie dodatkowego keyworda, to już jest perwersja ;-)
Zamiast let może jakieś inne słowo, np. val. Na pewno coś krótkiego.
Aha, żeby nie było wątpliwości czym różni się "let x = 3;" od
"let x = 3 in", to:
let x = foo () in {
x#bar <- 3;
let y = bar (x) in {
y#qux <- 7;
(x, y)
}
}
vs:
{
val x = foo ();
x#bar <- 3;
val y = bar (x);
y#quc <- 7;
(x, y)
}
--
: Michal Moskal :: http://www.kernel.pl/~malekith : GCS {C,UL}++++$ a? !tv
: When in doubt, use brute force. -- Ken Thompson : {E-,w}-- {b++,e}>+++ h
More information about the devel-pl
mailing list