NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Uživatel919
Člen
Avatar
Uživatel919:22.5.2016 10:02

Rád bych se dozvěděl nějaké základní technické informace o C#, F#, J# a ještě nějaké detaily k .NETu.

Pakliže je kód C# kompilován jednou za chodu programu z IL (CIL, MSIL) do binárních instrukcí a pak je již použitelný, dokud program neskončí, platí to stejné i pro F# a J#?

Zjednodušeně, používají F# a J# CLR (Common Language Runtime) a JIT (Just-in-Time) kompilaci stejně jako C#?

Bez ohledu na to, zda tak činí, činí tak jiné jazyky z rodiny MS .NET? Tipuji, že Visual Basic .NET, ASP.NET, JScript .NET jsou vhodnými kandidáty.

Existuje nějaká konkurence k .NETu? Tím míním, jestli nějaký nedotnetí jazyk kompiluje do IL a pak za chodu kompiluje do bin. instrukcí pouze potřebné části kódu.

Vím, že prostředí, které implementuje CLI (Common Language Infrastructure) založené na CLS (Common Language Specification), by mělo být schopné provozovat program ze C#. Byla již někdy spuštěna aplikace v C# v jiném prostředí než MS .NET? Jinými slovy existuje jiné prostředí, které implementuje CLR (Common Language Runtime) a JIT než .NET?

Také jsem nalezl nějaké informace (https://msdn.microsoft.com/cs-cz/vstudi ... ative.aspx), o tom že .NET Native je výkonnější než .NET. To mě poměrně mate. Měl jsem za to, že JIT a CLR je výkonové optimální(např. má nižší počet stránek paměti).

Děkuji za případně sdílené know-how.

 
Odpovědět
22.5.2016 10:02
Avatar
Odpovídá na Uživatel919
Patrik Valkovič:22.5.2016 11:47

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.

Nahoru Odpovědět
22.5.2016 11:47
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Uživatel919
Člen
Avatar
Uživatel919:22.5.2016 13:04

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.

 
Nahoru Odpovědět
22.5.2016 13:04
Avatar
Uživatel919
Člen
Avatar
Odpovídá na Uživatel919
Uživatel919:22.5.2016 13:35

Hmm... Už jsem to zjistil. Java používá ekonomický JIT stejně jako .NET.

Editováno 22.5.2016 13:35
 
Nahoru Odpovědět
22.5.2016 13:35
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Uživatel919
Jan Vargovský:22.5.2016 15:09

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.

 
Nahoru Odpovědět
22.5.2016 15:09
Avatar
Uživatel919
Člen
Avatar
Odpovídá na Jan Vargovský
Uživatel919:23.5.2016 8:21

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.

 
Nahoru Odpovědět
23.5.2016 8:21
Avatar
Uživatel919
Člen
Avatar
Uživatel919:23.5.2016 8:44

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í.

 
Nahoru Odpovědět
23.5.2016 8:44
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Uživatel919
Jan Vargovský:23.5.2016 8:59

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...

 
Nahoru Odpovědět
23.5.2016 8:59
Avatar
Uživatel919
Člen
Avatar
Odpovídá na Jan Vargovský
Uživatel919:23.5.2016 9:50

Říkáš asi tak, co vím. :-D

 
Nahoru Odpovědět
23.5.2016 9:50
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Uživatel919
Jan Vargovský:23.5.2016 14:50

Očividně nevíš... Resp. víš, ale dáváš to jako + někomu, přitom se to dělá všude.

Editováno 23.5.2016 14:51
 
Nahoru Odpovědět
23.5.2016 14:50
Avatar
Uživatel919
Člen
Avatar
Odpovídá na Jan Vargovský
Uživatel919:26.5.2016 16:39

Nerozumím, ale nechci to řešit.

 
Nahoru Odpovědět
26.5.2016 16:39
Avatar
Odpovídá na Jan Vargovský
Luboš Běhounek Satik:26.5.2016 17:29

Žá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ží.

Nahoru Odpovědět
26.5.2016 17:29
https://www.facebook.com/peasantsandcastles/
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Jan Vargovský:26.5.2016 17:43

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.

 
Nahoru Odpovědět
26.5.2016 17:43
Avatar
Odpovídá na Jan Vargovský
Luboš Běhounek Satik:26.5.2016 17:54

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.

Editováno 26.5.2016 17:56
Nahoru Odpovědět
26.5.2016 17:54
https://www.facebook.com/peasantsandcastles/
Avatar
Uživatel919
Člen
Avatar
Odpovídá na Luboš Běhounek Satik
Uživatel919:27.5.2016 8:10

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.

 
Nahoru Odpovědět
27.5.2016 8:10
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 15 zpráv z 15.