=?us-ascii:iso-8859-2:utf-8?Q?=5Bnem-p?= =?us-ascii:iso-8859-2:utf-8?Q?l=5D_Rozszerzenia_-_ich_sk=C2=B3adni?= =?us-ascii:iso-8859-2:utf-8?Q?a?= , semantyka

Lukasz Kaiser kaiser at tenet.pl
Tue Oct 28 23:49:58 CET 2003


> Już był pomysł cokolwiek -> kod, ale Michał stwierdził, że to równoważne z kod 
> -> kod, choć będzie pewnie więcej pisania z wyłuskaniem wartości

Hmm, ja nie rozumiem jaki jest problem ze zrobieniem w
kompilatorze funkcji
cokolwiek + kod -> cokolwiek + kod
jesli sie ma juz mozliwosc kod -> kod. Natomiast zakodowac pewnie sie
jakos da, ale zawsze trzeba wtedy kodowac. Ale to by bylo uzyteczne
let debug = true ;;
debugable ( debug, ( foo.runtests () ;; ) ) ;;
Jak parser ma to polknac z tymi podwojnymi ;; to ja nadal nie wiem.
 
> Pomyśl jednak o tym, jak by to miało wyglądać w praktyce:
> masz sobie klasÄ™
>    class A { blabla };
> i chcesz otrzymać string z informacjami o niej, więc wg twojej wersji robisz
>    def desription = describeYourself ( class A { blabla }; );
>    storeToFile description "descr.xml"

> trochę chore, żeby definicje klasy wklejać gdzieś w środek kodu, no nie?
> 
> lepiej to zrobić
>    desciptionable (
>        class A {bblabla };
>    )
> i potem
>    A.describeMyselfToFile("descr.xml");
> 
> Chodzi o to, że rozszerzenie doda do klasy metodę, która będzie miała wpisane 
> informacje o klasie.

Rozumiem, ze tak mozesz. Ale napisanie tego rozszerzenia bedzie takie
sobie i musisz dodac metode do klasy. Ja nie mowilem,
ze masz generowac tylko stringa (tak mi wyszlo w przykladzie), tylko ze
by milo bylo moc zrobic
let ( desc, code ) = descriptionabe ( ... ) in
if printOnly then print_string desc else code ;;
Ale w kazdym razie z tym czy bez tego ja i tak w ogole nie wiem jak to ma
sie sparsowac, otypowac i cokolwiek, wiec takie rozwazania mozna zostawic
do momentu w ktorym bedzie wiadomo ile wysilku trzeba wlozyc dodatkowo
zeby moc to zrobic w stosunku do zwyklego kod -> kod.
 
> Może [< x : int >], tylko że to by wg poprzedniej definicji znaczyłoby 
> wyrażenie E_TypeVar( E_Var(x), E_Type(int) ), a nie otypowanie x'a

Nie, to nie jest takie proste chyba, ale ja nie wiem. W kazdym razie
chodzi o dodanie do klasy class foo { bar x ; ... } metody getTypeOfX
wypisujacej typ x (czyli "bar", ale dla innej klasy niekoniecznie bar).

- lk




More information about the devel-pl mailing list