[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