[nem-pl] Zmiany składniowe

Michal Moskal malekith at pld-linux.org
Tue Oct 14 20:22:57 CEST 2003


Na dzisiejszym spotkaniu mówiliśmy trochę o zmianach składniowych,
spróbuję je tu podsumować:

1. s/(method|field)//; s/(fun|value)/static/
   Uzasadnienie: tak jest krócej, i tak jest w C++, C#, Javie.

2. Zamiast '#' piszemy '.'. Uzasadnienie j.w. (wyłączając C++, w którym
   jest normalnie ergh... tak jak ja chciałem, tylko inne krzaczki :-)
 
3. Ze zmiennych we wzorcach wywalamy ?. Wprowadzamy regułę, że
   konstruktory wariantów muszą zaczynać się wielką literą, a zmienne we
   wzoracach małą. Dodatkowe warningi w kompilatorze o regułach duża/mała
   litera dla innych rzeczy są do uzgodnienia.

Co do 1. to mam nadzieję, że to da się zrobić bez konfliktów w
gramatyce. Resztę, to wiem, że się da.

<rozmowa-z-Pawłem>

Teraz podobnie jak wywalamy method/field/etc można by pomyśleć o
wywaleniu let, np. zamiast:

  let x = 3 in
  let y = 7 in 
  f (x, y)

tak:

  {
    x = 3;
    y = 7;
    f (x, y)
  }

Ma to swoje wady i zalety. Z jednej strony wygląda bardziej jak C# (which
is The Good Thing (*)).  Trzeba zauważyć, że wielopiętrowe konstrukcje z
"let" są bardzo często używanym fragmentem języka, więc znacząco wpływają
na jego charakter. Z drugiej pojawiają się problemy, konkretnie trzeba
by napisać "<- vs = for dummies". Np.:

  {
    ref x = 3;
    while (x < 7) { 
      x = x + 1;  // ERROR
      foo () 
    }
  }

Ponieważ = zachowuje znaczenie let, to program ten można znaczy tyle co:

  let ref x = 3 in
  while (x < 7)
    let x = x + 1 in foo ()
   
Czyli nieskończoną pętlę. Wstawienie = zamiast <- jest krytycznym (bo
trudnym do znaleznienia przez kompilator) błędem. Być może to nie jest
aż tak krytyczny błąd.

(*) Lepiej żeby Nemerle było na pierwszy rzut oka podobne do C# niż
do ML'a, bo wtedy będą nas porównywać z C# (a widać jasno że jesteśmy
lepsi), niż mieliby porównywać nas z MLem (tego nie ma, tamtego nie ma,
a gdzie funktory etc). Z drugiej strony jeśli będzie podobne, to ludzie
od C# może szybciej złapią, a ci od MLa i tak złapią.

Konkluzja: fajnie by było jakoś inaczej tego leta zapisywać, ale tak,
żeby się nie mylił z przypisaniem. Comments please.

Pozatym trzeba napisać na stronie co mamy fajnego. Chodzi mi o przykłady
w rodzaju automatycznej (przez rozszerzenia) generacji typów z SQL-owych
tabelek. 

</rozmowa-z-Pawłem>

-- 
: 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