Možno by stačilo ak by Apple neblokoval JVM. Plus bonus detaily ako XCode (bežiaci len na Mac OS) a Apple developpers program
Sloboda ako v Saudskej Arábii.
P.S. Nie som javista. Programujem embedded veci a ich ovládacie GUI klikátka v Qt pre PC/Android. Iphonisti majú smolu. Bez XCode ani Apple developpers program nevytvorim Qt aplikáciu pre Iphone.
Apple nic neblokuje. Java tam furt běží, zkoušel jsem tu starou klasickou i aktuální verzi. A že Xcode běží jen na macOS? Ono třeba "velké" Visual Studio běží mimo Windows? Jinak macOS, Xcode, iOS Simulátor atd. mám v poho na PC ve virtuálce. Pro získání certifikátu pro nahrávání do App Store stačí sehnat skutečný Mac jen na chvíli (dnes dokonce i v cloudu).
>Ono třeba "velké" Visual Studio běží mimo Windows?
IMHO ano.
https://visualstudio.microsoft.com/cs/vs/mac/
Jen je otázka co si představujete pod pojmem "velké".
Na vývoj v C/C++, .NET Core to jistě bude stačit.
PS: Visual Studio for Mac je rebrandovaný MonoDevelop (k velkému VS to má stejně daleko jako Code): https://www.monodevelop.com/
Flutter s Kotlin Multiplatform můžeme porovnat v několika různých směrech. Kotlin Multiplatform tolik neznám, ale zde je několik důvodů proč používám právě Flutter:
- Programovací jazyk Dart => velice jednoduchý, snadno se s ním člověk naučí pokud má již zkušenosti s podobným programovacím jazykem (např.: Kotlinem, Javou, C#, Pythonem nebo JavaScriptem).
- Popularita Flutteru => Flutter je spolu s ReactNativem nejpopulárnějším řešením pro tvobu multiplatformních mobilních aplikací.
(https://www.statista.com/statistics/869224/worldwide-software-developer-working-hours/)
- Rychlost růstu => Komunita kolem Flutteru roste 2x rychleji než u ReactNativu. (viz. graf úplně dole na konci článku: https://dev.to/mjablecnik/flutter-vs-react-native-community-in-2022-2do6)
- Dostatečně velký ekosystém => Díky velké komunitě a rychlému růstu popularity existuje velké množství pluginů a rozšíření, díky kterým
nepotřebujete žádnou znalost nativního programování pro Android nebo iOS a nemáte potřebu ani žádné vlastní pluginy tvořit..
Osobně nemám žádné znalosti nativního programování jak v Androidu tak ani v iOS a vůbec mi to za ty 2 roky co dělám s Flutterem nevadí.
- Developer experience => Díky Dartu a Flutteru je programování mobilních aplikací opravdu skvělé a podle StackOverflow survey je i mnoho vývojářů, kteří Flutter opravdu milují a Google dělá opravdu hodně pro to, aby komunita byla spokojená. (https://insights.stackoverflow.com/survey/2021#section-most-loved-dreaded-and-wanted-other-frameworks-and-libraries)
- Rychlost vývoje => Díky Flutteru je tvorba aplikace pro Android i iOS velice rychlá díky sdílenému kodu. Stejně tak to platí i pro ReactNative a Kotlin Multiplatform, takže toto je spíše výhoda mezi Multiplatformím vs Nativním programováním..
- Pracovní pozice => Pokud jste vývojář, tak vás možná i potěší, že se v česku dá již teď najít mnoho firem shánějící Flutter vývojáře. Kolik pracovních pozic je zde otevřeno také i pro Kotlin Multiplatform?
https://www.startupjobs.cz/nabidky/vyvoj/mobilni-vyvoj/flutter
https://www.startupjobs.cz/nabidky?superinput=kotlin%20multiplatform
Z výše uvedeného vyplývá, že Flutter vede hlavně díky velikosti komunity.
Kotlin Multiplatform nemá až takovou komunitu jako Flutter.
Kotlin vývojáři používají hlavně pro nativní vývoj ale ne multiplatformní.
A docela jsem zvědavej, jestli Kotlin Multiplatform zažije v následujících letech stejně tak rychlý růst jako Flutter..
A v čem jako konkrétně spočívá ta nevýhoda?
Myslel jsem, že se tady konkrétně bavíme o mobilním vývoji.
Anebo myslíte si snad, že mobilní vývojář bude také vytvářet hry pro Xbox, embedded systémy do IoT zařízení, backend na straně serveru, CLI scripty pro linuxový terminál anebo frontend webových stránek?
Každá z těchto oblastí má své technologie (jazyky, knihovny, frameworky) kde si našli své uplatnění:
C#/.NET
Java/Spring
Kotlin/Android SDK
C/C++
JavaScript/TypeScript
Python
Go
atd..
Názor jako že: "Dart se nepoužívá nikde jinde než s Flutterem."
je úplně ten samý jako: "C/C++ se nepoužívá nikde jinde než pro low-level/embedded systémy"
nebo "Go se nepoužívá nikde jinde než pro backendové microservices."
anebo "JavaScript/TypeScript se nepoužívá nikde jinde než pro tvorbu webových stránek."
anebo "C#/.NET se nepoužívá nikde jinde než na windowsech."
anebo "Debian se nepoužívá nikde jinde než na serverech."
Ano samozřejmě můžeme používat také JavaScript na straně serveru, C#/.NET Core na linuxu anebo Go pro CLI programy.
Ovšem stejně tak můžeme Dart používat i pro Tvorbu CLI scriptů, webový frontend anebo počitačové hry.
Také ovšem můžeme Go použít pro tvorbu webového frontendu, JavaScript pro tvorbu počitačové hry, C# pro tvorbu mobilní aplikace anebo Python pro tvorbu window manageru.
Všechno toto je možné, ale reálně se to moc nepoužívá, a to z nejrůznějších důvodů, které tu teď asi nebudu rozepisovat.. :)
Ovšem mohu říct, že Dart je v dnešní době stejně tak multiplatformní asi tak jako Kotlin.
Podporuje nejenom všechny desktopové nebo mobilní platformy at už skrze JIT nebo nativní kompilaci, ale i browser diky dartjs anebo volat Céčkovské knihovny díky dart:ffi.
To samé dokáže i Kotlin Multiplatform, C# a další jazyky, pokud vím..
Takže vše z výše zmíněného můžete dělat i s Dartem, pokud chcete.
Tím pádem to, že se Dart nepoužívá nikde jinde nevnímám ani jako nevýhodu, protože to, že se sice mainstreamově nepoužívá v jiných oblastech, ještě neznamená, že to taky nejde..
A úplně to samé platí i pro ostatní jazyky.
Ovšem pokud jste třeba Frontend web developer, tak asi samozřejmě pro vás bude 1000x lepší pracovat s JavaScriptem/TypeScriptem, anebo pokud jste backend developer tak zvolíte (C#, Python, Javu, Go, apod.. podle potřeby) anebo pokud jste herní vývojář tak s ničím jiným než se C# a nějakým tím herním Enginem asi ani pracovat nebudete.., že? ;-)
Ano, to je jistě pravda. Každý jazyk má nějakou oblast kde se uchytil, jinak by snad ani neexistoval a poté co získal na popularitě se potom začal používat i v jiných oblastech programování, díky velkému množství programátorů, kteří si jej oblíbili :)
Kdyby neexistovaly webové stránky, tak by se také nikdy neuchytil JavaScript a nevznikl by TypeScript. Kdyby nebyly windowsy, nikdy by nevzniknul ani C#, Javu si snad ani bez JVM neumím představit.. a Ruby bez Railsu jako by nebyl..
Anebo používá se snad Kotlin někde jinde než na Androidu? Popřípadě na serveru se Springem? Anebo Go na jiné věci než microservices?
Pořád jste mi ale neřekl, jaký má toto jako význam. Není přece důležitý aby jeden jazyk byl totálně všude (což snad ani není možné), ale aby vám dal vše potřebné pro vývoj toho, co potřebujete. (což vám Dart dává.., viz. můj předchozí komentář).
A podle toho co chcete vytvářet si i vyberete tu nějakou danou technologii která vám nejvíce vyhovuje.
A osobně si myslím, že je velice dobře, že Dart našel uplatnění s Flutterem, protože to je opravdu dobrá kombinace a Dart je opravdu pěkný jazyk, kterého by byla škoda, kdyby nezískal na větší popularitě.
Teď díky komunitě, která je každým dnem větší a větší se může ekosystém okolo Dartu zase více rozvíjet..
Ovšem v tuto chvíli pokud nejste mobilní vývojář a ani se jím stát nechcete, tak asi Dart pro vás zatím zjevně není, ale za 5-10 let může být situace klidně zase jiná.. ;-)
5. 6. 2022, 17:19 editováno autorem komentáře
To jste ale neodpověděl na mojí jednoduchou otázku: kde jinde se používá Dart kromě kombinace s Flutter?
Dart je tady +-10 let a nebýt toho, že to tlačí Google s Flutter tak u je dávno mrtví.
Anebo používá se snad Kotlin někde jinde než na Androidu? Popřípadě na serveru se Springem?
To vám přijde málo?
Mimochodem v Go je napsaný Docker a spousta utilit.
Ne opravdu za 5-10 let nebude situace s Dart jiná, protože Google se rozhodne opět (jako už po několikáté) pro něco jiného a tím Dart skončí.
Ano máte pravdu. Kotlin je jen jazyk a Kotlin Multiplatform Mobile (KMM) je SDK pro tvorbu mobilní aplikace pro iOS a Android => https://kotlinlang.org/lp/mobile/
Stejně tak Dart je jazyk se kterým se programuje ve Flutteru.
Věřím, že Calculon porovnával právě Flutter vs KMM (o kterém je i tento článek) a ne Flutter s Kotlinem jako s jazykem.. ;-)
Zásadní fakt, který v těch buzzword nápisech - shared logic, code ... atd. - proti flutteru a RN trochu zaniká, je ten, že ten KMM není o GUI, není to prostě mobilní frontend framework, takže ano business logiku napíšete v kotlinu, ale UI pak musíte nabušit ve swiftu a paradoxně zas kotlinu :-).
Jako pro scénář když mám něco i s backendem na JVM v kotlinu, tak dejme to, bych o tom uvažoval.
Ale pokud stavím něco nového a potřebuji mobilní jabko i robota, tak určitě zvolím raději flutter, to je totiž opravdu cross platform UI by design a ušetřím tím logicky mnohem více než s kotlinem MM, kde mi to UI chybí.
Výhoda flutteru oproti ostatním cross platform UI (React Native, .NET MAUI, QT...) je zásadně ta, že Google investuje nemalé peníze do flutteru jako plnohodnotného UI frameworku, specializace na UI, client side je tam prostě z principu daná a určitě se googlu dost daří to naplňovat, viz. poslední Google IO, kde bylo vidět jak do toho šlapou.
Zásadní otázka tak spíš je, co je nějaká business logika v těch client side aplikacích, jestli je to pár volání API a nějak je poslepit a zobrazit, no tak to se ten kotlin multiplatform moc nerentuje.
A pokud člověk potřebuje nějakou složitější business logiku nebo práci s tím zařízením, tak je nativní kód a přímý přístup k systémovým frameworkům jednotlivých platforem výhodou. Myslím tím třeba spolehlivé odesílání dat v offline, práce se senzory a systémovými frameworky, ale i multithreading atd. Nejde (primárně) o programovací jazyk, ale znalost platformy a systémových frameworků.
Use cases pro multiplatformí aplikace určitě jsou, nicméně ten co popisuje článek spočívá hlavně v tom že sehnat lidi kvalitní nativní vývoj je (zejména na iOS k montážní lince na aplikace) těžké, a kotlinistů je přirozeně víc. Navíc vývoj je (z počátku) rychlejší když se agilně neřeší detaily a specifikace je jak to tudle Karel (zde ideálně pro obě platformy najednou) naprogramoval. Nic hlubšího nebo futurističtějšího bych za tím nehledal.
PS: to že si Flutter dělá UI sám je i nevýhoda: feel těch aplikací bude vždycky nenativní, a jako všechny tyhle frameworky bude za nativním vývojem o krok pozadu a na milost toho až to někdo převede na nejmenšího společného jmenovatele mezi podporovanými platformami a naportuje - jak u systémových věcí, tak a zejména u SDK třetích stran. Jsou nepochybně use cases kde to nevadí, resp. výhody multiplatformního vývoje převáží.