¿Qué idioma debo usar para hacer una biblioteca multiplataforma? [cerrado]

10

Quiero construir una biblioteca de análisis SyncML ( sin interfaz de usuario ) que debería poder generar mensajes basados ​​en la información proporcionada por la aplicación de host, alimentada por los métodos de la biblioteca. Además, la biblioteca debe poder hacer devoluciones de llamada a los métodos en la aplicación host.

Quiero poder compilar esto y tenerlo disponible en tantas plataformas como sea posible: Windows, Windows Phone 7 OS, OSX, iOS, Linux, Android, BlackBerry. Básicamente tantas plataformas como sea posible.

La prioridad es tener esto disponible en dispositivos móviles.

Preguntas:

  1. ¿Qué configuración debo usar? (lenguajes de programación, compiladores, IDE, etc.)
  2. ¿Cómo compilaría esta biblioteca para estas diferentes plataformas y cómo me conectaría a ella?
  3. ¿Alguna otra información? por ejemplo, artículos que cubren el tema del desarrollo multiplataforma?

No he hecho este tipo de proyecto multiplataforma antes, por lo que cualquier información disponible para orientarme sería bienvenida.

Yo mismo, tengo experiencia en C # /. NET y Objective-C.

Andrei
fuente

Respuestas:

8

El uso de la plataforma Java / JVM sería la opción obvia: tiene la cobertura multiplataforma más amplia de cualquier lenguaje, y si tiene un fondo C # /. Net, los conceptos serán muy familiares.

Tenga en cuenta que no tiene que usar el lenguaje Java para obtener los beneficios de la plataforma Java; de hecho, hoy en día, si comenzara un proyecto desde cero, probablemente recomendaría uno de los siguientes:

  • Scala : si desea un lenguaje potente, estáticamente tipado, multi-paradigmático con un gran rendimiento en la JVM. Podría adaptarse a usted si tiene un fondo C #.
  • Clojure : si prefiere una programación funcional, como lenguajes dinámicos y disfruta de vivir a la vanguardia. Clojure tiene capacidades de concurrencia realmente excelentes que pueden ser atractivas: vale la pena ver el video vinculado para obtener algunas ideas profundas.
  • Groovy : si desea un lenguaje de scripting orientado a objetos dinámico simple pero efectivo que le resulte muy familiar a los desarrolladores de C # / Java.

Todos estos idiomas obtienen todos los beneficios de estar en la JVM (fantástico compilador JIT, recolección de basura muy efectiva, un gran conjunto de bibliotecas) pero son lenguajes mucho más productivos para trabajar.

Por cierto, ya hay una biblioteca SyncML de código abierto disponible en Java llamada Funambol . No estoy seguro de hasta qué punto esto es útil directamente para usted, pero es un ejemplo del hecho de que generalmente hay una biblioteca Java de código abierto para casi cualquier cosa .......

Reflexiones sobre otras opciones:

  • C / C ++ ciertamente puede funcionar multiplataforma, pero requiere una recompilación (y pruebas posteriores) en código nativo para cada plataforma. Con lenguajes JVM que no son necesarios ya que el bytecode compilado es portátil. A menos que necesite absolutamente C / C ++ para el rendimiento o el acceso a las funciones de hardware sin formato, creo que es un dolor de cabeza que debe evitar.
  • C # en forma de Mono podría funcionar (atestigüe el éxito de Unity como una biblioteca multiplataforma, por ejemplo), pero no está en ninguna parte del ecosistema JVM en términos de madurez, disponibilidad de biblioteca o incluso rendimiento bruto. Además, nunca será 100% compatible con Microsoft .Net ya que .Net tiene características específicas de Windows que son una pesadilla para la portabilidad. Aún así, vale la pena considerar si está decidido a seguir con C #.
  • Javascript podría ser una opción externa si está interesado en usar la biblioteca tanto en el lado del cliente como del servidor.
mikera
fuente
1
Gracias por la gran respuesta. ¿Sabes qué tan bien se puede portar Java al iPhone, en forma de biblioteca o marco? Además, no puedo usar Funambol, el punto es hacer mi propia biblioteca.
Andrei
2
Entiendo que Apple está siendo bastante restrictiva sobre Java en el iPhone en la actualidad. Espero que la presión del mercado haga que suceda más en el futuro: este artículo, theserverside.com/discussions/thread.tss?thread_id=63072, por ejemplo, habla sobre Oracle que demuestra una aplicación basada en Java en el iPod Touch.
mikera el
+1 por educarme en no necesitar usar Java per se, pero uno puede usar Scala, Clojure, Groovy. Respuesta fascinante.
Anthony
3

Es posible que desee probar Java: Java Runtime Environment (la máquina virtual) es multiplataforma, Java se puede usar en dispositivos móviles con Android (o con Java ME) y .NET es muy similar.

malejpavouk
fuente
3

Esta no es una opción sino muchas. Si bien es tentador encontrar algo que vaya a todas partes, no siempre es la mejor manera de hacerlo.

  1. Por ejemplo, si bien es posible exprimir un código C ++ en la plataforma móvil de Windows, cualquier cosa .NET siempre será más fácil aquí que su contraparte desde el punto de vista del soporte.

  2. Del mismo modo, uno debe hacer una elección importante si desea que sea nativo o en tiempo de ejecución y ¿está estrictamente limitado a Web centrado o más poderoso genérico? Por ejemplo, Adobe Runtime es más omnipresente, pero se limitará a lo que puede hacer en comparación con los lenguajes de programación principales.

  3. Lo más importante, supongo, es el tipo y el nivel de GUI que desea construir.

Ahora llegando a las opciones más prometedoras.

a. Para Symbian, Blackberry, Android, BREW y Bada (samsung) Java / J2ME es la forma más común. Sin embargo, puede ser mejor con C / C ++ en muchos casos, para cosas centrales nativas en alguna plataforma.

si. Para Windows .NET con cualquier idioma compatible sería bueno.

C. Para iOS: no hay otra opción que el Objetivo C. Esto NO es mucho C ++, así que no lo contaré como un objetivo.

Aquí hay una referencia wiki que muestra un conjunto de todas las plataformas que muestra todas las opciones y dónde se aplican.

Gracias a su pregunta, aprendí del enlace wiki anterior que ahora hay SDK, que intentan resolver el problema anterior. Los dos que más se acercan son:

  1. Marmalade: http://www.madewithmarmalade.com/marmalade/supported-platforms, este soporte es interesante para casi todas las plataformas. Se trata de agregar Windows para hacer un círculo completo.

  2. Código de partícula: http://www.particlecode.com/

Todavía no los he usado, pero suena interesante.

Dipan Mehta
fuente
Android proporciona Bada y iOS permite C ++.
Klaim
3

.NET apenas está disponible en muchas plataformas, y Objective-C es aún peor, además .NET es un poco lento y ObjC básicamente no tiene soporte fuera de Apple. C como lenguaje básicamente no vale la pena considerarlo a menos que algún factor externo lo haga usarlo.

El único resultado de lenguaje viable es C ++.

DeadMG
fuente
2
¿Sabes algo sobre las ventajas de usar el proyecto Mono en combinación con C #? ¿Por qué no vale la pena considerar C?
Andrei
2
@Andrei: Hasta donde yo sé, Mono no es la imagen de disponibilidad en todas las plataformas que has enumerado. Y no vale la pena considerar C porque es como C ++, pero con todas las buenas características cortadas, lo que obviamente es una estupidez si puedes usar C ++.
DeadMG
44
@DeadMG: Me encantaría verte debatir ese punto con Linus Torvalds: thread.gmane.org/gmane.comp.version-control.git/57643/… , sin decir que debe estar 100% en lo cierto, solo me gusta mirar la guerra de llamas.
Michael Borgwardt
2
@DeadMG C no es C ++ con las buenas características cortadas; C ++ es C con características horribles añadidas. No hay nada malo con C.
rightfold
2
@WTP: pidió una recomendación, no la historia de mi vida. El hecho simple es que, independientemente de lo que piense de las características adicionales de C ++, el hecho es que existen y hacen que C ++ - solo el código sea accesible, lo cual es una ventaja, y C no es nada que C ++ no sea - lo contrario no es cierto. Cuando usa C ++ sobre C, solo agrega opciones. Por lo tanto, por definición, C ++ es un lenguaje superior, y siempre puede elegir no usar las funciones de C ++. Lo cual sería una locura, pero puedes.
DeadMG