Mono làm tốt hơn việc nhắm mục tiêu các nền tảng mà tôi muốn hỗ trợ. Ngoài ra, đó là tất cả chủ quan.
Tôi chia sẻ mã C # trên các nền tảng sau: - iOS (iPhone / iPad) - Android - Web (HTML5) - Mac (OS X) - Linux - Windows
Tôi có thể chia sẻ nó ở nhiều nơi hơn: - Windows Phone 7 - Wii - XBox - PS3 - v.v.
Điều quan trọng là iOS vì MonoTouch hoạt động tuyệt vời. Tôi không biết có cách nào tốt để nhắm mục tiêu iOS với Java. Bạn không thể nhắm mục tiêu Windows Phone 7 với Java, vì vậy tôi muốn nói rằng những ngày Java tốt hơn cho di động đang ở phía sau chúng ta.
Yếu tố lớn nhất đối với tôi là năng suất cá nhân (và hạnh phúc). C # là một ngôn ngữ đi trước Java IMHO nhiều năm và .NET framework là một niềm vui khi sử dụng. Hầu hết những gì được thêm vào trong Java 7 và Java 8 đều nằm trong C # trong nhiều năm. Mặc dù vậy, các ngôn ngữ JVM như Scala và Clojure (cả hai đều có sẵn trên CLR) khá hay.
Tôi thấy Mono là một nền tảng theo đúng nghĩa của nó (một nền tảng tuyệt vời) và coi .NET là ứng dụng Microsoft triển khai Mono trên Windows. Điều này có nghĩa là tôi phát triển và thử nghiệm trên Mono trước. Điều này hoạt động tuyệt vời.
Nếu cả Java và .NET (giả sử là Mono) đều là các dự án Mã nguồn mở mà không có bất kỳ công ty nào hỗ trợ, tôi sẽ chọn Mono thay vì Java. Tôi tin rằng nó chỉ là một nền tảng tốt hơn.
Cả .NET / Mono và JVM đều là những lựa chọn tuyệt vời, mặc dù cá nhân tôi sẽ sử dụng một số ngôn ngữ khác ngoài Java trên JVM.
Tôi tiếp nhận một số ý kiến khác:
Vấn đề: Hiệu suất.
** Trả lời: Cả JVM và CLR đều hoạt động tốt hơn những gì những người gièm pha nói rằng họ làm. Tôi muốn nói rằng JVM hoạt động tốt hơn. Mono thường chậm hơn .NET (mặc dù không phải lúc nào cũng vậy).
Cá nhân tôi sẽ sử dụng ASP.NET MVC trên J2EE bất cứ ngày nào với tư cách là nhà phát triển và người dùng cuối. Hỗ trợ cho Google Native Client cũng khá tuyệt. Ngoài ra, tôi biết rằng hiệu suất GUI kém cho các ứng dụng Java trên máy tính để bàn được cho là dĩ vãng nhưng tôi vẫn tiếp tục tìm thấy những ứng dụng chậm. Sau đó, một lần nữa, tôi có thể nói như vậy đối với WPF. GTK # rất nhanh mặc dù vậy không có lý do gì chúng phải chậm.
Vấn đề: Java có sẵn một hệ sinh thái thư viện lớn hơn.
Trả lời: Có thể đúng, nhưng nó không phải là vấn đề trong thực tế.
Thực tế, mọi thư viện Java (bao gồm cả JDK) chỉ chạy tốt trên .NET / Mono nhờ IKVM.NET . Phần công nghệ này là một kỳ quan thực sự. Sự tích hợp là tuyệt vời; bạn có thể sử dụng thư viện Java giống như thư viện gốc. Tôi chỉ phải sử dụng các thư viện Java trong một ứng dụng .NET. Hệ sinh thái .NET / Mono thường cung cấp nhiều hơn những gì tôi cần.
Vấn đề: Java có hỗ trợ các công cụ tốt hơn (rộng hơn)
Trả lời: Không có trên Windows. Nếu không thì tôi đồng ý. MonoDevelop rất hay.
Tôi muốn gửi lời cảm ơn tới MonoDevelop ; nó là một viên ngọc quý. MonoDevelop tích hợp hầu hết các công cụ tôi muốn sử dụng bao gồm hoàn thành mã (intellisense), tích hợp Git / Subversion, hỗ trợ các bài kiểm tra đơn vị, tích hợp SQL, gỡ lỗi, cấu trúc lại dễ dàng và duyệt lắp ráp với biên dịch nhanh chóng. Thật tuyệt vời khi sử dụng cùng một môi trường cho mọi thứ từ web phía máy chủ đến các ứng dụng di động.
Vấn đề: Khả năng tương thích giữa các nền tảng.
Trả lời: Mono là một cơ sở mã duy nhất trên tất cả các nền tảng, bao gồm cả Windows.
Trước tiên hãy phát triển cho Mono và triển khai lên .NET trên Windows nếu bạn muốn. Nếu bạn so sánh .NET từ MS với Java thì Java có lợi thế về tính nhất quán giữa các nền tảng. Xem câu trả lời tiếp theo ...
Sự cố: Mono chậm .NET.
Trả lời: Không, không. IMHO, đây là một câu thường được nêu nhưng không chính xác.
Bản phân phối Mono từ Xamarin đi kèm với C #, VB.NET, F #, IronPython, IronRuby, và tôi nghĩ có lẽ Boo ra khỏi hộp. Trình biên dịch Mono C # hoàn toàn cập nhật với MS. Trình biên dịch Mono VB.NET làm chậm phiên bản MS. Các trình biên dịch khác giống nhau trên cả hai nền tảng (cũng như các ngôn ngữ .NET khác như Nemerle, Boo và Phalanger (PHP)).
Mono cung cấp rất nhiều mã được viết thực tế của Microsoft bao gồm Thời gian chạy ngôn ngữ động (DLR), Khung hỗ trợ mở rộng được quản lý (MEF), F # và ASP.NET MVC. Bởi vì Razor không phải là Mã nguồn mở, Mono hiện đang xuất xưởng với MVC2 nhưng MVC3 hoạt động trên Mono tốt.
Nền tảng Mono cốt lõi đã bắt kịp với .NET hoặc nhiều năm và khả năng tương thích rất ấn tượng. Bạn có thể sử dụng ngôn ngữ C # 4.0 đầy đủ và thậm chí một số tính năng của C # 5.0 ngay hôm nay. Trên thực tế, Mono thường dẫn đầu .NET theo nhiều cách.
Mono thực hiện các phần của thông số kỹ thuật CLR mà ngay cả Microsoft cũng không hỗ trợ (như mảng 64 bit). Một trong những công nghệ mới thú vị nhất trong thế giới .NET là Rosylyn . Mono đã cung cấp trình biên dịch C # như một dịch vụ trong nhiều năm. Một số những gì Rosylyn cung cấp cũng có sẵn qua NRefractory . Một ví dụ về Mono vẫn còn ở phía trước sẽ là hướng dẫn SIMD để tăng tốc hiệu suất chơi game.
Microsoft cung cấp một số sản phẩm trên .NET không có sẵn trong Mono, đó là quan niệm sai lầm về độ trễ của Mono. Windows Presentation Foundation (WPF), Entity Framework (EF), WCF (Windows Communication Foundation) là các ví dụ về các sản phẩm không hoạt động hoặc được hỗ trợ kém trên Mono. Giải pháp rõ ràng là sử dụng các lựa chọn thay thế đa nền tảng như GTK #, NHibernate và ServiceStack để thay thế.
Vấn đề: Microsoft là một kẻ xấu.
Trả lời: Đúng. Vậy thì sao.
Nhiều người đưa ra những lý do sau để tránh sử dụng Mono:
1) Bạn không nên sử dụng Mono vì công nghệ của Microsoft nên tránh
2) Mono tệ vì nó không cho phép bạn sử dụng mọi công nghệ mà Microsoft cung cấp
Đối với tôi, rõ ràng là những tuyên bố này là không tương thích. Tôi bác bỏ tuyên bố đầu tiên nhưng sẽ bỏ qua lập luận đó ở đây. Câu lệnh thứ hai đúng với tất cả các lựa chọn thay thế .NET.
JVM là một nền tảng tuyệt vời và sự bùng nổ của các ngôn ngữ JVM thật tuyệt vời. Sử dụng những gì làm cho bạn hạnh phúc. Hiện tại, đó thường là .NET / Mono đối với tôi.