[nem-pl] to ja znowu o składni
Michal Moskal
malekith at pld-linux.org
Wed Oct 29 01:45:55 CET 2003
Dodałem nowy sposób definiowania wartości.
Zamiast:
let x = 3 in
let ref y = 7 in
foo
Pisze się teraz:
{
def x = 3;
mutable y <- 7;
foo
}
Stara metoda jest dostępna, ale niezalecana. Znaczy mam nadzieję, się
jej pozbyć w najbliższym czasie, ale automatyczna konwersja istniejących
źródeł wydaje się trudna :/
Q: Po co to to?
A: Bo inaczej paskudnie wygląda kod używający czegokolwiek imperatywnie,
np.:
let foo = bar (qux) in {
check_foo (foo);
let quxx = barr (foo) in {
check_quxx (quxx);
foo
}
}
albo:
let foo = bar (qux) in
let _ = check_foo (foo) in
let quxx = barr (foo) in
let _ = check_quxx (quxx) in
foo
Żadna z powyższych nie wydaje się zachęcająca. To co poniżej jest chyba
bardziej czytelne:
{
def foo = bar (qux);
check_foo (foo);
def quxx = barr (foo);
check_quxx (quxx);
foo
}
Zauważmy, że check_foo() wcale nie musi być funkcją czysto-imperatywną,
może to być całkowicie funkcjonalne sprawdzenie wartości pod jakimś
względem i rzucenie wyjątkiem w wypadku problemów.
Q: Czemu mutable a nie var lub ref?
A: Żeby było więcej pisania (poważnie). mutable nie jest konstrukcją,
której należy często używać.
Q: To czemu ref w polach?
A: Będzie mutable.
Planowanuje jeszcze dwie duże zmiany składniowe:
a) # -> .
b) ? -> nic
Proszę o komentarze.
--
: 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