Quelle langue dois-je utiliser pour créer une bibliothèque multiplateforme? [fermé]

10

Je veux construire une bibliothèque d'analyse SyncML ( pas d'interface utilisateur ) qui devrait pouvoir créer des messages basés sur les informations fournies par l'application hôte, alimentées par les méthodes de la bibliothèque. De plus, la bibliothèque doit pouvoir effectuer des rappels aux méthodes dans l'application hôte.

Je veux pouvoir le compiler et le rendre disponible sur autant de plateformes que possible: Windows, OS Windows Phone 7, OSX, iOS, Linux, Android, BlackBerry. Fondamentalement, autant de plateformes que possible.

La priorité est de l'avoir sur les appareils mobiles.

Des questions:

  1. Quelle configuration dois-je utiliser? (langages de programmation, compilateurs, IDE etc.)
  2. Comment pourrais-je compiler cette bibliothèque pour ces différentes plates-formes et comment pourrais-je m'y connecter?
  3. Une autre info? par exemple, des articles couvrant le sujet du développement multiplateforme?

Je n'ai jamais fait ce genre de projet multiplateforme auparavant, donc toute information disponible pour me mettre dans la bonne direction serait la bienvenue.

Moi-même, j'ai une formation en C # /. NET et Objective-C.

Andrei
la source

Réponses:

8

L'utilisation de la plate-forme Java / JVM serait le choix évident - elle a la couverture multiplateforme la plus large de tous les langages, et si vous avez un fond C # /. Net, les concepts seront très familiers.

Notez que vous n'avez pas besoin d'utiliser le langage Java pour profiter des avantages de la plate-forme Java - en fait de nos jours, si vous démarrez un projet à partir de zéro, je recommanderais probablement l'un des éléments suivants:

  • Scala - si vous voulez une langue multi-paradigme puissante, de type statique avec de grandes performances sur la JVM. Pourrait vous convenir si vous avez un fond C #.
  • Clojure - si vous préférez la programmation fonctionnelle, comme les langages dynamiques et aimez vivre à la fine pointe. Clojure possède des capacités de concurrence vraiment excellentes qui peuvent être attrayantes - la vidéo liée mérite d'être regardée pour des informations approfondies.
  • Groovy - si vous voulez un langage de script orienté objet dynamique simple mais efficace qui vous semblera très familier aux développeurs C # / Java.

Tous ces langages ont tous les avantages d'être sur la JVM (fantastique compilateur JIT, garbage collection très efficace, un énorme ensemble de bibliothèques) mais sont des langages beaucoup plus productifs pour travailler.

Soit dit en passant, il existe déjà une bibliothèque open source SyncML disponible en Java appelée Funambol . Je ne sais pas dans quelle mesure cela vous est utile directement, mais c'est un exemple du fait qu'il existe généralement une bibliothèque Java open source pour à peu près n'importe quoi .......

Réflexions sur d'autres options:

  • C / C ++ peut certainement fonctionner sur plusieurs plates-formes, mais il nécessite une recompilation (et des tests ultérieurs) en code natif pour chaque plate-forme. Avec les langages JVM, ce n'est pas nécessaire car le bytecode compilé lui-même est portable. À moins que vous n'ayez absolument besoin de C / C ++ pour les performances ou l'accès aux fonctionnalités matérielles brutes, je pense que c'est un casse-tête que vous devriez éviter.
  • Le C # sous la forme de Mono pourrait fonctionner (témoin du succès d' Unity en tant que bibliothèque multiplateforme par exemple), mais ce n'est nulle part l'écosystème JVM en termes de maturité, de disponibilité de bibliothèque ou même de performances brutes. De plus, il ne sera jamais 100% compatible avec Microsoft .Net car .Net a des fonctionnalités spécifiques à Windows qui sont un cauchemar pour la portabilité. Néanmoins, cela vaut la peine d'être considéré si vous êtes déterminé à rester avec C #.
  • Javascript peut être une option extérieure si vous souhaitez utiliser la bibliothèque côté client et côté serveur.
mikera
la source
1
Merci pour la bonne réponse. Savez-vous à quel point on peut porter Java sur l'iPhone, sous la forme d'une bibliothèque ou d'un framework? De plus, je ne peux pas utiliser Funambol, le but est de créer ma propre bibliothèque.
Andrei
2
Je comprends qu'Apple est actuellement assez restrictif à propos de Java sur l'iPhone. Je m'attends à ce que la pression du marché fasse que cela se produise davantage à l'avenir - cet article theserverside.com/discussions/thread.tss?thread_id=63072, par exemple, parle d'Oracle démontrant une application basée sur Java dans l'iPod Touch.
mikera
+1 pour m'avoir appris à ne pas avoir besoin d'utiliser Java en soi, mais on peut utiliser Scala, Clojure, Groovy. Réponse fascinante.
Anthony
3

Vous voudrez peut-être essayer Java - Java Runtime Environment (la machine virtuelle) est multiplateforme, Java peut être utilisé dans les appareils mobiles avec Android (ou avec Java ME) et .NET est très similaire.

malejpavouk
la source
3

Ce n'est pas un choix mais plusieurs. S'il est tentant de trouver une chose qui va partout, ce n'est pas toujours la meilleure façon de le faire.

  1. Par exemple, bien qu'il soit possible de compresser un code C ++ dans la plate-forme mobile Windows, tout .NET sera toujours plus facile ici que sa contrepartie du point de vue du support.

  2. De même, il faut faire un choix majeur si vous voulez qu'il soit natif ou en cours d'exécution et êtes-vous strictement limité à un Web centric ou à un générique plus puissant? Par exemple, Adobe Runtime est plus omniprésent mais il se limitera à ce que vous pouvez faire par rapport aux langages de programmation de base.

  3. La chose la plus importante, je suppose, est le type et le niveau de GUI que vous souhaitez créer.

Passons maintenant aux choix les plus prometteurs.

une. Pour Symbian, Blackberry, Android, BREW et Bada (samsung), Java / J2ME est le moyen le plus courant. Cependant, vous pourriez être mieux avec C / C ++ dans de nombreux cas, pour les trucs de noyau natifs dans certaines plates-formes.

b. Pour Windows .NET avec n'importe quelle langue prise en charge serait bien.

c. Pour iOS - il n'y a pas d'autre choix que l'objectif C. Ce n'est PAS vraiment du C ++ donc je ne le compterai pas comme un objectif

Voici une référence wiki qui montre l'ensemble de toutes les plateformes qui vous montre toutes les options et où elles s'appliquent.

Grâce à votre question, j'ai appris du lien wiki ci-dessus qu'il existe maintenant des SDK qui tentent de résoudre le problème ci-dessus. Les deux plus proches sont:

  1. Marmalade: http://www.madewithmarmalade.com/marmalade/supported-platforms, cela prend en charge de manière intéressante presque toutes les plates-formes. Windows est sur le point d'être ajouté pour faire un cercle complet.

  2. Code de particules: http://www.particlecode.com/

Je ne les ai pas encore utilisés, mais cela semble un travail intéressant.

Dipan Mehta
la source
Android fournit Bada et iOS autorise C ++.
Klaim
3

.NET est à peine disponible sur de nombreuses plates-formes, et Objective-C est encore pire, et .NET est un peu lent et ObjC n'a fondamentalement aucun support en dehors d'Apple. C en tant que langue ne vaut fondamentalement même pas la peine d'être pris en considération, sauf si un facteur externe vous oblige à l'utiliser.

Le seul langage viable résultant est C ++.

DeadMG
la source
2
Connaissez-vous les avantages de l'utilisation du projet Mono en combinaison avec C #? Pourquoi ne vaut-il pas la peine d'envisager C?
Andrei
2
@Andrei: Pour autant que je sache, Mono n'est guère l'image de la disponibilité sur toutes les plateformes que vous avez répertoriées. Et C ne vaut pas la peine d'être considéré car c'est comme C ++, mais avec toutes les bonnes fonctionnalités coupées, ce qui est évidemment une chose stupide à faire si vous pouvez utiliser C ++.
DeadMG
4
@DeadMG: J'adorerais vous voir débattre de ce point avec Linus Torvalds: thread.gmane.org/gmane.comp.version-control.git/57643/… - sans dire qu'il doit avoir raison à 100%, je tout comme regarder la guerre des flammes.
Michael Borgwardt
2
@DeadMG C n'est pas C ++ avec les bonnes fonctionnalités coupées; C ++ est C avec des fonctionnalités horribles ajoutées. Il n'y a rien de mal avec C.
rightfold
2
@WTP: Il a demandé une recommandation, pas l'histoire de ma vie. Le simple fait est que quoi que vous pensiez des fonctionnalités supplémentaires de C ++, le fait est qu'elles existent et qu'elles rendent C ++ - uniquement du code accessible, ce qui est un bonus, et C n'est rien C ++ n'est pas - l'inverse n'est pas vrai. Lorsque vous utilisez C ++ sur C, vous ajoutez uniquement des choix. Par conséquent, par définition, C ++ est un langage supérieur et vous pouvez toujours choisir de ne pas utiliser les fonctionnalités C ++. Ce serait de la folie, mais vous le pouvez.
DeadMG