[nem-pl] Mój plan

"Paweł W. Olszta" Pawel.Olszta at adv.pl
Tue Nov 18 11:24:18 CET 2003


 
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),

2. dodać do parsera ideę wyrażeń stałych -- niech upraszczanie dzieje 
się w czasie parsowania,
to pozwoli na napisanie -1 w inicjalizatorze statycznej tablicy na ten 
przykład [musiałem dodać do
leksera odpowiednią regułę żeby to zadziałało bo potrzebowałem do Jay'a, 
a to błędne rozwiązanie].
Proponuję obsługiwać odpowiednie działania na typach prymitywnych: bool, 
char, int, float i string.

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.

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.

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.

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.

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].

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.

-- 
Pawel W. Olszta
<olszta at adv.pl>

"No," said the elevator miserably, "of the future..."






More information about the devel-pl mailing list