Citat:
krckoorascic: sto se tice Haskell-a i Boo-a, pogledacu ih mada koliko sam video (samo preleteo pogledom) Haskell ne podrzava oop
Postoje neke OO ekstenzije Haskella (
Haskell++,
O'Haskell), a i razne emulacije unutar Haskellovog sustava tipova koji je pak dovoljno moćan da prodrži većinu onog što se uobičajeno podrazumijeva pod sintagmom "OO" (a bome i štošta što ni D niti C++ neće imati tako brzo):
http://homepages.cwi.nl/~ralf/OOHaskell/
Citat:
To deliver a faithful, convenient and comprehensive object system, several techniques had to be discovered and combined. Proper effort was needed to preserve Haskell’s type inference for OO programming idioms (as opposed to explicit type declarations or type constraints for classes, methods, and up-casts). The obtained result, OOHaskell, delivers an amount of polymorphism and type inference that is unprecedented. Proper effort was also needed in order to deploy value recursion for closing object generators. Achieving safety of this approach was a known challenge (Remy, 1994). In order to fully appreciate the object system of OOHaskell, we also review less sophisticated, less favourable encoding alternatives.
Not only OOHaskell provides the conventional OO idioms; we have also language-engineered several features that are either bleeding-edge or unattainable in mainstream OO languages: for example, first-class classes and class closures; statically type-checked collection classes with bounded polymorphism of implicit collection arguments; multiple inheritance with user-controlled sharing; safe co-variant argument subtyping. It is remarkable that these and more familiar object-oriented features are not introduced by fiat — we get them for free. For example, the type of a collection with bounded polymorphism of elements is inferred automatically by the compiler. Also, abstract classes are uninstantiatable not because we say so but because the program will not typecheck otherwise. Co- and contra-variant subtyping rules and the safety conditions for the co-variant method argument types are checked automatically without any programming on our part. These facts suggest that (OO)Haskell lends itself as prime environment for typed object-oriented language design.
Naravno, smisao istraživačkih jezika kao što su Boo ili Haskell nije da se koriste u produkciji ili da rješavaju neke "konkretne" probleme - tu su da radi mentalne tjelovježbe (pogledaj primjere za quick sort ili računanje Hammingovih ili Fibonaccijevih brojevima u Haskell one-linerima), ili da guraju granice nedolazećih tehnologija u mainstream jezicima (ukoliko ih ne razvijaju programeri-hobisti već korporativni istraživački labovi).
Ako imaš dovoljno slobodnog vremena definitivno se posveti barem jednoj "nestardardnoj" paradigmi, u jezicima kao što su Scheme, Haskell ili O'Caml. Trenutno je stanje stvari da mainstream jezici evoluiraju brže nego ikad prije, do-jučer nepojmljve featurez u roku par godina postanu standardni idiomi korištenja. Recimo, vrlo je moguće da sljedeća iteracija Jave bude pružala neki shit zvan "poopćena sučelja" (
generalized interfaces), a koja bi bila mahom bazirana na Haskellovim "klasama tipova" (
type classes - ovako Haskell ostvaruje ad-hoc polimorfizam):
http://lambda-the-ultimate.org/node/1939
Također ni ja ne bih trpao u isti koš Python i Perl po ljepoti sintakse. Python ipak nije write-only jezik ;)
Što se tiče D-a: za moj je ukus previše high-level i low-level koncepata nakalemljeno u jedan jezik. D izgleda pokušava biti "Katica za sve", pri čemu ne uspijeva ekscelirati ni u čemu posebnom. Java i LISP su odavno pokazali da skup featurea jezika nema nužno korelacije sa tržišnim uspjehom, svaki sa svoje strane ljestvice naravno. Walter Bright me neodoljivo podsjeća na križara koji vodi rat koji ne može dobiti, i koji je odavno izgubio papinu encikliku u kojoj piše protiv koga se "bori" :)