[nem-pl] nawiasy
Michal Moskal
malekith at pld-linux.org
Fri Feb 13 19:12:01 CET 2004
On Fri, Feb 13, 2004 at 06:56:31PM +0100, Lukasz Kaiser wrote:
> Hej.
>
> Przez caly dzien sprawdzania egzaminow z logiki sprawdzalem zadanie numer 10
> za ktore mozna bylo uzyskac max. 8 punktow i w sumie wszystkim ok. 300 osobom
> dalem 1 slownie jeden :(. Tak, zadanie bylo proste chociaz wymagalo tw.
> o zwartosci dla logiki pierwszego rzedu (ale to nie byl pierwszy rok).
Może byłeś zbyt surowy ;)
> Kamil, pewnie ze masz racje ze * sa nieczytelne i myle sie z nimi regularnie,
> ale <> nie rozwiazuja problemu, przynajmniej dla mnie bo z nimi tez sie myle
> regularnie :). Ale tutaj problem moze tkwic we mnie ;).
>
> Michal dal IMHO bardzo madra odpowiedz na pytanie o target audience -
> programisci Open Source ale ci od C#, Perla, PHP, Pythona a nie MLa / Haskella.
> Jedyne moje zastrzezenie jest takie, ze ci ludzie chyba najwiecej programuja
> rzeczy w stylu zastosowan webowych,
Niekoniecznie. Webowe rzeczy robiś się głównie za pieniądze. Za darmo
nikt tego nie pisze bo to nudne ;) Oczywiście generalizuje, ale nie
wydaję mi się, żeby to była większość, najwyżej 10-20%.
> wiec raczej nie sa im tak bardzo potrzebne
> funkcje wyzszego rzedu jak dobre makra. Oczywiscie Nemerle ma i to i to, poza
> tym jest Sioux i moze bedzie nawet umial robic cos po stronie serwera, to by
> bylo super. Moze warto sie zastanowic nad czyms w stylu mod_nemerle ?
IMHO jeśli nie zintegrujemy siouxa z system.web (HttpApplication i takie
tam), to będziemy wciąż od nowa wymyślać koło. Ale to tylko moje zdanie
i równie dobrze można by to o całym Nemerle powiedzieć więc nie będę się
upierał.
> > def x = 'a();
>
> To ja tutaj pozwole sobie na kawalek religijny, przepraszam tych co nie lubia.
>
> Czym sie rozni generics od typow polimorficznych ?
> Ktos moze mysli ze w zasadzie to niczym, ale dla mnie to nie jest prawda.
> Dla mnie generics pozostaje w fazie szblonow i makr, poniewaz jest nacechowane
> innym typem myslenia niz typy polimorficzne. Tworzac kod w generics taki jak
> "def x = T ()" myslisz tak: pisze sobie ten kod, zeby funkcjonowal dla dowolnej
> klasy T, zebym mogl go sobie potem uzywac w roznych miejscach dla roznych klas.
> Zupelnie inaczej myslisz piszac z uzyciem typow polimorficznych. Myslisz tak:
> pisze sobie funkcje dla typu dictionary ('a, 'b) bo to co te funkcje robia
> to sa operacje na slowniku z jakimis tam wartosicami. Wprowadzasz abstrakcje
> przede wszystkim z tego powodu, ze myslenie w oparciu o ta abstrakcje jest
> prostsze i bardziej czytelne. Nigdy nie napiszesz "'a()" bo 'a jest czyms,
> nie mozesz zalozyc ze ma konstruktor i nie masz takiej potrzeby (nawet jesli
> wszystko na swiecie ma konstruktor i mozesz to zalozyc, to psuje abstrakcje).
Kamil napisał w where, że ma konstruktor (where T : new ()). To jest po
prostu inna klasa abstrakcji -- takich typów które mają defaultowy
konstruktor a nie wszystkich. Pominąwszy religijne rozważania, jest to
bardziej ogólne podejście niż czyste typy polimorficzne.
> To jest moze roznica religijna, ale ona sie odbija w skladni, bo napisanie
> "list<int>" w pewnym sensie sugeruje ze schemat "list" instancjujesz typem
> "int". Tak myslisz w generics, ale nie przy typach polimorficznych, gdzie nie
> ma w ogole mowy o zadnej instancjacji.
U nas jest, tzn. teraz nie ma, ale będzie. Co więcej tak jest lepiej --
efektywniej.
> Mysle, ze przyjecie wiekszej ilosci
> takich haczykow z generics bedzie skutkowac takim czyms, ze ludzie beda
> uzywali typow ze zmiennymi tylko tam, gdzie wyda im sie to niezbedne, glownie
> w bibliotekach operujacych na kolekcjach. Sami natomiast beda najchetniej
> pisac klasy z konkretnymi typami. Zupelnie inaczej programuje sie (a moze to
> tylko ja?)
Ja, nie da się ukryć, nie używam typów polimorficznych poza strukturami
danych.
> np. w OCamlu - uzywasz zmiennych typowych gdzie tylko sie da, chociaz
> nie ma z tego zadnego zysku w postaci "code reuse" bo na koncu i tak uzywasz
> tych abstrakcyjnych funkcji tylko dla jednego typu (np. deklarujac tree 'a,
> potem uzywajac zawsze tree int). Ale w ten sposob piszesz lepszy program, bo
> masz lepsza kontrole przez uzycie abstrakcji. Sam jezyk w pewnym sensie zmusza
> czy naklania cie do tego zeby tak postepowac. Czy chcemy zeby Nemerle tez do
> czegos takiego naklanial, jak bardzo i jakim kosztem ?
Nie sądzę, żebyśmy zdziałali coś metodą bata, marchewka widzi mi się
znacznie bardziej.
--
: 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