Is.NET/Mono ¿o Java es la mejor opción para el desarrollo multiplataforma? [cerrado]


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

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

  • rendimiento (por ejemplo, me han dicho que Java es bueno para el threading, y he oído que la optimización del código en tiempo de ejecución se ha vuelto muy buena recientemente para. NET)
  • mundo real portabilidad (ambos están destinados a ser portátiles, para qué sirve Catch-22 ¿cada uno?)
  • disponibilidad de herramientas ( 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 podría buscar en Google. Mi aplicación sería un servicio de back-end que procesa grandes cantidades de datos de series temporales.

Mi principal plataforma de destino sería Linux.

Editar: Para expresar mi pregunta de manera más adecuada, estoy interesado en todo el paquete (3rd party libraries sucesivamente.), no solo el lenguaje. Para las bibliotecas, que probablemente se reduce a la pregunta "¿cuántas menos bibliotecas hay para Mono que para Java"?


Para su información, desde entonces he elegido Java para este proyecto, porque parecía más battle-worn en el lado de la portabilidad y ha estado alrededor por un tiempo en los sistemas más antiguos, también. Estoy un poco triste por ello, porque soy muy curioso acerca de C# y me encantaría haber hecho algún gran proyecto en él, pero tal vez la próxima vez. Gracias por todo Consejo.

Author: Peter Mortensen, 2008-09-14

15 answers

Bueno....Java es en realidad más portátil. Mono no se implementa en todas partes, y se queda atrás de la implementación de Microsoft significativamente. El SDK de Java parece estar mejor sincronizado entre 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

Todavía mantengo esta opinión en 2014. Obstante, Voy a calificar esto diciendo que estoy empezando a prestar atención a Mono después de un largo tiempo de no preocuparse realmente, por lo que puede haber mejoras en el tiempo de ejecución Mono (o ecosistema) que no he sido consciente de. AFAIK, todavía no hay soporte para WPF, WCF, WF, de WIF. Mono se puede ejecutar en iOS, pero que yo sepa, el tiempo de ejecución de Java todavía se ejecuta en muchas más plataformas que Mono. Además, Mono está empezando a ver algunas herramientas mucho mejores (Xamarin), y Microsoft parece tener mucho más tipo de actitud multiplataforma y voluntad de trabajar con socios para hacerlos complementarios, en lugar de competitivos (por ejemplo, Mono será una parte bastante importante de la próxima OWIN / Helios ASP.NET paisaje). 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.

Actualización para 2018

Mi punto de vista sobre esto está empezando a ir en sentido contrario. Creo que. NET, en general, particularmente con. NET Core, ha comenzado a alcanzar la "paridad de portabilidad" con Java. Hay esfuerzos en marcha para llevar WPF a. NET Core para algunas plataformas, y. NET Core se ejecuta en muchas plataformas ahora. Mono (propiedad de Xamarin, que ahora es propiedad de Microsoft) es un producto más maduro y pulido que nunca, y escribir aplicaciones que funcionan en múltiples plataformas ya no es el dominio de la gnosis profunda de hackery.NET, sino que es un esfuerzo relativamente sencillo. Hay, por supuesto, bibliotecas y servicios y aplicaciones que son solo Windows o solo pueden dirigirse a plataformas específicas, pero lo mismo se puede decir de Java (en términos generales).

Si yo estuviera en los zapatos de la OP en este punto, no puedo pensar en ninguna razón inherente a los lenguajes o pilas de tecnología en sí que me impida elegir.NET para cualquier aplicación a partir de este punto.

 94
Author: Ben Collins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-13 00:31:26

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

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

Podría compartirlo incluso más lugares: - Windows Phone 7 - Wii - XBox - PS3 - sucesivamente.

El biggie es iOS ya que MonoTouch funciona fantásticamente. No conozco ninguna buena manera de apuntar a iOS con Java. No puedes apuntar Windows Phone 7 con Java, por lo que diría que los días en que Java era mejor para móviles han quedado atrás.

Sin embargo, el factor más importante para mí es la productividad personal (y la felicidad). C# como lenguaje está años por delante de Java IMHO y el. NET framework es una alegría de usar. La mayor parte de lo que se está agregando en Java 7 y Java 8 ha estado en C# durante años. Los lenguajes JVM como Scala y Clojure (ambos disponibles en el CLR) son bastante agradables.

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

Si tanto Java como.NET (Mono, digamos) fueran proyectos de Código abierto sin ningún respaldo corporativo, elegiría Mono sobre Java cada vez. Creo que es simplemente una mejor plataforma.

Tanto.NET/Mono como la JVM son excelentes opciones, aunque personalmente usaría algún otro lenguaje que Java en la JVM.

Mi opinión algunos de los otros comentarios:

Cuestión: Rendimiento.

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

Yo personalmente tomaría ASP.NET MVC sobre J2EE cualquier día tanto como desarrollador como usuario final. El soporte para Google Native Client también es bastante bueno. Además, sé que se supone que el mal rendimiento de la interfaz gráfica de usuario para aplicaciones de escritorio Java para ser una cosa del pasado, pero sigo encontrando los lentos. Por otra parte, podría decir lo mismo para WPF. GTK # es bastante rápido, por lo que no hay razón para que sean lentos.

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

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

Prácticamente todas las bibliotecas Java (incluido el JDK) se ejecutan simplemente 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 de Java como era nativo. 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 mejor (más amplio) soporte de herramientas

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

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

Problema: Compatibilidad entre plataformas.

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

Desarrollar para Mono primero y desplegar a . NET en Windows si lo desea. Si compara. NET de MS a Java, entonces Java tiene la ventaja en términos de consistencia entre plataformas. Ver siguiente respuesta...

Problema: Mono lags. NET.

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

La distribución Mono de Xamarin se envía con C#, VB.NET, F#, IronPython, IronRuby, y creo que tal vez Boo fuera de la caja. El compilador Mono de C # está completamente actualizado con MS. Mono VB.NET el compilador retrasa la versión de 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 parte del código escrito de Microsoft, incluido el Tiempo de ejecución del Lenguaje Dinámico (DLR), el Marco de Extensibilidad Administrada (MEF), F# y ASP.NET MVC. Debido a que Razor no es de Código abierto, Mono actualmente viene con MVC2, pero MVC3 funciona en Mono muy bien.

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

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

Microsoft ofrece una serie de productos en la parte superior de.NET que no están disponibles en Mono que es la idea errónea sobre Mono lagging proviene de. Windows Presentation Foundation (WPF), Entity Framework (EF), WCF (Windows Communication Foundation) son ejemplos de productos que no funcionan, o están mal soportados, en Mono. La solución obvia es usar alternativas multiplataforma como GTK#, NHibernate y ServiceStack en su lugar.

Problema: Microsoft es malvado.

Respuesta: Es verdad. 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 apesta porque no te permite usar todas las tecnologías que ofrece Microsoft

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

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

 110
Author: Justin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-28 22:07:30

Realmente desarrollo en.NET, corro todas mis pruebas primero en Mono, y luego en Windows. De esa manera sé que mis aplicaciones son multiplataforma. He hecho esto con mucho éxito en ambos ASP.NET y aplicaciones Winforms.

No estoy muy seguro de dónde algunas personas tienen la impresión de Mono es tan horrible de, pero sin duda ha hecho su trabajo en mis casos y opinions.It es cierto que tendrá un poco de retraso para los últimos y mejores inventos en el mundo. NET, 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 de ellas provienen de asegurarse de que está escribiendo código portátil. Mientras que los frameworks hacen un gran trabajo al abstraer en qué sistema operativo se está ejecutando, pequeñas cosas como la sensibilidad de mayúsculas y minúsculas de Linux en las rutas y nombres de archivos toma un poco de acostumbrarse, al igual que cosas como los permisos.

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

 54
Author: GEOCHET,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-14 19:13:08

Java en realidad es tan multiplataforma como todo el mundo dice que es. Hay una implementación de JVM para casi cualquier sistema operativo convencional (incluso Mac OS X, finalmente), y todos funcionan muy bien. Y hay toneladas de herramientas de código abierto que son igual de multiplataforma.

El único problema es que hay ciertas operaciones nativas que no puedes hacer en Java sin escribir algunas DLL o SOs. Es muy raro que aparezcan en la práctica. En todos esos casos, sin embargo, he sido capaz de esquivarlo generando procesos nativos y raspando los resultados.

 26
Author: jodonnell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-14 19:10:14

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) teniendo en cuenta las bibliotecas centrales y las bibliotecas de terceros disponibles. El lenguaje es casi la parte menos importante del proceso de toma de decisiones.

 18
Author: Brad Wilson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-14 19:02:46

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

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

  • 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 Win32, esto causa problemas de compatibilidad. Java tiene Swing, SWT, AWT, etc. Funciona en la mayoría de los casos.

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

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

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

 15
Author: Gatorhall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-15 22:45:25

He estado haciendo la misma pregunta fuera de tiempo y en mi humilde opinión,. NET/Mono parece ser una mejor opción simplemente porque Mono tiene un gran historial de aplicaciones de escritorio multiplataforma (a diferencia de Java) y, por supuesto, Mono está mejorando a pasos agigantados estos días.

 9
Author: Swaroop C H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-15 04:19:35

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

En contraste, 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 hay un retroceso real en el uso de Mono : Novell ofrece el mismo tipo de soporte de proveedor para Mono que obtendría para Java o. NET en Windows?

Si estuviera apuntando principalmente al alojamiento de su servicio en Windows, tendría sentido considerar esta opción, pero ya que está apuntando principalmente a Linux, me parece una especie de obviedad.

 8
Author: warren_s,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-01 12:13:28

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

EDITAR: para ser justos,. NET fue diseñado para funcionar en entornos/PC/Servidor embebidos, por lo que es una especie de multiplataforma. Pero no fue diseñado para Linux.

 7
Author: AlexeyMK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-14 20:37:15

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

 7
Author: Giovanni Galbo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-15 04:48:55

Para añadir un poco más a la conversación, Java es más portátil si se queda alrededor de una versión detrás - Java 5 todavía tiene muchas características excelentes por lo que puede esperar a Java 6 y todavía tienen una gran cantidad de alcance en términos de lenguaje y bibliotecas para desarrollar con. El Mac es la plataforma principal que puede tomar algún tiempo para ponerse al día con la última versión de Java.

Java también tiene un excelente cuerpo de estándares que crece inteligentemente la plataforma basada en la entrada de muchos diferentes empresa. Esta es una característica a menudo pasada por alto, pero mantiene incluso nuevas características que funcionan bien a través de múltiples plataformas y proporciona una gran variedad de soporte de biblioteca para algunas cosas esotéricas (como extensiones opcionales).

 6
Author: Kendall Helmstetter Gelner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-15 03:41:32

Votaría por que Java sea más portable que C#. Java definitivamente también tiene un conjunto muy rico de bibliotecas estándar. También hay un amplio conjunto de bibliotecas de código abierto de 3rd party por ahí, como las proporcionadas por el proyecto Jakarta ( http://jakarta.apache.org/).

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

 5
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-15 03:03:34

También hay otras opciones de idioma. Me he encariñado bastante con Python, que funciona bien en Windows, Linux y Mac, y tiene un rico conjunto de bibliotecas.

 4
Author: George V. Reilly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-15 02:48:54

Mientras que Mono tiene su cuota de problemas Creo que tiene una mejor historia de compatibilidad multiplataforma, especialmente SI usted tiene confianza en la invocación de la plataforma nativa.

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

 3
Author: damageboy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:25:26

Gatorhall ¿tienes algunos datos que respalden eso?

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

Antecedentes: Soy un tipo de Windows desde Windows 3.1 y actualmente un usuario de Linux (todavía ejecutando Windows 7, gran sistema operativo, en una máquina virtual para Visual Studio 2010 y otras herramientas).

El punto: yo y muchos usuarios (windows, linux, etc.) Lo sé, puede estar en desacuerdo con usted. Java tiende a funcionar más lento incluso en una aplicación de escritorio Linux, ASP.NET realizar es más rápido que las páginas del servidor java muchas de las veces. Algunos pueden estar de acuerdo en que incluso PHP no compilado se desempeña mejor en varios escenarios.

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

 2
Author: Rui Marques,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-21 12:24:29