[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