[112]
Tak aj ja poporade teda (inak vsetko je to len moj nazor, diskutujeme, nevravim ze mam univerzalnu pravdu, len chcem hodit do plena moj pohlad na vec, tiez nechcem vyvolavat flame):
Linus nie je pocitacovy boh, suhlasim, ten link som dal len pre pobavenie (resp. preto aby ste ho nemuseli znoval hladat v diskusii, ked som sa na neho odvolaval). To co tam pise je ale podla mna zcasti pravda...
C++ vycitam to, ze nie je ani nizkourovnovy a ani vysokourovnovy jazyk. Aby bol nizkourovnovy, musite ho pouzivat v podstate ako cecko, a aby bol vysokourovnovy, chyba mu velmi vela dolezitych vlastnosti. Ja mam niekedy pocit, ze ma z oboch "svetov" to najhorsie (malicka vyrazova schopnost z nizkourovnovych jazykov, "pomalost" vysokourovnovych).
Syntax. Nemam rad C-like syntax, ale u cecka ju chapem preco je (a som aj ochotny ju pouzivat:). Vysokourovnovy jazyk by taku obmedzujucu a ukecanu syntax nemal mat. Java syntax mi nevohovuje, preto pouzivam LINJ (Lisp Is Not Java - pisete normalne v Common Lispe, s urcitymi obmedzeniami kvoli Jave..., a LINJ z toho spravi "human-readable" Java kod... takze mozete pouzivat Lispove makra a podobne...)
Norma - paskvil... beriem spat, ospravedlnujem sa... to by bolo na flame... este raz, pardon... nemal som ju tak oznacit (aj ked si to myslim)...
C++ nie je cisty vysokourovnovy jazyk, pravda, a podla mna mu chyba velmi velmi vela vlastnosti, ktore by ho mohli k vysokourovnosti priblizit.
Preco mi vadi ze vsetko nie je objekt? Nema to nic s OO modelovanim... ja v Lispe kodim casti funkcionalne, casti proceduralne, casti objektovo... a ked je vsetko objekt, tak to do seba prirodzene zapada... uz som spoznal, ze sa to tazko niekomu vysvetluje, kto neprogramoval v cisto objektovom jazyku, resp. ja to moc neviem (nikdy ma nepochopia) :)
Multidispatch.... OO jazyky, ktore poznate Vy, rozhoduju o vyslednom zavolani metody iba na zaklade jednoho (prveho) parametra.
CLOS objekty vsak neobsahuju metody, metody patria generickym funkciam, a genericke funkcie su specifikovane na rozne typy objektov, resp. maju specifikovane svoje parametre na rozne typy objektov... ak specifikujete len prvy parameter, podoba sa to na singledispatch, ktory je v OO jazykoch ake poznate. V CLOS vsak mozete specifikovat viacero parametrov (kludne aj vsetky)... ved vsetko je objekt, takze kazdy parameter je objekt... no precitajte si nieco o CLOS a Meta Object Protocole, ak Vas to zaujima, ak nie, kaslite na to...
Aspektovo orientovane rysy davaju dalsiu vyrazovu schopnost do CLOS, resp. vyrazne zvysuju jeho modularnost. Nemusite to pouzivat ak nechcete, v niektorych pripadoch je to super, ale tiez mi chvilku trvalo kym som to pochopil...
O operatoroch v c++ som uz raz pisal, naco znova (ked tak si najdite v starych clankoch na roote, resp. v diskusiach, bolo to tusim nieco o spocitavani matic)...
Viacnasobna dedicnost je super pri tzv. treadovom modeli tvorenia objektov (ci ako sa tomu odborne nadava...:). Hmm... mam to vysvetlovat? Ak vas to zaujima, tak napiste, vysvetlim, ak nie, kaslite na to...
Zapuzdrenost pomocou public, protected, private je v niektorych pripadoch nanic. Podla mna je aj dokonca zbytocna... nechapem preco by mal programator pred sebou nieco ukrivat... a ak dam vsetko public, zasa to bude vyzerat ze to patri k interfejsu objektu. Mne vyhovuje, ked mam jasny interfejs, ale zaroven aj ku vsetkemu pristup. No ale prave zapuzdrenost nie je asi nejaky velky problem v c++, len mi pride ako blbost...
Syntakticka abstakcia? Vytvarate si vlastne syntakticke konstrukcie, hmm... taky jednoduchucky priklad... ako je napriklad otravne stale pisat for pre prechadzanie pola a zoznamov a podobne, tak niektore jazyky pridali foreach. V jazyku so syntaktickou abstrakciou si kludne napisete vlastne foeach napr:
- for line in file
- for key and val in hashtable
- for computer in local-network
Naprogramujete si vlastne syntakticke vyrazy, ktore vam sprehladnia a zmensia kod, atd... (inak co vsetko sa da s makrami som myslim pisal prave pri tom vysvetlovani blbosti c++ operatorov). Znova, ak vas to zaujima a chcete si rozsirit obzor, citajte, vyhladajte... to ze teraz nevidite na co by Vam to bolo este neznamena ze by Vam to naozaj na nic nebolo...
GC je u vysokourovnovych programovacich jazykoch nutnost (IMHO). Ja som rad ze ho nema cecko.
K poslednej poznamke... chcel som povedat nie to, ze by to islo, ale ze by to nakoniec bol skoro rovnaky kod (teda podla mna... hmm... no mozno nie, toto nechajme tak:)