Moje relativne cerstva zkusenost je, ze mono proste nefunguje a cely projekt je v dost spatnem stavu.
Preklad pro arm je pomerne problematicky. Kdyz uz se podari projekt prelozit, tak zjistime, ze nefunguji zakladni veci jako pretypovani s z int na double.
https://bugzilla.xamarin.com/show_bug.cgi?id=7938
Osobne vediem projekt kde su mobilne app pisane v c#, zdielaju tu istu bussiness logiku, cast kodu je dokonca reusovaneho zo servera.
Platformy mame WP7, WP8 (separatny port kvoli specifickym novym vlastnostiam), Android a dokoncujeme iOS.
Port iOS trva cca 7 tyzdnov, vyvoj novej app v Objective-C by trval cca 4-5 mesiacov + nikdo z tymu objective-C rozumne neovlada + spravovanie spolocnej bussiness logiky je uplne niekde inde ako spravovat samostatne C#/Javu/Objective-C kod.
Ano, Mono je problematicke(zabugovane), ale dost sa to zlepsuje(Xamarin dostal nemalu investiciu a snazia sa) a rozhodne to nie je nepouzitelne. Vyhody lepsieho spravovania spolocneho kodu a mensie naroky na team ktory uz c# zvlada urcite vyvazia obcasne bugy v Mone.
Pokud vim, tak Miguel nedavno psal na blog, ze vyvoj Mono jako platformy se bude vic obracet smerem k Windows a OS X a Linux budou jako host platformu cimdal vic ignorovat. Udajne si za to muze Linux komunita sama tim, jak porad do Mono sije. A jak to tak pozoruju nejen tady, tak je to naprosta pravda.
Co se tyce bugu v Mono a v ekosystemu kolem nej, rekl bych ze po prevzeti Xamarinem se to dost zlepsuje, napr. Xamarin Studio je pod OS X a Windows znacne rychlejsi a stabilnejsi nez MonoDevelop. XS se pro Linux uz nevyviji. I bugy, na ktere sem narazel pri pouzivani Mono API casem zmizely a dlouho sem nenarazil na problem.
Mono pouziva napr. Unity 3d engine (ale Unity Mono je dost modifikovane, na mobilnich zarizenich nebezi idealne thready), a ten je pouzivan obrovskym mnozstvim hernich vyvojaru s deployem na vsechny mozne platformy. Problemy to ma, ale nic co by znemoznovalo vyvoj. Rikat ze Mono proste nefunguje je prehnana generalizace.
Ad preklad pro ARM: myslis preklad binarek primo pro ARM instrukcni sadu? Imho tohle pro Xamarin neni moc prioritni vec, na ktere nemohou vydelavat - Xamarin na ARM cili na Android a iOS, kde pouzivaji preklad do Javy/JNI/NDK a nebo objc kodu. Primy preklad pro ARM asi nema pro ne velkou prioritu. Od ceho je komunita, ze? :-)
"Udajne si za to muze Linux komunita sama tim, jak porad do Mono sije."
To není žádný argument. To by java na linuxu nemohla být už nejmíň 15 let. Navíc brát místní komunitu jako reprezentativní vzorek je blbost. Je tady spousta křiklounů se silně vyhraněnými názory. Příspěvky s dobrými argumenty se objevují jenom zřídka.
Já jsem chvíli v .netu programoval a připadá mi, že ta platforma je celkově hodně závislá na starších ms technologiích (windows forms, pinvoke atd.), což je nejlépe vidět v porovnání s javou, která tyhle platformově závislé má daleko lépe implementované. Je tak logické, že 100% kompatibilní implementace se nedá vytvořit zrovna snadno. Navíc se to nevyplatí, když potom není o mono na linuxu moc velký zájem mezi programátory. IMHO mono má na linuxu problém s tím, že na desktopové aplikace jsou tu jiné věci a na server se spíš použije java.
To, ze xamarin ziadny preklad do Javy nerobi. To ako to funguje je zavysle od platformy:
iOS - nie su povolene virtualne masiny(teda neboli) - funguje to AOT - ahead of time - skompiluje sa to cez llvm do pomerne pekne optimalizovaneho balicku, priamo do strojoveho kodu, na instrukcie procesora, tj ziadne prekladanie do obj-c
Android - je prikladana VM a funguje to podobne ako Dalvik
Co je spolocne a prekladane je API, na Androide aj iOS je mozne priamo volat to iste API, ako v JAve/C++/Obj-c. Mono je open, Xamarin v podstate predava tie wrappery API a tools.
On uz Apple zmenil politiku, ze veskere apps pro iOS musi byt prohnane pres jejich objc prekladac, jinak nejsou approved na Appstore? Pokud vim, i treba Flash Builder musel generovat objc kod, ktery se az pak prekladal. Timto se obesly apple Terms of service a vsichni byli spokojeni.
Edit: ok, vidim, ze toto uz neplati. A jak tak ctu, Xamarin.Android skutecne priklada Dalvik like VM. Coz nic nemeni na tom, co sem rekl - cili ze pro Android negeneruji ARM kod, ale IL-like kod, tudiz krome kompilace samotneho VM na ARM jim muze byt ARM na Androidu jinak volny (vyjma NDK bindingu). A mono VM je C++ aplikace, s jejiz prekladem na ARM problem ocividne nemaji.
Co se tyce Xamarin.iOS, vypada to ze mate pravdu, nejsem si vsak uplne jisty ze tomu tak bylo vzdy. A objc kod musi urcite generovat aspon pro binding / wrappery na objc APIs na iOS. Nebude toho moc, ale nejake glue tam byt imho musi.
"Coz nic nemeni na tom, co sem rekl" - a já bych řekl, že Vaše původní vyjádření o překladu do Javy/JNI/NDK je na hony vzdálené od Vaší aktuální interpretace Vašeho původního příspěvku ;-).
Pokud řeknu nesmysl, je vždy lepší sklopit uši a přiznat chybu. Jinak jsem pro smích. Jen mi to obvykle taktní publikum nedá najevo.
Mono proste nefunguje nevim jak jinak to rict. Nefunguje pro konkretni varianty co jsem zkousel. tj. debian/sid/armhf, debian/sid/armel, opensuse 12.3/arm7hl Je mozne a docela pravdepodobne, ze pro desktopovy hardware to funguje o dost lip, ale toto jsem nezkousel.
Na debianu jsem narazil na pomerne zasadni chyby, ktere jsou sice vyresene, ale kvuli feature freeze se nedostanou do distribuce. Napriklad toto:
https://bugzilla.xamarin.com/show_bug.cgi?id=2965
Vlastnorucni preklad je pomerne problematicky. Z tech nekolika verzi, ktere jsou oznacene jako release a zkusil jsem je stahnout z http://download.mono-project.com/sources/mono/ velka vetsina proste nesla prelozit.
Tento clanek je na serveru jako root.cz, takze bych ocekaval, ze se bavime o vyvoji pro Linux a na Linuxu. Ne o vyvoji v iOS/Windows nebo pro tyto systemy. Pokud je podpora mona pro Linux v zalostnem stavu, Xamarin na to kasle a linuxove distribuce taky, tak by to tady melo byt zmineno.
A kde presne jste vzal informaci, ze Mono nefunguje na Androidu?
Jaky to ma vyznam? Kolem C# je obrovsky ekosystem a velka komunita, spousta hotoveho kodu, knihoven, nejen hernich enginu, apod. Ano, toto vsechno ma i Java, ale pokud mate nejakou sadu knihoven, ktere efektivne resi co v aplikaci potrebujete a vyvijite aplikace v C#, pak Mono je nejjednodusi zpusob, jak vas kod rozbehat na vsech trech platformach.