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