.NET / Mono ou Java é a melhor escolha para desenvolvimento de plataforma cruzada? [fechadas]

108

Quanto menos bibliotecas existem para Mono do que para Java?

Não tenho uma visão geral de ambas as alternativas, mas tenho bastante liberdade de escolha para meu próximo projeto. Estou procurando fatos técnicos concretos nas áreas de

  • desempenho (por exemplo, ouvi que o Java é bom para encadeamento e ouvi que a otimização do código em tempo de execução se tornou muito boa recentemente para .NET)
  • portabilidade no mundo real (ambos devem ser portáteis, o que é Catch-22 para cada um?)
  • disponibilidade da ferramenta ( CI , automação de compilação, depuração, IDE)

Estou especialmente procurando o que você realmente experimentou em seu próprio trabalho, em vez das coisas que eu poderia pesquisar no Google. Meu aplicativo seria um serviço de back-end que processa grandes quantidades de dados de séries temporais.

Minha plataforma de destino principal seria o Linux.

Edit: Para expressar minha pergunta de forma mais adequada, estou interessado em todo o pacote (bibliotecas de terceiros, etc.), não apenas no idioma. Para bibliotecas, isso provavelmente se resume à questão "quanto menos bibliotecas existem para Mono do que para Java"?


Para sua informação, escolhi Java para este projeto, porque parecia mais desgastado pela batalha no lado da portabilidade e já existe há algum tempo em sistemas mais antigos também. Estou um pouco triste com isso, porque estou muito curioso sobre C # e adoraria ter feito algum grande projeto nele, mas talvez na próxima vez. Obrigado por todos os conselhos.

Hanno Fietz
fonte
3
Ótima pergunta. Estamos analisando uma avaliação para o desenvolvimento de plataforma cruzada também.
Mat Nadrofsky
Eu adicionaria a tag "which-language", mas já existem 5, então sem sorte.
Daniel Daranas
Depende fortemente de quais plataformas você segmenta ...
Thorbjørn Ravn Andersen,
1
Agora pode ser um bom momento para você olhar para golang ...
StartupGuy
Também pode valer a pena considerar o Xojo. Ele compila aplicativos nativos usando LLVM para Windows, Mac Linux. Possui uma automação de construção IDE, depuração, etc. A biblioteca possui muitos recursos e pode ser estendida conforme necessário. www / xojo.com
Paul Lefebvre

Respostas:

96

Bem .... Java é realmente mais portátil. O Mono não é implementado em todos os lugares e fica muito atrás da implementação da Microsoft. O Java SDK parece estar em melhor sincronia entre as plataformas (e funciona em mais plataformas).

Eu também diria que Java tem mais disponibilidade de ferramentas em todas essas plataformas, embora existam muitas ferramentas disponíveis para .NET nas plataformas Windows.

Atualização para 2014

Ainda tenho essa opinião em 2014. No entanto, vou qualificar isso dizendo que só agora estou começando a prestar atenção ao Mono depois de um longo tempo sem me importar realmente, então pode haver melhorias no tempo de execução do Mono (ou ecossistema ) sobre os quais não fui informado. AFAIK, ainda não há suporte para WPF, WCF, WF, ou WIF. O Mono pode ser executado no iOS, mas até onde sei, o Java runtime ainda roda em muito mais plataformas do que o Mono. Além disso, o Mono está começando a ver algumas ferramentas muito melhoradas (Xamarin), e a Microsoft parece ter um tipo de atitude muito mais multiplataforma e disposição de trabalhar com parceiros para torná-los complementares, em vez de competitivos (por exemplo, o Mono será uma parte muito importante do futuro cenário OWIN / Helios ASP.NET). Suspeito que nos próximos anos as diferenças na portabilidade diminuirão rapidamente,

Atualização para 2018

Minha opinião sobre isso está começando a ir para o outro lado. Acho que o .NET, de modo geral, particularmente com o .NET Core, começou a atingir "paridade de portabilidade" com o Java. Existem esforços em andamento para trazer o WPF ao .NET Core para algumas plataformas, e o .NET Core é executado em muitas plataformas agora. Mono (de propriedade da Xamarin, que agora é propriedade da Microsoft) é um produto mais maduro e polido do que nunca, e escrever aplicativos que funcionem em várias plataformas não é mais o domínio da gnose profunda do hackeamento .NET, mas é um empreendimento relativamente simples . Existem, é claro, bibliotecas, serviços e aplicativos que são somente para Windows ou podem ter como alvo plataformas específicas - mas o mesmo pode ser dito de Java (amplamente).

Se eu estivesse no lugar do OP neste ponto, não consigo pensar em nenhuma razão inerente às linguagens ou pilhas de tecnologia em si que me impediria de escolher o .NET para qualquer aplicativo daqui para frente.

Ben Collins
fonte
2
Estou muito feliz em ler isso e feliz com os votos no mundo da Microsoft. .NET é realmente bom, mas Java tem uma legitimidade, como sempre tentei explicar como um desenvolvedor .NET e um antigo Java;)
JoeBilly 01 de
1 para isso. Descobri que a portabilidade Java (para aplicativos não triviais, ou seja, servidores web, GUIs complexas, mecanismos analíticos) é melhor do que qualquer outra alternativa. Não é totalmente perfeito, mas é o melhor que você pode obter agora.
Mikera de
1
@Ben, você ainda tem essa opinião em 2013? Em caso afirmativo, você se importaria de mencionar isso, e se você não atualizar esta resposta? Muitas vezes, ao ler as respostas de uma criança de 4 anos, é difícil dizer.
Benjamin Gruenbaum
1
@BenjaminGruenbaum sim, embora eu qualifique minha opinião neste ponto dizendo que não prestei muita atenção ao Mono por um longo tempo, então pode haver melhorias no tempo de execução do Mono (ou ecossistema) que eu não tenho informado. AFAIK, ainda não há suporte para WPF, WCF ou WF. Mono pode ser executado no iOS, mas até onde sei, o Java runtime ainda roda em muito mais plataformas do que o Mono. Então sim. Qualificado, mas sim.
Ben Collins
@HighCore o argumento não é contra Mono, por si só. É apenas uma declaração de fato: se você escrever código dependente do WPF, não poderá usar o Mono; logo, não é portável dessa forma. Os frameworks de IU do Java podem ser ruins, mas até onde eu sei eles funcionarão em qualquer lugar onde o Java funcione (e o hardware suporta esse tipo de IU). Isso não torna o Java melhor , mas sim mais portável dessa maneira específica.
Ben Collins,
112

O Mono faz um trabalho melhor ao direcionar as plataformas que desejo oferecer suporte. Fora isso, é tudo subjetivo.

Compartilho o código C # nas seguintes plataformas: - iOS (iPhone / iPad) - Android - A Web (HTML5) - Mac (OS X) - Linux - Windows

Eu poderia compartilhar ainda mais lugares: - Windows Phone 7 - Wii - XBox - PS3 - etc.

O mais importante é o iOS, já que o MonoTouch funciona de maneira fantástica. Não conheço nenhuma boa maneira de direcionar o iOS com Java. Você não pode direcionar o Windows Phone 7 com Java, então eu diria que os dias em que o Java era melhor para dispositivos móveis já passou.

O maior fator para mim é a produtividade pessoal (e felicidade). C # como linguagem está anos à frente do Java IMHO e o .NET framework é uma alegria de usar. A maior parte do que está sendo adicionado no Java 7 e Java 8 está em C # há anos. Linguagens JVM como Scala e Clojure (ambas disponíveis no CLR) são muito boas.

Vejo o Mono como uma plataforma por si só (uma ótima) e trato o .NET como a implementação do Mono da Microsoft no Windows. Isso significa que eu desenvolvo e testo no Mono primeiro. Isso funciona maravilhosamente bem.

Se Java e .NET (Mono, digamos) fossem projetos de código aberto sem nenhum apoio corporativo, eu sempre escolheria Mono em vez de Java. Eu acredito que é apenas uma plataforma melhor.

.NET / Mono e JVM são ótimas escolhas, embora eu pessoalmente usasse alguma outra linguagem que não Java na JVM.

Minha opinião sobre alguns dos outros comentários:

Questão: Desempenho.

** Resposta: Tanto o JVM quanto o CLR têm um desempenho melhor do que os detratores dizem. Eu diria que o JVM tem melhor desempenho. Mono é geralmente mais lento do que .NET (embora nem sempre).

Eu pessoalmente escolheria ASP.NET MVC em vez de J2EE qualquer dia, tanto como desenvolvedor quanto como usuário final. O suporte para o cliente nativo do Google também é muito bom. Além disso, sei que o baixo desempenho da GUI para aplicativos Java de desktop deve ser uma coisa do passado, mas continuo encontrando alguns lentos. Então, novamente, eu poderia dizer o mesmo para WPF. GTK # é muito rápido, então não há razão para que sejam lentos.

Problema: Java tem um ecossistema maior de bibliotecas disponíveis.

Resposta: Provavelmente verdade, mas não é um problema na prática.

Praticamente todas as bibliotecas Java (incluindo o JDK) funcionam perfeitamente em .NET / Mono graças ao IKVM.NET . Esta tecnologia é uma verdadeira maravilha. A integração é incrível; você pode usar uma biblioteca Java como se fosse nativa. No entanto, só precisei usar bibliotecas Java em um aplicativo .NET. O ecossistema .NET / Mono geralmente oferece mais do que eu preciso.

Problema: Java tem um suporte melhor (mais amplo) a ferramentas

Resposta: Não no Windows. Caso contrário, eu concordo. MonoDevelop é bom.

Quero agradecer ao MonoDevelop ; é uma joia. O MonoDevelop integra a maioria das ferramentas que desejo usar, incluindo autocompletar código (intellisense), integração Git / Subversion, suporte para testes de unidade, integração SQL, depuração, refatoração fácil e navegação de montagem com descompilação instantânea. É maravilhoso usar o mesmo ambiente para tudo, desde a web do lado do servidor até aplicativos móveis.

Problema: compatibilidade entre plataformas.

Resposta: Mono é uma única base de código em todas as plataformas, incluindo Windows.

Desenvolva primeiro para Mono e implante em .NET no Windows, se desejar. Se você comparar o .NET do MS ao Java, então o Java tem a vantagem em termos de consistência entre plataformas. Veja a próxima resposta ...

Problema: Mono lags .NET.

Resposta: Não, não. IMHO, esta é uma afirmação frequentemente afirmada, mas incorreta.

A distribuição Mono do Xamarin vem com C #, VB.NET, F #, IronPython, IronRuby e acho que talvez Boo fora da caixa. O compilador Mono C # está totalmente atualizado com o MS. O compilador Mono VB.NET atrasa a versão MS. Os outros compiladores são iguais em ambas as plataformas (assim como outras linguagens .NET como Nemerle, Boo e Phalanger (PHP)).

O Mono vem com muito do código real escrito pela Microsoft, incluindo o Dynamic Language Runtime (DLR), Managed Extensibility Framework (MEF), F # e ASP.NET MVC. Como o Razor não é Open Source, o Mono atualmente vem com o MVC2, mas o MVC3 funciona perfeitamente no Mono.

A plataforma Mono central acompanhou o ritmo do .NET por muitos anos e a compatibilidade é impressionante. Você pode usar a linguagem C # 4.0 completa e até mesmo alguns recursos do C # 5.0 hoje. Na verdade, o Mono costuma liderar o .NET de várias maneiras.

Mono implementa partes da especificação CLR que nem mesmo a Microsoft oferece suporte (como matrizes de 64 bits). Uma das novas tecnologias mais interessantes do mundo .NET é Rosylyn . Mono oferece o compilador C # como um serviço há muitos anos. Algumas das ofertas de Rosylyn também estão disponíveis via NRefractory . Um exemplo de onde o Mono ainda está à frente seriam as instruções SIMD para acelerar o desempenho dos jogos.

A Microsoft oferece vários produtos além do .NET que não estão disponíveis no Mono, de onde vem o equívoco sobre o atraso do Mono. Windows Presentation Foundation (WPF), Entity Framework (EF), WCF (Windows Communication Foundation) são exemplos de produtos que não funcionam ou têm suporte insuficiente no Mono. A solução óbvia é usar alternativas de plataforma cruzada como GTK #, NHibernate e ServiceStack.

Problema: a Microsoft é má.

Resposta: Verdade. E daí.

Muitas pessoas oferecem os seguintes motivos para evitar o uso do Mono:

1) Você não deve usar Mono porque a tecnologia da Microsoft deve ser evitada

2) Mono é uma merda porque não permite que você use todas as tecnologias que a Microsoft oferece

Para mim, está claro que essas afirmações são incompatíveis. Eu rejeito a primeira afirmação, mas vou pular esse argumento aqui. A segunda afirmação é verdadeira para todas as alternativas .NET.

A JVM é uma ótima plataforma e a explosão de linguagens JVM é incrível. Use o que te faz feliz. Por enquanto, geralmente é .NET / Mono para mim.

Justin
fonte
3
Obrigado por uma resposta tão extensa no final do jogo. Nunca usei o Mono / .Net / C #, mas sua postagem parece refletir alguns dos desenvolvimentos mais recentes nesse universo. Por exemplo, não me lembro do MonoTouch ser tão significativo há 3,5 anos.
Hanno Fietz
3
Estou confuso com a sua resposta "Mono does not lag .NET". Você afirma isso e, em seguida, declara meia dúzia de maneiras pelas quais, de fato, ocorre lag do .NET (Entity Framework, etc). É seguro dizer que não fica atrás do compilador C # da Microsoft, mas o ecossistema .NET é fragmentário, na melhor das hipóteses, no Mono. Isso parece adequado para seus objetivos, mas não para todos, e há uma preocupação legítima nisso.
samkass
1
@samkass: Acho que o ponto aqui é a diferença entre 'atrasos' e 'não implementa esta biblioteca'. No mundo Java, você pode achar isso análogo ao Android que não implementa a biblioteca Swing. Observe também que os equivalentes de plataforma cruzada (e de código aberto, aliás) foram fornecidos. Estou usando Mono todos os dias e "fragmentário, na melhor das hipóteses", definitivamente não foi minha experiência.
konrad.kruczynski
9
A falta de suporte completo e robusto para WCF e EF e nenhum WPF é um assassino para o Mono em quase tudo em que trabalhei desde .NET 3.0. Sim, existem alternativas, mas uma grande parte do poder do .NET são essas estruturas adicionais. Sem eles, eu não acho que você possa chamar o Mono de compatível com o .NET. É uma implementação parcial, na melhor das hipóteses. Eu também usei NHibernate e francamente EF é uma tecnologia muito melhor. Nunca usei o ServiceStack. IMO Mono é um grande risco.
MrLane
1
todos que sentem falta do WCF devem dar uma olhada no service pack. sério, não implementar o WCF foi uma coisa boa!
irreal
54

Na verdade, eu desenvolvo em .NET, executo todos os meus testes primeiro no Mono e depois no Windows. Assim, sei que meus aplicativos são multiplataforma. Eu fiz isso com muito sucesso em aplicativos ASP.NET e WinForms.

Não tenho certeza de onde algumas pessoas têm a impressão de que Mono é tão horrível, mas certamente funcionou em meus casos e opiniões. É verdade que você terá um pouco de atraso para as maiores e mais recentes invenções no .NET mundo, mas até agora, .NET 2.0 no Windows e Linux é muito sólido para mim.

Lembre-se de que há muitas peculiaridades nisso, mas a maioria delas vem de ter certeza de que você está escrevendo um código portátil. Embora as estruturas façam um ótimo trabalho em abstrair o sistema operacional em que você está executando, pequenas coisas como a diferenciação de maiúsculas e minúsculas do Linux em caminhos e nomes de arquivos leva um pouco de tempo para se acostumar, assim como coisas como permissões.

.NET é definitivamente muito multiplataforma devido ao Mono com base em minhas experiências até agora.

GEOCHET
fonte
Pode me chamar de ignorante, mas você precisa mesmo testar o ASP.NET com mono? Tudo o que seria .NET está do lado do servidor, portanto, não importa em qual sistema operacional é exibido, não é?
Ethan Gunderson,
9
Ethan, usando o Mono, você pode hospedar aplicativos ASP.net no Linux.
Eric Haskins,
2
Nem todo mundo quer executar seu aplicativo no Windows, por qualquer motivo.
Bernard,
2
@Rich B: se um cliente não quer produtos MS, .NET é claramente a escolha errada.
Kjetil Ødegaard,
21
@Kjetil: Mono não é um produto MS.
GEOCHET
26

Java, na verdade, é tão multiplataforma quanto todo mundo diz que é. Existe uma implementação JVM para praticamente qualquer sistema operacional convencional (até mesmo o Mac OS X, finalmente), e todos eles funcionam muito bem. E há toneladas de ferramentas de código aberto por aí que são igualmente multiplataforma.

O único problema é que existem certas operações nativas que você não pode fazer em Java sem escrever algumas DLLs ou SOs. É muito raro que isso surja na prática. Em todos esses casos, porém, fui capaz de contornar isso gerando processos nativos e raspando a tela dos resultados.

Jodonnell
fonte
1
Além disso, em praticamente todos os casos em que o Java não pode fazer uma operação nativa em uma plataforma cruzada, o mesmo será verdadeiro para o .NET
Eli Courtwright
Finalmente? O Mac OS X tem uma implementação JVM desde 10.0. :)
mipadi
3
@Eli - Provavelmente verdade. Certamente, é muito mais fácil integrar com funcionalidade nativa em .NET / Mono do que em Java. Portanto, se você está apenas tentando se integrar bem com a plataforma nativa, o .NET / Mono oferece uma vantagem real.
Justin
"gerando processos nativos e raspando a tela dos resultados" tremor
Básico
Eu discordaria de 'praticamente qualquer sistema operacional convencional', já que não há uma JVM pronta para o Android ou iOS. Enquanto isso, com as novas bibliotecas de classes portáteis em .NET, você pode realmente compartilhar o código compilado (embora não seja um código de IU prático) entre plataformas, incluindo móveis.
Mathieson de
18

Acho que a pergunta foi formulada incorretamente. C # vs. Java é muito menos interessante em termos de uso de plataforma cruzada do que (a) quais plataformas você precisa oferecer suporte e (b) considerando as bibliotecas centrais e bibliotecas de terceiros disponíveis. A linguagem é quase a parte menos importante do processo de tomada de decisão.

Brad Wilson
fonte
Acordado. É uma questão de quão bem as máquinas virtuais são suportadas em várias arquiteturas.
Allain Lalonde,
Acordado. Não é divertido fazer um desenvolvimento completo se o cliente não puder executá-lo.
Thorbjørn Ravn Andersen,
15

Java é a melhor escolha para desenvolvimento de plataforma cruzada.

  • Atuação. Java e .Net têm nível de desempenho semelhante devido à máquina virtual, mas JVM normalmente tem melhor desempenho devido a anos e anos de otimização.

  • Biblioteca. Embora isso dependa da sua tarefa, o Java tem muito mais código aberto ou bibliotecas de terceiros disponíveis. Para aplicativo de servidor, J2EE, Spring, Struts, etc. Para GUI, embora .Net forneça API de camada Win32, mas isso causa problemas de compatibilidade. Java tem Swing, SWT, AWT, etc. Funciona na maioria dos casos.

  • Compatibilidade. Essas são as questões-chave que precisam ser consideradas ao desenvolver o programa de plataforma cruzada. Dois problemas: primeiro, compatibilidade de plataforma. O Java ainda vence, pois o JDK é bem mantido pela empresa Sun única e original. O Mono não é mantido pela MS, então você ainda não tem garantia de compatibilidade de atualização. 2. Compatibilidade com versões anteriores. A Sun mantém uma boa reputação em sua compatibilidade com versões anteriores, embora às vezes isso pareça muito rígido e reduza o ritmo.

  • Ferramentas. Java tem bons IDEs de plataforma cruzada. Netbeans, Eclipse, etc. A maioria deles é gratuita. O VS Studio é bom, mas apenas no Windows, e não custa um pouco. Ambos fornecem bons testes de unidade, depuração, perfis, etc.

Portanto, sugiro que Java é uma escolha melhor. Como um exemplo, existem alguns aplicativos de plataforma cruzada de desktop famosos desenvolvidos por Java: Vuze, Limewire, BlogBridge, CrossFTP, sem mencionar esses IDEs. Quanto ao .Net, tenho conhecimento limitado sobre esses aplicativos de sucesso.

Gatorhall
fonte
Trabalhar com mono em "outro" Linux ficou complicado. Isso reflete o grande problema do mono: o futuro do mono depende demais da ditadura de Miguel de Icaza. Caso em questão: Diminuindo o suporte para "outro ... (sem suporte)" [ mono-project.com/Other_Downloads] O Linux parece se correlacionar ( IMHO ) com a desilusão de Miguel de Icaza com o Linux ( tirania.org/blog/archive/ 2013 / Mar-05.html ). Java não sofre esse problema de ditadura. C # pode ser executado em mais plataformas, mas isso vem com mais custo, risco, comprometimento e dependência do Sr. de Icaza. Não, obrigado.
StartupGuy
@ Michael.M então você prefere estar por capricho da Oracle?
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen: Errado. Deixe-me dividir da forma mais simples possível: .Net -> plataforma MSFT (empresa estável e bem-sucedida; ecossistema limitado, mas organizado); Mono -> framework De Icaza (el dictador; não é quente para Linux e mostra: [ cultofmac.com/218632/… - tente instalar mono no Centos 6.4, é um pesadelo "sem suporte"); Java é uma especificação que pertence à comunidade e tem muitas implementações de fornecedores diferentes (Oracle é apenas um) [ coderanch.com/t/327542/java/java/…
StartupGuy
@ ThorbjørnRavnAndersen: .. além disso, um grande patrocinador da comunidade Java pode até mesmo excluir a Oracle e ainda assim ser bem-sucedido e extremamente bem suportado - Java não está de forma alguma sob o capricho da Oracle --- consulte: news.techworld.com/applications/3252787/ … A Oracle poderia se desfazer de todo o seu envolvimento com o Java e ainda viveria. Que outros fornecedores possuem uma plataforma .Net? Quem mais fornece um tempo de execução mono além do Xamarin? Java é o único deles não sujeito à ditadura e tem verdadeiro controle da comunidade, apoio da comunidade e administração da comunidade.
StartupGuy
1
@ Especificação Michael.M? Pertence à comunidade? Acho que você está errado - também acredito que a única razão pela qual o projeto OpenJDK não foi encerrado após a aquisição da Sun, foi a GPL. Java está na mão de ferro da Oracle, simplesmente porque o TCK não está disponível gratuitamente e é isso que é necessário para fazer uma JVM que se comporte como a JVM Oracle. Não tenho problemas com Mono ou De Icaza, mas não acho que a situação do Java seja muito melhor. O único projeto JVM alternativo com impulso morreu quando a IBM parou de suportá-lo.
Thorbjørn Ravn Andersen
8

Vou dizer Java também. Se você olhar para isso em termos de maturidade, muito mais tempo e esforço foram gastos pela Sun (e outros) para fazer a JVM funcionar em plataformas não Windows.

Em contraste, Mono é definitivamente um cidadão de segunda classe no ecossistema .NET.

Dependendo de quem são seus clientes-alvo, você também pode descobrir que há uma resistência real ao uso do Mono - a Novell oferece o mesmo tipo de suporte de fornecedor para o Mono que você obteria para Java ou .NET no Windows?

Se seu objetivo principal era hospedar seu serviço no Windows, faria sentido considerar essa escolha, mas, como seu objetivo principal é o Linux, parece-me meio óbvio.

warren_s
fonte
Eu tendo a concordar com Mono ser um cidadão de 2ª classe, mas não com a conclusão. Java existe há muito tempo e está repleto de peculiaridades legadas e problemas de gerenciamento de memória, sem mencionar que quase sempre escolhe a maneira mais prolixa de fazer algo. Ela também está estagnada (a linguagem) há anos e só recentemente começou a incorporar recursos que estão em .Net há anos. IMHO, é uma escolha entre dois males ... Suporte à plataforma Flakey com .Net ou um gigante desajeitado que é muito lento para evoluir e uma tarefa para codificar.
Básico de
7

Java foi projetado para ser multiplataforma; C # / .Net não era. Em caso de dúvida, use a ferramenta projetada para o seu propósito.

EDIT: para ser justo, o .NET foi projetado para funcionar em ambientes embarcados / PC / Server, de modo que é um tipo de plataforma cruzada. Mas não foi projetado para Linux.

AlexeyMK
fonte
3
bem, o C # é padronizado ISO, então a ideia era ter algo multiplataforma. A microsoft não queria desenvolver implementações para outras plataformas, mas foi deixado para outras partes, já que a linguagem é um padrão. a estrutura .Net é uma história mais complicada, no entanto.
zappan
Mono é uma boa implementação e DotGNU (para Mac também)
Andrei Rînea
1
zappan: ponto válido em C # (não sabia), mas .NET é assustadoramente enorme. Admito que não tenho experiência pessoal aqui.
AlexeyMK
@zappan - de uma perspectiva prática, é irrelevante que o C # seja padronizado (ou que o Mono seja um clone muito bom do C #). A portabilidade da plataforma envolve toda a plataforma (incluindo bibliotecas e ecossistema de ferramentas), não apenas a linguagem em si. Nesse sentido, .Net definitivamente não é totalmente multiplataforma.
Mikera de
7

Acho que a resposta é "depende". Java roda em quase tudo, mas .NET / Mono são (IMHO) uma estrutura melhor para a área de trabalho. Portanto, acho que a resposta realmente depende das plataformas que você planeja almejar.

Giovanni Galbo
fonte
Área de trabalho não é sinônimo de janelas, embora ocupe a maior parte do espaço da área de trabalho.
ZOXIS
6

Para adicionar um pouco mais à conversa, o Java é mais portátil se você permanecer cerca de uma versão atrás - o Java 5 ainda tem muitos recursos excelentes, então você pode esperar pelo Java 6 e ainda ter muito alcance em termos de linguagem e bibliotecas para desenvolver com. O Mac é a plataforma principal que pode levar algum tempo para se atualizar até a versão mais recente do Java.

Java também tem um excelente corpo de padrões que desenvolve a plataforma de forma inteligente com base em informações de muitas empresas diferentes. Este é um recurso frequentemente esquecido, mas mantém até mesmo os novos recursos funcionando bem em várias plataformas e fornece uma grande variedade de suporte de biblioteca para algumas coisas esotéricas (como extensões opcionais).

Kendall Helmstetter Gelner
fonte
O OS X 10.6 agora está totalmente atualizado com o lançamento do Sun Java 6.
Thorbjørn Ravn Andersen,
5

Eu votaria para que Java seja mais portátil do que C #. Java definitivamente também possui um conjunto muito rico de bibliotecas padrão. Também existe um amplo conjunto de bibliotecas de terceiros de código aberto, como as fornecidas pelo projeto Jakarta ( http://jakarta.apache.org/ ).

Todos os suspeitos usuais existem para CI, teste de unidade, etc. também. O suporte IDE de plataforma cruzada também é muito bom com produtos como Eclipse, Netbeans, IntelliJ IDEA etc.


fonte
4

Existem outras opções de idioma também. Eu gostei bastante do Python, que funciona bem no Windows, Linux e Mac, e tem um rico conjunto de bibliotecas.

George V. Reilly
fonte
Sim, eu adoro Python e tem Django que gosto para aplicativos da web, mas algumas coisas o tornaram inaceitável, o mais importante sendo o GIL na implementação C padrão do interpretador. Eu tenho uma série de operações que se beneficiam muito da computação paralela em máquinas com vários núcleos e teria que gerar processos para fazer isso no cPython.
Hanno Fietz
3

Embora Mono tenha sua cota de problemas , acho que ele tem uma história de compatibilidade entre plataformas melhor, especialmente SE você depender da invocação de plataforma nativa.

Não há palavras suficientes no Stack Overflow para enfatizar o quanto é mais suave ter algo nativo chamado e executado em .NET / Mono em (pelo menos na minha experiência 3 ...) várias plataformas versus o esforço Java equivalente.

prejudicial ao menino
fonte
Eu concordo, chamar código específico de plataforma de .NET / Mono é super fácil, desde que possa ser chamado de C. Com CXXI ​​(pronuncia-se sexy) está se tornando uma moleza chamar código C ++ também. tirania.org/blog/archive/2011/Dec-19.html
Justin
2

Gatorhall , você tem alguns dados para fazer backup disso?

Atuação. Java e .Net têm nível de desempenho semelhante devido à máquina virtual, mas JVM normalmente tem melhor desempenho devido a anos e anos de otimização.

Histórico: Sou um cara do Windows desde o Windows 3.1 e atualmente um usuário Linux (ainda executando o Windows 7, ótimo sistema operacional, em uma VM para Visual Studio 2010 e outras ferramentas).

O ponto: eu e muitos usuários (windows, linux, etc) eu sei, posso discordar de você. O Java tende a ter um desempenho mais lento, mesmo em um aplicativo de desktop linux; o ASP.NET tem um desempenho mais rápido que as páginas do servidor Java muitas vezes. Alguns podem concordar que mesmo o PHP não compilado tem um desempenho melhor em vários cenários.

Java é mais multiplataforma? Não tenho dúvidas sobre isso (a história volta isso), mas mais rápido (não dizendo que o .NET é) não é tão certo e gostaria de ver alguns benchmarks reais.

Rui Marques
fonte
outra questão que pode ajudar e, claro, há o tiroteio de idiomas . A JVM pode ser mais otimizada, mas está próxima (especialmente no Windows). Benchmarks para ASP.NET vs J2EE ou JSP são ainda mais suspeitos, mas não tenho problemas em acreditar que o ASP.NET é muito mais rápido, mesmo que os tempos de execução sejam empatados.
Justin