C# .NET vs. Java?

Kit

Re:C# .NET vs. Java?
« Odpověď #30 kdy: 23. 02. 2015, 12:43:18 »
64kb limit je historicky dany a je na viacerych miestach v jvm

Ten limit je na třídu nebo na metodu?


whata

Re:C# .NET vs. Java?
« Odpověď #31 kdy: 23. 02. 2015, 12:46:57 »
Odpověď je třeba hledat v původní otázce - proč máš problém v malém městě najít práci na Javu a nabídky jsou hlavně na C# ? Protože v C# se dělají malé hračky.

Takže odpověz si sám - chceš skončit jako desktop developer nebo big cloud systems developer?

Polovina věcí, která zde byla prezentována jako výhoda C# by mohla být klidně brána jako nevýhoda.

IMHO měl dotnet náskok, co se týče desktopu, ale s JavaFX se situace změnila. Za druhé, koho dneska zajímá desktop, že - zase je to o tom, jakou práci bys chtěl dělat.

Používám aktivně obě technologie a hlavní rozdíl, který tam vidím, je výrazně horší čitelnost v C#. V zásadě všechny ty věci, které umožní napsat o něco méně kódu (using namespace místo import class, extension methods, var místo typu - tam má bohužel Java už taky tendence) se 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.

Za druhé bych zmínil nestandardní řešení pro běžné problémy. Například tam kde Java, Gtk, Qt používá css pro témata, používá C# vlastní WPF definice. Navíc nekonsistence naming convention s frontend technologiemi (javascript) může taky práci komplikovat, pokud sdíliš část kódu mezi klientem a serverem.

V zásadě vzato, pokud člověk zůstává v dotnet světě, tak jak jej nadefinoval Microsoft, tak je do jisté velikosti projektu relativně snesitelné. Pokud začne používat third party produkty, které by navíc v plné míře využívaly výše uvedených vlastností C#, tak vítej v pekle.

atarist

Re:C# .NET vs. Java?
« Odpověď #32 kdy: 23. 02. 2015, 12:47:13 »
Statické proměnné v projektu nemají co pohledávat, kromě odůvodněných případů.
64 KB byl naposledy problém ve Windows 3.11, překvapuje mě že jsou s tím stále potíže, nepřekvapuje mě že se tak děje u Javy.

Nez se tady zacne zase jen tak nadavat na Javu (coz me uz nevadi, jen houst, odradte ty mladsi ;), tak si shrnme limity:

1) pocet polozek v constant poolu max. 2^16 (polozka = bud int/float, reference nebo 2 polozky na long/double, takze taky zadne velke omezeni)
2) pocet implementovanych rozhrani 2^16 (to snad nikoho neomezuje)
3) pocet metod 2^16 pro tridu
4) pocet atributu 2^16 pro tridu

5) pocet vsech atributu pro metodu 2^16 (sem spada vsechno, i debug info)
6) velikost lokalniho zasobniku 2^16
7) velikost kodu 2^32!
8) pocet bloku try/catch 2^16

Je to skutecne takove mega hrozne omezeni, jak se nekdo snazi psat?

Ivan

Re:C# .NET vs. Java?
« Odpověď #33 kdy: 23. 02. 2015, 12:49:53 »
Krome vsech "znamych" metod ma kazda trida i metodu "sinit", ktera inicalizuje vsechny staticke promenne.
Ve vysledku pokud zabira prechodova funkce stavoveho automatu 64KB, tam je to velkej problem, to rozsekat do vice trid.

Statické proměnné v projektu nemají co pohledávat, kromě odůvodněných případů.
64 KB byl naposledy problém ve Windows 3.11, překvapuje mě že jsou s tím stále potíže, nepřekvapuje mě že se tak děje u Javy.

Problem je v tom, ze pri generovani kodu se neda presne predikovat kdyz presne to "pretece". To pozna az kompilator kdyz zkompiluje generuje bytekod. Staticka promenna (pokud je const) taky neni problem. At uz je to byte[] anebo neco slozitejsiho tak je to jedno,
slouzi to k ulozeni rozhodovaci fce, DFA whatever.

V C/C++ na linuxu se da pouzit objcopy, takze se takovy "blob" a aplikaci muze vymenit i bez rekompilace. V jave se zase muze soubor zabalit soubor do Jar-u a behem initializace to nacist do pameti, ale neni to tak pohodlny a vyzaduje to dost drbani.

atarist

Re:C# .NET vs. Java?
« Odpověď #34 kdy: 23. 02. 2015, 12:51:38 »
64kb limit je historicky dany a je na viacerych miestach v jvm

Ten limit je na třídu nebo na metodu?

Na metodu, a to jeste jen kdyz se pouziji debug info. Hele tady si lidi jen honi triko, jake maji skvele generatory (evidentne ne tak skvele :-), v praxi to muzes ingorovat, na limity prakticky nenarazis :)


Kit

Re:C# .NET vs. Java?
« Odpověď #35 kdy: 23. 02. 2015, 13:01:14 »
Nez se tady zacne zase jen tak nadavat na Javu (coz me uz nevadi, jen houst, odradte ty mladsi ;), tak si shrnme limity:
...
Je to skutecne takove mega hrozne omezeni, jak se nekdo snazi psat?

Myslím si, že pokud by místo 2^32 bylo 2^16 a místo 2^16 bylo 2^8, tak by to většina vývojářů ani nepoznala. Poznaly by to však blbě napsané generátory.

Jak jsem našel v jiném diskuzním fóru: Pokud metoda překročí 8 KB, je příliš dlouhá a měla by se rozdělit.

Cyr

Re:C# .NET vs. Java?
« Odpověď #36 kdy: 23. 02. 2015, 13:15:06 »
Odpověď je třeba hledat v původní otázce - proč máš problém v malém městě najít práci na Javu a nabídky jsou hlavně na C# ? Protože v C# se dělají malé hračky.

Male hracky :]
http://w3techs.com/technologies/overview/programming_language/all

nula

Re:C# .NET vs. Java?
« Odpověď #37 kdy: 23. 02. 2015, 13:24:28 »
Odpověď je třeba hledat v původní otázce - proč máš problém v malém městě najít práci na Javu a nabídky jsou hlavně na C# ? Protože v C# se dělají malé hračky.

Takže odpověz si sám - chceš skončit jako desktop developer nebo big cloud systems developer?

To je pravda, bohuzel je taky pravda, ze zpracovani big dat v jave jen jedna obrovska sracka. Na planovane distribuovane zpracovani je to dobry, ale pokud potrebujes od systemu realtimove odezvy, tak ses v zadeki, nebo se musis uchylit k jni, nebo k tem "pointrum" (minimalne do javy 7 vcetne).

mr. frown

Re:C# .NET vs. Java?
« Odpověď #38 kdy: 23. 02. 2015, 13:25:38 »
Myslím si, že pokud by místo 2^32 bylo 2^16 a místo 2^16 bylo 2^8, tak by to většina vývojářů ani nepoznala. Poznaly by to však blbě napsané generátory.

Jak jsem našel v jiném diskuzním fóru: Pokud metoda překročí 8 KB, je příliš dlouhá a měla by se rozdělit.

No jasne, proc neudelat 10x komplikovanejsi generator, aby generoval prekrasnej, ale neefektivni kod, kterej stejne nikdo necte...`

Kit

Re:C# .NET vs. Java?
« Odpověď #39 kdy: 23. 02. 2015, 13:30:55 »
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é.

atarist

Re:C# .NET vs. Java?
« Odpověď #40 kdy: 23. 02. 2015, 13:36:06 »
Myslím si, že pokud by místo 2^32 bylo 2^16 a místo 2^16 bylo 2^8, tak by to většina vývojářů ani nepoznala. Poznaly by to však blbě napsané generátory.

Jak jsem našel v jiném diskuzním fóru: Pokud metoda překročí 8 KB, je příliš dlouhá a měla by se rozdělit.

No jasne, proc neudelat 10x komplikovanejsi generator, aby generoval prekrasnej, ale neefektivni kod, kterej stejne nikdo necte...`

docela prehanis vid? A jestli je skutecne "limit" v delce static bloku (jak nekdo psal vyse), tak to je humus nejvetsi, podivejte se, co se generuje pri inicializaci statickeho pole a potom povidejte o efektivite.

mr. frown

Re:C# .NET vs. Java?
« Odpověď #41 kdy: 23. 02. 2015, 13:42:06 »
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  :-) )

Kit

Re:C# .NET vs. Java?
« Odpověď #42 kdy: 23. 02. 2015, 13:46:09 »
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"...

V případě konečného automatu je právě ten velký switch neefektivní. Polymorfismus je rychlejší.

mr. frown

Re:C# .NET vs. Java?
« Odpověď #43 kdy: 23. 02. 2015, 13:46:31 »
docela prehanis vid?

Ani ne. Samozrejme se to muze lisit pripad od pripadu, ale pri psani generatoru jsou priority obvykle:
1. efektivita generovanyho kodu
2. jednoduchost a citelnost generatoru
...
...
157. citelnost generovanyho kodu

Cajova_Houba_2

Re:C# .NET vs. Java?
« Odpověď #44 kdy: 23. 02. 2015, 13:49:40 »
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.