[nem-pl] Re: Zawalam Cię pewnie b łędami, ale...
Michal Moskal
malekith at pld-linux.org
Thu Oct 9 23:53:04 CEST 2003
On Thu, Oct 09, 2003 at 11:39:05PM +0200, rzyjontko wrote:
> Michal Moskal napisał:
> >
> > Super.
>
> Żeby zobaczyć jak się pisze w Nemerle, skopiowałem sobie list.n i go
> przerabiam. Zacząłem od napisania sobie last. I bardzo fajnie działa
> (choć mam uwagi - o tym później), ale chciałem sobie zgłosić wyjątek w
> przypadku listy pustej. No i nie wiem, jak napisać konstruktor klasy.
method this (x : string) { this#msg <- x }
albo coś podobnego.
> A uwaga jest taka, że komunikaty o błędach są... takie sobie. Dopisz
> taką funkcję last i zobacz jak zareaguje kompilator.
>
> fun ('a) last (l : list ('a)) : 'a =
> match l with [
> | Nil => Nil ()
> | Cons (?h, Nil) => h
> | Cons (?h, ?t) => last (t)
> ];
Stary kompilator mówi:
list.n:73: error: first tymatch branch had type list ('a{311}*), but
this branch has type 'a{265}, which doesn't suptype it
Nowy:
list.n:76:2: error: match case body was expected to have type list
('a_365*) while it has 'a_219
Te numerki ze zmiennych typowych wylecą, jak się tylko dorobię jakiegoś
sensownego zmieniania im lokalnie nazw. * oznacza zmienną wolną.
> Oczywiście błąd jest w 3 wierszu funkcji, bo zwracana jest wartość nie
> tego typu.
Nowy zgłasza błąd we właściwym miejscu, stary jest zepsuty, to fakt.
> Ta funkcja jest trywialna i znalezienie błędu to kwestia
> ułamku sekundy, ale gdybym dostał taki komunikat w czymś większym, to
> musisz wiedzieć, że nie znam szczegółów implementacji kompilatora i w
> ogóle moje pojęcie o kompilowaniu języków funkcjonalnych jest
> mizerne.
>
> Tymczasem otrzymuję komunikat, który:
> * jest dłuższy niż 80 kolumn
Ficzer not bug :-) Założenie jest takie, że nie czytasz ich na ekranie
tylko w edytorze, któremu tak jest łatwiej. A poważnie to można by
kiedyś zrobić test czy wyjście jest na ekran i jeśli tak to zawijać.
> * zgłaszany jest 2 razy i to nie w wierszu, w którym nastąpił
Chyba pójde na łatwizne i będę mówił papa po pierwszym błędzie.
Zrobienie tego dobrze (tak, żeby nie dostawać 2 razy błędów o tym samym
etc) nie jest wcale proste, i szczerze niezbyt konieczne przy
dzisiejszym sprzęcie.
> * ma błąd ortograficzny s/suptype/subtype
I mówi o tymatch zamiast o match.
> devel-pl już działa?
Tak.
--
: 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