JIT generuje optimalizovaný kód pro daný procesor, to ano. Ale protože aplikace se musí spustit během pár sekund, kompilace musí být rychlá. Díky tomu JIT nestíhá dělat inlinování delších metod než 32 bytů v MSILu (na 64bitových Windows pro jistotu neinlinuje vůbec), až od .NETu 4 teprve podporuje tail rekurzi (to si vynutily dynamické jazyky). Kód většiny metod se kompiluje až před jejich prvním spuštěním, někdy se metoda ani nekompiluje a provede se interpretovaně, až v okamžiku, kdy se volá víckrát, se teprve zkompiluje, protože jinak by to bylo pomalejší (tohle je tuším hlavně u dynamických jazyků). Neříkám, že JIT je špatný, to rozhodně ne, ale ve srovnání s kdejakým C++ kompilátorem prostě ngen dělá jen minimum optimalizací a JIT ještě míň, protože na to prostě není čas. C++/CLI má pár nevýhod (a hlavně starší verze Managed C++ měla otřesnou syntaxi, ta nová již jde), ale používá se pro spojení výhod a nevýhod obou technologií a postupnou migraci z C++ na .NET. Jinak s tou IntelliSense v C++ se toho myslím moc udělat nedá, C++ je šílený jazyk a jeho specifikace je chuťovka, na mnoha místech nejednoznačnosti. Ano, mohli by dodělat třeba podporu unit testů, ale tam je taky spousta technických omezení. Kamarád si na C++/CLI pochvaloval, že třeba některé kolekce jsou lepší v C++ a některé v .NETu, nebo třeba streamy jsou daleko lépe udělané v .NETu (používají overlapped IO, což se v C++ píše drobet obtížněji). Asi záleží, co člověk dělá, ale myslím, že C++/CLI svůj smysl má. Je v něm například napsaný SQL Server a vlastně velká část aplikací Microsoftu.
|