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
jj rozumim. Ona Java ale nemela byt nejakym super modernim jazykem, ostatne jeji tvurci sami rikali, ze hodne cilili na C/C++ vyvojare, kteri by napriklad jazyk typu YetAnotherNowMuchMuchBetterLisp asi nepresli (coz je na druhou stranu trosku skoda ;)
Uprime - v roce '95 byla Java pro mnoho firem skutecne chapana jako vysvobozeni, protoze uz utopili tolik prostredku v jazycich, ktere byly proprietarni, nestandardizovane popr. bez tolik potrebnych zakladnich knihoven. Navic za ni stala v te dobe vyznamna firma Sun a diky multiplatformnosti to nebyla technologie urcena na "odstrel" tak, jak napriklad Delphi.
Vetsina lidi to podle me vzala jako pragmatickou volbu, zadne nabozenstvi.
Java je pragmaticky jazyk, ne vyzkumny projekt.
Neni to jazyk, ktery intelektualne vytizi nejlepsi mozky planety ani pokus vylecit rakovinu. Solidne odvedeny mainstream. Napada mne dost veci, co vylepsit, ale v jadru je podstatne, ze Java umoznila napsat hodne software s rozumnym mnozstvim chyb za pouziti rozumne drahych vyvojaru. To se pocita. Stejne jako to, ze ekosystem mi dnes umozni vyresit kopec problemu, aniz bych musel znovuvynelezat kolo.
Ano, slo to lepe. Ale porad to jde dobre.
Java je pragmatický jazyk ve smyslu, že dovolí práci každému diletantovi - tu máš trochu Cčka, abys to zvládnul, kdyby ses chtěl kouknout jako na objekty, tak tu je jich trocha, ale opatrně, aby sis neublížil... Osobně mám radši ony výzkumné projekty, protože jsou koncepční, často s novými koncepcemi přicházejí a jsou oproštěny od balastu, bordelu, nesystematičností. Pragmatické jazyky jsou právě ty eintopfy, aby to tak nějak jelo. Paradoxně jsou pro mozek náročnější, než ty akademické, protože někdy vyřešit, jak omrdat omrdaný jazyk, aby bylo dosaženo cíle, je náročné. Ono pak vůbec udržovat a rozšiřovat velké projekty v nich je maso. Nyní je vůbec móda, že každý, kdo má díru do prdele, má pocit, že všechny jazyky jsou na hovno a že musí oblažit zeměkouli tím svým, a ještě má pocit vyjímečnosti, že vypotil něco geniálního.
Neříkám, že se takové jazyky nebudou líbit, ale ti, kdo mají na víc, u nich budou trpět.
Mam 20-letou zkusenost developera a souhlasim s nazory, ze Java jako jazyk je zastarala, nudna a programovani v ni je opruz. Jedine co je na ni fajn je rozsirenost, plno kodu, knihoven, virtualnich masin, utilitek a neni od MS. Kdyz nepouzijete C++ a nechcete do MS sveta, pak vam toho moc nezbyva. A jeste jedna vec Java neni opensource jak si mnozi mysli.
C# + .Net je platforma Microsoftu, coz je pro nektere problem. Existuje ISO standard podle, ktereho bylo vytvoreno Mono. Mono funguje na MacOS, Linuxu i Windows a neni problem udelat (treba v GTK pokud je potreba UI) nejakou multiplatformni aplikaci, ktera jde bez rekompilace spustit na techto platformach. Myslim, ze jede i na Armu a v C# se pisou hry na konzoly. Mono jede v urcite forme i na Androidu a IOS, ale to uz je zpoplatnene. Existuje Xamarin Studio, ve kterem se da docela pohodlne vyvijet. A hlavne je to vsechno rychlejsi nez Java a je to levny, rychly a prijemny vyvoj. O to o jde v prve rade.
C++ je hrozne nepovedeny jazyk prinasejici OOP do C. Bohuzel nic jineho tu neni, krome Objective C, ktere je snad jeste horsi. Ale da se s tim zit, kdyz si privyknete, zautomatizujete procesy vyvoje tak se to da. Vyvoj je drahy, pomaly, neprijemny, ale ma jedno zasadni plus - jde vytvorit vse a lze vyuzit stroj na maximum. Aplikace napsane v C++ jsou (pokud se dobre napisou) prenositelne na ruzne architektury a platformy. Jsou rychle, rychle se spousti a spatne se dekompiluji. Cecko a C++ jsou proste zaklad sw pocitacu a tak to zustane at se to nekomu libi nebo ne.
Dale tu mame dalsi jazyky jako treba Python - takovy moderni basic s OOP. Hrozne pomaly oproti ostatnim, ale da se fintama mnohonasobne zrychlit (prevodem do C++ a kompilaci, nebo JIT prekladacem, pouzivanim knihoven napsanych v C++ apod.). Hodi se spise na mensi projekty. Skriptovani pluginu apod. Nikdy jsem nepochopil proc je tak popularni.
Javascript je to same. Ma skvele vlastnosti kvuli kterym si ho zamilujete, ale pak i priserne, kvuli kterym ho budete nenavidet (globalni promenne/context). Nechci to tu vsechno rozepisovat. Pouziva se hlavne v oblasti webu, na skriptovani, a zacal se pouzivat i na serveru.
To jsou zaklady, pak je tady plno dalsich jazyku, ve kterych lze psat aplikace. Nektere jsou specializovane na urcitou vec a nektere jsou obecne.
1. Lidi pouzivaji Javu od Oracle
2. Java ma Oracli licenci, viz.: http://java.com/en/download
3. Licence nevyhovuje Open source definici: http://opensource.org/osd
4. Pokud nekdo vytvori vendor lock, proprietarni, ci komercni software na zaklade open source, pak to nemuzeme nazyvat open source.
Chápu vaši roztrpčenost nad C++.
Byl bych ale s jeho hodnocením milosrdnější.
Je to přeci dnes už jen starší jazyk (80. léta) navazující na ještě starší tradici C.
Za ta léta se do jazyka nakupí věci, jako kdyby Pejsek a kočička vařili dort.
Ta kumulace historismů bez radikální reformy je bohužel nevyhnutelná, jak velký Björn někde myslím řekl, že je problém s jazykem, ze kterého v rámci radikální ozdravy vyříznete hromadu fičur a náhle vaše aplikace o velikosti desíti milionů řádek nefunguje.
Další problém C++ je, že se snaží dodržet až téměř protikladná kriteria - na jednu stranu přísná zásada, že rys o který nestojím, se nesmí automaticky uplatnit (a vytvořit tak pomalejší či větší kód), na druhou stranu až psychedelické čarování s abstraktními templaty, jejichž chování je ještě magičtější, než generické typy ve funkcionálních jazycích.
Tato snaha na jednu stranu o efektivní pragmatičnost a kompatibilitu, na druhou stranu o touhu jít s abstrakcí až do matematických nebes, z toho dělá unikátního kočkopsa, na který miliony nadávají, ale stejně ho používají.
Java je podle mě celkem pěkný jazyk. Oproti C/C++ odstraňuje spousty konstrukcí náchylných na chyby, a umožňuje model checking, tedy formální test bezchybnosti kódu (lze například zaručit že v kódu nedojde k deadlocku, nebo že instance třídy nehrábne do jiné paměti než do té své).
Bohužel jako platforma je Java utrpení, protože toho spoustu neumí. Zamrzí i dost mizerný výkon, správa paměti na 32-bitových platformách, a uvedení 64-bitové verze s tak velkým zpožděním.
Za mě je daleko zajímavější C#. Podobně jako Java je to pěkný jazyk, není náchylný na chyby, a také umožňuje model checking. Umožňuje ale umí .NET daleko lépe využít platformu - člověk není tak svázaný jako u Javy. Navíc C# i Common Language Infrastructure jsou ISO standardy.
Navíc C# i Common Language Infrastructure jsou ISO standardy.
A jaké verze jsou ISO standardizovány? ISO standard C# je z roku 2006, takže není standardizován C# 3, 4 a 5, ne?
Bohužel jako platforma je Java utrpení, protože toho spoustu neumí.
Ano. Zejména štve nepodpora tailcallů v JVM. Ale třeba v případě reifikace generik v CLR si už tak jistý nejsem - v aktuální podobě neumožňují parametrický polymorfismus vyšších řádů (a předpokládám, že např. autoři F# se nebudou chtít uchýlit k řešení, jenž používá Java).
Ano, ISO standard pro novější verze není zatím k dispozici. Standardizace je na dlouhé lokte. Nicméně i tak je situace daleko lepší než u Javy.
Ohledně platformy si asi nerozumíme. Java má svoje WORA, jenže one size doesn't fit all. Zkuste v Javě zjistit jestli na Windows běží nějaký servis a případně ho nastartujte, zjistěte jaká okna jsou zobrazená a jedno z nich minimalizujte, načtěte hodnotu z Registry, zjistěte adresář ve kterém je uložený desktop, koukněte na nainstalované tiskárny a zjistěte která z nich umí duplexní tisk. Na podobná omezení Javy narazíte na každé platformě. Komu stačí parsnout XMLko, provést pár SQL dotazů a nějak zamíchat hodnotami, a zároveň nutně potřebuje psát i pro unixy, ten Javu možná ocení víc.
Pouze velmi omezeně. C/C++ má spoustu konstrukcí, které se těžko posuzují. Například u a[b+c] těžko zjistíte, jestli sáhne mimo hranice pole. U strcpy() také budete těžko zaručovat, že nezapíše jinam než zamýšlíte. Takových konstrukcí vymyslíte za pět minut nejspíš desítky.
Samozřejmě se můžete některých konstrukcí C/C++ vzdát, a zavést constrains. Jenže výsledkem bude něco co má s C/C++ společný leda kus syntaxe (u Cčka vizte třeba ArC), a API OS a mnoha knihoven vám tenhle úkol rozhodně neusnadní. Managed languages, jako Java nebo C#, jsou na formální verifikaci/model checking nesrovnatelně lépe připravené.
V C# se zaručeně nedostanete mimo hranice pole, takže nepřepíšete co nemáte, a nebudete číst data z nesmyslné lokace. V C/C++ se naopak řadu konstrukcí dopracujete k nedefinovanému chování, které neskončí chybou při kompilaci, a často ani v runtime. Místo toho vám aplikace tiše vyhnije zevnitř.
V C# se zaručeně nedostanete mimo hranice pole, takže nepřepíšete co nemáte, a nebudete číst data z nesmyslné lokace. V C/C++ se naopak řadu konstrukcí dopracujete k nedefinovanému chování, které neskončí chybou při kompilaci, a často ani v runtime.
To ano. Ale při dokazování korektnosti nějakého algoritmu stejně mohu potřebovat dokázat, že a[b+c] je uvnitř pole.
C++ nijak nedefinuje, jestli se to ověřuje, takže pokud potřebujete bounds checking, potřebujete STL, která je má (třeba GNU debug STL).
Formální verifikace a model checking se nedělá za běhu finálního produktu (to už je pozdě), takže je úplně jedno, jestli to vyhodí výjimku nebo přepíše jádro, v obou případech to udělalo něco, co to udělat nemělo.