[nem-pl] proponowane (przeze mnie) projekty
Michal Moskal
malekith at pld-linux.org
Sun Sep 28 17:41:53 CEST 2003
Ponieżej zamieszczam opis. Proszę Andrzeja, Grzesia i Łukasza o
uczynienie podobnie (cc: na devel-pl bo tam jest już ładne archiwum, a
tu takie sobie).
Wstęp
~~~~~
O rozszerzeniach (obu typów) w innych językach można poczytać:
Camlp4:
http://caml.inria.fr/camlp4/index.html
Meta-Haskell:
http://research.microsoft.com/Users/simonpj/papers/meta-haskell/meta-haskell.ps
Warto oczywiście poszukać, może ktoś jeszcze miał jakieś fajne pomysły.
Rozszerzenia semantyczne
~~~~~~~~~~~~~~~~~~~~~~~~
W zamyśle mają być to makra na sterydach. Mają umożliwiać łatwe pisanie
specjalnych funkcji jak np. bezpieczny pod względem typów printf,
przykładowo wywołanie:
printf ("foo%s%d", x, y)
ma być zamieninane na:
print_string ("foo");
print_string (x);
print_int (y);
Inny przykład to bezpieczne wyrażenia regularne:
rxmatch ("([0-9]*):([0-9]*):([0-9]*)", str, h, m, s)
jest zamieniane na:
let gr = Regexp.match("([0-9]*):([0-9]*):([0-9]*)", str) in
let h = gr#group(1) in
let m = gr#group(2) in
let s = gr#group(3) in
...
czy coś podobnego.
To są proste przykłady, ale same w sobie znacząco ulepszają
język. Bardziej skomplikowany przykład:
attr("xmlserialize") class Foo {
int i;
Bar b;
....
}
zamieniane na:
class Foo {
int i;
Bar b;
method serialize() : Xml.Tree =
Xml.Tree("Foo", [serialize_int(i); b#serialize()]);
...
}
Zaznaczam, że *nie* chodzi o zaimplementowanie jakiś konkretnych
rozszerzeń (jak np. te które opisałem), tylko wymyślenie i późniejszą
implementację w kompilatorze ogólnej metody ich opisu.
Rozszerzenia składniowe
~~~~~~~~~~~~~~~~~~~~~~~
1. Trzeba przemyśleć sprawę jakich rozszerzeń składniowych potrzebujemy.
2. Rozszerzenia lexera.
3. Rozszerzenia parsera.
Tu również chodzi o ogólną metodę.
Proste przykłady rozszerzeń składniowych to np. pętla while
(zmieniana na ogonowo-rekurencyjną funkcję), czy też specjalna składnia
do wyrażeń regularnych:
let (h, m, s) = str =~ /([0-9]*):([0-9]*):([0-9]*)/
czy coś podobnego.
Co do lexera, być może wystarczy kilka metod quotowania, warto przeczytać jak
jest to zrobione w perlu:
http://www.perldoc.com/perl5.6/pod/perlop.html#Quote-and-Quote-like-Operators
(to z 'man perlop')
Niemniej jednak, nie chce widzieć w języku czegoś aż tak zakręconego :-)
Dokumentacja języka
~~~~~~~~~~~~~~~~~~~
Trzeba napisać:
1. Opis gramatyki języka, konstrukcja po kontrukcji z krótkim suchym
opisem.
2. Tutorial step-by-step.
Koniecznie po angielsku, może być dodatkowo po polsku.
Jaki koń jest każdy widzi -- opis na stronie jest niekompletny i
nieaktualny.
Będę opowiadał na wykładach o języku, w razie wątpliwości co do semantyki
konstrukcji (bo gramatykę można znaleźć w źródłach kompilatora), proszę
pytać na liście.
Dobrze by było gdyby zabrał się za to ktoś (kilku ktosiów?) z a) dobrą
znajomością angielskiego, b) darem klarownego wyjaśniania zawiłych
konceptów.
--
: 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