V poslednim roce jsem si s GO pohraval, kamarad se me ho snazil nasejlovat, tak jsem si zjistit vice. Porovnavam s Java, kterou se zivim vice nez deset let a pythonem, do ktereho jsem byl na par let dostrkan na vedlejsak.
GO:
>> ty kryso :-)
1. nelze mu uprit jistou miru elegance, ktera je apriori dana vsem nadanym zacatecnikum
>> nadany zacatecnici: rob pike, ken thompson, russ cox (C, plan9)
2. balickovaci system je strasne "hura" proste odkaz na github, bez verze a pak si to panacku pores sam, tzn peklo pokud delate rozsahlejsi projekt, ktery hromadu funkci a integraci. o rebuildu starsich projektu ani nemluve, pokud nemate ulozeny cely environment ve vcs.
>> aneb jak donutit lidi mit poradek ve verzich a gitu
3. svoji "VM" si to cpe primo do exace. V soucasne done ma 'println("hello world")' myslim par mega, pokud se to bude optimalizovat budeme mit 200MB exace, viz nize.
>> zadnou virtual masinu to nema, a poslechnete si jejich prednasku, jak udelat moderni garbage collector.
5. neni to objektove. Ackoli se o tom neustale vedou spory, tak bylo realne prokazano (za poslednich 10 let), ze bez objektoveho pritupu nevytvorite komplexni aplikaci pri spolupraci tymu 100+ lidi. (eclipse vs world)
>> kdo si mysli, ze existuje jen OO, a jine pristupy nejsou mozne, tak si musi neco nastudovat.
ctete o implicitnim inteface a reflexi
https://blog.golang.org/laws-of-reflection 6. vetsina "cool" funkci jako "chan" je v podstate k smichu. Jaky je extra rozdil mezi "chan" a Executor.createSingleThreadExcecutor()? v podstate takovy, ze ten kdo pouziva chan, nema poneti o slozitosti okoli. Navic Eecutor je interface, ktery muzete nahradit jinou implemenataci, optimalizovat etc. stejne tak gorutines, multiprocesoring (cripled) for dummies. Jak si rozsirite "chan"? - udelate nad nim nejaky wrapper a jsme tam kde jsme byli.
>> chan je super, zas video od roba pika:
https://www.youtube.com/watch?v=w2UAavudKC87. jsou tam pointery. dneska nikdo nechce pointery. Pokud chcete poitery, tak delate v C jednu knihovnu a optimalizujete ji na max protoze je to kriticka zalezitost s velkym dosahem, dekoder kodeku na placenem kompilatoru od intelu, etc. A ten se potom zapoji do... wait for it ... do Javy. Ne v prostredi, kde cokoliv udelate bude tak jako tak 4x pomalejsi.
>> pointer je super, docela chapu ze odstranili aritmetiku s pointery, ale pointery tu byly drive nez reference.
8. ma to C bindings. naprosta vetsina knihoven v go (krome zakladni), je nejakym wrapperem na Ceckem. a musim podotknout, ze velmi horkou jehlou sitym wrapperem. Tim padem cross jde vlastne dost dohaje a pokud se vyskytne problem, tak vyzaduje znalost C a gdb a valgrid a ... pak to nema cenu delat... viz vyse. Tohle je dost podobne pythonu.
9. vsichni rikaji, ze je lehke si udelat http server a jak je to super. stejne tak jako v node.js. http.server(port). krasa. NE! neni to krasa. tam java zacinala tak pred 20-ti lety. jeden object request, jeden object response, rules the world. NE!NE!NE!. Na solidni aplikaci potrebujete filtery, ktere budou resit encoding, caching, session management, iln18, range requesty, multipart dissasembly.... na to si naprasite vlastni funkce a zjistite, ze ten tomcat nema tech 10 mega jen tak pro srandu. A java to umi taky
http://www.simpleframework.org/doc/javadoc/index.html uplne stejne. Posledni commit nekdy pred 10-ti lety od te doby to vlastne nema chybu. Proc by melo, kdyz je to tak jednoduche. A proto to skoro nikdo nepouziva.
>> kecy v v kleci
google to tlaci asi jako miliardar tlaci svoje retardovane dite. rad si poslechnu solidni oponenturu.
>> ja javu taky pouzivam, takze tu nebudu psat neco o retardovanem diteti odkoupenem oraclem atd.
>> tohle je naprosto zbytecna poznamka od vas.