Bevezetés a többplatformos alkalmazásfejlesztésbe Xamarinnal
2016-06-02T09:24:09+02:00
2016-06-04T13:45:19+02:00
2022-07-19T02:06:59+02:00
  • Hagyjuk a vallási vitákat, mindenki használja amit akar, ennek a cikknek nem az a lényege hogy vallási vitát generáljon, de ti ezt teszitek a komment szekcióban, kratulálok!
    Mutasd a teljes hozzászólást!
  • Aha, szóval a futási idejű feature-öket nevezzük modernek és produktívnak.

    Miért érzem azt, hogy nem sok fogalmad van arról, hogy mik ezek ?

    Például akkumulátor idő csökkentése eléggé fontos és jelenleg ez egy Achilles sarka a mobil appoknak, ahol a C++ jobban teljesít.

    Nincs lényegi különbség. A legtöbb droidos app eleve javában van írva, és maga a gugli is ezt ajánlja amikor NDK-t akarsz letölteni. A xamarin pedig ugyanolyan bytekódot generál mint a java.

    ami megy egy ideig, de a nagyok nem igazán foglalkoznak vele, mint potenciális eszközzel?

    Jelenleg egy olyan cégnek dolgozom, aminek a bevétele összevethető kis hazánk költségvetésével, és ők Pl. használják.

    Pont ez az, hogy tool-t és nem API-t választunk, vagy, ha tool-t, akkor legalább egy nagy múlttal rendelkező és mögötte komoly felhasználói bázisú legyen az a tool, amire alapozni lehet.

    COBOL ?
    Mutasd a teljes hozzászólást!
  • Ha megnézted a doom1 kódját, ami több, mint 20 éves, akkor láthattad, hogy már ott sem direktben allokáltak és töröltek memóriát, hanem egy manager segítségével.

    Ez nem igazán automatikus szemétgyűjtés. Ahhoz az kell, hogy tudd hogy használja-e még valaki az adott memóriaterületet. Ezt is lehet ugyan szimulálni C++-ban, de elég nagy macera.

    de amiről eddig szó volt két eset (üzleti, játék) arra speciel kiválóan alkalmas manapság is.

    Játékra (pontosabban játékmotor írására) valóban jó - használják is erre a mai napig. Játék logikát azonban egyre kevésbé ezen írnak - erre lua, C#, java, javascript, stb. nyelveket használnak inkább mostanság. Üzletre nem jó. Gyakorlatilag senki nem használja erre: nézd meg az ide vonatkozó álláshirdetéseket. Enterprise kategóriás pénzügyi szoftverekhez szinte csak java vagy .NET vagy ABAP (SAP)-osat keresnek, lejjebb esetleg PHP, Ruby, Python. Nem mondom, hogy nincs esetleg egy-két legacy rendszer még a Borland C++-os időkből, de általában nem ez a jellemző.

    Egyébként az MS-nél is az irány a C++, próbálj fejleszteni C#-al DirectX alkalmazást UWP-re.

    Naponta fejlesztek ilyet - minden WPF és általában xaml alapú cucc a DX tetején ül. De ha írok egy Unity3D-s appot akkor is DX-es alkalmazást írok. Közvetenül dx-et akkor hívnék, ha Pl. játékmotort fejlesztenék.

    Aztán egyszer csak a 3rd party lib unsupported, elfelejtve, megszűnik és lehet keresni egy másikat és átírni mindent. (lásd XNA) Ilyenkor hol a nagy előny, ami nem is volt?

    A xna újra lett implementálva, immár opensource alapokon, monogame néven fut. Ez amúgy nem C++ vs más, hanem nyílt vagy zárt forráskód kérdése.
    Mutasd a teljes hozzászólást!
  • A C# egy magasabb szintű, modern nyelv a C++-hoz képest. Produktivitásban nagyon erős, rengeteg hasznos funkcióval (async, LINQ, reflexió, memória-menedzsment, hosszú a lista).

    Aha, szóval a futási idejű feature-öket nevezzük modernek és produktívnak.

    ezek olyan különbségek, amiket a mobilappok 99%-a nem igényel, ellenben sokkal több buktatója van a C++-nak, könnyebben lövi lábon magát az ember

    Például akkumulátor idő csökkentése eléggé fontos és jelenleg ez egy Achilles sarka a mobil appoknak, ahol a C++ jobban teljesít. Nem tudom milyen buktatókra gondolsz C++ alatt, mert jó néhány C#-ban is van, nem is egy könyvet írtak már erről (Effective C#). Érdekes például a boxing/unboxing probléma, ami a performanciára is hatással van a GC miatt.

    érdemes lehet kipróbálni a Visual C++-t a cross-platformhoz, de ha valaki hatékonyan, viszonylag fájdalommentesen akar elmélyedni ebben a crossplatform mobilfejlesztői világban, egyértelműen a C#-ot ajánlom

    Úgy, mint hivatalos MDK-t (managed development kit), vagy mint egy 3rd party eszközt, ami megy egy ideig, de a nagyok nem igazán foglalkoznak vele, mint potenciális eszközzel?

    Ahogy LC is mondja, az aktuális feladathoz kell választanunk a legmegfelelőbb toolt

    Pont ez az, hogy tool-t és nem API-t választunk, vagy, ha tool-t, akkor legalább egy nagy múlttal rendelkező és mögötte komoly felhasználói bázisú legyen az a tool, amire alapozni lehet.
    Mutasd a teljes hozzászólást!
  • Ha megnézted a doom1 kódját, ami több, mint 20 éves, akkor láthattad, hogy már ott sem direktben allokáltak és töröltek memóriát, hanem egy manager segítségével. Szóval, amin már a C/C++ fejlesztők évtizedek óta túlléptek, te még mindig ezt hozod fel, mint hátrányt.
    Egyébként viszont C#-ban tényleg probléma a memória kezelés, főleg, amikor unmanaged erőforrásokkal kell dolgozni, illetve nagy mennyiségű adatokat kellene realtime használni.

    Azt, hogy mindenre jó lenne a C++ nem állítottam, de amiről eddig szó volt két eset (üzleti, játék) arra speciel kiválóan alkalmas manapság is. Ugyanúgy általános célú statikus típusos OOP nyelv, programozás szempontból semmi különbség nincs. A különbség inkább a fordításban/futtatásban van, amibe viszont nincs beleszólása a fejlesztőnek. Illetve az API, amit programozni kell a platformokon az is C/C++, C#-ban legfeljebb valami plusz rétegen keresztül lehet hozzáférni, mint másodlagos megoldás.
    Találkoztam én is sok nyelvvel, sok technológiával és beláttam, hogy sokszor inkább akadályoz az adott "magas szintű" eszköz, minthogy segítene, körbekerülő megoldásokat kell alkalmazni (mint pl ez a Xamarin eszköz is), ahelyett, hogy magát az API-t használnám, annak is csak azon kis részét, amire ténylegesen szükség van. Aztán egyszer csak a 3rd party lib unsupported, elfelejtve, megszűnik és lehet keresni egy másikat és átírni mindent. (lásd XNA) Ilyenkor hol a nagy előny, ami nem is volt?

    Egyébként az MS-nél is az irány a C++, próbálj fejleszteni C#-al DirectX alkalmazást UWP-re. Nincs ilyen projekt, a hivatalos álláspont szerint is irány vissza a C++ ra, ennyi.
    Majd ha ilyen bonyolultságú alkalmazást fejlesztesz, akkor gyere vissza és írd meg, hogy mennyivel hatékonyabb szerinted a C#, ezt ugyanis QT-vel fejlesztgetik C++ ban: Maya
    Mutasd a teljes hozzászólást!
  • A C# egy magasabb szintű, modern nyelv a C++-hoz képest. Produktivitásban nagyon erős, rengeteg hasznos funkcióval (async, LINQ, reflexió, memória-menedzsment, hosszú a lista). A C++-nak lehet elméleti előnye pl. sebességben a C#-hoz képest, de ezek olyan különbségek, amiket a mobilappok 99%-a nem igényel, ellenben sokkal több buktatója van a C++-nak, könnyebben lövi lábon magát az ember. Ha valaki már (tényleg) profi C++-ban, nyilván érdemes lehet kipróbálni a Visual C++-t a cross-platformhoz, de ha valaki hatékonyan, viszonylag fájdalommentesen akar elmélyedni ebben a crossplatform mobilfejlesztői világban, egyértelműen a C#-ot ajánlom. Ahogy LC is mondja, az aktuális feladathoz kell választanunk a legmegfelelőbb toolt. Az eddigi tapasztalataim alapján a Xamarin + MvvmCross párosítás a leghatékonyabb páros crossplatform mobilappok fejlesztéséhez. Az MvvmCross-ról nem terveztem írni egyelőre, kicsit túl sok infó lenne egyszerre, de ha van rá igény akkor nyitott vagyok erre is.

    Abban viszont egyetértek M.Seal-lel, hogy a WP jövője egyre ingatagabb.

    @assarte, remélem tetszeni fog majd a cikksorozat, bátran merem ajánlani a Xamarint akár kicsi, akár nagy projektekhez :)
    Mutasd a teljes hozzászólást!
  • Egy játék engine és egy üzleti app alapvetően más kategória. Más Pl. az automatikus teszt lehetősége, más a fenntartás költsége, más a komplexitás jellege. Alapvetően bármit meg lehet csinálni akár assemblyben is, és nyilván ez utóbbi lesz a leggyorsabb. De azt, hogy mit írunk assemblyben, C++-ban, C#/Java-ban, PHP-ben vagy javascriptben alapvetően a feladat jellege határozza meg. Amúgy 2000 környékén még én is úgy gondolkodtam, hogy a C++ mindenre jó és elég. Aztán szembejött egy rakás más fajta projekt, nyelv, környezet és beláttam, hogy nem nyerő stratégia mindent ebben csinálni.
    Mutasd a teljes hozzászólást!
  • Üzleti appokat leginkább javában vagy C#-ban fejlesztenek manapság. Ennek a fő oka pedig a direkt memóriakezelésből adódó potenciális problémák (Pl. memóriaszivárgás) kezelésének költsége.
    Mutasd a teljes hozzászólást!
  • Ez nem esetleg, hanem olyan kis alkalmazások, mint az Unreal engine, Cry engine stb jelenleg is C++ al fejlesztődnek több platformra és nem csak OpenGL rendereléssel, hanem D3D-vel, Vulkan-al is többek között olyan platformokra is mint a PS4. (A Cry engine "üzleti" editor része egyébként QT alapú)

    Üzleti alkalmazáshoz már kell egy keretrendszer, sajnos a C++ hoz alapvetően nincs grafikus felület, de pl a QT elég jól használható nagyobb üzleti programokhoz is cross-platform.
    Mutasd a teljes hozzászólást!
  • "nagyobb üzleti alkalmazást épeszű ember nem kezd el C++-ban"

    Miért? Miben érdemes elkezdeni? Mi annak az előnye? Mi a hátránya a C++-nak?

    Komolyan érdekel!
    Mutasd a teljes hozzászólást!
  • Engem kifejezetten érdekel, hogy mit tud a Xamarin. Már lassan 10 éve nem léptem - számomra - új fejlesztői platformra (nem láttam szükségét), egy ideje viszont komolyan fontolgatom a programozói eszköztáram ilyetén módon való bővítését a mobil app fejlesztés irányába. Az eddig hozzám eljutott infók alapján pedig a Xamarin tűnik ehhez a legésszerűbb eszköznek.

    Egyúttal köszönöm a cikket, kíváncsian várom a folytatást!
    Mutasd a teljes hozzászólást!
  • Attól függ mit fejlesztesz. Mondjuk OpenGL alapú játékra ez esetleg igaz lehet, de Pl. egy nagyobb üzleti alkalmazást épeszű ember nem kezd el C++-ban.
    Mutasd a teljes hozzászólást!
  • A WP-t már sok helyen temetik, de ezen kívül is "nagy platform"-nak nevezni barokkos túlzás.
    Egyébként UWP-re kiválóan lehet fejleszteni C#/C++ al külön segédeszköz nélkül is cross-platform, még akár xbox-ra is. C++ ban az Android és IOs se követel külön keretrendszert, hogy a kódbázis 99%-a ne lehetne ugyanaz a forrás. Jelenleg 5 platformra fejlesztek így különösebb gond nélkül (még Tizen-re is, bár azt is temetik).
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd