Jakiego języka należy używać do tworzenia biblioteki wieloplatformowej? [Zamknięte]

10

Chcę zbudować bibliotekę parsowania SyncML ( bez interfejsu użytkownika ), która powinna być w stanie budować komunikaty na podstawie informacji dostarczonych przez aplikację hosta, dostarczanych metodami biblioteki. Ponadto biblioteka powinna mieć możliwość wykonywania wywołań zwrotnych do metod w aplikacji hosta.

Chcę móc to skompilować i udostępnić na jak największej liczbie platform: Windows, Windows Phone 7 OS, OSX, iOS, Linux, Android, BlackBerry. Zasadniczo jak najwięcej platform, jak to możliwe.

Priorytetem jest mieć to na urządzeniach mobilnych.

Pytania:

  1. Jakiej konfiguracji powinienem użyć? (języki programowania, kompilatory, IDE itp.)
  2. Jak skompilować tę bibliotekę dla różnych platform i jak się z nią połączyć?
  3. Wszelkie inne informacje? np. artykuły na temat rozwoju międzyplatformowego?

Nigdy wcześniej nie realizowałem tego rodzaju wieloplatformowego projektu, więc wszelkie dostępne informacje, które skierowałyby mnie w dobrym kierunku, byłyby mile widziane.

Ja sam mam doświadczenie w C # / .NET i Objective-C.

Andrei
źródło

Odpowiedzi:

8

Korzystanie z platformy Java / JVM byłoby oczywistym wyborem - ma ona jak najszerszy zasięg międzyplatformowy w dowolnym języku, a jeśli masz C # /. Tło sieciowe będzie dobrze znane.

Zauważ, że nie musisz używać języka Java, aby zyskać korzyści płynące z platformy Java - w rzeczywistości w dzisiejszych czasach, jeśli rozpoczynając projekt od zera, prawdopodobnie zaleciłbym jedno z poniższych:

  • Scala - jeśli potrzebujesz potężnego, statycznie wpisanego, wieloparadowego języka z doskonałą wydajnością na JVM. Może ci odpowiadać, jeśli masz tło w języku C #.
  • Clojure - jeśli wolisz programowanie funkcjonalne, takie jak dynamiczne języki i lubisz żyć w czołówce. Clojure ma naprawdę doskonałe możliwości współbieżności, które mogą być atrakcyjne - połączone wideo jest warte oglądania głębokich wglądów.
  • Groovy - jeśli potrzebujesz prostego, ale skutecznego, dynamicznego zorientowanego obiektowo języka skryptowego, który będzie dobrze znany programistom C # / Java.

Wszystkie te języki mają wszystkie zalety bycia w JVM (fantastyczny kompilator JIT, bardzo efektywne zbieranie śmieci, ogromny zestaw bibliotek), ale są znacznie bardziej produktywnymi językami do pracy.

Nawiasem mówiąc, w Javie jest już dostępna biblioteka SyncML typu open source o nazwie Funambol . Nie jestem pewien, w jakim stopniu jest to przydatne bezpośrednio dla Ciebie, ale jest to przykład tego, że zwykle istnieje biblioteka Java typu open source do prawie wszystkiego .......

Myśli o innych opcjach:

  • C / C ++ z pewnością może działać na różnych platformach, ale wymaga ponownej kompilacji (a następnie testowania) w kodzie macierzystym dla każdej platformy. W przypadku języków JVM nie jest to konieczne, ponieważ sam skompilowany kod bajtowy jest przenośny. Chyba że absolutnie potrzebujesz C / C ++ do wydajności lub dostępu do surowych funkcji sprzętowych, myślę, że powinieneś unikać bólu głowy.
  • C # w postaci Mono może działać (na przykład sukces Unity jako biblioteki wieloplatformowej), ale nigdzie nie jest to ekosystem JVM pod względem dojrzałości, dostępności biblioteki, a nawet surowej wydajności. Nigdy też nie będzie w 100% kompatybilny z Microsoft .Net, ponieważ .Net ma specyficzne dla systemu Windows funkcje, które są koszmarem dla przenośności. Jednak warto rozważyć, czy jesteś zdecydowany trzymać się C #.
  • JavaScript może być opcją zewnętrzną, jeśli chcesz korzystać z biblioteki zarówno po stronie klienta, jak i serwera.
mikera
źródło
1
Dzięki za świetną odpowiedź. Czy wiesz, jak dobrze można przenieść Javę na iPhone'a w formie biblioteki lub frameworka? Nie mogę też korzystać z Funambol, chodzi o to, żeby stworzyć własną bibliotekę.
Andrei,
2
Rozumiem, że Apple ma obecnie dość restrykcyjne podejście do Javy na iPhonie. Spodziewam się, że presja rynku spowoduje, że stanie się to bardziej w przyszłości - w tym artykule theserverside.com/discussions/thread.tss?thread_id=63072 na przykład mówi o tym, jak Oracle demonstruje aplikację opartą na Javie w iPodzie Touch.
mikera
+1 za pouczenie mnie o tym, że nie muszę używać Javy jako takiej, ale można użyć Scali, Clojure, Groovy. Fascynująca odpowiedź.
Anthony
3

Możesz wypróbować Java - Java Runtime Environment (maszyna wirtualna) jest wieloplatformowa, Java może być używana na urządzeniach mobilnych z Androidem (lub Java ME), a .NET jest bardzo podobny.

malejpavouk
źródło
3

To nie jest jeden wybór, ale wiele. Choć kuszące jest znalezienie jednej rzeczy, która wszędzie się pojawia, nie zawsze jest to najlepszy sposób.

  1. Na przykład, chociaż możliwe jest ściśnięcie kodu C ++ na platformie Windows Mobile, wszystko .NET zawsze będzie tutaj łatwiejsze niż jego odpowiednik z punktu widzenia wsparcia.

  2. Podobnie, trzeba dokonać poważnego wyboru, czy chcesz, aby był on natywny, czy w czasie wykonywania i czy jesteś ściśle ograniczony do sieci lub bardziej ogólnej mocy generycznej? Na przykład Adobe Runtime jest bardziej wszechobecny, ale ograniczy się do tego, co możesz zrobić w porównaniu z podstawowymi językami programowania.

  3. Najważniejsze, jak sądzę, to rodzaj i poziom GUI, który chcesz zbudować.

Teraz nadchodzą najbardziej obiecujące wybory.

za. W systemach Symbian, Blackberry, Android, BREW i Bada (samsung) Java / J2ME jest najczęstszym sposobem. Chociaż w wielu przypadkach możesz być lepszy w C / C ++, jeśli chodzi o rdzenne rzeczy na niektórych platformach.

b. Dla Windows .NET z dowolnym obsługiwanym językiem byłoby dobrze.

do. Na iOS - nie ma innego wyboru niż Cel C. To NIE jest bardzo C ++, więc nie liczę go jako celu

Oto odniesienie do wiki, które pokazuje zestaw wszystkich platform, który pokazuje wszystkie opcje i ich zastosowania.

Dzięki Twojemu pytaniu dowiedziałem się z powyższego linku wiki, że istnieją teraz zestawy SDK, które próbują rozwiązać powyższy problem. Dwie najbliższe to:

  1. Marmolada: http://www.madewithmarmalade.com/marmalade/supported-platforms to ciekawie obsługuje prawie wszystkie platformy. Windows polega na dodaniu, aby stworzyć pełny krąg.

  2. Kod cząstkowy: http://www.particlecode.com/

Jeszcze ich nie używałem, ale brzmi interesująco.

Dipan Mehta
źródło
Android zapewnia Bada, a iOS zezwala na C ++.
Klaim
3

.NET jest trudno dostępny na wielu platformach, a Objective-C jest jeszcze gorszy, a ponadto .NET jest dość powolny, a ObjC w zasadzie nie ma wsparcia poza Apple. C jako język w zasadzie nie jest nawet wart rozważenia, chyba że jakiś czynnik zewnętrzny zmusza cię do jego używania.

Jedynym możliwym do uzyskania językiem jest C ++.

DeadMG
źródło
2
Czy wiesz coś o zaletach używania projektu Mono w połączeniu z C #? Dlaczego C nie jest warte rozważenia?
Andrei
2
@Andrei: O ile mi wiadomo, Mono nie jest obrazem dostępności na wszystkich wymienionych platformach. A C nie jest warte rozważenia, ponieważ jest tak jak C ++, ale z wszystkimi dobrymi funkcjami, co jest oczywiście głupotą, jeśli możesz używać C ++.
DeadMG
4
@DeadMG: Chciałbym zobaczyć, jak dyskutujesz na ten temat z Linusem Torvaldsem: thread.gmane.org/gmane.comp.version-control.git/57643/… - nie mówiąc, że musi mieć 100% racji, po prostu lubię oglądać flamewar.
Michael Borgwardt
2
@DeadMG C nie jest C ++ z dobrymi funkcjami; C ++ to C z dodanymi okropnymi funkcjami. Nie ma nic złego w C.
poprawnie
2
@WTP: Poprosił o rekomendację, a nie historię mojego życia. Prostym faktem jest to, że cokolwiek myślisz o dodatkowych funkcjach C ++, faktem jest, że istnieją i sprawiają, że C ++ - dostępny jest tylko kod, co jest bonusem, a C nie jest niczym, C ++ nie jest - odwrotność nie jest prawdą. Kiedy używasz C ++ zamiast C, dodajesz tylko opcje. Dlatego też, z definicji, C ++ jest lepszy język, i zawsze można wybrać , aby nie używać C ++ funkcje. Co byłoby szaleństwem, ale możesz.
DeadMG