Javu jsem nemel nikdy rad. Je to jazyk, ktery formalne patri do 70let, a ktery se rozsiril pouze diky neutuchajicimu protlacovani od Sun-u.
Nebudu hodnotit nesmyslne a manipulativni video. Hodnotim jazyk, ktery ma na svedomi tisice profesionalnich programatoru, kteri neumi programovat. Jazyk, ktery kdyby nevznikl, tak by jeho misto zaujaly jine z desitek bezne pouzivanych jazyku a s velkou pravdepodobnosti by to byl jazyk, ktery by nebyl zastaraly uz v dobe "vydani".
Fascinuje me ta militantnost a fanaticnost java programatoru (kteri navic vesmes neumi zadny dalsi jazyk).
Pokud to bylo mysleno jako vtip, je to jeste horsi, protoze to vtipne neni.
Liší se. Zatímco Java je multiplatformnía existuej několik prostředí (Eclipse, NetBeans,..) C# jede jenom na platfoemě M$ a mimo předraženýho kolosu M$V$ se s tím nedá dělat.
Celkem se zasměju, až u Win12 někdo přijde s inovací ovládání, který uvolní obě ruce při práci s PC a kupodivu to M$ položí, přestože rektální joystick bude v ceně licence a bude dokonce i v několika barvách a velikostech. V tu ránu budou programátoři v C# tam, kde by měl být podle marketingu onen ovládací prvek...
K tomu aby jsi programoval v .NET, nepotřebuješ visual studio. Stačí ti .NET, ten je zdarma a libovolný textový editor. Kompilovat C# můžeš za pomocí csc z cmd. Co se týká IDEm taky jich existuje několik. A některé dokonce i pro Linux.
Ještě ti dám jednu dobrou radu. Než příště začneš do něčeho drbat, pozíšťuj si jak to ve skutečnosti je, a jak moc se to liší od tvých představ, nebo od toho jak si přeješ aby to bylo, aby jsi nebyl za vola, jak se ti to právě povedlo.
C#
nevyhody oproti jave:
- viac menej lock na MS, vynimka MONO, obcas prekvapivo dobre pouzitelna, obcas zakladne veci robia problemy. Multiplatformnost je zatial nic moc.
vyhody oproti jave:
- modernejsie jazykove konstrukcie, jazyk sa vyvyja, Oracle na JAVU kasle. Ako jazyk je krajsi, aspon podla mojho nazoru.
Javisti mohou děkovat Bohu za C#, protože po jeho uvedení se dal vývoj zase trochu do pohybu.
To nic nemění na tom, že je to jazyk provázaný s Microsoftem se všemi zápory a výhodami. Každopádně nikoliv multiplatformní, ale použitelnost stojí a padá s úspěchem Microsoftu. A s tím to především v mobilním segmentu nevypadá růžově.
"Javisti mohou děkovat Bohu za C#, protože po jeho uvedení se dal vývoj zase trochu do pohybu."
Ano konkurence je v tomto ohledu dobra a Javu skutecne posunula od 1.2-1.4 (kde se skoro nic nedelo) k osmicce s peknymi novymi vlastnostmi. Osobne asi nejvic cekam na to, az se konecne doladi podpora pro modularni JRE, no uvidime.
No to už raděj Javu. Ta se dá spoň spustit všude i bez widlí a COM.
Kdybych si mohl vybrat, tak C/C++. Už jenom proto, že varování kompilátoru například při použití špatnýho typu najde plno chyb dřív, než kód vůbec přebere tesťák. Sice je s tím trochu víc práce, ale líp odvedené.
Je potřeba si uvědomitjednu podsttanou věc. Všechny "moderní jazyky" mají společný vlastnosti:
1. Vychází z C/C++
2. Markertingový tahák je "zrychlení a zjednodušení vývoje"
3. Lákají programátory na zjednodušení.
Jenomže vždycky je něco za něco. Chybí některý možnosti, jako třeba typová kontrola. Nebo se jedná o patentovanou proprietální technologii na jedné platformě (takže nutí k nákupu včetně systému a infrastruktury), chybí standardizace (v tom ní ANSI C vysoko nad hodně jazyků). A nikdo nezaručí, že ten jazyk bude za 10 let existovat.
Vlastní reusable moduly nejsou etický kodex Lesů ČR, aby se zatěžký prachy přepisovaly furt dokola a pokud už člověk uvažuje o vlastním balíčku, který chce použt ve víc projektech, měl by použít něco univerzálního a trvanlivýho...
C/C++ jsou neuvěřitelné a pomalé paskvily (pomalé z hlediska buildování). Sice existuje standard, ale ten skoro nic neřeší, takže na každou ptákovinu je potřeba použít nativní funkce OS nebo nějaké knihovny, kde to za programátora vyřešil už někdo jiný. Spousta vývojových prostředí si zavádí vlastní konstrukce, které jiný překladač nevezme, protože je nebude znát. C++ nabízí milión featur, z nichž v normálních aplikacích prakticky člověk potřebuje stovku, ovšem je otázka, jak dobře je zvládnou jednotlivé překladače.
U nějakého projektu (myslím, že to bylo něco od Mozilly) byl údajně seznam věcí, které se mají/nemají používat pro udržení přenositelnosti mezi různé platformy. C++ se tam snad zredukovalo na klíčové slovo class a pár systémových templat, zbytek se používat neměl, protože s tím má problém ten a ten překladač na té a té platformě...
Milión featur bych žádnému jazyku nevyčítal (stejně tak nějaké chybějící). To je volba autora jazyka a každý programátor preferuje něco jiného. Třeba scala, o které se mluví jako o javě budoucnosti, je featurami jazyka ještě víc přeplácaná než C++ a přesto je obvykle přijímaná mezi programátory dobře. Základ spíš je pochopit design toho jazyka a snažit se řešit věci, tak jak se to v tom jazyku řeší. Pokud to člověk dělá jinak, nikdo se v tom nevyzná.
Rychlost buildování je v produkčním nasazení jistě velmi zajímavé :-) Na druhou stranu takové LLVM kompiluje rychleji než Java.
Standard toho řeší celkem hodně a ještě víc toho řeší Boost. Na druhou stranu Java v tom není o mnoho lepší, stačí se podívat, kolik existuje třeba GUI frameworků pro Javu.
Nevím o té spoustě vlastních konstrukcí, které jiný překladač nevezme, v podstatě znám jen jednu, a to microsoftí Structured Exception Handling. Na druhou stranu C++ má preprocesor, takže není problém takové případné konstrukce na platformě, kde nejsou, skrýt. Preprocesor je věc, která mi v Javě hodně chybí.
Běžně používané překladače s C++98 nemají problém a mnohé už nemají problém ani s C++11.
Bezne pouzivane??? Vo vela firmach je stale vs 2008. Embedded zariadenia dokonca gcc vo verzi 3.x. skuste si prelozit hociktory realny vacsi projekt a uvidite v reale ze niektore veci gcc skompiluje a vs nie a naopak. Snad casom c++ 11 konecne zjednoti prekladace na rozumne minimum
Riesit veci cez ifdef je skor zufalstvo ako nejaka vyhoda
A ona bude aplikace o neco zcela zasadniho ochuzena, pokud se vyhnete pouzivani jazykovych konstruktu vyssich standardu? Taky znam jednoho takovyho magora, kterej vsechno dycky pise v nejnovejsim .NET ... a pak se strasne divi, ze mu to na 90% stroju nefunguje, protoze to tam neni nainstalovany.
Zkoušel si někdy psát něco většího než hello world? Ono vůbec nejde o to, co to přinese aplikaci, ale co to přinese vývojářům. Uživateli je jedno, jestli to někdo psal v assembleru pět let nebo to někdo napsal v C# za měsíc a bude to o 5% pomalejší. Tomu, kdo bude ty vývojáře zaměstnávat to ale určitě jedno nebude, protože bude mít třeba 100-krát větší náklady. Druhá věc je, jestli se vybrala vhodná platforma, kterou bude mít většina uživatelů nebo něco příliš exotického či nového, takže to bude vyžadovat instalaci dalších věcí.
Marketingově a politicky je to zmáknuté obdivuhodně (zákazníkovi se řekne Java, on získá pocit vyjmečnosti a kvality je ochoten platit víc peněz). O tom žádná. Úplně nejvíce mne fascinuje sektářství tvůrců Java aplikací. Něco podobného má snad už jen Ruby :-)
Ve své době to muselo být velmi zajímavé, že jste nebyli závislí na konkrétním operačním systému. Škoda jen že to technologicky zamrzlo a stal se z toho megamoloch, kde je na všecko systém zatemňujícíh velmi obecných tříd, které jdou do sebe poskládat většinou jen jedním konkrétním způsobem.
V posledních letech nestoupá dramaticky rychlost procesorů, ale zvětšují se (mají více jader). To přináší požadavky na paraelizaci výpočtů a neslyšel jsem, že by to Java uměla nějak lépe, než vláknama operačního systému. Ale nesleduji to. Aktivně jsem v Javě skončil před 5 lety po cca tříleté zkušenosti.
Do toho virtualizace počítačů, "mrakování" a z toho plynoucí důraz na energetickou úspornost aplikací. Ti co nosí počítače v kapse taky neradi vidí, když jim baterka nizí moc rychle.
No a ti co brouzdají po Internetu taky nemají radost, když musí příliš často aktualizovat a občas ani to nepomáhá :-)
Uvidíme jak se s tím Java popere.
Jo, ale zkuste si treba pustit ANts P2P a gtk-gnutellu. Schvalne, pod kterym vam lehne pocitac vycerpanim.
Skoro vzdycky, kdyz jsem narazil na neco vetsiho v Jave, konalo se po spusteni velke vrceni diskem, nasledovalo velke obsazovani pameti a zahrivani CPU. Vysledny dojem nebyl ohromujici, zejmena co se tyce rychlosti. Clovek aby mel doma posledni rev vypocetni techniky.
Tak to se asi chce podivat profilerem na to, kde udelali soudruzi vyvojari chybu :-) Osobne Javu na desktopu honim jenom v Eclipse (pokud se nepocitaji ruzne CLI tooly) a Eclipse bez problemu jede na pocitaci s prave tim zminovanym pulgigem pameti - je to 10 let starej Dell, takze zadna zhava novinka.
Java je na první pohled velmi jednoduchý jazyk. Jsou k němu tuny příkladů.
Ve skutečnosti je to jazyk velmi složitý a "naivní přístup" je u něj cesta do pekla. Navíc 80 procent příkladů na internetu pro kupříkladu Java Swing obsahovalo zásadní chyby. Nevím, zda se situace nějak zlepšila, ale před 6 lety byl nejčastějším zdrojem "UI zamrzá, chová se divně a nedá se to používat" programátor, který nepochopil, že na obsloužení událostí si musí udělat vlastní vlákno. Případně programátor, který tohle sice věděl, vlákno si udělal, ale už si neuvědomil, že z něj pro změnu nesmí volat Swingové metody.
A oblíbeným zdrojem "paměťové nenažranosti" je obrovské množství "new" s předpokladem, že GC se o to postará (no, až mu dojde paměť nebo trpělivost, tak bezesporu ano).
Prostě je to příliš benevolentní jazyk a velmi odolný VM. Přidejte k tomu netrivialitu standardních knihoven a máte zaděláno na problém, protože většina programů bude špatně, ale přesto to alespoň nějak poběží.
Toto jste naprosto přesně vystihl. Hlavní problém jsou programátoři, kteří neví jak funguje počítač, nemají ani základní znalosti teorie principů OS, jakým způsobem fungují grafické subsystémy a jejich interakce s vlákny.
Java má tu smůlu, že díky obecné "robustnosti" jazyka i VM, kdejaký idiot získá pocit jistoty a sebevědomí, protože ať napíše jakýkoliv paskvil, pokud ho protlačí přes kompilátor, JVM se s tím už nějak popere...
Ten kdo dokáže přemýšlet jen v intencích syntaxe jazyka "jak to napsat" a odmítá myslet co se reálně děje za tím, si nezaslouží být označován jako programátor.
No, to je tedy pristup, jak z Redmondu. Mame vykonne CPU a SSD, pameti za par kacek metrak, tak budeme plytvat zdroji, az nam to pojede, jak Widle 3.0 na i386. Kdyby takto mysleli programatori v dobe, kdy stroj s 256 kb pameti delal multitasking a obsluhoval deset terminalu, tak by nedokazali maprogramovat ani piskvorky.
Krome toho, SSD je tu s nami jen par let. Vetsi kapacity pak jeste mene a porad to eni zrovna levne. Takze podle vas mam zahodit treba svuj mozna 4 roky stary netbook a honem si jit koupit notebook se ctyrjadrem, 64 GB pameti a SSD jenom proto, ze programatori jsou neschopna prasata, ktere meli napichat na kul, nez poprve zasedli ke klavesnici s umyslem zprasit co se da?
Muzete prosim na stejnem stroji zkusit i ten Hello world v Jave? Ja jsem to poustel na starsim distru, kde je chyba v 'time', ten hlasi 4x vyssi hodnoty, tudiz nemelo byt ~44 MB RSS, ale okolo ~11 MB RSS.
Tady je kdyztak zdrojak:
public class Test {
static {
System.out.println("Hello world!");
System.exit(0);
}
}
A vite proc je to vizualne tak moc? Chyba na me strane - porad jeste pouzivam zabugovany 'time', kterej vraci 4x vetsi hodnotu RSS nez ma byt (hmm ta chyba je znama dlouho a jeste ji v mem distru neopravili...)
Takze realne jsme jeste niz:
1651 pavel 20 0 395m 10m 8132 S 0.1 2.2 0:00.30 java Test
-> RSS=10 MB
Je to cca 1/2 roku nazad, co sem si jen tak pro otestovani nainstalil free verzi M$ visualka (C/C++) a jen tak pro zajimavost... napsal zcela klasicky hello world ... po kompilaci to melo ... 5M ... neuveritelny. Samo, mozna kdybych se ponoril do hloubky menu a nekde neco povypinal ... tak by se to zmenilo, ale me to zajimalo v defaultu. Programek, kterej vubec nic nedelal ... kdyz to srovnam se 64kB demacema ... kde je muzika, grafika ...
Java vznikla a je určena jako scriptovací jazyk do internetových prohlížečů a tam funguje relativně slušně. Ovšem všechny pokusy naložit na Javu něco víc selhaly a ještě budou selhávat a ani po osmnácti letech vývoje nic nenasvědčuje že by se to nějak zásadně mělo zlepšit.
To si piš že nepletu. Tam kde je dneska Javascript, tedy skriptovací kód na straně klienta, měla být původně Java, ale Sunu se nepodařilo protlačit Javu jako standard a firmy kolem prohlížečů se rozhodly pro Javascript. Bylo to tak v polovině devadesátých let minulého století.
Něco je tady:
http://www.sis.pitt.edu/~icucart/fshi/java_introduction.html
Podstatné je to, že Sun měl v dřevních dobách vlastní internetový prohlížeč s přímou podporou Javy, Java verze 1.0 proto vychází z potřeb skriptování v internetovém prohlížeči, ovšem vývoj šel jiným směrem a to směrem Javascriptu.
Java původně vznikla jako náhrada C++ pro vývoj pro embedded zařízení, protože C++ bylo podle autorů Javy mimo jiné moc paměťově náročné (to dnes již působí jako vtip). To se psal rok 1990. Někdy kolem roku 1994 zaměřili Javu více na WWW a za pár let už z toho udělali univerzální jazyk.
Takže se nedá tvrdit, že Java vznikla jako jazyk pro web. Jen v určitém období se zaměřili primárně na web.
To vznikla a proto nás Sun dvě desetiletí krmil pohádkami o hardwarovém procesoru schopném přímo provádět java bytecode, který se komerčně ale nikdy nevyráběl a už ani vyrábět nebude. Trvalo dalších více než 10 let než se podařila emulace JVM v embedded zařízeních.
Teprve až s internetem kolem roku 1994 se Java prosadila a přesně z té doby a potřeb internetového prohlížeče pochází verze 1.0 a tuto kouli na noze za sebou táhne dodnes.
http://en.wikipedia.org/wiki/MAJC (1999)
Na MAJC postavil Sun i grafickou kartu (XVR-4000/ZULU/SAGE) (2002), ktera:
1) ukazala cestu nove generaci vsech gpu (VLIW...) (tj. Nvidia G80 ...)
2) davala se do "cpu" slotu (V880 mel vice "cpu" slotu) (tj. AMD APU ...)
3) mela 3D (stereoscopic) vystup
http://www.michaelfrankdeering.com/Projects/HardWare/Zulu/Zulu.pdf
http://sun.systemnews.com/fullsource?article=9098