크로스 플랫폼 개발에는 .NET/Mono 또는 Java가 더 나은 선택입니까?[닫은]

StackOverflow https://stackoverflow.com/questions/61559

문제

Java보다 Mono의 라이브러리 수가 얼마나 적나요?

두 가지 대안에 대한 개요가 부족하지만 다음 프로젝트에 대한 선택의 자유가 거의 있습니다.나는 다음 분야에서 어려운 기술적 사실을 찾고 있습니다.

  • 성능(예를 들어 Java가 스레딩에 적합하다고 들었고 최근 .NET에 대한 런타임 코드 최적화가 매우 좋아졌다고 들었습니다)
  • 현실 세계 이식성(둘 다 이식성을 의미합니다. 각각 Catch-22는 무엇입니까?)
  • 도구 가용성(CI, 빌드 자동화, 디버깅, IDE)

나는 특히 내가 구글링할 수 있는 것보다 당신이 자신의 일에서 실제로 경험한 것을 찾고 있습니다.내 애플리케이션은 시계열의 대량 데이터를 처리하는 백엔드 서비스입니다.

내 주요 대상 플랫폼은 Linux입니다.

편집하다: 내 질문을 좀 더 적절하게 표현하자면, 나는 언어뿐만 아니라 전체 패키지(타사 라이브러리 등)에 관심이 있습니다.라이브러리의 경우 이는 아마도 "Java보다 Mono용 라이브러리가 얼마나 적습니까?"라는 질문으로 귀결될 것입니다.


참고로 저는 이 프로젝트에서 Java를 선택했습니다. 왜냐하면 Java는 이식성 측면에서 더 낡아 보였고 이전 시스템에서도 한동안 사용되었기 때문입니다.저는 C#에 대해 매우 호기심이 많고 C#으로 대규모 프로젝트를 수행하고 싶지만 아마도 다음번에는 가능하기 때문에 조금 아쉽습니다.모든 조언에 감사드립니다.

도움이 되었습니까?

해결책

음....Java는 실제로 이식성이 더 좋습니다.Mono는 모든 곳에서 구현되지 않으며 Microsoft 구현보다 크게 뒤떨어집니다.Java SDK는 플랫폼 전반에 걸쳐 더 나은 동기화를 유지하는 것으로 보입니다(그리고 더 많은 플랫폼에서 작동합니다).

또한 Windows 플랫폼의 .NET에 사용할 수 있는 도구가 많지만 Java는 모든 플랫폼에서 더 많은 도구를 사용할 수 있다고 말하고 싶습니다.

2014년 업데이트

나는 2014년에도 이 의견을 유지하고 있다.그러나 저는 오랫동안 별로 신경 쓰지 않았으나 이제 막 Mono에 관심을 갖기 시작했다고 말함으로써 이를 한정하겠습니다. 따라서 제가 아직 구현하지 못한 Mono 런타임(또는 생태계) 개선이 있을 수 있습니다. 인식.AFAIK, WIF의 WPF, WCF, WF는 아직 지원되지 않습니다.Mono는 iOS에서 실행될 수 있지만 제가 아는 한 Java 런타임은 여전히 ​​Mono보다 훨씬 더 많은 플랫폼에서 실행됩니다.또한 Mono는 훨씬 향상된 도구(Xamarin)를 보기 시작했으며 Microsoft는 파트너와 협력하여 경쟁보다는 무료로 만들려는 훨씬 더 크로스 플랫폼적인 태도와 의지를 갖고 있는 것 같습니다(예를 들어 Mono는 다가오는 OWIN/Helios ASP.NET 환경에서 매우 중요한 부분입니다.앞으로 몇 년 안에 이식성의 차이가 급속히 줄어들 것이라고 생각합니다. 특히 .NET이 오픈 소스로 공개된 이후에는 더욱 그렇습니다.

2018년 업데이트

이에 대한 나의 견해는 다른 방향으로 움직이기 시작했습니다.저는 .NET, 특히 .NET Core를 통해 광범위하게 Java와 "이식성 패리티"를 달성하기 시작했다고 생각합니다.일부 플랫폼의 경우 WPF를 .NET Core로 가져오려는 노력이 진행 중이며 현재 .NET Core 자체는 매우 많은 플랫폼에서 실행됩니다.Mono(Xamarin 소유, 현재는 Microsoft 소유)는 그 어느 때보다 성숙하고 세련된 제품이며, 여러 플랫폼에서 작동하는 애플리케이션을 작성하는 것은 더 이상 .NET 해커의 심층적인 지식 영역이 아니지만 상대적으로 간단한 노력입니다. .물론 Windows 전용이거나 특정 플랫폼만 대상으로 할 수 있는 라이브러리, 서비스 및 애플리케이션이 있습니다. 그러나 Java(광범위하게)에 대해서도 마찬가지입니다.

내가 이 시점에서 OP의 입장이었다면 이 시점부터 앞으로 어떤 응용 프로그램에서든 .NET을 선택하지 못하게 하는 언어나 기술 스택 자체에 내재된 이유가 없다고 생각할 수 있습니다.

다른 팁

Mono는 제가 지원하고 싶은 플랫폼을 타겟팅하는 데 더 나은 역할을 합니다.그 외에는 모두 주관적입니다.

저는 다음 플랫폼에서 C# 코드를 공유합니다.- iOS (iPhone/iPad) - Android- 웹 (html5) -Mac (OS X) - Linux- Windows

더 많은 곳에서 공유할 수 있습니다.- Windows Phone 7 -Wii -Xbox -PS3- 등

가장 큰 것은 iOS입니다. 모노터치 환상적으로 작동합니다.Java로 iOS를 타겟팅하는 좋은 방법을 모르겠습니다.Java를 사용하면 Windows Phone 7을 대상으로 할 수 없으므로 Java가 모바일에 더 적합한 시대는 지났다고 말하고 싶습니다.

하지만 나에게 가장 큰 요인은 개인의 생산성(그리고 행복)입니다.언어로서의 C#은 Java IMHO보다 몇 년 앞서 있으며 .NET 프레임워크는 사용하기에 좋습니다.Java 7 및 Java 8에 추가되는 대부분의 내용은 수년 동안 C#에 있었습니다.Scala 및 Clojure(둘 다 CLR에서 사용 가능)와 같은 JVM 언어는 꽤 훌륭합니다.

나는 Mono를 그 자체의 플랫폼(훌륭한 플랫폼)으로 보고 .NET을 Windows에서 Mono의 Microsoft 구현으로 간주합니다.이는 내가 먼저 Mono에서 개발하고 테스트한다는 것을 의미합니다.이것은 훌륭하게 작동합니다.

Java와 .NET(예를 들어 Mono)이 회사의 지원이 없는 오픈 소스 프로젝트라면 저는 매번 Java 대신 Mono를 선택할 것입니다.나는 그것이 더 나은 플랫폼이라고 믿습니다.

.NET/Mono와 JVM 모두 훌륭한 선택이지만 개인적으로는 JVM에서 Java 이외의 다른 언어를 사용하고 싶습니다.

다른 의견에 대한 내 의견은 다음과 같습니다.

문제:성능.

**답변:JVM과 CLR 모두 비방하는 사람들이 말하는 것보다 더 나은 성능을 발휘합니다.JVM의 성능이 더 좋다고 말하고 싶습니다.Mono는 일반적으로 .NET보다 느립니다(항상 그런 것은 아님).

저는 개인적으로 개발자와 최종 사용자로서 J2EE보다 ASP.NET MVC를 언제든지 사용할 것입니다.을지 지하다 구글 네이티브 클라이언트 꽤 멋지기도 해요.또한 데스크톱 Java 앱의 GUI 성능이 좋지 않다는 것은 과거의 일이지만 계속 느린 앱을 찾는다는 것을 알고 있습니다.그렇다면 다시 WPF에 대해서도 같은 말을 할 수 있습니다.GTK#은 상당히 빠르므로 느려질 이유가 없습니다.

문제:Java에는 더 큰 규모의 라이브러리 생태계가 있습니다.

답변:아마도 사실일 수도 있지만 실제로는 문제가 되지 않습니다.

실제로 모든 Java 라이브러리(JDK 포함)는 다음 덕분에 .NET/Mono에서 멋지게 실행됩니다. IKVM.NET.이 기술은 정말 놀라운 것입니다.통합은 놀랍습니다.기본 라이브러리와 마찬가지로 Java 라이브러리를 사용할 수 있습니다.하지만 하나의 .NET 앱에서만 Java 라이브러리를 사용해야 했습니다..NET/Mono 생태계는 일반적으로 필요한 것보다 더 많은 것을 제공합니다.

문제:Java는 더 나은(더 광범위한) 도구 지원을 제공합니다.

답변:Windows에서는 아닙니다.그렇지 않으면 동의합니다.MonoDevelop은 훌륭합니다.

나는 ~에게 박수를 보내고 싶다 모노개발;그것은 보석이다.MonoDevelop은 코드 완성(인텔리센스), Git/Subversion 통합, 단위 테스트 지원, SQL 통합, 디버깅, 손쉬운 리팩토링, 즉각적인 디컴파일을 통한 어셈블리 검색 등 내가 사용하고 싶은 대부분의 도구를 통합합니다.서버측 웹부터 모바일 앱까지 모든 것에 동일한 환경을 사용한다는 것은 멋진 일입니다.

문제:플랫폼 간 호환성.

답변:Mono는 Windows를 포함한 모든 플랫폼에서 단일 코드 기반입니다.

먼저 Mono용으로 개발하고 원하는 경우 Windows에서 .NET에 배포하세요.하지만 MS의 .NET을 Java와 비교하면 플랫폼 간 일관성 측면에서 Java가 우위에 있습니다.다음 답변을 참조하세요...

문제:모노는 .NET보다 지연됩니다.

답변:아니 그렇지 않아. IMHO, 이것은 자주 언급되지만 잘못된 진술입니다.

Xamarin의 Mono 배포판에는 C#, VB.NET, F#, IronPython, IronRuby가 포함되어 있으며 Boo도 바로 사용할 수 있을 것 같습니다.Mono C# 컴파일러는 MS와 완전히 최신 버전입니다.Mono VB.NET 컴파일러는 MS 버전보다 지연됩니다.다른 컴파일러는 두 플랫폼 모두에서 동일합니다(Nemerle, Boo 및 Phalanger(PHP)와 같은 다른 .NET 언어도 마찬가지).

Mono는 DLR(Dynamic Language Runtime), MEF(Managed Extensibility Framework), F# 및 ASP.NET MVC를 포함하여 실제로 Microsoft에서 작성한 많은 코드와 함께 제공됩니다.Razor는 오픈 소스가 아니기 때문에 Mono는 현재 MVC2와 함께 제공되지만 MVC3은 Mono에서 잘 작동합니다.

핵심 Mono 플랫폼은 수년 동안 .NET과 보조를 맞춰 왔으며 호환성이 인상적입니다.현재 전체 C# 4.0 언어는 물론 일부 C# 5.0 기능도 사용할 수 있습니다.실제로 Mono는 여러 면에서 .NET을 선도하는 경우가 많습니다.

Mono는 Microsoft에서도 지원하지 않는 CLR 사양의 일부(예: 64비트 배열)를 구현합니다..NET 세계에서 가장 흥미로운 새로운 기술 중 하나는 로실린.Mono는 수년 동안 C# 컴파일러를 서비스로 제공해 왔습니다.Rosylyn이 제공하는 것 중 일부는 다음을 통해 제공됩니다. N내화물 또한.Mono가 아직 앞서 있다는 예는 게임 성능을 가속화하기 위한 SIMD 지침입니다.

Microsoft는 Mono에서 사용할 수 없는 .NET 기반의 여러 제품을 제공합니다. 이는 Mono 지연에 대한 오해에서 비롯되었습니다.WPF(Windows Presentation Foundation), EF(Entity Framework), WCF(Windows Communication Foundation)는 Mono에서 작동하지 않거나 제대로 지원되지 않는 제품의 예입니다.확실한 해결책은 대신 GTK#, NHibernate 및 ServiceStack과 같은 크로스 플랫폼 대안을 사용하는 것입니다.

문제:마이크로소프트는 악마다.

답변:진실.그래서 뭐.

많은 사람들이 Mono 사용을 피하는 이유를 다음과 같이 제시합니다.

1) Microsoft 기술을 피해야 하므로 Mono를 사용하면 안 됩니다.

2) Mono는 Microsoft가 제공하는 모든 기술을 사용할 수 없기 때문에 짜증납니다.

나에게는 이러한 진술이 양립할 수 없다는 것이 분명합니다.나는 첫 번째 진술을 거부하지만 여기서는 해당 주장을 건너뛰겠습니다.두 번째 설명은 모든 .NET 대안에 해당됩니다.

JVM은 훌륭한 플랫폼이며 JVM 언어의 폭발적인 증가는 놀랍습니다.당신을 행복하게 만드는 것을 사용하십시오.현재로서는 .NET/Mono인 경우가 많습니다.

저는 실제로 .NET에서 개발하고 모든 테스트를 먼저 Mono에서 실행한 다음 Windows에서 실행합니다.그렇게 하면 내 애플리케이션이 크로스 플랫폼이라는 것을 알 수 있습니다.저는 ASP.NET과 Winforms 응용 프로그램 모두에서 이 작업을 매우 성공적으로 수행했습니다.

어떤 사람들은 Mono가 너무 끔찍하다는 인상을 어디서 받았는지 잘 모르겠지만 제 경우와 의견으로는 확실히 제 역할을 했습니다. .NET의 최신 및 최고의 발명품에 대해 약간의 지연이 있을 것이라는 것은 사실입니다. 하지만 지금까지 Windows 및 Linux의 .NET 2.0은 나에게 매우 견고했습니다.

분명히 여기에는 많은 단점이 있지만 대부분은 이식 가능한 코드를 작성하는 데서 비롯됩니다.프레임워크는 실행 중인 OS를 추상화하는 훌륭한 작업을 수행하지만, Linux의 경로 및 파일 이름 대소문자 구분과 같은 작은 기능과 권한과 같은 기능에는 익숙해지는 데 약간의 시간이 걸립니다.

.NET은 지금까지의 내 경험을 바탕으로 한 Mono로 인해 매우 크로스 플랫폼입니다.

Java는 실제로 모든 사람들이 말하는 것처럼 크로스 플랫폼입니다.거의 모든 주류 OS(마지막으로 Mac OS X까지)에 대한 JVM 구현이 있으며 모두 정말 잘 작동합니다.그리고 크로스 플랫폼과 마찬가지로 수많은 오픈 소스 도구가 있습니다.

유일한 문제는 일부 DLL이나 SO를 작성하지 않고는 Java에서 수행할 수 없는 특정 기본 작업이 있다는 것입니다.실제로 이런 일이 발생하는 경우는 매우 드뭅니다.하지만 이러한 모든 경우에는 기본 프로세스를 생성하고 결과를 화면 스크래핑하여 문제를 해결할 수 있었습니다.

질문이 잘못 표현된 것 같아요.C#과Java는 (a) 어떤 플랫폼을 지원해야 하는지, (b) 핵심 라이브러리 및 사용 가능한 타사 라이브러리를 고려하는 것보다 크로스 플랫폼 사용 측면에서 훨씬 덜 흥미롭습니다.언어는 의사결정 과정에서 가장 덜 중요한 부분입니다.

Java는 크로스 플랫폼 개발에 더 나은 선택입니다.

  • 성능.Java와 .Net은 가상 머신으로 인해 성능 수준이 비슷하지만 JVM은 일반적으로 수년간의 최적화로 인해 성능이 더 좋습니다.

  • 도서관.이는 작업에 따라 다르지만 Java에는 훨씬 더 많은 오픈 소스 또는 타사 라이브러리를 사용할 수 있습니다.서버 앱, J2EE, Spring, Struts 등의 경우GUI의 경우 .Net이 Win32 계층 API를 제공하지만 이로 인해 호환성 문제가 발생합니다.자바에는 Swing, SWT, AWT 등이 있습니다.대부분의 경우에 작동합니다.

  • 호환성.이는 크로스 플랫폼 프로그램을 개발할 때 고려해야 할 주요 문제입니다.두 가지 문제:첫째, 플랫폼 호환성입니다.JDK는 원래 단일 회사인 Sun에서 잘 관리되므로 Java가 여전히 승리합니다.Mono는 MS에서 유지 관리하지 않으므로 아직 업데이트 호환성을 보장할 수 없습니다.2.하위 호환성.Sun은 이전 버전과의 호환성에 대해 좋은 평판을 유지하고 있지만 때로는 너무 경직되어 속도가 느려지는 경우도 있습니다.

  • 도구.Java에는 우수한 크로스 플랫폼 IDE가 있습니다.넷빈즈, 이클립스 등대부분은 무료입니다.VS Studio는 훌륭하지만 Windows에서만 가능하며 비용도 조금 들지 않습니다.둘 다 좋은 단위 테스트, 디버그, 프로필 등을 제공합니다.

따라서 저는 Java가 더 나은 선택이라고 제안합니다.예를 들어, Java에서 개발한 몇 가지 유명한 데스크톱 크로스 플랫폼 앱이 있습니다.Vuze, Limewire, BlogBridge, CrossFTP 등의 IDE는 말할 것도 없습니다..Net에 관해서는 그러한 성공 앱에 대한 지식이 제한되어 있습니다.

나는 늦게까지 같은 질문을 해왔고 IMHO, .NET/Mono가 더 나은 옵션인 것 같습니다. Mono는 크로스 플랫폼 데스크톱 애플리케이션에 대한 뛰어난 실적을 보유하고 있습니다. (Java와 반대로) 물론, 모노는 비약적으로 발전하고 있습니다 요즘에는.

자바도 말하겠습니다.성숙도 측면에서 보면 Sun(및 기타 업체)이 JVM을 Windows가 아닌 플랫폼에서 작동하도록 하는 데 훨씬 더 많은 시간과 노력을 들였습니다.

이와 대조적으로 Mono는 확실히 .NET 생태계에서 2등급 시민입니다.

대상 고객이 누구인지에 따라 Mono 사용에 대한 실질적인 반발이 있을 수도 있습니다. Novell은 Windows에서 Java 또는 .NET에 대해 얻을 수 있는 것과 동일한 종류의 Mono에 대한 지원을 제공합니까?

Windows에서 서비스 호스팅을 주로 목표로 삼고 있었다면 이 선택을 고려하는 것이 합리적일 것입니다. 그러나 Linux를 주로 목표로 삼고 있으므로 제게는 생각할 필요도 없는 일처럼 보입니다.

Java는 크로스 플랫폼으로 설계되었습니다.C#/.Net은 그렇지 않았습니다.확실하지 않은 경우 해당 목적에 맞게 설계된 도구를 사용하십시오.

편집하다:공평하게 말하면 .NET은 임베디드/PC/서버 환경에서 작동하도록 설계되었으므로 일종의 크로스 플랫폼입니다.그러나 Linux용으로 설계되지 않았습니다.

나는 대답이 "그것은 의존한다"고 생각합니다. Java는 거의 무엇이든 실행되지만 .NET/Mono는 데스크탑을위한 더 나은 프레임 워크입니다.따라서 대답은 실제로 어떤 플랫폼을 타겟팅할 계획인지에 따라 달라질 것 같습니다.

대화에 좀 더 덧붙이자면, Java는 한 버전 정도 뒤쳐져 있는 경우 이식성이 더 좋습니다. Java 5에는 여전히 뛰어난 기능이 많이 있으므로 Java 6을 기다릴 수 있고 개발할 언어 및 라이브러리 측면에서 여전히 많은 범위가 있습니다. 와 함께.Mac은 최신 Java 버전을 따라잡는 데 어느 정도 시간이 걸릴 수 있는 기본 플랫폼입니다.

Java에도 뛰어난 기능이 있습니다. 표준 기관 다양한 회사의 의견을 바탕으로 플랫폼을 지능적으로 성장시키는 것입니다.이것은 종종 간과되는 기능이지만 새로운 기능도 여러 플랫폼에서 잘 작동하도록 유지하고 일부 난해한 기능에 대한 라이브러리 지원에 광범위한 범위를 제공합니다(선택적 확장으로).

저는 C#보다 Java가 이식성이 더 좋다고 생각합니다.Java에는 확실히 매우 풍부한 표준 라이브러리 세트가 있습니다.Jakarta 프로젝트에서 제공하는 것과 같은 다양한 오픈 소스 타사 라이브러리도 있습니다(http://jakarta.apache.org/).

CI, 단위 테스트 등에 대한 모든 일반적인 용의자도 존재합니다.크로스 플랫폼 IDE 지원은 Eclipse, Netbeans, IntelliJ IDEA 등에서도 매우 좋습니다.

다른 언어 선택도 있습니다.저는 Windows, Linux, Mac에서 잘 작동하고 풍부한 라이브러리 세트를 갖춘 Python을 꽤 좋아하게 되었습니다.

Mono에는 문제의 몫 특히 네이티브 플랫폼 호출에 의존하는 경우 크로스 플랫폼 호환성이 더 좋다고 생각합니다.

Stack Overflow에는 여러 플랫폼과 .NET/Mono에서 네이티브를 호출하고 실행하는 것이 얼마나 매끄러운지 강조할 만큼 충분한 단어가 없습니다(적어도 내 경험으로는 3...).동등한 Java 노력.

게이터홀 그걸 백업할 데이터가 있나요?

성능.Java와 .Net은 가상 머신으로 인해 성능 수준이 비슷하지만 JVM은 일반적으로 수년간의 최적화로 인해 성능이 더 좋습니다.

배경:저는 Windows 3.1부터 Windows를 사용했으며 현재는 Linux 사용자입니다(Visual Studio 2010용 VM 및 기타 도구에서 여전히 훌륭한 OS인 Windows 7을 실행하고 있습니다).

요점:나와 내가 아는 많은 사용자(Windows, Linux 등)는 귀하의 의견에 동의하지 않을 수 있습니다.Java는 Linux 데스크톱 응용 프로그램에서도 느리게 수행되는 경향이 있지만 ASP.NET은 Java 서버 페이지보다 여러 번 더 빠르게 수행됩니다.어떤 사람들은 컴파일되지 않은 PHP라도 여러 시나리오에서 더 나은 성능을 발휘한다는 데 동의할 수 있습니다.

Java는 크로스 플랫폼에 더 가깝습니까?나는 이것에 대해 의심의 여지가 없지만(이에 대한 역사는) 더 빠르다는 것은 확실하지 않으며(.NET이 그렇다는 것은 아니지만) 실제 벤치마크를 보고 싶습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top