[nem-pl] Mój plan
Michal Moskal
malekith at pld-linux.org
Tue Nov 18 13:20:44 CET 2003
On Tue, Nov 18, 2003 at 11:24:18AM +0100, "Paweł W. Olszta" wrote:
>
> Witam,
>
> w najbliższym czasie planuję przenieść to co napisałem do SVN'a. Będzie
> trochę roboty z integracją.
>
> Chciałbym to zrobić porządnie, więc zacznę od planu:
>
> 1. dodać typ 'char' i CHAR_LITERAL do leksera i parsera -- trzeba się
> zastanowić, jak ma taki
> literał wyglądać; zastanowić się jak ma wyglądać konwersja z int w char
> i odwrotnie [w tej chwili
> w mojej wersji prywatnej pisze się 'A' i lekser zamienia to na
> NUMBER_LITERAL 65),
Może do NUMBER_LITERAL dodać typ. Tak żeby to obejmowało też 10L i
podobne. Nie sądzę, żeby dodawanie int, char etc na tym samym poziomie
co T_void było wskazane. Raczej je traktować jako typy z biblioteki
standardowej i używanie ich tylko w funkcji do zwijania stałych.
> 2. dodać do parsera ideę wyrażeń stałych -- niech upraszczanie dzieje
> się w czasie parsowania,
Może później? W trakcie typowania.
> 3. dodać tablice jako native type, odpowiednie typowanie i indeksery na
> tablicach. Pomyśleć
> o tablicach wielowymiarowych i o tym w jaki sposób z array (int) związać
> System.Array, tak żeby
> dało się napisać:
>
> class X {
> public static _my_array : array (int) = <| 10; -1; 23+(5*7) |>;
>
> public static Main () : void {
> Console.WriteLine ("{0}", _my_array.Length);
> }
> }
>
> gdzie _my_array.Length oznacza tutaj (_my_array : System.Array).Length.
Problem jest tylko z tablicami wielowymiarowymi. Normalnie można by
napisać:
class array ('a) extends System.Array = extern "System.Array";
Albo coś podobnego. Gorzej jest z tablicami wielowymiarowymi. Można
zrobić tak:
class array ('a, 'dim) where 'dim :> dim_0 {...}
class dim_0 {}
class dim_succ ('a) where 'a :> dim_0 extends dim_0 {}
> 4. dodać inicjalizację zmiennych statycznych, czyli:
>
> class X {
> public static _header : string = "Nemerle v0.1";
> public static _my_array : array (int) = <| 10; -1; 23+(5*7) |>;
> }
>
> To działa, modulo punkt 2 (czyli wyrażenia stałe). Przy generatorze kodu
> w C# to się robi łatwo dla
> typów prymitywnych i tablic, dla skomplikowanych typów (np. list) i przy
> generatorze do IL'a trzeba
> będzie chyba te inicjalizacje wrzucać do konstruktora statycznego, ale
> to nie będzie raczej trudne.
Początkowo można wszystko do konstruktora. Potem można jako
optymalizacje znaleźć wyrażenia stałe i wrzucić je do metadanych. Ale
AFAIK nawet CLS nie wymaga od języka korzystania ani tworzenia z
inicjalizatorów w metadanych, więc bez pośpiechu.
> 5. dodać properties do języka, słowa kluczowe get oraz set, to będzie
> dosyć karkołomne, ale potrzebne
> bo przy istniejącym generatorze raczej nie odwołamy się do żadnych
> properties z Frameworka, a to boli.
get ani set *nie* są słowami kluczowymi w C#. U nas też nie powinny być.
BTW nie wiem czy nie będzie prościej zmienić najpierw generatora, niż
dodać properties :-) Chyba, że properties będą do tego bardzo potrzebne.
> 6. dodać integrację z Frameworkiem i bibliotekami statycznymi. Przed
> wczytywaniem DLL'i i analizowaniem
> ich przez System.Reflection raczej nie uciekniemy, ale trzeba się
> zastanowić czy do samego Frameworka
> nie byłoby dobrze zrobić nagłówków -- pomijać w ten sposób mielenie tych
> megabajtów bajtkodu za każdym
> razem.
Nie sądze. mcs mieli i jakoś nie widać żeby był przez to strasznie
wolny. Zauważ, że mielisz tylko metadane. Zakładam, że to jest jakoś
sensownie ułożone w tych DLL'ach. Więc to jest kwestia przeczytania
kilkuset kilo danych, które już dawno są w pamięci a nie na dysku (VM is
your friend). Pozatym to już jest zrobione w miarę efektywnie.
> 7. jak już będzie działać 1-6 oraz jak Michał doda matching po stałych
> (czyli switch), to przerobić lexer.cs
> i parser.jay do Nemerle [Jay'a już przerobiłem (skeleton, reader.c i
> output.c), parser sie parsuje, w lekserze
> jedna funkcja mi została, wczoraj wieczorem już nie miałem siły jej
> dokończyć, ale poradziłem sobie bez
> switch'a, co trochę bolało heh].
OK, czyli to dostaje priorytet.
> 8. porządny system mejkfajlów, tak żeby się komplikowało wszystko pod
> Cygwinem/.NET Framework SDK
>
> Na pewno o wielu rzeczach tutaj zapomniałem, ale to tak na dobry początek.
Zaraz to wszystko powpisuje w BTS.
--
: Michal Moskal :: http://www.kernel.pl/~malekith : GCS {C,UL}++++$ a? !tv
: PLD Linux ::::::::: Wroclaw University, CS Dept : {E-,w}-- {b++,e}>+++ h
More information about the devel-pl
mailing list