software que programas programar programa plataformas para necesito multiplataforma moviles movil gratis desarrollo crear aplicaciones java .net linux mono cross-platform

que - ¿Es.NET/Mono o Java la mejor opción para el desarrollo multiplataforma?



que necesito para programar en android (15)

¿Cuánto menos bibliotecas hay para Mono que para Java?

Me falta la visión general de ambas alternativas, pero tengo bastante libertad de elección para mi próximo proyecto. Estoy buscando hechos técnicos difíciles en las áreas de

  • rendimiento (por ejemplo, me dijeron que Java es bueno para enhebrar, y he oído que la optimización del código de tiempo de ejecución se ha vuelto muy buena recientemente para .NET)
  • la portabilidad del mundo real (está destinada a ser portátil, ¿qué hay de Catch-22 para cada uno?)
  • disponibilidad de herramienta ( CI , automatización de compilación, depuración, IDE)

Estoy buscando especialmente lo que realmente experimentaste en tu propio trabajo en lugar de las cosas que pude buscar en Google. Mi aplicación sería un servicio de back-end que procesa grandes cantidades de datos de series de tiempo.

Mi principal plataforma de destino sería Linux.

Editar: para formular mi pregunta de manera más adecuada, estoy interesado en todo el paquete (bibliotecas de terceros, etc.), no solo en el idioma. Para las bibliotecas, eso probablemente se reduce a la pregunta "¿cuánto menos bibliotecas hay para Mono que para Java"?

Para su información, desde entonces he elegido Java para este proyecto, ya que parecía más desgastado por el lado de la portabilidad y ha estado presente por un tiempo en sistemas más antiguos, también. Estoy un poco triste por eso, porque tengo mucha curiosidad por C # y me encantaría haber hecho un proyecto grande en él, pero tal vez la próxima vez. Gracias por todos los consejos.


Bueno ... Java es en realidad más portátil. Mono no está implementado en todas partes, y va a la zaga de la implementación de Microsoft significativamente. El Java SDK parece mantenerse en una mejor sincronización en todas las plataformas (y funciona en más plataformas).

También diría que Java tiene más disponibilidad de herramientas en todas esas plataformas, aunque hay muchas herramientas disponibles para .NET en plataformas Windows.

Actualización para 2014

Sigo teniendo esta opinión en 2014. Sin embargo, calificaré esto diciendo que ahora estoy empezando a prestarle atención a Mono después de un largo tiempo sin preocuparme realmente, por lo que puede haber mejoras en el tiempo de ejecución de Mono (o ecosistema). ) que no me han informado. AFAIK, todavía no hay soporte para WPF, WCF, WF, WIF. Mono puede funcionar en iOS, pero que yo sepa, el tiempo de ejecución de Java aún se ejecuta en muchas más plataformas que Mono. Además, Mono está empezando a ver algunas herramientas muy mejoradas (Xamarin), y Microsoft parece tener un tipo de actitud y voluntad mucho más multiplataforma de trabajar con los socios para hacerlos complementarios, en lugar de competitivos (por ejemplo, Mono será una parte bastante importante del próximo panorama de OWIN / Helios ASP.NET). Sospecho que en los próximos años las diferencias en la portabilidad disminuirán rápidamente, especialmente después de que .NET sea de código abierto.


Creo que la pregunta está formulada incorrectamente. C # vs. Java es mucho menos interesante en términos de uso multiplataforma que (a) qué plataformas necesita soportar, y (b) considerando las bibliotecas principales y las bibliotecas de terceros disponibles. El lenguaje es casi la parte menos importante del proceso de toma de decisiones.


Creo que la respuesta es "depende". Java se ejecuta en casi cualquier cosa, pero .NET / Mono son (en mi humilde opinión) un mejor marco para el escritorio. Así que supongo que la respuesta realmente depende de qué plataformas planee orientar.


De hecho, me desarrollo en .NET, ejecuto todas mis pruebas primero en Mono y luego en Windows. De esa manera sé que mis aplicaciones son multiplataforma. Lo he hecho con mucho éxito en las aplicaciones ASP.NET y Winforms.

No estoy seguro de que algunas personas tengan la impresión de que Mono es tan horrible, pero ciertamente ha hecho su trabajo en mis casos y opiniones. Es cierto que tendrán un poco de retraso en los últimos y mejores inventos en .NET. mundo, pero hasta ahora, .NET 2.0 en Windows y Linux es muy sólido para mí.

Tenga en cuenta que obviamente hay muchas peculiaridades en esto, pero la mayoría proviene de asegurarse de que está escribiendo código portátil. Si bien los marcos hacen un excelente trabajo para abstraer el sistema operativo en el que se está ejecutando, a las cosas pequeñas como la sensibilidad de las mayúsculas y minúsculas de Linux en rutas y nombres de archivos les lleva un tiempo acostumbrarse, como lo hacen las cosas como los permisos.

.NET es definitivamente muy multiplataforma debido a Mono basado en mis experiencias hasta ahora.


Java en realidad es tan multiplataforma como todos dicen que es. Hay una implementación de JVM para casi cualquier sistema operativo convencional (incluso Mac OS X, por fin), y todos funcionan realmente bien. Y hay toneladas de herramientas de código abierto que son simplemente multiplataforma.

La única pega es que hay ciertas operaciones nativas que no se pueden hacer en Java sin escribir algunas DLL o SO. Es muy raro que estos entren en práctica. Sin embargo, en todos esos casos, he podido sortearlo generando procesos nativos y raspando los resultados.


Java es una mejor opción para el desarrollo multiplataforma.

  • Actuación. Java y .Net tienen un nivel de rendimiento similar debido a la máquina virtual, pero JVM normalmente tiene un mejor rendimiento debido a la optimización de años y años.

  • Biblioteca. Aunque esto depende de su tarea, Java tiene muchas más bibliotecas de código abierto o de terceros disponibles allí. Para aplicaciones de servidor, J2EE, Spring, Struts, etc. Para GUI, aunque .Net proporciona API de capa de Win32, pero esto causa problemas de compatibilidad. Java tiene Swing, SWT, AWT, etc. Funciona en la mayoría de los casos.

  • Compatibilidad. Estos son los temas clave que deben tenerse en cuenta al desarrollar el programa multiplataforma. Dos problemas: primero, compatibilidad de plataforma. Java todavía gana, ya que JDK está bien mantenido por la única y original compañía Sun. Mono no es mantenido por MS, por lo que aún no tiene garantía de compatibilidad con la actualización. 2. Compatibilidad hacia atrás. Sun mantiene una buena reputación por su compatibilidad con versiones anteriores, aunque a veces esto parece demasiado rígido y ralentiza el ritmo.

  • Herramientas. Java tiene buenos IDE multiplataforma. Netbeans, Eclipse, etc. La mayoría de ellos son gratuitos. VS Studio es bueno, pero solo en Windows, y no cuesta un poco. Ambos proporcionan buenas pruebas unitarias, errores, perfiles, etc.

Por lo tanto, sugeriría que Java es una mejor opción. Como vitrina, hay algunas famosas aplicaciones multiplataforma de escritorio desarrolladas por Java: Vuze, Limewire, BlogBridge, CrossFTP, sin mencionar esos IDE. En cuanto a .Net, tengo conocimiento limitado sobre tales aplicaciones de éxito.


Java fue diseñado para ser multiplataforma; C # /. Net no lo era. En caso de duda, use la herramienta que fue diseñada para su propósito.

EDITAR: en justicia, .NET fue diseñado para trabajar en entornos integrados / PC / Servidor, por lo que es SORT de plataforma cruzada. Pero no fue diseñado para Linux.


Mono hace un mejor trabajo en la orientación de las plataformas que quiero admitir. Aparte de eso, es todo subjetivo.

Comparto el código C # en las siguientes plataformas: - iOS (iPhone / iPad) - Android - La Web (HTML5) - Mac (OS X) - Linux - Windows

Podría compartirlo aún más lugares: - Windows Phone 7 - Wii - Xbox - PS3 - etc.

Lo más importante es iOS, ya que MonoTouch funciona fantásticamente. No sé de ninguna buena manera de apuntar iOS con Java. No puede orientar Windows Phone 7 con Java, por lo que diría que los días en que Java es mejor para los dispositivos móviles han quedado atrás.

El mayor factor para mí es la productividad personal (y la felicidad). C # es un lenguaje que está un año por delante de Java en mi humilde opinión y el .NET framework es un placer de usar. La mayor parte de lo que se está agregando en Java 7 y Java 8 ha estado en C # durante años. Sin embargo, los lenguajes JVM como Scala y Clojure (ambos disponibles en CLR) son bastante agradables.

Veo a Mono como una plataforma por derecho propio (una excelente) y trato a .NET como la implementación de Microsoft de Mono en Windows. Esto significa que primero desarrollo y pruebo en Mono. Esto funciona maravillosamente.

Si Java y .NET (Mono, por ejemplo) fueran proyectos de Código Abierto sin respaldo corporativo, elegiría Mono sobre Java cada vez. Creo que es solo una mejor plataforma.

Tanto .NET / Mono como JVM son excelentes opciones, aunque yo personalmente usaría algún otro lenguaje además de Java en JVM.

Mi opinión sobre algunos de los otros comentarios:

Problema: rendimiento.

** Respuesta: tanto la JVM como la CLR funcionan mejor de lo que los detractores dicen que lo hacen. Yo diría que la JVM tiene un mejor rendimiento. Mono es generalmente más lento que .NET (aunque no siempre).

Personalmente, tomaría ASP.NET MVC sobre J2EE en cualquier momento como desarrollador y como usuario final. El soporte para Google Native Client también es genial. Además, sé que se supone que el bajo rendimiento de la GUI para las aplicaciones de escritorio de Java es algo del pasado, pero sigo encontrando los lentos. Por otra parte, podría decir lo mismo de WPF. GTK # es bastante rápido, así que no hay ninguna razón por la que tengan que ser lentos.

Problema: Java tiene un ecosistema de bibliotecas más grande disponible.

Respuesta: Probablemente cierto, pero no es un problema en la práctica.

Prácticamente todas las bibliotecas de Java (incluido el JDK) se ejecutan perfectamente en .NET / Mono gracias a IKVM.NET . Esta pieza de tecnología es una verdadera maravilla. La integración es increíble; puede usar una biblioteca Java como si fuera nativa. Sin embargo, solo he tenido que usar bibliotecas Java en una aplicación .NET. El ecosistema .NET / Mono generalmente ofrece más de lo que necesito.

Problema: Java tiene un mejor soporte de herramientas (más amplio)

Respuesta: No en Windows. De lo contrario, estoy de acuerdo. MonoDevelop es bueno sin embargo.

Quiero dar un saludo a MonoDevelop ; es una joya MonoDevelop integra la mayoría de las herramientas que deseo utilizar, incluida la terminación de código (intellisense), integración de Git / Subversion, compatibilidad con pruebas unitarias, integración de SQL, depuración, refactorización fácil y navegación de conjunto con descompilación sobre la marcha. Es maravilloso usar el mismo entorno para todo, desde la web del servidor hasta las aplicaciones móviles.

Problema: compatibilidad en todas las plataformas.

Respuesta: Mono es una base de código única en todas las plataformas, incluido Windows.

Desarrolla primero para Mono y despliega en .NET en Windows si quieres. Si compara .NET de MS a Java, entonces Java tiene la ventaja en términos de coherencia entre plataformas. Ver la siguiente respuesta ...

Problema: Mono lags .NET.

Respuesta: No, no. En mi humilde opinión, esta es una declaración a menudo declarada pero incorrecta.

La distribución Mono de Xamarin viene con C #, VB.NET, F #, IronPython, IronRuby, y creo que tal vez Boo fuera de la caja. El compilador Mono C # está completamente actualizado con MS. El compilador Mono VB.NET se queda atrás de la versión MS. Los otros compiladores son los mismos en ambas plataformas (al igual que otros lenguajes .NET como Nemerle, Boo y Phalanger (PHP)).

Mono se envía con una gran cantidad del código escrito de Microsoft, incluidos Dynamic Language Runtime (DLR), Managed Extensibility Framework (MEF), F # y ASP.NET MVC. Debido a que Razor no es de código abierto, Mono actualmente se envía con MVC2, pero MVC3 funciona perfectamente con Mono.

La plataforma central Mono ha mantenido el ritmo con .NET o muchos años y la compatibilidad es impresionante. Puede usar el lenguaje completo C # 4.0 e incluso algunas características C # 5.0 hoy. De hecho, Mono a menudo lidera .NET de muchas maneras.

Mono implementa partes de la especificación CLR que incluso Microsoft no admite (como matrices de 64 bits). Una de las nuevas tecnologías más emocionantes en el mundo de .NET es Rosylyn . Mono ha ofrecido el compilador C # como un servicio por muchos años. Algo de lo que Rosylyn ofrece también está disponible a través de NRefractory . Un ejemplo de lo que Mono todavía tiene por delante serían las instrucciones de SIMD para acelerar el rendimiento de los juegos.

Microsoft ofrece una serie de productos sobre .NET que no están disponibles en Mono, que es la idea errónea de que viene el retraso de Mono. Windows Presentation Foundation (WPF), Entity Framework (EF), WCF (Windows Communication Foundation) son ejemplos de productos que no funcionan, o tienen poco soporte, en Mono. La solución obvia es utilizar alternativas multiplataforma como GTK #, NHibernate y ServiceStack en su lugar.

Problema: Microsoft es malvado.

Respuesta: Verdadero. Y qué.

Muchas personas ofrecen las siguientes razones para evitar el uso de Mono:

1) No debe usar Mono porque se debe evitar la tecnología de Microsoft

2) Mono chupa porque no le permite usar todas las tecnologías que Microsoft ofrece

Para mí, está claro que estas declaraciones son incompatibles. Rechazo la primera declaración pero omitiré ese argumento aquí. La segunda afirmación es cierta para todas las alternativas de .NET.

La JVM es una gran plataforma y la explosión de los lenguajes JVM es increíble. Usa lo que te hace feliz. Por ahora, eso a menudo es .NET / Mono para mí.


Para agregar un poco más a la conversación, Java es más portátil si te quedas con una versión atrás: Java 5 todavía tiene muchas características excelentes, por lo que puedes esperar a Java 6 y aún tener un amplio rango en términos de lenguaje y bibliotecas para desarrollar con. La Mac es la plataforma principal que puede tomar algún tiempo para alcanzar la última versión de Java.

Java también tiene un cuerpo de estándares excelente que crece de forma inteligente la plataforma en función de las aportaciones de muchas compañías diferentes. Esta es una característica que a menudo se pasa por alto, pero mantiene incluso las nuevas características que funcionan bien en múltiples plataformas y proporciona un amplio rango en el soporte de la biblioteca para algunas cosas esotéricas (como extensiones opcionales).


Si bien Mono tiene su cuota de problemas , creo que tiene una mejor historia de compatibilidad multiplataforma, especialmente si usted depende de la invocación de la plataforma nativa.

No hay suficientes palabras en para enfatizar cuánto más suave es obtener algo nativo llamado y ejecutado en .NET / Mono en (al menos en mi experiencia 3 ...) múltiples plataformas frente al esfuerzo equivalente de Java.


También hay otras opciones de idiomas. Me he aficionado bastante a Python, que funciona bien en Windows, Linux y Mac, y tiene un amplio conjunto de bibliotecas.


Voy a decir Java también. Si lo observa en términos de madurez, Sun (y otros) han invertido mucho más tiempo y esfuerzo en hacer que la JVM funcione en plataformas que no son de Windows.

Por el contrario, Mono es definitivamente un ciudadano de segunda clase en el ecosistema .NET.

Dependiendo de quiénes sean sus clientes objetivo, también puede encontrar que existe una reacción real contra el uso de Mono: ¿Novell ofrece el mismo tipo de soporte de proveedor para Mono que usted obtendría para Java o .NET en Windows?

Si tu objetivo principal era alojar tu servicio en Windows, tendría sentido considerar esta opción, pero dado que estás apuntando principalmente a Linux, para mí es una especie de obviedad.


Yo votaría que Java sea más portátil que C #. Java definitivamente también tiene un conjunto muy rico de bibliotecas estándar. También existe un amplio conjunto de bibliotecas de código abierto de terceros, como las proporcionadas por el proyecto de Yakarta ( http://jakarta.apache.org/ ).

Todos los sospechosos habituales existen para CI, pruebas unitarias, etc. también. El soporte IDE multiplataforma también es muy bueno con los gustos de Eclipse, Netbeans, IntelliJ IDEA, etc.


Gatorhall , ¿tienes algunos datos para respaldar?

Actuación. Java y .Net tienen un nivel de rendimiento similar debido a la máquina virtual, pero JVM normalmente tiene un mejor rendimiento debido a la optimización de años y años.

Antecedentes: soy un tipo de Windows desde Windows 3.1 y actualmente soy un usuario de Linux (aún ejecuto Windows 7, excelente sistema operativo, en una VM para Visual Studio 2010 y otras herramientas).

El punto: yo y muchos usuarios (Windows, Linux, etc.) lo sé, pueden estar en desacuerdo. Java tiende a funcionar más lento incluso en una aplicación de escritorio de Linux, el rendimiento de ASP.NET es más rápido que el servidor de Java páginas muchas veces. Algunos pueden estar de acuerdo en que incluso el PHP no compilado funciona mejor en varios escenarios.

Java es más multiplataforma? No tengo dudas sobre esto (la historia lo respalda), pero más rápido (sin decir que .NET) no es tan cierto y me gustaría ver algunos puntos de referencia reales.