Jazyk podobný C#

Bla

Jazyk podobný C#
« kdy: 01. 01. 2014, 18:19:13 »
Ahoj,

existuje pro Linux jazyk podobný C#?
- Překladač z toho musí udělat nejlépe strojový kód, potřebuji to na realtime aplikaci.
- Java je sice pěkná a vyhovovala by, ale je na to příliš, příliš, pomalá.

V zásadě se nechci start o alokaci paměti, mimo jiné a musí to být opravdu exra rychlé.


Jimm

Re:Jazyk podobný C#
« Odpověď #1 kdy: 01. 01. 2014, 18:22:58 »
Pokud je pro tebe Java pomalá, nepouštěj se do toho a zkusil bych jiný projekt, třeba puzzle.

Waseihou

Re:Jazyk podobný C#
« Odpověď #2 kdy: 01. 01. 2014, 18:37:16 »
Za jenvýznamější výhodu C# je možno považovat .NET (a tedy i mono) platoformu. Samozřejmě že C# je již vyzrálejší a má lepší věci než Java, například LINQ. Java i C# jsou skvělé pro tvorbu enterprise aplikací, tedy velkých molochů typu ERP systémy.

Pro realtime aplikaci zvaž použití C++, nevidím zas až takovou výhodou GC oproti smart pointeru - není až tak těžké starat se o alokaci paměti.

Pokud chceš jazyk opravdu vyšší úrovně, tak je tu Cython (http://cython.org/) který kompiluje do C, ale ten má k Java / C# HODNĚ daleko.

Hodně odvážné by bylo vyzkoušet Haxe (http://haxe.org/), to je transkompiler s jazykem mající podobnou syntax jako C#/Java a umožňuje pak vytvořit nativní zdroják v C++, Java, C# a pár dalších obsukrních jazycích jako třeba JavaScript. Nevýhodou je, že se to bude blbě debugovat, jedině přes nějaký ten logger či trace...

petr

Re:Jazyk podobný C#
« Odpověď #3 kdy: 01. 01. 2014, 18:39:36 »

mich

Re:Jazyk podobný C#
« Odpověď #4 kdy: 01. 01. 2014, 19:17:36 »
Nechci flejmovat, ale můžu se zeptat co to má být za aplikaci, na kterou je java "příliš, příliš pomalá"?


Re:Jazyk podobný C#
« Odpověď #5 kdy: 01. 01. 2014, 19:29:41 »
Java a C# su co sa tyka vykonu na velmi podobnej urovni, takze ak ti vykonovo vyhovuje C# tak Java ti vyhovovat bude urcite. Ak chces nieco naozaj, naozaj extra rychle odporucam assembler (iste podobnosti s C# tam su, napr. obidve bezia na pocitaci).

PS: najviac by som sa smial, keby si sa nakoniec rozhodol pre Python, ktory je asi tak 100x pomalsi nez Java

gamer

Re:Jazyk podobný C#
« Odpověď #6 kdy: 01. 01. 2014, 22:10:50 »
Jestli potřebuješ realtime aplikaci, tak cokoliv s garbage collectorem nechceš. Jestli to má být opravdu realtime aplikace, tak nechceš ani nic s dynamickou alokací paměti. Obecné alokátory jsou totiž ve své podstatě časově nedeterministické, nedá se dost dobře určit, jak dlouho bude alokace trvat, protože to závisí na mnoha věcech (fragmentace paměti, počet alokovaných bloků, zámky od odstatních threadů, jestli jsou zrovna datové strukrury alokátoru v cache nebo ne...), takže nemůžeš ani zaručit latence. Možná by bylo dobré napsat, co to má být za aplikaci. Pokud aplikace typu vyčítám periodicky z teplotního čidla nějaké hodnoty a když je náhodou nedostanu, tak mi to nevadí, protože přijdou později, tak to klidně můžeš napsat v jave. Pokud děláš řídicí aplikaci pro letecký motor, tak na javu zapomeň a zapomeň i na dynamickou alokaci paměti, protože musíš všechno alokovat staticky nebo jen při inicializaci a za běhu už ne.

Seph

Re:Jazyk podobný C#
« Odpověď #7 kdy: 01. 01. 2014, 22:57:28 »
Gamer:
A co memory pool? Tam jde zaručit opravdu velmi rychlou alokaci paměti...

mikrom

Re:Jazyk podobný C#
« Odpověď #8 kdy: 01. 01. 2014, 23:22:44 »
existuje pro Linux jazyk podobný C#?
- Java je sice pěkná a vyhovovala by, ale je na to příliš, příliš, pomalá.
Ja myslim, ze skor to vydebuges preco je to v Jave pomale a opravis to a bude to rock solid, ako skusat nejaky iny obskurny jazyk v ktorm pocas vyvoja narazis na iny problem.

eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re:Jazyk podobný C#
« Odpověď #9 kdy: 02. 01. 2014, 09:11:39 »
Můžeš zkusit jazyk jménem Scala, který se kompiluje do bytecodu JVM.

Problém je spíš v použití JVM/.Netu pro realtime aplikace. Na tomto poli jsou kladené zcela jiné požadavky než u běžných aplikací (navíc se liší mezi jednotlivými RT aplikacemi) a začíná to již u operačního systému.

neron

Re:Jazyk podobný C#
« Odpověď #10 kdy: 02. 01. 2014, 09:35:25 »
To s pomalou Javou je asi blbost co? Tedy pokud nedoplníte, že je stejně pomalá jako C#/.Net. Dobré řešení by mohl být nějaký crosscompiler do C,  např. už zmiňovaná Vala. Scala je moc pěkný jazyk, ale také běží na JVM.

https://wiki.gnome.org/Projects/Vala/About

The syntax of Vala is similar to C#, modified to better fit the GObject type system. Vala supports modern language features as the following:

DK

Re:Jazyk podobný C#
« Odpověď #11 kdy: 02. 01. 2014, 10:04:12 »
eMko: ona i java se da pouzit pro realtime aplikace, ale musis pouzivat jine nastroje, nez pro "bezne" programovani, viz treba Javolution a Java RTS

SCP

Re:Jazyk podobný C#
« Odpověď #12 kdy: 02. 01. 2014, 11:22:23 »
Problém jazyků je ten, že se k ní vyjadřují blbci, kteří v tom napsali Hello World. Rychlost běhu C#/Java je naprosto srovnatelná. Oboje se kompiluje do nativního kódu, u Javy můžete dokonce nastavit kompilaci při prvním průběhu programu. Říká se tomu Virtual Machine Hints, to jen na opravu místních kecalů. Častý mýtus mnoha lidí je, že prostý překlad do jiného jazyka, který se následně kompiluje do strojového kódu, cokoliv urychlí. Takové pověře může uvěřit jen ten, který zatím vůbec netuší, co se děje s jeho kódem. C# i Java mohou být stejně rychlé, někdy dokonce i rychlejší než jazyky, kterým se říká "nativní", jako je C. Proč ? Inu:

1) VM má k dispozici informace o vašem hardware a kompiluje přímo pro něj, nikoliv univerzálně. Některé operace (hlavně aritmetika a práce se soubory) se tak dají značně urychlit.
2) Důvod, proč kód v jazycích, které dovolují práci na nižší úrovni abstrakce, bývá po překladu rychlejší, je jednoduchý: Malá obecnost řešení a málo bordelu. Otázka bývá špatně položena. Vůbec nejde o to, jestli něco generuje nativní instrukce a něco nikoliv (oboje lze přinutit ke kompletnímu překladu). Jde o to, jak generovaný kód vypadá. Funkce, které voláte v Javě či C#, jsou přeci jen univerzálnější. Nemusíte sledovat pointery na soubory. Java dokonce od verze 7 automaticky uzavírá alokované zdroje v kontrolovaných blocích. A protože jsou napsané univerzálně, jejich strojový kód vypadá jinak než ten, který vygeneruje Vámi napsaný prográmek v C/C++, který ale nevyhovuje tak obecnému použití. Pokud použijete v C++ obecnou knihovnu, vůbec nemusí být rychlejší než přeložený program v Javě, někdy naopak.

V Javě můžete kritické části implementovat v jiném jazyce, říká se tomu JNI. A na zbytek použít Java knihovny. Říká se, tj. nemám to ověření, že volání nativní metody trvá okolo 35 nanosekund. Pokud je její průběh rozumně dlouhý (což u kritických částí programu bude), máte k dispozici zbraň slušného kalibru. Krásná ukázka, že Java umí běžet naprosto stejně rychle jako program v C++, je JOGL. Když na procesoru počítáte matice a pouze výsledný předáváte shaderům, pak zjistíte že Java umí optimalizovat práci s maticí reprezentovanou jednorozměrným polem naprosto skvěle - tj. práce s ní je stejný fofr jako když to samé izoluji a napíši v C. S tím že C kód má o dost horší metriku.

Výhody a nevýhody obojího si musí každý zvážit sám.

Závěr je následující: Jestliže někdo hledá náhradu za C#, pak v něm pravděpodobně nic moc neumí či nic seriózního nedělá. C# se totiž nahradit nedá, pomineme-li ostatní jazyky z balíku .NET. Má jinou úlohu než Java, jeho API je jiné (jestli někdo přijde s tím, že oboje má kolekce a podobné kecy...). Dokonce i vláknování, což většina programátorů nedělá a neumí, je v C# připravené pro Windows. Proto je jeho portování (jako projekt Mono) tak šíleně kontraproduktivní. Dotnet je spjatý s platformou Windows, na které dejme tomu funguje dobře a rozumí si s ní. Čím toto chcete nahradit ? Zkuste v Javě najít rozlišení vláke na foreground/brackground. Zkuste v ní najít podporu D3D. To vše je Windows only.

Všechny tyto thready jsou jen důkazem toho, jak je teorie a vzdělání důležité.

eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re:Jazyk podobný C#
« Odpověď #13 kdy: 02. 01. 2014, 11:34:26 »
eMko: ona i java se da pouzit pro realtime aplikace, ale musis pouzivat jine nastroje, nez pro "bezne" programovani, viz treba Javolution a Java RTS

Neříkám, že se to nedá, právě naopak, vím, že se používá. Ale vzhledem k povaze původního příspěvku to nemá smysl rozpitvávat.

Tonda

  • *****
  • 630
    • Zobrazit profil
    • E-mail
Re:Jazyk podobný C#
« Odpověď #14 kdy: 02. 01. 2014, 15:24:00 »
Existuje i realtime JVM http://www.oracle.com/technetwork/middleware/jrockit/overview/index-086343.html

A realtime a rychlé jsou dvě různé věci, realtime především znamená garantovanou dobu odezvy, nikoliv však nějaké rekordy v množství vyřízených požadavcích délce doby vyřízení.