Pergunta

Quanto menos as bibliotecas existem para Mono do que para Java?

Me falta a visão geral sobre alternativas, mas eu tenho muito mais liberdade de escolha para o meu próximo projeto.Eu estou olhando para o disco rígido fatos técnicos nas áreas de

  • o desempenho (por exemplo, me disseram que Java é bom para rosqueamento, e eu ouço o tempo de execução do código de otimização ficou muito boa, mais recentemente, para .NET)
  • mundo real portabilidade (é, tanto serve para ser portátil, o que há de Catch-22 para cada um deles?)
  • ferramenta de disponibilidade (CI, construir automação, depuração, IDE)

Eu sou especialmente olhando para o que você realmente experimentou em seu próprio trabalho, ao invés de incluir as coisas que eu poderia google.A minha candidatura seria um serviço de back-end de processamento de grandes quantidades de dados de série de tempo.

A minha principal plataforma de destino seria o Linux.

Editar: A frase a minha pergunta de forma mais adequada, eu estou interessado em todo o pacote (3ª parte bibliotecas etc.), não só a língua.Para as bibliotecas, que, provavelmente, tudo se resume a uma pergunta: "quanto menos as bibliotecas existem para Mono do que para Java"?


FYI, eu tenho desde que escolhido Java para este projeto, porque ele parecia apenas mais uma batalha usado na portabilidade de lado e tem sido em torno de um tempo em sistemas mais antigos, também.Eu estou um pouquinho triste com isso, porque eu sou muito curioso sobre C# e eu adoraria ter feito algum projeto grande, mas talvez da próxima vez.Obrigado por todos os conselhos.

Foi útil?

Solução

Well....Java na verdade, é mais portátil.Mono não é aplicada em toda a parte, e ele fica atrás a implementação da Microsoft de forma significativa.O Java SDK parece ficar em melhor sincronização entre plataformas (e funciona em mais plataformas).

Eu gostaria também de dizer Java tem mais uma ferramenta de disponibilidade entre todas essas plataformas, embora há uma abundância de ferramentas disponíveis .NET em plataformas Windows.

Atualização para 2014

Eu ainda manter essa opinião em 2014.No entanto, eu vou qualificar esta dizendo que só agora estou começando a prestar atenção ao Mono, depois de um longo tempo sem se importar realmente, para que haja melhorias no Mono runtime (ou ecossistema) que eu não tenha sido informada.AFAIK, ainda não há suporte para o WPF, WCF, WF, do WIF.O Mono pode executar no iOS, mas para o meu conhecimento, o Java ainda é executado em muito mais plataformas do que Mono.Além disso, o Mono está começando a ver alguns muito melhores ferramentas (Xamarin), e a Microsoft parece ter muito mais multi-plataforma tipo de atitude e vontade de trabalhar com parceiros para torná-los complementar, em vez de competitiva (por exemplo, Mono vai ser muito importante parte do próximo OWIN/Helios ASP.NET paisagem).Eu suspeito que, nos próximos anos, as diferenças na portabilidade vai diminuir rapidamente, especialmente depois .NET sendo de código aberto.

Atualização para 2018

A minha opinião sobre isso está começando a ir por outro caminho.Eu acho .NET, em termos gerais, particularmente com .NET Core, começou a alcançar a "portabilidade" paridade com Java.Há esforços em andamento para trazer o WPF .NET Núcleo para algumas plataformas, e .NET Núcleo propriamente dito é executado em muitas plataformas.Mono (de propriedade Xamarin, que agora é de propriedade da Microsoft) é mais maduro e polido produto do que nunca, e a escrita de aplicações que funcionam em várias plataformas não é mais o domínio de profunda gnose de .NET hackery, mas é relativamente simples esforço.Existem, claro, as bibliotecas e os serviços e aplicativos que são apenas de Windows ou só pode ter como alvo específico as plataformas, mas o mesmo pode ser dito de Java (em sentido amplo).

Se eu estivesse no OP de sapatos neste ponto, eu posso pensar em nenhuma razão inerente às línguas ou em tecnologia pilhas de si que me impediria de escolha .NET para qualquer aplicação que vai para a frente a partir deste ponto.

Outras dicas

Mono faz um trabalho melhor em segmentação de plataformas quero de suporte.De resto, é tudo subjetivo.

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

Eu poderia compartilhá-lo ainda mais lugares: O Windows Phone 7 - Wii - XBox - PS3 - etc.

O biggie é iOS desde MonoTouch funciona fantasticamente.Eu não sei de qualquer maneira boa de destino iOS com Java.Você não pode direcionar o Windows Phone 7 com Java, portanto, eu diria que os dias de Java ser melhor para dispositivos móveis estão atrás de nós.

O maior fator para mim, contudo, é de produtividade pessoal (e felicidade).C# como linguagem está anos à frente do Java IMHO e o .NET framework é uma alegria para usar.A maior parte do que está sendo adicionado no Java 7 e Java 8 tem sido em C# de anos.JVM linguagens como Scala e Clojure (ambos disponíveis no CLR) são bastante agradável embora.

Eu vejo Mono como uma plataforma em seu próprio direito (um grande) e tratar .LÍQUIDA como a implementação da Microsoft de Mono no Windows.Isso significa que eu desenvolver e testar em Mono primeiro.Isso funciona maravilhosamente.

Se o Java e .NET (Mono digamos) foram projetos de código Aberto, sem qualquer suporte corporativo, eu escolheria Mono sobre Java de cada vez.Eu acredito que é apenas uma melhor plataforma.

Tanto .NET/Mono e a JVM são ótimas opções, embora eu pessoalmente uso de algum outro idioma que não o Java JVM.

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

Problema:Desempenho.

**Resposta:Tanto a JVM e o CLR executa melhor do que detratores dizem que fazem.Eu diria que a JVM executa melhor.Mono é geralmente mais lenta do que .NET (embora não sempre).

Eu, pessoalmente, iria tomar ASP.NET MVC sobre J2EE qualquer dia, tanto como desenvolvedor e o usuário final.Suporte para O Google Native Client é muito legal também.Também, eu sei que a má GUI de desempenho para a área de trabalho Java é suposto ser uma coisa do passado, mas eu continuo a encontrar lentos.Então, novamente, eu poderia dizer o mesmo para WPF.GTK# é muito rápido, então não há nenhuma razão para ser lento.

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

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

Praticamente cada biblioteca Java (incluindo o JDK) é executado apenas dândi no .NET/Mono graças a IKVM.NET.Esta peça de tecnologia é uma verdadeira maravilha.A integração é incrível;você pode usar uma biblioteca Java como era nativo.Eu só tinha que usar bibliotecas Java em um .NET app embora.A .NET/Mono ecossistema geralmente oferece mais do que eu preciso.

Problema:Java tem de melhor (mais) ferramentas de apoio

Resposta:Não no Windows.Caso contrário, eu concordo.O MonoDevelop é agradável embora.

Eu quero dar um grito para MonoDevelop;é uma jóia.MonoDevelop integra a maioria das ferramentas que deseja utilizar, incluindo a conclusão de código (intellisense), Git/integração do Subversion, suporte para testes de unidade, integração de SQL, depuração, fácil de refatoração, e montagem de navegação com on-the-fly descompilação.É maravilhoso para usar o mesmo ambiente para tudo, desde a web do lado do servidor para aplicativos móveis.

Problema:Compatibilidade entre plataformas.

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

Desenvolver para Mono primeiro e implantar .NET no Windows, se você gosta.Se você comparar .LÍQUIDO a partir do MS para o Java que, em seguida, Java, tem a vantagem em termos de consistência entre plataformas.Veja a próxima resposta...

Problema:Mono gal .LÍQUIDA.

Resposta:Não, não. IMHO, esta é uma afirmado muitas vezes, mas a declaração incorreta.

O Mono distribuição da Xamarin enviado com C#, VB.NET, F#, IronPython, IronRuby, e acho que talvez Boo fora da caixa.O Mono compilador C# é completamente atualizado com MS.O Mono VB.NET compilador gal MS versão.Outros compiladores são os mesmos em ambas as plataformas (como o são outros .A NET languages como Nemerle, Boo, e Phalanger (PHP) ).

Mono é fornecido com um monte de reais Microsoft código escrito, incluindo o Dynamic Language Runtime (DLR), Managed Extensibility Framework (MEF), F#, e ASP.NET MVC.Porque o Razor não é Open Source, Mono atualmente acompanha o MVC2, mas MVC3 funciona em Mono apenas multa.

O núcleo Mono plataforma manteve o ritmo .NET ou muitos anos e a compatibilidade é impressionante.Você pode usar o completo C# 4.0 linguagem e até mesmo alguns C# 5.0 recursos de hoje.Na verdade, Mono, muitas vezes, leva .LÍQUIDA de muitas maneiras.

Mono implementa partes do CLR spec que até mesmo a Microsoft não oferece suporte (como de 64 bits matrizes).Uma das mais empolgantes novas peças de tecnologia .Rede mundial é Rosylyn.Mono ofereceu o compilador C# como um serviço por muitos anos.Alguns dos que Rosylyn oferece está disponível através de NRefractory bem.Um exemplo foram Mono ainda está por vir seria o SIMD instruções para acelerar o desempenho em jogos.

A Microsoft oferece uma série de produtos em cima .NET que não estão disponíveis no modo Mono, que é o equívoco sobre Mono atraso vem.O Windows Presentation Foundation (WPF), Entity Framework (EF), o WCF (Windows Communication Foundation) são exemplos de produtos que não funcionam, ou são mal suportado, em Mono.A solução óbvia é usar multi-plataforma alternativas como o GTK#, NHibernate, e ServiceStack em vez disso.

Problema:A Microsoft é do mal.

Resposta:Verdade.Então o que.

Muitas pessoas oferecem as seguintes razões para evitar usar Mono:

1) Você não deve usar Mono porque o Microsoft tech deve ser evitado

2) Mono é uma merda, porque ele não permite que você use toda a tecnologia que a Microsoft oferece

Para mim, é evidente que essas afirmações são incompatíveis.Eu rejeitar a primeira afirmação, mas vai ignorar o argumento aqui.A segunda afirmação é verdadeira de todos .NET alternativas.

A JVM é uma grande plataforma e a explosão da JVM línguas é impressionante.Use o que te faz feliz.Por agora, que muitas vezes é .NET/Mono para mim.

Eu realmente desenvolver .NET, execute todos os meus testes em Mono, e, em seguida, em Windows.De que maneira eu sei que as minhas aplicações são de plataforma cruzada.Eu tenho feito isso com muito sucesso em ambos os ASP.NET e aplicações Winforms.

Eu não estou realmente certo de onde algumas pessoas ficam com a impressão Mono é tão horrível, mas ele certamente tem feito isso de trabalho em meus casos e opiniões.É verdade que você vai ter um pouco de lag para o maior e mais recente invenção .LÍQUIDO do mundo, mas até agora, .NET 2.0 no Windows e no Linux é muito sólido para mim.

Tenha em mente, há, obviamente, muitas peculiaridades para isso, mas a maioria deles vêm de certificar-se que você está escrevendo código portátil.Enquanto os quadros de fazer um grande trabalho de abstraindo de qual sistema operacional você está executando, pequenas coisas, como o Linux sensibilidade de maiúsculas e minúsculas nos caminhos e nomes de arquivo demora um pouco para se acostumar, como fazer coisas como permissões.

.NET é definitivamente muito plataforma cruzada devido ao Mono baseado na minha experiência até agora.

Java, na verdade, é como multi-plataforma, como toda a gente diz que é.Há uma implementação da JVM para qualquer mainstream OS lá fora (mesmo o Mac OS X, finalmente), e todas elas funcionam muito bem.E há toneladas de ferramentas de código aberto para fora lá que são apenas como plataforma cruzada.

O único problema é que existem alguns nativos operações que você não pode fazer em Java sem escrever algumas DLLs ou SOs.É muito raro que estes surgem na prática.Em todos esses casos, porém, eu tenho sido capaz de contorná-lo pela geração de nativos processos e capturas do ecrã os resultados.

Eu acho que a questão é formulada incorretamente.C# vsJava é muito menos interessante em termos de plataformas de uso do que é (a) quais plataformas você precisa de suporte, e (b) considerando as bibliotecas centrais e disponíveis bibliotecas de terceiros.A linguagem é quase o menos importante parte do processo de tomada de decisão.

Java é a melhor escolha para desenvolvimento multi-Plataforma.

  • Desempenho.E em Java .Net tem desempenho semelhante, devido à máquina virtual, mas JVM normalmente tem um desempenho melhor devido a anos e anos de otimização.

  • A biblioteca.Embora isso depende de sua tarefa, o Java tem muito mais open source ou bibliotecas de terceiros disponíveis.Para o servidor de Aplicação J2EE, Spring, Struts, etc.Para GUI, embora .Net oferece Win32 camada de API, mas isso faz com que problemas de compatibilidade.Java Swing, SWT, AWT, etc.Ele funciona na maioria dos casos.

  • De compatibilidade.Esta é a chave de questões que precisam ser considerados ao desenvolver o programa multi-plataforma.Duas problema:primeiro, compatibilidade com a plataforma.Java ainda ganha desde o JDK está bem conservado, único e original da empresa Sun.Mono não é mantida pelo MS, então você não tem nenhuma garantia ainda para a atualização de compatibilidade.2.Compatibilidade com versões anteriores.Sol mantém uma boa reputação em seu compatibilidade com versões anteriores, embora, às vezes, isso parece muito rígida e diminui o ritmo.

  • As ferramentas.Java tem uma boa plataforma cruzada IDEs.Netbeans, Eclipse, etc.A maioria deles são grátis.VS Studio é bom, mas apenas no Windows, e não o custo um pouco.Ambos fornece boa testes de unidade, depurações, perfis, etc.

Portanto, eu sugiro que o Java é a melhor escolha.Como um show de caso, existem alguns famosos desktop cruz-plataformas de aplicações desenvolvida pela sun:Vuze, Limewire, BlogBridge, CrossFTP, para não mencionar as IDEs.Como para .Net, eu tenho conhecimento limitado sobre o sucesso de aplicativos.

Eu tenho a mesma pergunta fora-de-final e, IMHO, .NET/Mono parece ser uma opção melhor, simplesmente porque O Mono tem um grande registro de multi-plataforma de aplicações de ambiente de trabalho (ao contrário de Java) e, claro, Mono está melhorando aos trancos e barrancos nos dias de hoje.

O que eu vou dizer Java bem.Se você olhar para ele em termos de maturidade, muito mais tempo e esforço tem sido gasto pelo Sol (e outros), chegando a JVM para trabalhar em plataformas não Windows.

Em contraste, o Mono é, definitivamente, um cidadão de segunda classe no .LÍQUIDA do ecossistema.

Dependendo de quem são seus clientes-alvo, você pode encontrar também existe um grande movimento contra o uso de Mono - não Novell oferecer o mesmo tipo de suporte do fornecedor para Mono que você teria para Java ou .NET no Windows?

Se foram, principalmente, a segmentação de hospedagem de seu serviço no Windows, não faria sentido considerar esta escolha, mas já que você está segmentando Linux, principalmente, parece que o tipo de um acéfalo para mim.

Java foi projetada para ser multi-plataforma;C#/.Net não estava.Quando em dúvida, use a ferramenta que foi projetada para o seu propósito.

EDITAR:na justiça, .NET foi projetado para trabalhar embarcados/PC/ambientes de Servidor, de modo que é uma ESPÉCIE de plataforma cruzada.Mas ele não foi projetado para Linux.

Eu acho que a resposta é "depende". O Java é executado em praticamente qualquer coisa, mas .NET/Mono são (IMHO) uma melhor estrutura para a área de trabalho.Então eu acho que a resposta depende de quais plataformas você planeja segmentação.

Para adicionar um pouco mais a conversa, Java é mais portátil se você permanecer sobre uma versão trás - Java 5 ainda tem muitos excelentes recursos para que você pode esperar para o Java 6 e ainda tem um monte de gama em termos de linguagem e bibliotecas para desenvolver com.O Mac é a principal plataforma que pode levar algum tempo para apanhar a última versão de Java.

Java também tem um excelente corpo de padrões que inteligentemente cresce a plataforma com base na entrada de muitas empresas diferentes.Isso é muitas vezes esquecido recurso, mas ele mantém até os novos recursos de trabalho bem através de múltiplas plataformas e oferece um monte de faixa na biblioteca de suporte para alguns esotéricos coisas (como extensões opcionais).

Eu daria um voto para Java ser mais portátil do que o C#.Java, definitivamente, também tem um conjunto muito rico de bibliotecas padrão.Há também um amplo conjunto de código aberto de 3ª parte bibliotecas lá fora, tais como os fornecidos pelo projeto Jakarta (http://jakarta.apache.org/).

Todos os suspeitos de sempre existir para CI, testes de Unidade, etc também.Plataforma cruzada IDE de apoio também é muito bom com os gostos do Eclipse, Netbeans, IntelliJ IDEA, etc.

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

Enquanto Mono tem o seu parte dos problemas Eu acho que ele tem um melhor compatibilidade de plataformas história, especialmente SE você tiver confiança no nativo de invocação de plataforma.

Não há palavras suficientes no Estouro de Pilha ao estresse quanto mais suave é para ter algo nativo chamado e executado .NET/Mono (pelo menos na minha experiência, 3...) várias plataformas vs.o equivalente Java esforço.

Gatorhall você tem alguns dados para fazer o que?

Desempenho.E em Java .Net tem desempenho semelhante, devido à máquina virtual, mas JVM normalmente tem um desempenho melhor devido a anos e anos de otimização.

Plano de fundo:Eu sou um cara do Windows desde o Windows 3.1 e, atualmente, um usuário Linux (ainda em execução no Windows 7, OS grandes, em uma VM para o Visual Studio 2010 e outras ferramentas).

O ponto:eu e um monte de usuários (windows, linux, etc) eu sei, podem discordar de você.Java tende a realizar mais lenta, mesmo em um desktop linux a aplicação, ASP.NET executar mais rápido do que o java server pages muitas das vezes.Alguns podem concordar que ainda não compilados PHP executa melhor do que eu diversos cenários.

Java é mais multi-plataforma?Eu não tenho dúvidas sobre isso (a história de volta a este), mas mais rápido (não dizendo .NET é) não é tão certo e eu gostaria de ver alguns reais valores de referência.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top