Diskuze: C#, F#, J#, .NET a alternativy a .NET Native
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 15 zpráv z 15.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Co se týče C#, F# a J#, jsou to všechny .NET jazyky, takže se kompilují do mezikódu. Rozdíl je v syntaxi. C# je klasický C# jak ho znáš, F# je funkcionální jazyk - funkcinální jazyky jsou dobré pro manipulaci s daty, takže jeho největší uplatnění je v DataMinigu a podobných věcech. J# ja Microsoftí implementace Javy - má (pokud vím) stejnou syntaxi, ale taktéž se kompiluje do CIL a funguje na .NETu. Princiú je tedy naprosto totožný se C#.
VB.NET i JScript.NET jsou samostatné jazyky, zatímco ASP.NET je technologie (nebo knihovna chceš-li) vyučívající .NET.
Samozřejmě další jazyk, který využívá JIT ja Java. O to, jestli je lepší Java nebo C# (nebo jiný .NET jazyk) se nebudu rozepisovat - je toho napsaného dost a stejně ke kloudnému výsledku nedojdem). Faktem je, že C# by měl být rychlejší než Java.
.NET jazyky fungují (již z názvu) v .NET prostředí. Takže není možné je spustit bez toho, aniž bys měl k dispozici .NET. Nicméně nově Microsoft vyvinul .NETCore (https://dotnet.github.io/), který je multiplatformní a jde tedy rozjet všude. Neobsahuje plnou výbavu .NETu, ale třeba ASP.NET MVC na něm funguje. Sám jsem jej zkoušel na Linuxech a fungovalo to. Jen výkonostně je to samozřejmě horší, než na WIndows platformě. Poslední variantou ja Xamarin, který je taktéž multiplatformní a můžeš na něm spouštět .NET programy.
.NET Native funguje na principu, že se program zkompiluje přímo (tedy nepřekládá se jenom do mezikódu ale rovnou do strojového). Na cílovém stroji se potom program JIT nepřekládá, ale rovnou se spouští z biárního kodu.
Do teď jsem žil v dojmu, že JVM je pouze virtuální stroj. Díky.
Vím, co je .NET Native. Spíše mě zajímalo, proč je lepší než JIT, když JIT má být právě výkonově lepší.
Pokud jde o .NETí jazyky, nic jiného jsem nečekal. Nechtělo se mi to zjišťovat z kusých informací tak, že také díky.
Beru to tak, že obecně na .NETu je to teda JIT.
Ještě by mě zajímalo jaký typ JIT používá Java – viz https://cs.wikipedia.org/wiki/JIT.
Hmm... Už jsem to zjistil. Java používá ekonomický JIT stejně jako .NET.
Vím, co je .NET Native. Spíše mě zajímalo, proč je lepší než JIT, když JIT má být právě výkonově lepší.
Žádný jazyk, který se překládá do nějakého mezikódu, a teprve pak až se interpretuje a překládá za běhu, nebude rychlejší než nativní překlad. Je to ta režie navíc, která ti dává ale lehčí přenositelnost na ostatní platformy.
Je mi jasné, že není přímo rychlejší, ale vzhledem k možnosti optimalizace strojového kódu pro danou platformu během JIT a ušetření množiny paměťových stránek (celá aplikace není v paměti), by měl být údajně výkonnější, podle určitých informací, které mám.
Proto mě udivilo, že najednou má být zase nativní kód ten lepší.
Možná to platí spíše pro velké aplikace (aplikace je velká, ale používá se jen omezené množství kódu během jednoho spuštění) než ty malé aplikace a také pro ty, kde JIT dosáhne velké optimalizace.
V otázce jsem uvedl poměrně nepřesně část o výkonu .NETu a .NETu Native.
Odstavec měl být formulován takto:
Také jsem nalezl nějaké informace (https://msdn.microsoft.com/cs-cz/vstudi ... ative.aspx), o tom že .NET Native má paměťové nižší nároky než .NET. To mě poměrně mate. Měl jsem za to, že JIT a CLR je paměťově optimální.
Fakt, že se stránky načítají do paměti až v době, kdy jsou potřeba, je hezké, ale tohle za tebe dělá OS a ne .NET. Na optimalizace při použití JIT není zas tolik času.
Říkat o tom, jestli je to nebo to lepší, to záleží na dost věcech...
Očividně nevíš... Resp. víš, ale dáváš to jako + někomu, přitom se to dělá všude.
Žádný jazyk, který se překládá do nějakého mezikódu, a teprve pak až se interpretuje a překládá za běhu, nebude rychlejší než nativní překlad. Je to ta režie navíc, která ti dává ale lehčí přenositelnost na ostatní platformy.
Kód vygenerovaný JIT kompilací klidně může být rychlejší než
nativní kód, protože ho kompilátor může optimalizovat pro danou platformu,
na které zrovna běží.
JIT kompilace proběhne jen jednou, často už při spuštění programu, takže
při běhu tě už pak obvykle nezdrží.
To je zase jen upravování podmínek co-kdyby. Btw, nějak se mi nezdá, že by se kompiloval už při spuštění, vždyť to popírá princip JIT.
Nepopírá, princip JIT neurčuje, kdy přesně se kód kompiluje, jestli až když tu danou část (třeba funkci) spouštíš nebo když spouštíš celý program.
Navíc se pak ty zkompilované části kešují, takže pokud se něco nezmění, už není potřeba provádět kompilaci znova nebo můžeš mít celý program předkompilovaný, viz třeba NGEN.
Souhlasím s Lukášem – viz https://msdn.microsoft.com/…vs.100).aspx.
Také poměrně jednoduchý článek je na odkaze http://www.telerik.com/…-compilation, i když jsem si nedokázal vysvětlit jednu souvislost, která je tam uvedena.
Dle AJ Wiki JIT provádí například tyto optimalizace: profile-guided optimizations, pseudo-constant propagation, indirect/virtual function inlining, které nativní nebo AOT kompilace nemůže poskytnout.
Ono existují různé JIT kompilátory. Například PyPy pro python (http://stackoverflow.com/…used-by-pypy, http://morepypy.blogspot.nl/…ing-jit.html), který provede kompilaci pouze u těch částí, které jsou využívány často. Ne tedy při prvním použití, každém použití nebo před spuštěním aplikace. Kromě toho před kompilací provede ještě nějaké optimalizace na základě nějakého trasování nebo co tak, že ten výkonový poměr AOT/JIT asi také závisí na jazyku a typu JIT kompilátoru.
Strávil jsem poměrně dost času hledáním informací, jestli je lepší JIT nebo AOT u .NETu, ale většinou jsem našel, že AOT, ale nebyly to oficiální články, ani nebyly nijak konkrétněji podloženy.
Obvyklý argument je, že AOT je nativní, nezabírá tolik paměti a může provést optimalizace, které jsou pro JIT příliš nákladné.
Mám informace, že JIT naopak zabírá paměti méně, protože není celý program v paměti, a tak těmto článkům nepřikládám příliš velkou váhu.
Zobrazeno 15 zpráv z 15.