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


108

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

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

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

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

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

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


참고로, 저는이 프로젝트를 위해 Java를 선택했습니다. 이식성 측면에서 더 닳아 보였고 이전 시스템에서도 한동안 사용되어 왔기 때문입니다. 저는 C #에 대해 매우 호기심이 많고 그 안에 몇 가지 큰 프로젝트를 수행하고 싶기 때문에 조금 슬펐습니다. 모든 조언에 감사드립니다.


3
좋은 질문입니다. 크로스 플랫폼 개발에 대한 평가도 검토 중입니다.
Mat Nadrofsky

"which-language"태그를 추가했지만 이미 5 개가 있으므로 운이 없습니다.
Daniel Daranas

타겟 플랫폼에 따라 크게 달라집니다.
Thorbjørn Ravn Andersen

1
이제 ... 당신이 golang보고 할 수있는 좋은 시간이 될 수도 있습니다
StartupGuy

Xojo도 고려할 가치가 있습니다. Windows, Mac Linux 용 LLVM을 사용하여 네이티브 앱을 컴파일합니다. IDE 빌드 자동화, 디버깅 등이 있습니다. 라이브러리에는 많은 기능이 있으며 필요에 따라 확장 할 수 있습니다. www / xojo.com
Paul Lefebvre

답변:


96

음 .... 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을 선택하지 못하게하는 언어 또는 기술 스택 자체에 내재 된 이유를 생각할 수 없습니다.


2
저는이 글을 읽고 Microsoft 세계에서 투표에 대해 기쁘게 생각합니다. .NET은 정말 좋지만 Java는 항상 .NET 개발자와 오래된 Java로 설명하려고했기 때문에 합법성을 가지고 있습니다.)
JoeBilly

이것에 대해 +1. Java 이식성 (예 : 웹 서버, 복잡한 GUI, 분석 엔진과 같은 중요하지 않은 응용 프로그램 용)이 다른 어떤 대안보다 우수하다는 것을 알았습니다. 완벽하지는 않지만 지금 당장 얻을 수있는 최고입니다.
mikera 2012

1
@Ben, 2013 년에도이 의견을 갖고 계십니까? 그렇다면이 답변을 업데이트하지 않으면 언급 해 주시겠습니까? 4 살짜리 답을 읽을 때 많은 경우 말하기 어렵습니다.
Benjamin Gruenbaum

1
@BenjaminGruenbaum 예, 비록 제가 오랫동안 Mono에 많은 관심을 기울이지 않았다고 말함으로써이 시점에서 제 의견을 인정할 수 있지만, 제가하지 못했던 Mono 런타임 (또는 생태계)에 개선이있을 수 있습니다. 알았다. AFAIK, WPF, WCF 또는 WF에 대한 지원은 아직 없습니다. Mono는 iOS에서 실행할 수 있지만 내가 아는 한 Java 런타임은 여전히 ​​Mono보다 훨씬 많은 플랫폼에서 실행됩니다. 그래서 ... 네. 자격이 있지만 예.
Ben Collins

@HighCore 논쟁은 Mono 자체 에 반대 하지 않습니다 . 이것은 단지 사실의 진술 일뿐입니다. WPF에 의존하는 코드를 작성하면 Mono를 사용할 수 없습니다. 그런 식으로 휴대가 불가능합니다. 자바의 UI 프레임 워크는 형편 없지만 내가 아는 한 자바가 작동하는 곳이면 어디에서나 작동 할 것이다 (하드웨어는 그런 종류의 UI를 지원한다). 그렇다고해서 Java가 더 나아지 는 것이 아니라 이러한 특정 방식으로 더 이식성이 높아 집니다.
Ben Collins

112

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입니다.


3
게임 후반에 이렇게 광범위한 답변을 해주셔서 감사합니다. Mono / .Net / C #을 사용한 적이 없지만 귀하의 게시물은 해당 우주의 최근 개발 사항을 반영하는 것 같습니다. 예를 들어, MonoTouch가 3.5 년 전에 그렇게 중요했던 기억이 없습니다.
Hanno Fietz

3
"Mono는 .NET을 지연시키지 않습니다"라는 대답에 혼란스러워합니다. 그런 다음 실제로 .NET (Entity Framework 등)을 지연시키는 6 가지 방법을 설명합니다. 마이크로 소프트의 C # 컴파일러에 뒤지지 않는다고 말하는 것이 안전하지만 .NET 생태계는 Mono에서 기껏해야 단편적입니다. 그것은 당신의 목적에 맞는 것처럼 보이지만 모든 사람에게 적합한 것은 아니며 합법적 인 우려가 있습니다.
samkass

1
@samkass : 여기서 요점은 '지연'과 '이 라이브러리를 구현하지 않음'의 차이점이라고 생각합니다. Java 세계에서는 Android가 Swing 라이브러리를 구현하지 않는 것과 유사하다는 것을 알 수 있습니다. 또한 크로스 플랫폼 (및 오픈 소스, btw) 등가물이 제공되었습니다. 나는 매일 Mono를 사용하고 있으며 '기껏해야 단편적'은 확실히 내 경험이 아닙니다.
konrad.kruczynski apr

9
완전하고 강력한 WCF 및 EF 지원이 부족하고 .NET 3.0 이후로 작업 한 거의 모든 작업에 대해 Mono의 킬러가되는 WPF가 없습니다. 예, 대안이 있지만 .NET의 강력한 부분은 이러한 추가 프레임 워크입니다. 이것 없이는 .NET과 전혀 호환되는 Mono를 호출 할 수 없다고 생각합니다. 기껏해야 부분적인 구현입니다. 나는 또한 NHibernate를 사용했으며 솔직히 EF는 훨씬 더 나은 기술입니다. ServiceStack을 사용한 적이 없습니다. IMO Mono는 위험합니다.
MrLane

1
WCF를 놓친 모든 사람은 servicestack을 살펴 봐야합니다. 진지하게, WCF를 구현하지 않는 것은 좋은 일이었습니다!
unreal

54

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

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

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

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


나를 무지하다고 부르지 만, 모노로 ASP.NET을 테스트해야합니까? .NET이 될 모든 것은 서버 측이므로 어떤 OS에 표시되는지는 중요하지 않습니까?
Ethan Gunderson

9
Ethan, Mono를 사용하면 Linux에서 ASP.net 앱을 호스팅 할 수 있습니다.
Eric Haskins

2
모든 사람이 어떤 이유로 든 Windows에서 앱을 실행하고 싶어하는 것은 아닙니다.
Bernard

2
@Rich B : 클라이언트가 MS 제품을 원하지 않는다면 .NET은 분명히 잘못된 선택입니다.
Kjetil Ødegaard

21
@Kjetil : Mono는 MS 제품이 아닙니다.
GEOCHET

26

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

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


1
또한 Java가 크로스 플랫폼 방식으로 기본 작업을 수행 할 수없는 거의 모든 경우에 .NET에 대해서도 마찬가지입니다
Eli Courtwright

드디어? Mac OS X에는 10.0 이후 JVM이 구현되었습니다. :)
mipadi 2010

3
@Eli-아마도 사실입니다. .NET / Mono의 기본 기능과 통합하는 것이 Java보다 훨씬 더 쉽습니다. 따라서 네이티브 플랫폼과 잘 통합하려는 경우 .NET / Mono가 실질적인 이점을 제공합니다.
Justin

"기본 프로세스 및 화면 긁어 결과를 산란" 전율
기본

Android 또는 iOS 용 JVM이 기본적으로 제공되지 않기 때문에 '대부분의 주류 OS'에 대해 고민 할 것입니다. 한편 .NET의 새로운 이식 가능한 클래스 라이브러리를 사용하면 모바일을 포함한 플랫폼간에 컴파일 된 코드 (실제로 UI 코드는 아니지만)를 공유 할 수 있습니다.
Mathieson

18

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


동의합니다. 다양한 아키텍처에서 가상 머신이 얼마나 잘 지원되는지의 문제입니다.
Allain Lalonde

동의합니다. 고객이 실행할 수없는 경우 전체 개발을 수행하는 데 재미가 없습니다.
Thorbjørn Ravn Andersen

15

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에 관해서는 그러한 성공 앱에 대한 지식이 제한되어 있습니다.


"다른"리눅스에서 모노로 작업하는 것은 까다로워졌습니다. 이것은 모노의 주요 문제를 반영합니다. 모노의 미래는 미구엘 데 이카 자의 독재에 너무 의존합니다. 사례 : "기타 ... (지원되지 않음)"에 대한 지원 감소 [ mono-project.com/Other_Downloads] Linux는 Miguel de Icaza의 Linux에 대한 환멸 ( tirania.org/blog/archive/ )과 관련이있는 것 같습니다 ( IMHO ). 2013 / Mar-05.html ). 자바는 이러한 독재 문제를 겪지 않습니다. C #은 더 많은 플랫폼에서 실행될 수 있지만 더 많은 비용, 위험, 타협 및 Mr. de Icaza에 대한 의존도가 따릅니다. 고맙지 만 사양 할게.
StartupGuy 2013

@ Michael.M 그래서 당신은 오라클의 변덕에있는 것을 선호합니까?
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen : 틀 렸습니다. 나를 단순히로 분해하자 나는 할 수 있습니다 닷넷 -> MSFT의 플랫폼 (안정적 성공적인 회사, 제한하지만 깔끔한 에코 시스템 (eco-system)); 모노 -> 드 이카의 프레임 워크 (엘 dictador,하지 핫 리눅스과 쇼 : [ cultofmac.com/218632/... -를 CentOS 6.4에서 모노를 설치하십시오, 그것은 "지원되지 않는"악몽입니다); 자바는 A는 사양 사회에 속하고 다양한 벤더의 구현 (오라클은 하나에 불과)가 coderanch.com/t/327542/java/java/...을
StartupGuy

@ ThorbjørnRavnAndersen : .. 또한 주요 Java 커뮤니티 후원자는 Oracle을 배제 할 수 있으며 여전히 성공적이며 매우 잘 지원됩니다. Java는 결코 Oracle의 변덕에 맞지 않습니다 .--- 참조 : news.techworld.com/applications/3252787/ … 오라클은 모든 Java 관련 사항을 폐기 할 수 있으며 여전히 계속 유지됩니다. .Net 플랫폼을 보유한 다른 공급 업체는 무엇입니까? Xamarin 이외의 모노 런타임을 제공하는 다른 사람은 누구입니까? 자바는 독재의 대상이 아니며 진정한 커뮤니티 제어, 커뮤니티 지원 및 커뮤니티 관리 권한을 가진 유일한 회사입니다.
StartupGuy

1
@ Michael.M 사양? 커뮤니티에 속해 있습니까? 저는 당신이 틀렸다고 생각합니다. 저는 또한 OpenJDK 프로젝트가 Sun 인수 이후에 종료되지 않은 유일한 이유는 GPL이라고 생각합니다. Java는 TCK가 무료로 제공되지 않고 Oracle JVM처럼 작동하는 JVM을 만드는 데 필요한 것이기 때문에 Oracle의 철권입니다. Mono 나 De Icaza에는 문제가 없지만 Java 상황이 훨씬 나을 것이라고 생각하지 않습니다. 모멘텀이있는 유일한 대안 JVM 프로젝트는 IBM이 지원을 중단했을 때 죽었습니다.
Thorbjørn Ravn Andersen 2013-06-20


8

Java도 말할 것입니다. 성숙도 측면에서 보면 JVM이 비 Windows 플랫폼에서 작동하도록 Sun (및 기타)이 훨씬 더 많은 시간과 노력을 소비했습니다.

대조적으로 Mono는 확실히 .NET 생태계에서 두 번째 클래스 시민입니다.

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

주로 Windows에서 서비스를 호스팅하는 것을 목표로했다면이 선택을 고려하는 것이 합리적이지만 Linux를 주로 목표로하고 있기 때문에 나에게는 생각할 필요가없는 것 같습니다.


나는 Mono가 2 등 시민이라는 것에 동의하는 경향이 있지만 결론은 아닙니다. Java는 오랫동안 사용되어 왔으며 거의 ​​항상 가장 장황한 방식을 선택한다는 점은 말할 것도없고 레거시 단점과 메모리 관리 문제로 가득 차 있습니다. 또한 수년 동안 꽤 정체되어 있었고 최근에야 .Net에 있던 기능을 통합하기 시작했습니다. IMHO, 그것은 두 가지 악 중에서 선택입니다. .Net을 통한 Flakey 플랫폼 지원 또는 진화하는 데 매우 느리고 코드 작업이 많은 거대한 거물.
Basic

7

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

편집 : 공정하게 .NET은 임베디드 / PC / 서버 환경에서 작동하도록 설계되었으므로 교차 플랫폼의 SORT입니다. 그러나 그것은 Linux 용으로 설계되지 않았습니다.


3
글쎄요, C #은 ISO 표준화 되었기 때문에 아이디어는 크로스 플랫폼을 갖는 것이 었습니다. 마이크로 소프트는 다른 플랫폼을위한 구현을 개발하고 싶지 않았지만 언어가 표준이기 때문에 다른 당사자에게 맡겨졌습니다. 하지만 .Net 프레임 워크는 더 복잡한 이야기입니다.
zappan

Mono는 좋은 구현이며 DotGNU (Mac 용)
Andrei Rînea

1
zappan : C #의 유효한 지점 (알지 못함)이지만 .NET은 엄청납니다. 물론 여기에는 개인적인 경험이 없습니다.
AlexeyMK

@zappan-실용적인 관점에서 C #이 표준화되어 있다는 것은 관련이 없습니다 (또는 Mono가 C #의 꽤 좋은 복제물을 만든다는 것). 플랫폼 이식성은 언어 자체가 아니라 전체 플랫폼 (라이브러리 및 도구 생태계 포함)에 관한 것입니다. 그런 의미에서 .Net은 완전히 크로스 플랫폼이 아닙니다.
mikera 2012

7

대답은 "상황에 따라 다릅니다."라고 생각합니다. Java는 거의 모든 곳에서 실행되지만 .NET / Mono는 데스크톱을위한 더 나은 프레임 워크입니다. 그래서 대답은 실제로 어떤 플랫폼을 타겟팅할지에 달려 있다고 생각합니다.


데스크탑은 데스크탑 공간에서 가장 큰 부분을 차지하더라도 창과 동의어가 아닙니다.
ZOXIS

6

대화에 조금 더 추가하기 위해 Java는 한 버전 뒤에 남아 있으면 더 이식 가능합니다. Java 5에는 여전히 많은 우수한 기능이 있으므로 Java 6을 기다릴 수 있으며 개발할 언어 및 라이브러리 측면에서 많은 범위를 가질 수 있습니다. 와. Mac은 최신 Java 버전을 따라 잡는 데 시간이 걸릴 수있는 기본 플랫폼입니다.

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


OS X 10.6은 이제 Sun Java 6 릴리스를 완전히 따라 잡았습니다.
Thorbjørn Ravn Andersen

5

나는 자바가 C ​​#보다 더 이식성있는 것에 투표 할 것이다. Java에는 확실히 매우 풍부한 표준 라이브러리 세트가 있습니다. 또한 Jakarta 프로젝트 ( http://jakarta.apache.org/ ) 에서 제공하는 것과 같은 광범위한 오픈 소스 타사 라이브러리 세트가 있습니다 .

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


4

다른 언어 선택도 있습니다. 저는 Windows, Linux 및 Mac에서 잘 작동하고 풍부한 라이브러리 세트가있는 Python을 아주 좋아합니다.


예, 저는 Python을 좋아하고 웹 앱에 대해 좋아하는 Django를 가지고 있습니다. 그러나 그것을 받아 들일 수 없게 만든 몇 가지가있었습니다. 가장 중요한 것은 인터프리터의 표준 C 구현에서 GIL입니다. 멀티 코어 머신에서 병렬 컴퓨팅을 통해 많은 이점을 얻을 수있는 여러 작업이 있으며 cPython에서이를 수행하려면 프로세스를 생성해야합니다.
Hanno Fietz

3

Mono에는 문제 가 있지만 특히 네이티브 플랫폼 호출에 의존하는 경우 더 나은 크로스 플랫폼 호환성 스토리가 있다고 생각합니다.

Stack Overflow에는 여러 플랫폼에서 .NET / Mono에서 기본적으로 호출되고 실행되는 것이 얼마나 더 매끄럽다는 것을 강조하는 단어가 충분하지 않습니다.


동의합니다. .NET / Mono에서 플랫폼 별 코드를 호출하는 것은 C에서 호출 할 수있는 한 매우 쉽습니다. CXXI ​​(섹시하다고 발음 됨)를 사용하면 C ++ 코드를 호출하는데도 큰 도움이되고 있습니다. tirania.org/blog/archive/2011/Dec-19.html
Justin

2

Gatorhall 백업 할 데이터가 있습니까?

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

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

요점 : 나와 많은 사용자 (Windows, Linux 등)가 동의하지 않을 수 있습니다. Java는 Linux 데스크톱 응용 프로그램에서도 느리게 수행되는 경향이 있으며 ASP.NET은 Java 서버가 여러 번 페이징하는 것보다 더 빠릅니다. 일부는 컴파일되지 않은 PHP도 여러 시나리오에서 더 잘 수행된다는 데 동의 할 수 있습니다.

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


또 다른 질문 도움 물론이 있습니다 언어 촬영 아웃 . JVM은 더 많이 최적화 될 수 있지만 비슷합니다 (특히 Windows에서). ASP.NET 대 J2EE 또는 JSP에 대한 벤치 마크는 훨씬 더 의심 스럽지만 런타임이 묶여 있어도 ASP.NET이 훨씬 빠르다고 믿을 수는 없습니다.
저스틴
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.