C# .NET vs. Java?

mr. frown

Re:C# .NET vs. Java?
« Odpověď #45 kdy: 23. 02. 2015, 13:50:32 »
V případě konečného automatu je právě ten velký switch neefektivní. Polymorfismus je rychlejší.

Haha :-)

Ale jestli tomu vazne veris tak muzeme udelat test. Vybereme nejaky automat. Ja ho napisu pomoci switche, ty pomoci virtualnich funkci a zmerime rychlost... ;-)


atarist

Re:C# .NET vs. Java?
« Odpověď #46 kdy: 23. 02. 2015, 13:57:09 »
No jasne, proc neudelat 10x komplikovanejsi generator, aby generoval prekrasnej, ale neefektivni kod, kterej stejne nikdo necte...`

Kdo tvrdí, že elegantní kód musí být neefektivní? Právě naopak. Nejrychlejší kódy, které používám, jsou velmi přehledné.

Netvrdi to nikdo.

Treba v pripade konecnyho automatu je nejefektivnejsi kod jeden velky switch. Zrovna tak je to nejelegantnejsi kod. Jenom nekterejm teoretikum to bude pripadat jako prasarna protoze ta funkce muze byt vetsi nez jejich nahodne zvolenej limit pro "rozumne velkou funkci"...

(K tomu limitu dospeli nejak takhle http://simpsons.wikia.com/wiki/Homer%27s_Doomsday_equation  :-) )

No to neni tak uplne pravda, tak velka metoda ti s velkou pravdepodobnosti blizici se 100 procentum vypadne z JITovani. A limit neni nahodne zvolenej, je to proste 2^16, coz je docela kulate cislo, kdyz by tam dali 2^32 je to blbost, protoze by to bylo plytvani prostorem - 2^32 je totiz jeste limitovany x dalsima vecma.

Btw bylo by k dispozici aspon naznaceni, ktery KA je tak velky ze prekroci velikost bajtkodu jedne metody? Co jsem videl vysledky ruznych antlr a yaccu, bylo to daleko do limitu.

Lopan

Re:C# .NET vs. Java?
« Odpověď #47 kdy: 23. 02. 2015, 14:18:52 »
Takže odpověz si sám - chceš skončit jako desktop developer nebo big cloud systems developer?

Big cloud systems developer je teď název pro pozici dopatlávání záplat do velkýho firemního softu?

K tématu, .net by měl být (nebo už je?) opensource, takže bych C# nevyhejbal. Nicméně jak tu někdo psal, tim že se naučíš jeden jazyk nezapomeneš ten druhej a zvládnout C# a Javu najednou bych neviděl jako životní překážku.

Hlavne ten cloud je desne dulezity. Kdo ted nema cloud, jako by nebyl. Uz je to takovy cloud pro cloud. Jsou firmy, ktere si poridi cloud jen proto, aby se jim zvedly akcie za "technologickou progresivitu".
At delam co delam, proste nevidim v ramci velke firmy rozdil mezi on premise architekturou a cloud architekturou. Stejne maji svuj HW, akorat bud jim tam bezi aplikacni servery v clusteru... nebo v clusteru a rikaji tomu cloud...

Kit

Re:C# .NET vs. Java?
« Odpověď #48 kdy: 23. 02. 2015, 15:08:50 »
V případě konečného automatu je právě ten velký switch neefektivní. Polymorfismus je rychlejší.

Haha :-)

Ale jestli tomu vazne veris tak muzeme udelat test. Vybereme nejaky automat. Ja ho napisu pomoci switche, ty pomoci virtualnich funkci a zmerime rychlost... ;-)

Jen do toho. Hlavně ať to není moc triviální, to bys byl ve výhodě.

Radek Miček

Re:C# .NET vs. Java?
« Odpověď #49 kdy: 23. 02. 2015, 15:13:47 »
  • CLR podporuje optimalizaci tail volání (JVM ne a je to velký problém při implementaci funkcionálních jazyků).

Proc je to velky problem?

Protože to nikdo neumí efektivně naimplementovat nad JVM. Navíc, pokud to implementujete v kompilátoru jazyka (třeba pomocí trampolín), tak vlastně vytváříte jinou volací konvenci, která není kompatibilní s ostatními knihovnami, znesnadňuje optimalizace a je spojena s alokacemi na haldě, tudíž zvyšuje aktivitu GC.

Proto to Clojure a Scala nedělají.

Citace
a kdyz uz jsme u toho, jsou funkcionalni jazyky bez TCO a programuje se v nich nadherne :)

Absencí TCO (např. ve Scale) jsou poznamenány základní techniky jako continuation passing style, monády, polymorfní rekurze nebo vzájemně rekurzivní funkce.


Radek Miček

Re:C# .NET vs. Java?
« Odpověď #50 kdy: 23. 02. 2015, 15:18:59 »
V případě konečného automatu je právě ten velký switch neefektivní. Polymorfismus je rychlejší.

Režie na zavolání metody bude vyšší než režie skoku, tudíž tableswitch bude rychlejší než polymorfismus.

Radek Miček

Re:C# .NET vs. Java?
« Odpověď #51 kdy: 23. 02. 2015, 15:40:09 »
Používám aktivně obě technologie a hlavní rozdíl, který tam vidím, je výrazně horší čitelnost v C#.

Například asynchronní kód je výrazně čitelnější v C# než v Javě.

Citace
při čtení kódu obrátí proti autorovi. A základní pravidlo říká, že kód, který je jednou napsán, bude tisíckrát přečten.

Myslím, že to naopak přispívá k lepší čitelnosti kódu.

atarist

Re:C# .NET vs. Java?
« Odpověď #52 kdy: 23. 02. 2015, 15:48:16 »
V případě konečného automatu je právě ten velký switch neefektivní. Polymorfismus je rychlejší.

Režie na zavolání metody bude vyšší než režie skoku, tudíž tableswitch bude rychlejší než polymorfismus.

V pripade, ze autor toho generatoru vi co dela a implementuje ten generator tak, ze se skutecne pouzije tableswitch a ne lookupswitch. Na druhou stranu plati to, co jsem uz psal - ubermetoda delsi nez nejakych 8 kB bajtkodu se vetsinou neJITuje.

Radek Miček

Re:C# .NET vs. Java?
« Odpověď #53 kdy: 23. 02. 2015, 15:51:20 »
Btw bylo by k dispozici aspon naznaceni, ktery KA je tak velky ze prekroci velikost bajtkodu jedne metody? Co jsem videl vysledky ruznych antlr a yaccu, bylo to daleko do limitu.

Pokud stačí umělý příklad, pak můžeme vzít něco na způsob

Kód: [Vybrat]
.*a.*A
.*b.*B
.*c.*C
atd.

Když to uděláte pro všechna písmena abecedy (tj. 26 regulárních výrazů), tak minimální počet stavů bude 2^26.

Jinak lidé s tím limitem mají problémy: JavaCC, Tomcat, Scala.

atarist

Re:C# .NET vs. Java?
« Odpověď #54 kdy: 23. 02. 2015, 15:52:12 »
Absencí TCO (např. ve Scale) jsou poznamenány základní techniky jako continuation passing style, monády, polymorfní rekurze nebo vzájemně rekurzivní funkce.

Ja myslel hlavne Clojure, ale vlastne i Scala je tim poznamenana to je pravda. Ale plati to co jsem psat - i s timto "omezenim" se mi FP kod pise nadherne, vlastne jsem skoro nikdy nemel potrebu delat vyrazne slozitejsi zpracovani nez co nabizi zipmap a for :-) [samozrejme plus map, filter atd. kde je "TCO" schovany do recur). Jako to myslim zcela vazne, u spousty algoritmu proste klasicka rekurze, tail cally apod. vlastne nejsou nutne.

Kit

Re:C# .NET vs. Java?
« Odpověď #55 kdy: 23. 02. 2015, 16:43:01 »
Pokud stačí umělý příklad, pak můžeme vzít něco na způsob

Kód: [Vybrat]
.*a.*A
.*b.*B
.*c.*C
atd.

Když to uděláte pro všechna písmena abecedy (tj. 26 regulárních výrazů), tak minimální počet stavů bude 2^26.

Zeptal bych se pelíškovsky: A komu tím prospějete, co?

Bylo by lepší takový vstup číst regulární gramatikou. Tím se podstatně zredukuje stavový prostor.

Re:C# .NET vs. Java?
« Odpověď #56 kdy: 23. 02. 2015, 19:12:51 »
Řekl bych, že ten rozdíl, který pozorujete, je daný tím, že C# pozic je méně, tím pádem je i C# programátorů méně - a tudíž je musí firmy víc shánět, zatímco na Javu se jim okamžitě přihlásí spousta lidí. Jenže v té Javě je nakonec spousta možností, takže po nějakém javovském specialistovi bude stejná sháňka, jako po programátorovi v C#. Akorát to možná firmy nebudou inzerovat stejným způsobem, jako u toho C#, protože by se jim přihlásila spousta studentů, kteří měli Javu 1 semestr.

Jinak pojídač koláčů samozřejmě může programovat v libovolném jazyce a nebude v tom rozdíl (vždycky to bude, jako by to programoval v Cobolu :-) ). Dobrý programátor ale bude vědět, třeba jak funguje jeho C kompilátor a procesory jeho architektury, nebo jak funguje JVM, nebo jak funguje Dalvik a čím se liší různá Android prostředí, nebo jak funguje Swing, nebo jak funguje nějaký aplikační server, atd. atd. Pokud se dostane mimo to své prostředí (kterým není jen jazyk, ten to dělí jen na velmi hrubé úrovni), samozřejmě mu ty jeho znalosti budou k ničemu. Takže sice nebude psát úplně blbý kód, ale nebude to stejně špičkový kód, jako když je v té své oblasti. Na druhou stranu, i ten záběr špičkového programátora bývá široký a různorodý, takže se snadno může stát, že dostane úplně jiný úkol, a odvede stejně špičkový výkon - protože se nedostal mimo oblast toho, co perfektně umí, jenom se v ní přesunul na jiné místo.

Nebo se na to můžete podívat jinak. Tím, že je C# pozic méně, je vlastně určitou specializací už ten jazyk - a trochu se očekává, že programátor v C# bude umět "všechno", takže nejspíš nebudete mít možnost jít tak do hloubky. Na druhou stranu, když o sobě píšete jako o "Java programátorovi", ani v té Javě nejspíš nejste nijak specializován a přechod k C# pro vás žádná ztráta nebude. Naopak určitě bude v životopisu dobře vypadat, že máte reálné zkušenosti s oběma světy, protože spousta firem si řekne "teď nabíráme na pozici Java programátora, ale až tenhle projekt skončí a vyhrajeme tamten C# projekt, budeme ho tam moci přesunout".

hax0r

Re:C# .NET vs. Java?
« Odpověď #57 kdy: 23. 02. 2015, 19:41:32 »
Dobrý programátor ale bude vědět, třeba jak funguje jeho C kompilátor a procesory jeho architektury, nebo jak funguje JVM, nebo jak funguje Dalvik a čím se liší různá Android prostředí, ...

Prelozeno do cestiny, "dobry programator udela kod neprenositelny" ?

jetotak

Re:C# .NET vs. Java?
« Odpověď #58 kdy: 23. 02. 2015, 20:20:54 »
Dobrý programátor ale bude vědět, třeba jak funguje jeho C kompilátor a procesory jeho architektury, nebo jak funguje JVM, nebo jak funguje Dalvik a čím se liší různá Android prostředí, ...

Prelozeno do cestiny, "dobry programator udela kod neprenositelny" ?

OMG, jsem to tu psal včera. Pokud všechno víš, tvůj kód poběží lépe. Nějaká přenositelnost je úplně mimo řešení. Samozřejmě je levnější lopata, která umí jen jazyk a tunu frameworků.

hax0r

Re:C# .NET vs. Java?
« Odpověď #59 kdy: 23. 02. 2015, 21:03:07 »
Nějaká přenositelnost je úplně mimo řešení.

A takovej clovek tady bude placat neco o lopatach... ;-)