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

Mono를위한 라이브러리가 Java보다 얼마나 적습니까?

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

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

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

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

편집 :
내 질문을 더 적절하게 표현하기 위해 언어뿐만 아니라 전체 패키지 (타사 라이브러리 등)에 관심이 있습니다. 라이브러리의 경우 “Java보다 Mono에 라이브러리가 얼마나 적은가”라는 질문으로 귀결 될 수 있습니다.


참고로, 저는이 프로젝트를 위해 Java를 선택했습니다. 이식성 측면에서 더 닳아 보였고 이전 시스템에서도 한동안 사용되어 왔기 때문입니다. 저는 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 환경에서 매우 중요한 부분). 앞으로 몇 년 안에 이식성의 차이가 빠르게 줄어들 것이라고 생각합니다.

2018 년 업데이트

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

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


답변

Mono는 내가 지원하고 싶은 플랫폼을 더 잘 겨냥합니다. 그 외에는 모두 주관적입니다.

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

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

MonoTouch 가 환상적으로 작동하기 때문에 가장 큰 것은 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를 선택합니다. 나는 그것이 더 나은 플랫폼이라고 믿습니다.

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

다른 의견에 대한 나의 견해 :

문제 : 성능.

** 답변 : JVM과 CLR 모두 비방하는 사람들이 말하는 것보다 더 나은 성능을 보입니다. JVM이 더 잘 수행한다고 말할 수 있습니다. Mono는 일반적으로 .NET보다 느립니다 (항상 그런 것은 아닙니다).

저는 개인적으로 개발자이자 최종 사용자로서 J2EE를 통해 ASP.NET MVC를 사용합니다. Google Native Client에 대한 지원 도 매우 멋집니다. 또한 데스크톱 Java 앱의 GUI 성능이 좋지 않은 것은 과거의 일이라는 것을 알고 있지만 계속 느린 것을 찾습니다. 그런 다음 다시 WPF에 대해서도 동일하게 말할 수 있습니다. GTK #은 충분히 빠르기 때문에 느릴 필요가 없습니다.

문제 : Java에는 더 큰 라이브러리 에코 시스템이 있습니다.

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

실제로 모든 Java 라이브러리 (JDK 포함)는 IKVM.NET 덕분에 .NET / Mono에서 멋지게 실행 됩니다. 이 기술은 진정한 경이로움입니다. 통합은 놀랍습니다. 네이티브처럼 Java 라이브러리를 사용할 수 있습니다. 하지만 하나의 .NET 앱에서 Java 라이브러리 만 사용해야했습니다. .NET / Mono 에코 시스템은 일반적으로 내가 필요로하는 것 이상을 제공합니다.

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

답변 : Windows에는 없습니다. 그렇지 않으면 동의합니다. MonoDevelop은 좋습니다.

MonoDevelop에 한마디하고 싶습니다 . 보석입니다. MonoDevelop은 코드 완성 (인텔리 센스), Git / Subversion 통합, 단위 테스트 지원, SQL 통합, 디버깅, 쉬운 리팩토링, 즉석 디 컴파일을 통한 어셈블리 브라우징을 포함하여 제가 사용하고자하는 대부분의 도구를 통합합니다. 서버 측 웹에서 모바일 앱에 이르기까지 모든 것에 동일한 환경을 사용하는 것이 좋습니다.

문제 : 플랫폼 간 호환성.

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

먼저 Mono 용으로 개발하고 원하는 경우 Windows에서 .NET에 배포합니다. MS에서 Java로 .NET을 비교하면 Java는 플랫폼 간 일관성 측면에서 우위를 차지합니다. 다음 답변보기 …

문제 : Mono가 .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 세계에서 가장 흥미로운 새로운 기술 중 하나는 Rosylyn 입니다. Mono는 수년 동안 C # 컴파일러를 서비스로 제공했습니다. 무엇 Rosylyn 제공의 일부를 통해 볼 수 있습니다 NRefractory 뿐만 아니라. Mono가 여전히 앞서 있었다는 예로 게임 성능을 가속화하는 SIMD 명령이 있습니다.

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

문제 : Microsoft는 사악합니다.

답 : 맞습니다. 그래서 뭐.

많은 사람들이 Mono를 사용하지 않는 이유는 다음과 같습니다.

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

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

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

JVM은 훌륭한 플랫폼이며 JVM 언어의 폭증은 대단합니다. 당신을 행복하게 만드는 것을 사용하십시오. 현재로서는 저에게 종종 .NET / Mono입니다.


답변

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

어떤 사람들이 Mono가 그토록 끔찍한 인상을받는 곳은 확실하지 않지만, 제 경우와 의견에서 확실히 그 일을 해냈습니다. 그러나 지금까지 Windows 및 Linux의 .NET 2.0은 저에게 매우 견고합니다.

여기에는 분명히 많은 단점이 있지만 대부분은 이식 가능한 코드를 작성하고 있는지 확인하는 데서 비롯됩니다. 프레임 워크는 실행중인 OS를 추상화하는 데 큰 역할을하지만 경로 및 파일 이름에서 Linux의 대소 문자 구분과 같은 사소한 작업은 권한과 같은 작업에 익숙해 져야합니다.

.NET은 지금까지의 경험을 바탕으로 Mono로 인해 확실히 크로스 플랫폼입니다.


답변

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

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


답변

질문이 틀린 것 같습니다. C # vs. Java는 (a) 지원해야하는 플랫폼, (b) 핵심 라이브러리 및 사용 가능한 타사 라이브러리를 고려하는 것보다 교차 플랫폼 사용 측면에서 훨씬 덜 흥미 롭습니다. 언어는 의사 결정 과정에서 거의 가장 덜 중요한 부분입니다.


답변

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

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

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

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

  • 도구. Java에는 좋은 크로스 플랫폼 IDE가 있습니다. Netbeans, Eclipse 등 대부분은 무료입니다. VS Studio는 좋지만 Windows에서만 가능하며 비용이 많이 들지 않습니다. 둘 다 좋은 단위 테스트, 디버그, 프로필 등을 제공합니다.

따라서 Java가 더 나은 선택이라고 제안합니다. 쇼케이스로는 Vuze, Limewire, BlogBridge, CrossFTP 등 Java에서 개발 한 유명한 데스크톱 크로스 플랫폼 앱이 있습니다. .Net에 관해서는 그러한 성공 앱에 대한 지식이 제한되어 있습니다.


답변

나는 늦게 같은 질문을 해왔고 IMHO, .NET / Mono가 더 나은 옵션 인 것 같습니다. Mono가 크로스 플랫폼 데스크톱 응용 프로그램 (Java와 반대)에 대한 훌륭한 실적을 가지고 있고 물론 Mono가 요즈음 비약적으로 발전하고 있습니다.