Citat:
NrmMyth: Kako znas da je ovo dobro rijesenje, da nije moglo bolje? Nigdje ne stoji da moras ovako iscrpno koristiti template.
Ti implementiraj monade u C++ na ljepši način bolje od boost gurua i slobodno ih kontribuiraj zajednici, pa ćemo se onda pozivat na argumente "što bi bilo kad bi bilo". Dotada ne pokušavaj na sličan način osporiti "urednost" C++ templatea, ok?
Citat:
Govorimo o C++, jeli tako, nasljednik C? Cemu se cudis onda, C++ mora ostati dosljedan svojim pocetnim postavkama, odnosno pokusti rijesiti sto vise stvari unutar compile-time-a, da bi se dobilo na efikasnosti. Nus produkt jest bloatan kod, ali "that is the way C++ is".
Ako bloatan kod definiraš efikasnim - onda C++ way on jest "efikasan", to i govorim :) Čitljivost koda i pragmatičnost prema programeru u mismathced tipovima varijabli također nisu bogzna kakva prednost C++ way-a.
Citat:
FuzzyCreation: 1. Neko rece: "Turing-potpun (vrijeme kompajliranja je neodlučivo :) metajezik sa najružnijom i nagadnijom moguće zamislivom sintaksom, rame uz rame sa Brainfuckom i Intercalom? :)"
Vreme kompajliranja i uopste kompajler nemaju veze sa problemom odlucivosti nekog algoritma. Odlucivost nekog algoritma je pitanje da li se algoritam na odgovarajuci input zavrsava u konacnom vremenu, naravno svi znamo da je u opstem slucaju (algoritam koji na inputu prima algoritam i kaze "da" ako se algoirtam na ulazu zavrsava u konacnom vremenu, "ne" u suprotnom slucaju) taj problem neodluciv, ali kompajler o tome nema pojma, posto on kompajlira (prevodi) program sa jednog programskog jezika, a ne odlucuje da li se taj program zaustavlja ili ne (sto je u pojedinacnim slucajevima moguce). Ako je program konacan u prostoru (a takvi su svi po definiciji algoritma kao Tjuringove masine) onda je kompajliranje svakog programa proces koji se zavrsava u konacnom vremenu. Stoga vreme kompajliranja ne moze biti neodlucivo. Moze biti samo vreme izvrsavanja. Sto nas dovodi do zakljucka da se ovde principijelno ne razlikuje kompajler od interpretera. Pitam se kako nekom pre mene ova izjava nije IZBOLA oci. Ja je svrstavam u top glupost koju sam u skorije vreme ovde procitao.
Nema razloga koristiti termine kao "top gluposti" koje su na granici vrijeđanja. Mogao bih i ja biti jednako zajedljiv, i vjeruj mi ne bi izgledalo jako lijepo.
Ako imaš
turing-ekvivalentan sustav tipova (sustav tipova kao računski model, termin
turing-potpun se više koristi za neki specifični izračun, a većina izračuna nisu turing-potpuni, već je dovoljna npr. primitivna rekurzija), tada typechecking postaje turing-neodlučiv, a to je _nepoželjna_ karakteristika.
Gledaj to ovako: U C++ templateima je moguće konstruirati univerzalni Turingov stroj. Drugim riječima, moguće je bilo koju (algoritamski) izračunljivu fju izračunati tijekom faze kompilacije izvornog koda.
Slažeš li se sad da je neodlučivo hoće li (kad? i ako?) kompajler zaustaviti kompajlirati izvorni kod? :) Ako ne, koji to hiper-izračunljiv računski model koristi semantički analizator dotičnog? :)
Citat:
2. Neko rece: "Programski jezici treba da budu kao formalne teorije, minimalan, neprotivurecan i potpun (ako se dobro secam)"
Ok, postoje zahtevi i misljenja da su minimalisticki programski jezici (sa minimalnim brojem konstrukcija, koje cine bazu izracunljivih konstrukcija) dobri programski jezici. Jedan od zagovornika minimalizma je i Niklaus Wirth, po njemu dobar je jezik koji od konstrukcija ima samo: IF, WHILE i naredbu dodele (onakva kakva je u oberonu), a od tipova podataka: osnovne proste tipove, nizove, strukture(slogove) i pointere i nista vise. Ali zasto bi se neko odrekao na primer REPEAT konstrukcije ili SWITCH konstrukcije. Ne znam stvarno, ali oduzimanjem ovakve slobode, ne dobijamo nista na sigurnijem procesu pisanja koda.
Tko kaže da se trebaš odreknuti? :) Za to postoje sintaksni makroi preko kojih manipuliraš AST-om i dodaješ sintaksni šećer kako ti ćefne. Alan Perlis je svojedobno za LISP rekao da je to "programibilni programski jezik" :)
IMHO dodavanje sintaksnog šećera nad nekim minimalnim formalizmom (recimo netipiziranim lambda računom, sa sintaksom i semantikom od po nekoliko linija koda) može samo povećati fleksibilnog jezika, ne smanjiti ga.
Citat:
I pored toga pisanje programa u formalizmu najnizeg nivoa bilo bi jako tesko. Probaj na primer da napises generativnu gramatiku koja generise proste brojeve. Neces moci tako lako, prvo ces morati da napises Tjuringovu masinu koja bljuje proste brojeve, pa da je posle prevedes.
Okruzenje u kome se programi pisu kao formalne teorije je jako ne-intuitivno, ali i korisno za izgradnju racunarske intuicije.
Imam neki osjećaj da generator prostih brojeva ne zahtijeva cijeli Turingov stroj (odnosno gramatiku neograničenih produkcija) - ali to sad nije ni bitno. Slažem se da je svođenje postupka programiranja ne formalnu verifikaciju iskazanih algoritama previše mentalno naporan proces za uobičajene svrhe (ne i za specifične), baš zato to i ne radimo. Za neke mission-critical svrhe to je već druga priča.
Citat:
Nedeljko:Šta li to znači da je programski jezik kompletan? Ako to znači da čini potpun sistem izračunljivosti u smislu ekvivalentnosti sa Tjuringovom mašinom, onda su svi programski jezici takvi.
Da, zato je i skovan termin
Turing tarpit kako bi se stalo na kraj argumentima "Moj jezik je jači od tvog" :)