[nem-pl] Uwagi różne
Michal Moskal
malekith at pld-linux.org
Fri Feb 20 15:55:37 CET 2004
On Fri, Feb 20, 2004 at 02:20:46PM +0100, Marcin 'Qrczak' Kowalczyk wrote:
> > Hmm, ty chciałbyś stworzyć kopię c z nową metodą (tak wnioskuję tez z tego co
> > napisałeś o skutkach ubocznych).
>
> Bynajmniej. Chciałem dodać nową metodę do istniejącej klasy, choć czuję,
> że to jest u Was niemożliwe. Jeśli to jest niemożliwe, to co się robi,
> jeśli chcę dodać nowy interfejs do isniejących już klas (np. do klas
> standardowych)?
>
> To, że tego nie można, jest moim największym zarzutem pod adresem
> statycznie typowanych języków obiektowych. Dynamicznie typowane języki
> obiektowe z reguły pozwalają dodawać metody do obcych klas po fakcie,
> a system klas Haskella - choć "nieobiektowy" - też to umie.
Runtime system .NET nie przewiduje rozszerzania istniejących klas
(przynajmniej o tyle o ile go znam). Ograniczenia .NET dość skutecznie
blokują jakieś próby ulepszeń w tej dziedzinie z naszej strony.
> BTW, jak zrobić coś takiego: definiuję typ np. listy, którego obiekty są
> haszowalne o ile typ elementów jest haszowalny - a jeśli nie są, to
> nasza lista też nie będzie haszowalna, ale w ogóle będzie używalna dla
> tych elementów? Tego też nie można np. w Eifflu, a można w statycznie
> typowanym Haskellu.
Nasz system typów jest za głupi na coś takiego. Można to chyba
zrealizować za pomocą makra (generować osobną klasę dla hashowalnych i
nie hashowalnych), ale może coś kręcę.
Zresztą:
class List <'a> { ... }
class HashableList <'a> : List <'a>
where 'a :> IHashable { ... }
To być może jest lepsze rozwiązanie tego problemu.
> > Generalnie nasza idea jest taka, że marka zmieniają deklaracje przy których są
> > napisane, podczas kompilacji:
> > [MakeFileDumper] class Produkt { .... }
>
> A, czyli już w momencie pisania klasy trzeba się zdecydować...
Tak, większość rzeczy w Nemerle jest po prostu statyczna.
[snip]
--
: Michal Moskal :: http://www.kernel.pl/~malekith :: GCS !tv h e>+++ b++
: When in doubt, use brute force. -- Ken Thompson :: UL++++$ C++ E--- a?
More information about the devel-pl
mailing list