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

108

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

Carezco de la descripción general de ambas alternativas, pero tengo bastante libertad de elección para mi próximo proyecto. Estoy buscando datos técnicos concretos en las áreas de

  • rendimiento (por ejemplo, me dijeron que Java es bueno para subprocesos y escuché que la optimización del código en tiempo de ejecución se ha vuelto muy buena recientemente para .NET)
  • portabilidad en el mundo real (ambos están destinados a ser portátiles, ¿qué Catch-22 para 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 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á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 desgastado por la batalla en el lado de la portabilidad y también ha existido por un tiempo en sistemas más antiguos. Estoy un poco triste por eso, porque tengo mucha curiosidad por C # y me encantaría haber hecho un gran proyecto en él, pero tal vez la próxima vez. Gracias por todos los consejos.

Hanno Fietz
fuente
3
Gran pregunta. También estamos considerando una evaluación para el desarrollo multiplataforma.
Mat Nadrofsky
Agregaría la etiqueta "qué idioma" pero ya hay 5, así que no hay suerte.
Daniel Daranas
Depende en gran medida de las plataformas a las que apuntes ...
Thorbjørn Ravn Andersen
1
Ahora podría ser un buen momento para que veas golang ...
StartupGuy
Xojo también podría valer la pena considerar. Compila aplicaciones nativas usando LLVM para Windows, Mac Linux. Tiene una automatización de compilación IDE, depuración, etc. La biblioteca tiene muchas características y se puede ampliar según sea necesario. www / xojo.com
Paul Lefebvre

Respuestas:

96

Bueno ... Java es en realidad más portátil. Mono no está implementado en todas partes y está muy por detrás de la implementación de Microsoft. El SDK de Java parece estar mejor sincronizado en todas las plataformas (y funciona en más plataformas).

También diría que Java tiene más herramientas disponibles 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. Sin embargo, calificaré esto diciendo que recién ahora estoy comenzando a prestarle algo de atención a Mono después de un largo tiempo sin importarme 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, de WIF. Mono puede ejecutarse 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á comenzando a ver algunas herramientas mucho mejoradas (Xamarin), y Microsoft parece tener una actitud mucho más multiplataforma y la voluntad de trabajar con socios para hacerlos complementarios, en lugar de competitivos (por ejemplo, Mono será una parte bastante importante del próximo panorama OWIN / Helios ASP.NET). Sospecho que en los próximos años las diferencias en portabilidad disminuirán rápidamente,

Actualización para 2018

Mi punto de vista sobre esto está comenzando a ir en sentido contrario. Creo que .NET, en general, particularmente con .NET Core, ha comenzado a lograr una "paridad de portabilidad" con Java. Se están realizando esfuerzos para llevar WPF a .NET Core para algunas plataformas, y .NET Core en sí se ejecuta ahora en muchas plataformas. Mono (propiedad de Xamarin, que ahora es propiedad de Microsoft) es un producto más maduro y pulido que nunca, y la escritura de aplicaciones que funcionan en múltiples plataformas ya no es el dominio de la gnosis profunda de la piratería .NET, pero es un esfuerzo relativamente sencillo. . Por supuesto, existen bibliotecas, servicios y aplicaciones que son solo para Windows o solo pueden apuntar a plataformas específicas, pero lo mismo puede decirse de Java (en términos generales).

Si estuviera en el lugar del OP en este punto, no puedo pensar en ninguna razón inherente a los lenguajes o las pilas de tecnología que me impidan elegir .NET para cualquier aplicación que se desarrolle a partir de este punto.

Ben Collins
fuente
2
Me alegra mucho leer esto y me alegro de los votos en el mundo de Microsoft. .NET es realmente bueno, pero Java tiene una legitimidad como siempre traté de explicar como un desarrollador de .NET y uno antiguo de Java;)
JoeBilly
+1 para esto. Descubrí que la portabilidad de Java (para aplicaciones no triviales, es decir, servidores web, GUI complejas, motores analíticos) es mejor que cualquier otra alternativa. No es del todo perfecto, pero es lo mejor que puedes conseguir ahora mismo.
mikera
1
@Ben, ¿todavía tienes esta opinión en 2013? Si lo hace, ¿le importaría mencionarlo y si no actualiza esta respuesta? Muchas veces, cuando se leen respuestas para niños de 4 años, es difícil saberlo.
Benjamin Gruenbaum
1
@BenjaminGruenbaum sí, aunque calificaría mi opinión en este punto al decir que no he prestado mucha atención a Mono en mucho tiempo, por lo que puede haber mejoras en el tiempo de ejecución (o ecosistema) de Mono que no he estado consciente de. AFAIK, todavía no hay soporte para WPF, WCF o WF. Mono puede ejecutarse en iOS, pero que yo sepa, el tiempo de ejecución de Java aún se ejecuta en muchas más plataformas que Mono. Entonces sí. Calificado, pero sí.
Ben Collins
@HighCore el argumento no es contra Mono, per se. Es solo una declaración de hecho: si escribe código dependiente de WPF, entonces no puede usar Mono; ergo es imposible de transportar de esa manera. Los marcos de interfaz de usuario de Java pueden apestar, pero hasta donde yo sé, funcionarán en cualquier lugar donde funcione Java (y el hardware admite ese tipo de interfaz de usuario). Eso no hace que Java sea mejor , lo hace más portátil de esta manera específica.
Ben Collins
112

Mono hace un mejor trabajo al apuntar a las plataformas que quiero admitir. 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 en más lugares: - Windows Phone 7 - Wii - XBox - PS3 - etc.

Lo más importante es iOS, ya que MonoTouch funciona fantásticamente. No conozco ninguna buena forma de apuntar a iOS con Java. No puedes apuntar a Windows Phone 7 con Java, por lo que diría que los días en que Java era mejor para dispositivos 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 en mi humilde opinión y el marco .NET es un placer de usar. La mayor parte de lo que se agrega 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 buenos.

Veo a Mono como una plataforma por derecho propio (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 de maravilla.

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

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

Mi opinión sobre algunos de los otros comentarios:

Problema: rendimiento.

** Respuesta: Tanto la JVM como la CLR funcionan mejor que lo que dicen los detractores. 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 como usuario final. El soporte para Google Native Client también es bastante bueno. Además, sé que se supone que el bajo rendimiento de la GUI para las aplicaciones Java de escritorio es cosa del pasado, pero sigo encontrando aplicaciones lentas. Por otra parte, podría decir lo mismo de WPF. GTK # es bastante rápido, por lo que no hay razón para que sean lentos.

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

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

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 asombrosa; 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 (más amplio) soporte de herramientas

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

Quiero dar un saludo a MonoDevelop ; es una joya. MonoDevelop integra la mayoría de las herramientas que quiero usar, incluida la finalización de código (intellisense), la integración de Git / Subversion, el soporte para pruebas unitarias, la integración de SQL, la depuración, la fácil refactorización y la exploración de ensamblajes 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, incluido Windows.

Desarrolle primero para Mono e impleméntelo en .NET en Windows si lo desea. Sin embargo, si compara .NET de MS con Java, Java tiene la ventaja en términos de coherencia entre plataformas. Ver siguiente respuesta ...

Problema: Mono se retrasa .NET.

Respuesta: No, no es así. En mi humilde opinión, esta es una declaració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 C # está completamente actualizado con MS. El compilador Mono VB.NET se retrasa con respecto a 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 gran parte del código escrito de Microsoft, incluido 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 bien en Mono.

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

Mono implementa partes de la especificación CLR que ni siquiera Microsoft admite (como matrices de 64 bits). Una de las nuevas tecnologías más interesantes del mundo .NET es Rosylyn . Mono ha ofrecido el compilador de C # como servicio durante muchos años. Algunas de las ofertas de Rosylyn también están disponibles a través de NRefractory . Un ejemplo de dónde Mono todavía está por delante serían las instrucciones SIMD para acelerar el rendimiento de los juegos.

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

Problema: Microsoft es malvado.

Respuesta: Verdadero. Y qué.

Mucha gente ofrece las siguientes razones para evitar el uso de Mono:

1) No debe usar Mono porque debe evitarse 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 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 lenguajes JVM es asombrosa. Usa lo que te haga feliz. Por ahora, eso es a menudo .NET / Mono para mí.

Justin
fuente
3
Gracias por una respuesta tan extensa tan tarde en el juego. No he usado Mono / .Net / C # nunca, pero su publicación parece reflejar algunos de los desarrollos más recientes en ese universo. Por ejemplo, no recuerdo que MonoTouch fuera tan significativo hace 3,5 años.
Hanno Fietz
3
Estoy confundido por su respuesta "Mono no se retrasa .NET". Usted afirma eso, luego indica media docena de formas en las que, de hecho, se retrasa .NET (Entity Framework, etc.). Es seguro decir que no se queda atrás del compilador C # de Microsoft, pero el ecosistema .NET es fragmentario en el mejor de los casos en Mono. Eso parece estar bien para sus propósitos, pero no para todos, y existe una preocupación legítima allí.
samkass
1
@samkass: Creo que el punto aquí es la diferencia entre 'lags' y 'no implementa esta biblioteca'. En el mundo de Java, puede encontrar esto análogo a Android que no implementa la biblioteca Swing. Tenga en cuenta también que se proporcionaron los equivalentes multiplataforma (y código abierto, por cierto). Estoy usando Mono todos los días y "fragmentario en el mejor de los casos" definitivamente no fue mi experiencia.
konrad.kruczynski
9
La falta de soporte completo y robusto de WCF y EF, y ningún WPF es un asesino para Mono en casi todo lo que he trabajado desde .NET 3.0. Sí, hay alternativas, pero una gran parte del poder de .NET son estos marcos adicionales. Sin estos, no creo que pueda llamar a Mono compatible con .NET en absoluto. En el mejor de los casos, es una implementación parcial. También he usado NHibernate y, francamente, EF es una tecnología mucho mejor. Nunca usé ServiceStack. IMO Mono es muy arriesgado.
MrLane
1
todos los que se pierden WCF deberían echar un vistazo a servicestack. en serio, ¡no implementar WCF fue algo bueno!
irreal
54

De hecho, 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 aplicaciones ASP.NET y Winforms.

No estoy seguro de dónde algunas personas tienen la impresión de que Mono es tan horrible, pero ciertamente ha hecho su trabajo en mis casos y opiniones. Es cierto que tendrá un poco de retraso para los últimos y mejores inventos en .NET world, 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. Si bien los marcos hacen un gran trabajo al abstraer el sistema operativo en el que está ejecutando, las pequeñas cosas como la distinción entre mayúsculas y minúsculas de Linux en las rutas y los nombres de archivos requieren un poco de tiempo para acostumbrarse, al igual que cosas como los permisos.

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

GEOCHET
fuente
Llámame ignorante, pero ¿necesitas probar ASP.NET con mono? Todo lo que sería .NET es del lado del servidor, por lo tanto, no importa en qué sistema operativo se muestre, ¿verdad?
Ethan Gunderson
9
Ethan, con Mono puedes alojar aplicaciones ASP.net en Linux.
Eric Haskins
2
No todo el mundo quiere ejecutar su aplicación en Windows, por el motivo que sea.
Bernard
2
@Rich B: si un cliente no quiere productos de MS, .NET es claramente la elección incorrecta.
Kjetil Ødegaard
21
@Kjetil: Mono no es un producto de MS.
GEOCHET
26

Java en realidad es tan multiplataforma como todo el mundo dice. Existe 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 igualmente multiplataforma.

El único problema es que hay ciertas operaciones nativas que no se pueden realizar en Java sin escribir algunas DLL o SO. Es muy raro que surjan en la práctica. En todos esos casos, sin embargo, he podido evitarlo generando procesos nativos y raspando la pantalla de los resultados.

Jodonnell
fuente
1
Además, en prácticamente todos los casos en los que Java no puede realizar una operación nativa de manera multiplataforma, lo mismo será cierto para .NET
Eli Courtwright
¿Finalmente? Mac OS X ha tenido una implementación de JVM desde 10.0. :)
mipadi
3
@Eli - Probablemente cierto. Sin embargo, es mucho, mucho más fácil de integrar con la funcionalidad nativa en .NET / Mono que en Java. Entonces, si solo está tratando de integrarse bien con la plataforma nativa, .NET / Mono ofrece una ventaja real.
Justin
"Generación de procesos nativos y eliminación de pantalla de los resultados" estremecimiento
Básico
Yo discutiría con 'casi cualquier sistema operativo convencional', ya que no hay una JVM lista para usar ni para Android ni para iOS. Mientras tanto, con las nuevas bibliotecas de clases portátiles en .NET, puede compartir código compilado (aunque no prácticamente código de interfaz de usuario) entre plataformas, incluido el móvil.
Mathieson
18

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

Brad Wilson
fuente
Convenido. Es una cuestión de qué tan bien soportadas estén las máquinas virtuales en varias arquitecturas.
Allain Lalonde
Convenido. No es divertido hacer un desarrollo completo si el cliente no puede ejecutarlo.
Thorbjørn Ravn Andersen
15

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

  • Compatibilidad. Estos son los aspectos clave que deben tenerse en cuenta al desarrollar el programa multiplataforma. Dos cuestiones: primero, la compatibilidad de la plataforma. Java sigue ganando ya que JDK está bien mantenido por la empresa única y original Sun. MS no mantiene mono, 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 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 nada. Ambos proporcionan buenas pruebas unitarias, depuraciones, perfiles, etc.

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

Gatorhall
fuente
Trabajar con mono en "otro" Linux se ha vuelto complicado. Esto refleja el gran problema del mono: el futuro del mono depende demasiado de la dictadura de Miguel de Icaza. Caso en cuestión: la disminución del soporte para "otros ... (no admitidos)" [ mono-project.com/Other_Downloads] Linux parece correlacionarse (en mi humilde opinión ) con la desilusión de Miguel de Icaza con Linux ( tirania.org/blog/archive/ 2013 / Mar-05.html ). Java no sufre este problema de dictadura. Es posible que C # se ejecute en más plataformas, pero eso conlleva más costo, riesgo, compromiso y dependencia del Sr. de Icaza. No, gracias.
StartupGuy
@ Michael.M, ¿prefieres estar al capricho de Oracle?
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen: Incorrecto. Permítanme desglosarlo de la manera más simple posible: .Net -> plataforma MSFT (empresa estable y exitosa; ecosistema limitado pero ordenado); Mono -> framework De Icaza (el dictador; no está de moda para Linux y muestra: [ cultofmac.com/218632/… - intente instalar mono en Centos 6.4, es una pesadilla "sin soporte"); Java es una especificación que pertenece a la comunidad y tiene muchas implementaciones de proveedores diferentes (Oracle es solo una) [ coderanch.com/t/327542/java/java/…
StartupGuy
@ ThorbjørnRavnAndersen: .. además, un importante patrocinador de la comunidad de Java puede incluso excluir a Oracle y aún así tener éxito y contar con un soporte excelente; Java no es de ninguna manera el capricho de Oracle --- consulte: news.techworld.com/applications/3252787/ … Oracle podría deshacerse de toda su participación en Java y aún viviría. ¿Qué otros proveedores tienen una plataforma .Net? ¿Quién más proporciona un tiempo de ejecución mono que no sea Xamarin? Java es el único de estos que no está sujeto a la dictadura y tiene un verdadero control comunitario, apoyo comunitario y administración comunitaria.
StartupGuy
1
@ Michael.M Especificación? ¿Perteneciendo a la comunidad? Creo que está equivocado. También creo que la única razón por la que el proyecto OpenJDK no se cerró después de la adquisición de Sun fue la GPL. Java está en el puño de hierro de Oracle, simplemente porque el TCK no está disponible gratuitamente y eso es lo que se necesita para hacer una JVM que se comporte como la JVM de Oracle. No tengo ningún problema con Mono o De Icaza, pero no creo que la situación de Java sea mucho mejor. El único proyecto JVM alternativo con impulso murió cuando IBM dejó de admitirlo.
Thorbjørn Ravn Andersen
8

Voy a decir Java también. Si lo mira en términos de madurez, Sun (y otros) ha invertido mucho más tiempo y esfuerzo en lograr 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 existe un retroceso 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 su objetivo principal es el alojamiento de su servicio en Windows, tendría sentido considerar esta opción, pero dado que se dirige principalmente a Linux, me parece una obviedad.

warren_s
fuente
Tiendo a estar de acuerdo con que Mono sea un ciudadano de segunda clase, pero no con la conclusión. Java ha existido durante mucho tiempo y está plagado de peculiaridades heredadas y problemas de administración de memoria, por no mencionar que casi siempre elige la forma más detallada de hacer algo. También ha estado bastante estancado (el lenguaje) durante años y solo recientemente ha comenzado a incorporar características que han estado en .Net durante años. En mi humilde opinión, es una elección entre dos males ... Soporte de plataforma Flakey con .Net o un gigante pesado que es muy lento para evolucionar y una tarea difícil de codificar.
Básico
7

Java fue diseñado para ser multiplataforma; C # /. Net no lo era. 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 embebidos / PC / Server, por lo que es un TIPO de multiplataforma. Pero no fue diseñado para Linux.

AlexeyMK
fuente
3
bueno, el C # está estandarizado por ISO, así que la idea era tener algo multiplataforma. microsoft no quería desarrollar implementaciones para otras plataformas, pero se deja a otras partes ya que el lenguaje es un estándar. Sin embargo, el marco .Net es una historia más complicada.
zappan
Sin embargo, Mono es una buena implementación y DotGNU (también para Mac)
Andrei Rînea
1
zappan: punto válido en C # (no lo sabía), pero .NET es enorme. Es cierto que no tengo ninguna experiencia personal aquí.
AlexeyMK
@zappan: desde una perspectiva práctica, es irrelevante que C # esté estandarizado (o que Mono haga un clon bastante bueno de C #). La portabilidad de la plataforma se trata de toda la plataforma (incluidas las bibliotecas y el ecosistema de herramientas), no solo el lenguaje en sí. En ese sentido .Net definitivamente no es completamente multiplataforma.
mikera
7

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 las plataformas a las que planeas apuntar.

Giovanni Galbo
fuente
Escritorio no es sinónimo de Windows a pesar de que tiene la mayor parte del espacio de escritorio.
ZOXIS
6

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 tienes mucho rango en términos de lenguaje y bibliotecas para desarrollar. con. Mac es la plataforma principal que puede tardar algún tiempo en ponerse al día con la última versión de Java.

Java también tiene un excelente cuerpo de estándares que hace crecer la plataforma de manera inteligente en función de las aportaciones de muchas empresas diferentes. Esta es una característica que a menudo se pasa por alto, pero mantiene incluso las nuevas características funcionando bien en múltiples plataformas y proporciona una gran variedad de soporte de biblioteca para algunas cosas esotéricas (como extensiones opcionales).

Kendall Helmstetter Gelner
fuente
OS X 10.6 ahora se ha puesto al día por completo con la versión Sun Java 6.
Thorbjørn Ravn Andersen
5

Yo votaría por 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 terceros de código abierto, como las proporcionadas por el proyecto Jakarta ( http://jakarta.apache.org/ ).

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


fuente
4

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

George V. Reilly
fuente
Sí, me encanta Python y tiene Django, que me gusta para las aplicaciones web, pero hubo algunas cosas que lo hicieron inaceptable, siendo la más importante el GIL en la implementación C estándar del intérprete. Tengo una serie de operaciones que se benefician enormemente de la computación paralela en máquinas multinúcleo y tendría que generar procesos para hacerlo en cPython.
Hanno Fietz
3

Si bien Mono tiene su parte de problemas , creo que tiene una mejor historia de compatibilidad multiplataforma, especialmente si confía en la invocación de la plataforma nativa.

No hay suficientes palabras en Stack Overflow 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.

Daño chico
fuente
Estoy de acuerdo, llamar al código específico de la plataforma desde .NET / Mono es muy fácil siempre que se pueda llamar desde C. Con CXXI ​​(pronunciado sexy) también se está convirtiendo en un juego de niños llamar código C ++. tirania.org/blog/archive/2011/Dec-19.html
Justin
2

Gatorhall , ¿tienes algunos datos para respaldar eso?

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 años y años de optimización.

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

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

¿Java es más multiplataforma? No tengo ninguna duda sobre esto (la historia de aquí en adelante), pero más rápido (sin decir que .NET lo es) no es tan seguro y me gustaría ver algunos puntos de referencia reales.

Rui Marques
fuente
Hay otra pregunta que puede ayudar y, por supuesto, está el tiroteo del idioma . La JVM puede estar más optimizada, pero está cerca (especialmente en Windows). Los puntos de referencia para ASP.NET vs J2EE o JSP son aún más sospechosos, pero no tengo problemas para creer que ASP.NET es mucho más rápido incluso si los tiempos de ejecución están empatados.
Justin