Mám za to, že managed kód postupně převládne. Je vhodnější pro překlenutí té obrovské propasti v úrovni abstrakce strojového kódu a designu aplikace, přináší řadu výhod.
Je absolutne nesporne, ze velka cast aplikacii ktore su dnes napisane v C/C++ bude v buducnosti napisana .NET/Java/... presne rovnako ako sa dnes dyamicke web aplikacie pisu v PHP/Python/... a nie v jazyku C. To vsak neznamena ze rodina jazykov C/C++ straca zmysel a bude plne nahradena technologiami beziacimi pod VM tak ako sa nam to snazite naznacit. Tam kde bude rychlost, real-time vlastnosti a pamatova narocnost dolezita, prip. nutnost low-level pristupu - tam sa C/C++ udrzia a nevidim momentalne ziadne dovody aby tomu tak nebolo. C/C++ sa tiez neustale zdokonaluju a musite si uvedomit, ze tieto jazyky "by design" sleduju trochu ine zamery ako napr. Java a C#.
Aplikace pro Windows CE se píší v .NETu již řadu let. Samozřejmě tak zatím nelze psát všechno (třeba device drivery).
V oblasti vyvoja embedded aplikacii sa pohybujem uz niekolko rokov a mozem vam zodpovedne povedat, ze vsetky komplexne aplikacie pre Windows CE su napisane v C alebo C++. Zakaznici su dnes tak narocni, ze ich predstavy o funkcionalite je velmi tazko naplnit v danych HW obmedzeniach. .NET je tu absoltune mimo. Jednoduchu hru alebo "yet another task manager" v tom sice napisete a nepredate to.
Ještě v krátkosti zopakuji to, co tu občas píšu. Managed jazyk umožňuje validaci kódu (statickou i dynamickou), která umožňuje dát záruky typu "v tento kódu nikdy nemůže dojít k buffer overflow", "tento kód nikdy nezasáhne do obsahu proměnné A", "tento objekt nikdy nehrábne mimo zdroje své instance" apod. Tyto záruky v C/C++ v principu není možné dát.
Ano, pisete tu tie nezmysly uz dost casto. .NET platforma vam nedava ziadne staticke zaruky nad kodom ktory pisete. Nic take v proceduralnych jazykoch neexistuje a nikdy existovat nebude. K dispozicii su nastroje, ktore taku analyzu pre proceduralny kod v obmedzenej miere robia - a momentalne su najdokonalejsie pre jazyk C. Napr ASTRÉE ktory sa poziva na "Run Time Errors" kontrolu riadacieho software v lietadlach Airbus.
Vy sa tu radi hrate na odbornika, ktory tu vsetkych poucuje o veciach ktorym sam nerozumie. Vsetci uz vieme, ze ste fanusik .NET technologii - tak preco povazujete za nutne nas tu o tom neustale informovat ako pokazena platna bez ziadnej novej alebo relevantnej informacie? Uvedomte si, ze vasa vizia buducnosti programovania je vas osobny nazor. Zda sa mi z vasej strany dost nekriticke nam ho tu podsuvat ako matematicky overenu pravdu.
Statická analýza kódu pod .NETem? Viz třeba http://en.wikipedia.org/wiki/FxCop .
Takato obmedzena analyza sa da robit nad hocijakym kodom - nie je to vlastnost .NET ani VM technologii ako sa to snazite prezentovat. Opat opakujem, ze momentalne podobne nastroje su najdokonalejsie pre jazyk C a nepredpokladam, ze sa na tom nieco zmeni v buducnosti. Vas povodny argument, ze .NET dava vacsie staticke zaruky nad kodom ako nativne jazyky je jednoducho nezmysel.
Říká vám něco Model checking? A jak jej spolehlivě a průkazně chcete realizovat v C/C++, kde vám jednoduchý, validní a bezvadný kód nadělá z celého stavového stromu bramboračku? Problém je totiž v tom, že unsafe konstrukce typu strcpy nebo casting intu na pointer může vést k nepředpokládanému výsledku. Jak jste schopen algoritmickou analýzou kódu v C/C++ dokázat, že do proměnné A zapíše vyhradně rutina XYZ, když vám proměnnou A a řadu věcí kolem potenciálně přesmahne jakýkoliv strcpy? Jak si asi vaše analýza poradí s tím, když zapíšete do stringu s + offset 128? Tohle jsou přesně problémy, které v managed jazyku (Java, C#) neexistují, a které umožňují formální verifikaci kódu.
Opat upakujem, ze vyssia typova bezpecnost nie je vlastnost .NET alebo managed kodu. Je to jednoducho vecou syntaxe, ktora je v nativnych jazykov rovnako dosiahnutelna. C++ je type unsafe by design.
Mnou popsaná vize budoucnosti technologie má celkem dobrou teoretickou i praktickou oporu. Je nepopiratelné, že tato vize přináší možnost výrazného zlepšení bezpečnosti a spolehlivosti SW oproti stávajícímu stavu, které v C/C++ nelze dosáhnout. Programátoři totiž chyby dělali, dělají, a dělat budou. Je tedy nutné stavět takové systémy, které si s chybami lépe poradí - odhalí je ve fázi verifikace návrhu, kompilace, nebo v čase běhu.
Musim vas sklamat, ze ziadnu verifikaciu navrhu vam proceduralne jazyky neposkytuju - mozno sa jedneho dna naucite programovat napr. v F# (stale nie cisto funkcionalny jazyk) alebo napr. jazyk Mercury a potom pochopite kde vo svojich myslienkach momentalne nachadzate. Programovanie komplexnych systemov je narocna cinnosta a drobne vylepsenia syntaxe jazyka neumoznia aby sa zo zleho programatora stal dobry. Robustne programovanie techniky, unit testing a QA maju radovo vacsi vplyv na kvalitu vysledku. Dnes su zlozite softwarove baliky - od aplikacii Autodesku, mentalray, Catia az po WebKit - napisane v C++. Je to ukazka toho, co je mozne dosiahnut ak ludia rozumeju tomu co robia. Ak by ste sa rozhodli to robit napr. v C#, tak nevyhnutne pridete na to, ze zrucnost programatora ma na vysledok vacsi vplyv ako drobne vylepsenia, ktore prichadzaju za cenu nizsej efektivy a pamatovej narocnosti.
Ukecané jazyky jsou daleko lepší, než jazyky typu PERL,
Opat tu prezentujete vasu neznalost a obmedzenost. Perl sa hodi na iny typ uloh ako napr. C# rovako ako nakladne auto sa hodi na nieco ine ako sportove coupe. Asi nie je nahoda preco je napr. SpamAssassin napisany prave v Perle.
Utvrdzujete ma len v jednom. Je absolutne jedno na aku temu sa tu diskutuje a ci vobec rozumiete o com pisete - vy jednoducho potrebujete "vyhrat" argumentaciu. Ok - verim, ze pre nic ine ako vytrvalost (a dostatok casu) sa vam to zvacsa podari - ego si tym zrejme posilnite ale realitu nezmenite.
C# je na chyby náchylné stejně jako C++? Super. Zkuste si v C# napsat if (i=1).
C++ kompilator vam na konkretne uvedenu konstrukciu vypise warning - ale inak je to validny zapis, pretoze v inom kontexte: napr. if (a = (b == c)) je to uzitocna vec.
Kupodivu vám to neprojde. Zkuste si v C# vytvořit pole o 10 prvcích, a zapsat do jedenáctého prvku. Kupodivu vám to neprojde. Zkuste v C# najít něco typu strcpy, u čeho nejste při analýze kódu schopen jednoznačne říci, do čeho všeho vlastně zapíšete. A pak mi vyprávějte o tom, že managed jazyky programování nikam neposouvají.
Toto su naozaj drobnosti ktore nepredstavuju ziadnu revoluciu v pisani spravneho kodu. Musite si uvedomit, ze C/C++ su "by design" type unsafe jazyky - nie je to nedokonalost ale vlastnost. VM robi vacsiu run-time kontrolu nad kodom ktory vykonava - avsak toto ma svoju cenu (nizsia efektivita, vacsia pamatova narocnost) a pokial je chyba odhalena v run-time, tak je sice mozne lepsie zadefinovat spravanie (vynimka a nie segfault) avsak faktom zostava, ze chyba v kode je. Vacsia staticka typova bezpecnost nema nic spolocne s managed kodom a je dosiahnutelna aj native jazykoch. Napr. OCaml (vlastne cela ML rodina jazykov), jazyk D a mnohe dalsie.
V C++ se C-like techniky používají mimo jiné proto, že se používat dají.
Ano, a to je zamer. Ani C++0x tato moznost nebude odstranena, pretoze je to vlastnost, nie chyba.
Hry pro XBox se píší jednak v C++ (MS psal historicky v C++ v podstatě všechno), a nyní i v .NETu (XNA Framework). Viz http://en.wikipedia.org/wiki/Xna_Framework . Mimochodem v příští verzi Windows už prý Win32 procesy pojedou v sandboxu, a by default nebudou smět ani otevřít port. Frameworky a "velké" aplikace typu SQL Server a Exchange se sice asi ještě nějakou dobu budou psát v C++, ale trend je jasný.
Nemyslim si, ze XBox prejde na nieco ine ako C++ v blizkej buducnost. Vacsina hier sa dnes pise pre niekolko platforiem napr. PC/XBox/PS2/MacOSX a preto by bol problem to postavit na MS-only technologii. Taktiez rychlost a efektivita bude v hrach vzdy dolezity faktor. Mimochodom, vyvojari hier dnes absolutne neriesia problemy ktore tu naznacujete. Skor sa snazia najst nove techniky ako vyuzit multi-core architektury. Z tohto pohladu by bol prechod pod VM krok spat, pretoze rychly GC je v multi-threaded aplikaciach jednoducho nevyrieseny problem.
Z tohto pohladu by bol prechod pod VM krok spat, pretoze rychly GC je v multi-threaded aplikaciach jednoducho nevyrieseny problem.Velmi trefna poznamka :-) Ale to není vlastnost VM obecně, ale JVM a dalších single image VM, taková MVM nebo BEAM tím netrpí. Kromě nesrovnatelně vyšší bezpečnosti a spolehlivosti mimo jiné.
Ja som hovoril o aplikaciach, kde viacero vlakien zdiela celu pamat procesu ...A právě o to jde. Proč proboha? Vždyť to jde řešit dvěma způsoby. 1) Nesdílet. 2) Sdílet, ale používat jen a pouze Copy on Write. Oba způsoby jde dokonce kombinovat. Například BEAM nesdílí nic kromě binárek a binárky, které sdílí nemodifikuje, ale dělá copy on write. Díky tomu, že i uvnitř procesu dělá pouze copy on write, může být jeho GC real time. Ta ztráta výkonu vzhledem k copy on write se vám sakramenstky vyplatí na vícejádrových systémech. No locking, lightweight procesy, paralelní zpracování, vyšší spolehlivost a bezpečnost. Jo v PDA to moc neužijete :-) Ale java a .NET jsou oba single image VM a oba jsou slepé větve vývoje na vícejádrových systémech. Stačí si jen vyhledat klíčová slova mutlicore crisis :-)