크로스 플랫폼 개발에는 .NET/Mono 또는 Java 중 어느 쪽을 선택하는 것이 좋을까요?
Mono 라이브러리가 Java 라이브러리보다 얼마나 적습니까?
두 가지 대안에 대한 개요는 부족하지만, 다음 프로젝트를 위해 선택의 여지는 꽤 있습니다.다음 분야에서 확실한 기술적 사실을 찾고 있습니다.
- 퍼포먼스(예를 들어 자바가 스레드화에 적합하다고 하며 최근에는 에 대해 런타임 코드 최적화가 매우 좋아졌다고 합니다).네트워크)
- 실제 휴대성(둘 다 휴대성이라는 의미입니다.Catch-22는 어떤 의미입니까?)
- 도구 가용성(CI, 빌드 자동화, 디버깅, IDE)
저는 특히 제가 구글로 검색 할 수 있는 것보다 당신이 자신의 작품에서 실제로 경험한 것을 찾고 있습니다.제 애플리케이션은 시계열에서 대량의 데이터를 처리하는 백엔드 서비스입니다.
주요 타깃 플랫폼은 Linux입니다.
편집: 질문을 보다 적절하게 표현하기 위해 언어뿐만 아니라 패키지 전체(서드파티 라이브러리 등)에 관심이 있습니다.라이브러리의 경우 "Mono는 Java보다 라이브러리가 얼마나 적은가?"라는 질문으로 귀결될 수 있습니다.
참고로, 저는 이 프로젝트를 위해 Java를 선택했습니다.왜냐하면 이 프로젝트는 휴대성 측면에서 더 많이 소모된 것처럼 보였고 오래된 시스템에서도 오랫동안 사용되었기 때문입니다.조금 아쉽습니다.C#에 대해서 너무 궁금해서 큰 프로젝트를 하고 싶은데 다음 기회에 하고 싶어요.조언해 주셔서 감사합니다.
Mono는 제가 지원하고 싶은 플랫폼을 더 잘 공략합니다.그 외에는 모두 주관적이다.
다음 플랫폼에서 C# 코드를 공유합니다.- iOS (iPhone / iPad ) - Android - The Web (HTML5) - Mac (OS X) - Linux - Windows
Windows Phone 7 - Wii - XBox - PS3 등 더 많은 장소에서 공유할 수 있습니다.
MonoTouch는 훌륭하게 동작하기 때문에 큰 문제는 iOS입니다.자바에서 iOS를 공략할 수 있는 좋은 방법이 없습니다.Java에서는 Windows Phone 7을 타겟으로 할 수 없기 때문에 모바일에서는 Java가 더 나은 시대는 지났다고 생각합니다.
하지만 제게 가장 큰 요인은 개인의 생산성(그리고 행복)입니다.언어로서의 C#은 Java IMHO 및보다 몇 년 앞서 있습니다.NET 프레임워크는 사용하는 것이 즐겁습니다.Java 7 및 Java 8에 추가된 대부분의 항목은 수년 전부터 C#에 포함되어 있습니다.그러나 Scala 및 Clojure와 같은 JVM 언어(둘 다 CLR에서 사용 가능)는 매우 훌륭합니다.
Mono는 그 자체로 (훌륭한) 플랫폼이라고 생각하고 있습니다.Microsoft 의 Windows 에서의 Mono 의 실장으로서 NET 를 사용합니다.먼저 Mono를 개발하고 테스트한다는 뜻입니다.이거 정말 잘 먹힌다.
Java 및 둘 다일 경우.NET(Mono)는 기업의 지원이 없는 오픈 소스 프로젝트이기 때문에 매번 Java보다 Mono를 선택합니다.나는 그것이 단지 더 나은 플랫폼이라고 믿는다.
.NET/Mono와 JVM은 둘 다 좋은 선택입니다만, 저는 개인적으로 JVM에서 Java 이외의 언어를 사용하고 싶습니다.
다른 코멘트에 대한 나의 견해:
문제: 퍼포먼스
**답: JVM과 CLR은 둘 다 비방자가 말하는 것보다 성능이 우수합니다.JVM이 더 나은 성능을 발휘합니다.일반적으로 모노는 보다 느립니다.NET(항상 그렇지는 않습니다).
저는 개인적으로 ASP를 받겠습니다.NET MVC over J2EE는 개발자 및 최종 사용자로서 언제든지 사용할 수 있습니다.구글 네이티브 클라이언트에 대한 지원도 꽤 멋집니다.또, 데스크탑 Java 앱의 GUI 퍼포먼스의 저하가 과거의 일이라는 것은 알고 있습니다만, 느린 것은 계속 발견되고 있습니다.한편, WPF에 대해서도 같은 것을 말할 수 있습니다.GTK#은 매우 빠르기 때문에 느릴 필요는 없습니다.
문제: Java는 이용할 수 있는 라이브러리의 생태계가 넓어졌습니다.
답변: 아마도 사실이지만 실제로는 문제가 되지 않습니다.
실질적으로 모든 Java 라이브러리(JDK 포함)는 위에서 dandy하게 동작합니다.IKVM을 통한 NET/Mono.NET. 이 기술은 정말 놀라운 기술입니다.통합은 훌륭합니다.원어민 그대로 Java 라이브러리를 사용할 수 있습니다.자바 라이브러리는 1개만 사용해야 했습니다.하지만 NET 앱.일반적으로 .NET/Mono 생태계는 필요 이상의 기능을 제공합니다.
문제: Java는 더 나은(더 넓은) 도구를 지원합니다.
답변: Windows에서는 사용할 수 없습니다.그렇지 않으면 동의해요.Mono Develope도 좋지만.
Mono Develope를 외치고 싶습니다.보석입니다.MonoDevelope는 코드 완성(인텔리센스), Git/Subversion 통합, 유닛 테스트 지원, SQL 통합, 디버깅, 간단한 리팩터링, 어셈블리 브라우징 등 사용하고 싶은 툴의 대부분을 통합하고 있습니다.서버측 웹에서 모바일 앱까지 모두 같은 환경을 사용할 수 있어 매우 좋습니다.
문제: 플랫폼 간의 호환성.
답변: Mono는 Windows를 포함한 모든 플랫폼에서 단일 코드 베이스입니다.
먼저 Mono용으로 개발하고 에 배포합니다.NET on Windows(원하는 경우)비교해보면.MS에서 Java로 넘어가는 NET은 플랫폼 전체의 일관성 면에서 Java가 우위를 점하고 있습니다.다음 답변을 참조하십시오.
문제: 흑백이 지연됩니다.그물.
답변: 아니요.IMHO, 이것은 자주 언급되지만 잘못된 진술입니다.
Xamarin의 Mono 디스트리뷰션에는 C#, VB가 포함되어 있습니다.NET, F#, IronPython, IronRuby, 그리고 Boo가 개봉했을지도 모릅니다.Mono C# 컴파일러는 MS의 최신 버전입니다.The Mono VB 。NET 컴파일러는 MS 버전을 지연시킵니다.다른 컴파일러는 양쪽 플랫폼에서 동일합니다(다른 컴파일러와 동일).Nemerle, Boo, Phalanger(PHP) 등의 NET 언어.
Mono에는 DLR(Dynamic Language Runtime), MEF(Managed Extensibility Framework), F# 및 ASP 등 Microsoft에서 작성한 실제 코드가 다수 포함되어 있습니다.NET MVC. 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를 통해서도 이용할 수 있다.모노가 아직 앞서고 있다는 것의 예로는 게임 성능을 가속화하기 위한 SIMD 명령이 있습니다.
Microsoft 에서는, 위에 다수의 제품을 제공하고 있습니다.Mono에서 사용할 수 없는 NET은 Mono 지연에 대한 오해에서 비롯되었습니다.Windows Presentation Foundation(WPF), Entity Framework(EF), WCF(Windows Communication Foundation)는 Mono에서 동작하지 않거나 지원되지 않는 제품의 예입니다.대신 GTK#, NHibernate 및 ServiceStack과 같은 크로스 플랫폼 대체 솔루션을 사용하는 것이 좋습니다.
문제: Microsoft는 악당입니다.
답변: 맞습니다.그래서 뭐.
많은 사람들이 모노 사용을 피해야 하는 다음과 같은 이유를 제시합니다.
1) Microsoft 기술을 사용하지 않도록 해야 하므로 Mono를 사용하지 마십시오.
2) Microsoft가 제공하는 모든 테크놀로지를 사용할 수 있는 것은 아니기 때문에 Mono는 최악입니다.
나는 이 진술들이 양립할 수 없다는 것이 명백하다.나는 첫 번째 진술을 거부하지만 여기서 그 주장은 생략할 것이다.두 번째 문장은 모든 것에 해당됩니다.NET의 대체 수단.
JVM은 훌륭한 플랫폼이며 JVM 언어의 폭증도 대단합니다.당신을 행복하게 하는 것을 사용하세요.현재로선, 그것은 종종이다.나는 NET/Mono.
음...사실 자바가 더 휴대성이 좋아요.Mono는 어디에서나 구현되는 것은 아니며 Microsoft의 구현에 비해 크게 뒤떨어져 있습니다.Java SDK는 여러 플랫폼에서 더 잘 동기화됩니다(더 많은 플랫폼에서 작동합니다).
또한 Java는 이러한 모든 플랫폼에서 더 많은 툴을 사용할 수 있지만, 에서 사용할 수 있는 툴은 많이 있습니다.Windows 플랫폼에서의 NET.
2014년 업데이트
저는 2014년에도 이 의견을 가지고 있습니다.다만, 오랜만에 Mono에 관심을 가지기 시작했기 때문에, Mono 런타임(또는 에코시스템)이 개선되고 있는 것 같습니다.AFAIK, WIF의 WPF, WCF, WF는 아직 지원되지 않습니다.모노는 iOS에서 실행할 수 있지만, 제가 아는 바로는 Java 런타임은 모노보다 훨씬 더 많은 플랫폼에서 실행됩니다.또한 Mono는 툴링(Xamarin)이 크게 개선되기 시작하고 있으며, Microsoft는 경쟁사가 아닌 파트너와 협력하기 위해 크로스 플랫폼과 같은 태도와 의지를 가지고 있는 것으로 보입니다(예를 들어 Mono는 향후 OWIN/Helios ASP에서 매우 중요한 부분이 될 것입니다.NET 환경).향후 몇 년 동안 휴대성의 차이는 특히 이후 급격히 줄어들 것으로 예상됩니다.NET은 오픈 소스입니다.
2018년 갱신
이것에 대한 나의 견해는 다른 방향으로 가고 있다.생각합니다.NET, 특히 를 광범위하게 지원합니다.NET Core는, Java와의 「휴대성 패리티」를 실현하기 시작했습니다.WPF를 에 도입하기 위한 노력이 진행 중입니다.일부 플랫폼에서는 NET Core 및NET Core 자체는 현재 매우 많은 플랫폼에서 가동되고 있습니다.Mono(현재 Microsoft가 소유하고 있는 Xamarin 소유)는 그 어느 때보다 성숙하고 세련된 제품입니다.또, 복수의 플랫폼에서 동작하는 애플리케이션의 기입은, 더 이상, 의 깊은 gnosis의 영역이 아닙니다.NET 해킹은 비교적 간단한 시도입니다.물론 Windows 전용 또는 특정 플랫폼만 대상으로 할 수 있는 라이브러리, 서비스 및 응용 프로그램이 있지만 Java(대략)도 마찬가지입니다.
만약 내가 이 시점에서 OP의 입장이었다면, 내가 선택하는 것을 방해하는 언어나 기술 스택 자체에 내재된 이유를 생각할 수 없다.이 시점부터의 모든 애플리케이션에 대해서, NET 를 참조해 주세요.
저는 실제로 에서 개발합니다.NET, 먼저 Mono에서 모든 테스트를 실행하고 다음으로 Windows에서 테스트를 실행합니다.그러면 애플리케이션이 크로스 플랫폼임을 알 수 있습니다.나는 이것을 양쪽 ASP에서 매우 성공적으로 해냈다.NET 및 Winforms 응용 프로그램.
어떤 사람들은 모노가 그렇게 끔찍하다는 인상을 받는지 잘 모르겠지만, 제 경우나 의견에서는 확실히 효과가 있었습니다.의 최신 및 가장 뛰어난 발명품에 대해 다소 지연이 있는 것은 사실입니다.NET의 세계, 그러나 지금까지는.Windows 및 Linux에서의 NET 2.0은 매우 견고합니다.
이것에는 분명히 많은 기이한 점이 있지만, 그 대부분은 휴대용 코드를 확실히 쓰는 데서 비롯된다는 것을 명심하세요.이 프레임워크는 실행 중인 OS를 추상화하는 데 큰 역할을 하지만 경로 및 파일 이름에서 Linux의 대소문자를 구분하는 것과 같은 사소한 일에는 권한과 같은 작업에 익숙해지는 데 다소 시간이 걸립니다.
지금까지의 경험에 비추어 볼 때, Mono는 확실히 크로스 플랫폼입니다.
자바는 사실 모두가 말하는 것처럼 크로스 플랫폼입니다.모든 메인스트림 OS(Mac OS X도 마찬가지)에 JVM을 구현하고 있으며, 모두 매우 잘 작동합니다.크로스 플랫폼과 마찬가지로 오픈 소스 툴도 많이 있습니다.
유일한 장점은 일부 DLL 또는 SO를 작성하지 않으면 Java에서 수행할 수 없는 특정 네이티브 작업이 있다는 것입니다.이런 일이 실제로 일어나는 것은 매우 드문 일입니다.하지만 이 모든 경우 네이티브 프로세스를 생성해 결과를 스크린 스크랩함으로써 문제를 해결할 수 있었습니다.
질문이 잘못 표현된 것 같아요.C# 대 Java는 (a) 어떤 플랫폼을 지원해야 하는지, (b) 코어 라이브러리와 이용 가능한 서드파티 라이브러리를 고려해야 하는지 등 크로스 플랫폼 사용방법에 대해 그다지 관심이 없습니다.언어는 의사결정 과정에서 거의 중요하지 않은 부분입니다.
크로스 플랫폼 개발에는 Java가 적합합니다.
성능.자바와Net은 가상 머신으로 인해 성능 수준이 비슷하지만 JVM은 일반적으로 몇 년이고 몇 년이고 최적화되기 때문에 성능이 더 우수합니다.
도서관.이것은 작업에 따라 다르지만 Java는 훨씬 더 많은 오픈 소스 또는 서드파티 라이브러리를 사용할 수 있습니다.서버 애플리케이션, J2EE, 스프링, Struts 등단, GUI의 경우.Net은 Win32 레이어 API를 제공하지만 이로 인해 호환성 문제가 발생합니다.자바에는 Swing, SWT, AWT 등이 있습니다.대부분의 경우 효과가 있습니다.
호환성.크로스 플랫폼 프로그램을 개발할 때 고려해야 할 주요 문제입니다.두 가지 문제가 있습니다. 첫째, 플랫폼 호환성입니다.자바는 JDK가 단일의 오리지널 회사인 Sun에 의해 잘 유지되고 있기 때문에 여전히 우위를 점하고 있습니다.Mono는 MS에서 유지 보수하지 않으므로 업데이트 호환성을 아직 보장하지 않습니다. 2. 이전 버전과의 호환성.Sun은 하위 호환성에 대해 좋은 평판을 유지하고 있지만, 때때로 이것이 너무 경직되어 속도가 느려질 수 있습니다.
도구. 자바에는 좋은 크로스 플랫폼 IDE가 있습니다.팥, 이클립스 등대부분은 무료입니다.VS Studio는 좋지만 Windows에서만 사용할 수 있으며 비용이 전혀 들지 않습니다.둘 다 양호한 유닛테스트, 디버깅, 프로파일 등을 제공합니다.
그래서 저는 자바가 더 나은 선택이라고 제안합니다.쇼케이스로서 Java가 개발한 유명한 데스크톱 크로스 플랫폼 앱이 있다: Vuze, Limewire, BlogBridge, CrossFTP, 그 IDE는 말할 것도 없고.에 대해서.넷, 저는 그런 성공 앱에 대한 지식이 한정되어 있습니다.
IMHO에서도 같은 질문을 했습니다.Mono는 단순히 크로스 플랫폼 데스크톱 애플리케이션(Java와는 반대)의 실적이 뛰어나기 때문에 .NET/Mono가 더 나은 옵션인 것 같습니다.물론 최근에는 Mono가 비약적으로 향상되고 있습니다.
자바도 말할게요.성숙도 측면에서 보면, Sun(및 기타 기업)은 JVM이 Windows 이외의 플랫폼에서 작동하도록 하기 위해 훨씬 더 많은 시간과 노력을 들였습니다.
반면 Mono는 확실히 2등급 시민입니다.NET 생태계
대상 고객에 따라서는 Mono 사용에 대한 실질적인 반발이 있을 수 있습니다.Novell은 Java 또는 에서 얻을 수 있는 것과 같은 종류의 Mono에 대한 벤더 지원을 제공하고 있습니까?NET on Windows?
주로 Windows에서 서비스를 호스팅하는 것을 목표로 하고 있다면 이 선택을 고려하는 것이 좋지만, Linux를 주로 대상으로 하고 있기 때문에, 이것은 저에게 있어서는 쉬운 일이라고 생각합니다.
Java는 크로스 플랫폼인 C#/로 설계되어 있습니다.넷은 그렇지 않았다.확실하지 않은 경우 목적에 맞게 설계된 도구를 사용하십시오.
편집: 공평하게 말하면,NET은 임베디드/PC/서버 환경에서 동작하도록 설계되어 있기 때문에 크로스 플랫폼이라고 할 수 있습니다.하지만 그것은 Linux용으로 설계되지 않았다.
제 생각에 답은 "그것은 의존합니다."입니다. 자바는 거의 모든 것을 사용하지만,NET/Mono(IMHO)는 데스크톱의 더 나은 프레임워크입니다.따라서 정답은 어떤 플랫폼을 목표로 하느냐에 따라 달라집니다.
대화에 조금 더 덧붙이자면, Java는 한 버전만 뒤처져 있으면 더 휴대성이 좋다.Java 5는 여전히 많은 뛰어난 기능을 가지고 있기 때문에 Java 6을 기다릴 수 있고 언어 및 라이브러리 측면에서 여전히 많은 범위를 가지고 있다.Mac은 최신 Java 버전을 따라잡는 데 시간이 걸릴 수 있는 주요 플랫폼입니다.
Java는 또한 다양한 회사의 의견을 바탕으로 플랫폼을 지능적으로 확장하는 우수한 표준 기구가 있습니다.이 기능은 간과되는 경우가 많지만, 여러 플랫폼에서 새로운 기능조차 원활하게 동작할 수 있도록 하며, 일부 난해한 기능(옵션 확장 기능)에 대한 폭넓은 라이브러리 지원을 제공합니다.
저는 자바가 C#보다 휴대성이 좋은 것에 투표하겠습니다.자바에는 분명히 매우 풍부한 표준 라이브러리가 있습니다.자카르타 프로젝트(http://jakarta.apache.org/) 등)에서 제공하는 폭넓은 오픈 소스 서드파티 라이브러리도 있습니다.
CI, 유닛 테스트 등을 위해 모든 일반적인 용의자가 존재합니다.크로스 플랫폼 IDE 지원은 Eclipse, Netbeans, IntelliJ IDEA 등과 함께 매우 우수합니다.
다른 언어들도 있다.저는 Windows, Linux, Mac에서 잘 작동하고 풍부한 라이브러리 세트를 가진 Python을 매우 좋아하게 되었습니다.
Mono에는 여러 가지 문제가 있지만, 특히 네이티브 플랫폼 부팅에 의존하는 경우 크로스 플랫폼 호환성이 더 우수하다고 생각합니다.
Stack Overflow 에는 에서 호출되어 실행되는 네이티브한 것을 취득하는 것이 얼마나 부드러운지를 강조하기 위한 충분한 단어가 없습니다.(적어도 제 경험으로는...) 여러 플랫폼에서의 NET/Mono와 동등한 Java의 노력입니다.
게이터홀은 그걸 뒷받침할 자료가 있나요?
성능.자바와Net은 가상 머신으로 인해 성능 수준이 비슷하지만 JVM은 일반적으로 몇 년이고 몇 년이고 최적화되기 때문에 성능이 더 우수합니다.
배경:저는 Windows 3.1 이후 Windows 사용자로 현재 Linux 사용자입니다(Visual Studio 2010 및 기타 툴용 VM에서 Windows 7, 뛰어난 OS를 계속 실행하고 있습니다).
요점은 저와 많은 사용자(Windows, Linux 등)가 당신의 의견에 동의하지 않을 수 있다는 것입니다.Java는 Linux 데스크톱 애플리케이션인 ASP에서도 동작이 느려지는 경향이 있습니다.NET의 퍼포먼스는 Java 서버가 대부분의 경우 페이지 하는 것보다 빠릅니다.컴파일되지 않은 PHP도 몇 가지 시나리오에서 더 나은 성능을 발휘한다는 데 동의하는 사람도 있을 수 있습니다.
자바가 더 크로스 플랫폼입니까?나는 이것에 대해 의심의 여지가 없지만, 더 빠르다(말하지 않는다).NET)는 확실하지 않기 때문에 실제 벤치마크를 보고 싶습니다.
언급URL : https://stackoverflow.com/questions/61559/is-net-mono-or-java-the-better-choice-for-cross-platform-development
'programing' 카테고리의 다른 글
다른 어레이로 이동할 때 Vue Keep Alive 구성 요소 (0) | 2023.02.02 |
---|---|
JSON.stringify 출력을 div에 예쁘게 인쇄 (0) | 2023.02.02 |
두 날짜 간의 시간 차이를 분 단위로 계산 (0) | 2023.02.02 |
Java에서 toString()을 올바르게 덮어쓰려면 어떻게 해야 합니까? (0) | 2023.02.02 |
해석 오류:인접한 JSX 요소는 둘러싸인 태그로 감싸야 합니다. (0) | 2023.02.02 |