Diskuze: Porovnanie c# a C-Objective
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, přímo s Xamarinem zkušenosti nemám, ale s programováním aplikací v C# pro Windows (Visual Studio) a v Objective-C pro iOS/OSX (Xcode) ano.
Vzhledem k tomu že zatím neplánuji portovat moje mobilní aplikace na
jiné systému (Windows Phone, Android) tak pro iOS vyvíjím v nativním Xcode.
Za posledních pár let se Objective-C přiblížil k .Netu natolik, že už
není pro nováčka takový hardcore se v něm vyznat. Samozřejmě obě
platformy jsou úplně jiné, ale přidali tam garbage collector, automatický
čítač referencí atd. Předtím sis musel paměť spravovat sám což se sice
dalo, ale když jsi na to nebyl zvyklý tak ze začátku aplikace dělaly
zajímavé věci.
Mimo to pokud jsi ještě s Objective-C nedělal, můžeš využít nový
programovací jazyk Swift který je rovněž podporovaný nativně v Xcode. Oba
jazyky jsou si víceméně rovnocené, jen mají jinou syntaxi a Swift je
novější (uvolněný před pár měsíci) takže podporuje pár věcí co
usnadňují práci a je takový obecně svižnější. Podle Apple by měl být
o dost rychlejší, ale mně to nepříjde (je fakt že nemám aplikace které
vyžadují extrémní výkon). Navíc je syntaxí víc podobný C# (vyznat se v
těch hranatých závorkách co obsahuje Objective-C byl pro mě ze začátku
trochu oříšek) Na druhou
straun tím že je Swift nový, tak pro něj není tolik tuoriálů a návodů
jako pro Objective-C, i když se fóra zabývající se tímto jazykem pomalu
plní.
Objective-C i swift se dá kombinovat (v rámci jednoho projektu), takže není
problém si stáhnout nějakou hotovou třídu která něco řeší v
Objective-C a přidat si jí do projektu který je ve Swiftu.
Pokud by tě něco zajímalo, tak se zeptej konkrétně. Ke Xamarinu se
bohužel vyjádřit nemůžu protože ho neznám, třeba sem napíše ještě
někdo kdo ho používá. Můj názor je ten, že je nejlepší vyvíjet v
nativním prostředí (třeba se ale pletu) Mám to jednodušší o to že
nepožaduji multiplatformnost. Buď vyvíjím pro windows nebo pro iOS/OSX
Hmm no musim povedat ze mam v hlave poriadneho chrobaka Pre vyvoj v C# som bol v podstate
donuteny sefom (nastupoval som ako tester), ale este stale necitim nadsenie pri
studovani jazyka c#. Za to ked som dnes rano stiahol do ipadu Swift guide, hltam
stranu za stranou. Len teraz je otazka, ci sa mi oplati vykaslat sa na C# a
pustit sa naplno do Swiftu, pretoze v C# uz to co viem nakodit. Navyse ponuky
zamestnania su v pomere 99% C# a 1% IOS
ja mam zkusenosti z c# i xamarinem (moje cesta byla pascal->delphi->C#).
proti xamarinu:
pro xamarin:
pokud te zajima vyvoj mobilnich aplikaci jako zivnost, tak dnes se uz asi nevyplati vyvyjet nativne protoze pak pises stejny kod pro kazdou platformu co chces pokryt a z hlediska multiplatformniho vyvoje je zde jen xamarin a phonegap
Budu reagovat na poslední odstavec:
"z hlediska multiplatformniho vyvoje je zde jen xamarin a phonegap"
Těch možností je určitě víc, za sebe přidám kivy.org a python
no je mozne ze sem to trochu prehnal s tema frameworkama. co vim ja tak este existuji firemonkey(pascal),appcelerator, unity(c#,na hry), nejaky java klon xamarinu, sencha.
ale pokud se bavime o realnem pouziti tak bych to asi videl tak na phonegap,xamarin a unity. ostatni jsou bud nekvalitni nebo mene zname a tudiz ne tak moc rozsirene.
A myslite, ze ked clovek ovlada iba swift, teda programuje cisto na ios/osx, sa v pohode uzivi na sk/cz? U nas vo firme to vyzera velmi biedne, lenze nechcem riskovat, ze budem odkazany iba na predaj appiek na appstore.
pamatuj ze specialista (at dela cokoliv) se nikdy o praci bat nemusi
Len tak pridám, že aj keď Apple prezentuje, že Swift je rýchlejší ako Xcode, tak kopec testov preukazuje opak. Napríklad aj na CodeCon 2014 povedal Martin Mrenica (Elite Solutions), že v ich testoch zvíťazil Xcode.
Zřejmě myslíš Objective-C (Xcode je IDE které podporuje jak Swift tak
Xcode). Ohledně toho porovnání rychlosti, dle mého názoru bude víc
záležet na tom jak ten konkrétní program bude napsaný než v čem. Jak v
Objective-C tak ve Swiftu se dají dělat prasárny které výslednou aplikaci
zpomalí.
V Xcode to může být např. špatné využívání paměti, pokud si jí
programátor sám spravuje, ve Swiftu zase třeba používání dynamického
typování (Apple to sice doporučuje, ale podle mě musí být někde znát
když si runtime musí sám za běhu zjišťovat co to je za datový typ, kromě
toho mi příjde přehlednější když už při deklaraci vidím co se do
proměnné má uložit). Takových věcí tam je určitě mnohem víc. Myslím
si že pokud by byla stejná aplikace napsaná v Objective-C i ve Swiftu
"ideálním způsobem", tak její rychlost bude +/- stejná.
Hm koukám že jsem udělal stejný přežblept jako ty Mělo tam být: "Xcode je IDE
které podporuje jak Swift tak Objective-C" A zrovna tak na začátku druhého
odstavce mělo být Objective-C misto Xcode. Ach ty pondělky
Spíš jsi udělal jeden velký přežblept, ach ty pondělky
Swift je bezpečně typovaný jazyk - narozdíl od Objective-C, kde můžeš využívat neformální protokoly pro dynamický dispatch (nehledě na to, že všechna volání jdou přes dynamický dispatcher). Ve Swiftu nemůžeš mít ani (void*), ani id<>, pokud jsi to zkoušel, tak jsi určitě narazil na nutnost mít vždy jasně definované typy, přičemž Any a AnyObject umí pěkně zlobit, když potřebuješ posílat opaque data.
Díky tomu může být Swift rychlejší než ObjC, protože optimalizátor má více prostoru a dokáže generovat statický kód, inlinovat metody a provádět řadu dalších zrychlení. Nemluvíme tu o x-násobném zrychlení, ale o jednotlivých instrukcích, lepší práci s ARC a pamětí vůbec, přímém volání metod místo dispatche, atd.
Zatím je to ale hudba budoucnosti. Swift není ještě dostatečně vyspělý na reálné aplikace. Poslední patche XCode sice odstranily segfaulty během kompilace a studio už nepadá 50x za den, ale jen tak 5x (a to mluvím o v6.1.1, nikoliv betě). Navíc se ve Swift neobejdeš bez znalosti Objective-C, protože některé frameworky ještě nejsou podporované (nebo mizerně), takže bridging je na denním pořádku. Navíc je uvnitř tuna bugů, takže i nejjednodušší kód umí leakovat paměť (nebo je chyba v Instruments, které zatím také moc nefungují na iOS8). Když k tomu připočtu násobně vyšší složitost toll-free-bridging oproti ObjC (příklady na stackoverflow jsou většinou špatně, je vidět, že tomu zatím rozumí jen málo lidí), sečteno podtrženo si ještě pěkně dlouho počkáme.
Moje osobní statistika odpovídá i ostatním firmám, když jsem hledal reference na Swift - polovina kódu za polovinu času, ale 4x déle trvá hledání bugů v knihovnách od Apple.
Zobrazeno 12 zpráv z 12.