[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