.NET / Mono hay Java là lựa chọn tốt hơn để phát triển đa nền tảng? [đóng cửa]


108

Có bao nhiêu thư viện dành cho Mono ít hơn Java?

Tôi thiếu cái nhìn tổng quan về cả hai lựa chọn thay thế nhưng tôi có khá nhiều quyền tự do lựa chọn cho dự án tiếp theo của mình. Tôi đang tìm kiếm các thông tin kỹ thuật khó trong các lĩnh vực

  • hiệu suất (ví dụ: tôi nói Java là tốt để phân luồng và tôi nghe nói rằng việc tối ưu hóa mã thời gian chạy gần đây đã trở nên rất tốt cho .NET)
  • tính di động trong thế giới thực (cả hai đều có nghĩa là di động, Catch-22 cho mỗi cái là gì?)
  • tính khả dụng của công cụ ( CI , tự động hóa xây dựng, gỡ lỗi, IDE)

Tôi đặc biệt đang tìm kiếm những gì bạn thực sự trải qua trong công việc của mình hơn là những thứ tôi có thể google. Ứng dụng của tôi sẽ là một dịch vụ back-end xử lý lượng lớn dữ liệu từ chuỗi thời gian.

Nền tảng mục tiêu chính của tôi sẽ là Linux.

Chỉnh sửa: Để diễn đạt câu hỏi của tôi đầy đủ hơn, tôi quan tâm đến toàn bộ gói (thư viện bên thứ 3, v.v.), không chỉ ngôn ngữ. Đối với các thư viện, điều đó có thể đặt ra câu hỏi "có bao nhiêu thư viện dành cho Mono ít hơn dành cho Java"?


FYI, tôi đã chọn Java cho dự án này, bởi vì nó có vẻ phù hợp hơn với tính di động và nó cũng đã xuất hiện được một thời gian trên các hệ thống cũ. Tôi hơi buồn một chút về nó, bởi vì tôi rất tò mò về C # và tôi muốn thực hiện một số dự án lớn trong đó, nhưng có thể là lần sau. Cảm ơn vì tất cả những lời khuyên.


3
Câu hỏi tuyệt vời. Chúng tôi cũng đang xem xét đánh giá về sự phát triển đa nền tảng.
Mat Nadrofsky

Tôi đã thêm thẻ "ngôn ngữ nào" nhưng đã có 5 thẻ, vì vậy không may mắn.
Daniel Daranas

Mạnh phụ thuộc vào nền tảng mà bạn nhắm mục tiêu ...
Thorbjørn Ravn Andersen

1
Bây giờ có thể là thời điểm tốt để bạn nhìn vào golang ...
StartupGuy 21/09/15

Xojo cũng có thể đáng xem xét. Nó biên dịch các ứng dụng gốc sử dụng LLVM cho Windows, Mac Linux. Nó có tự động hóa xây dựng IDE, gỡ lỗi, v.v. Thư viện có rất nhiều tính năng và có thể được mở rộng khi cần thiết. www / xojo.com
Paul Lefebvre

Câu trả lời:


96

Chà .... Java thực sự di động hơn. Mono không được triển khai ở mọi nơi và nó tụt hậu đáng kể so với việc triển khai của Microsoft. Java SDK dường như luôn được đồng bộ hóa tốt hơn giữa các nền tảng (và nó hoạt động trên nhiều nền tảng hơn).

Tôi cũng muốn nói rằng Java có nhiều công cụ hơn trên tất cả các nền tảng đó, mặc dù có rất nhiều công cụ có sẵn cho .NET trên nền tảng Windows.

Cập nhật cho năm 2014

Tôi vẫn giữ quan điểm này vào năm 2014. Tuy nhiên, tôi sẽ chứng minh điều này bằng cách nói rằng tôi hiện đang bắt đầu chú ý đến Mono sau một thời gian dài không thực sự quan tâm, vì vậy có thể có những cải tiến trong thời gian chạy Mono (hoặc hệ sinh thái ) mà tôi đã không được biết. AFAIK, vẫn không có hỗ trợ cho WPF, WCF, WF, của WIF. Mono có thể chạy trên iOS, nhưng theo hiểu biết của tôi, thời gian chạy Java vẫn chạy trên nhiều nền tảng hơn Mono. Ngoài ra, Mono đang bắt đầu thấy một số công cụ được cải thiện nhiều (Xamarin) và Microsoft dường như có thái độ đa nền tảng hơn và sẵn sàng làm việc với các đối tác để làm cho họ bổ sung, thay vì cạnh tranh (ví dụ: Mono sẽ một phần khá quan trọng của cảnh quan OWIN / Helios ASP.NET sắp tới). Tôi nghi ngờ rằng trong những năm tới, sự khác biệt về tính di động sẽ giảm nhanh chóng,

Cập nhật cho năm 2018

Quan điểm của tôi về điều này đang bắt đầu đi theo hướng khác. Tôi nghĩ rằng .NET, nói chung, đặc biệt với .NET Core, đã bắt đầu đạt được "tính tương đương về tính di động" với Java. Có những nỗ lực đang được tiến hành để đưa WPF lên .NET Core cho một số nền tảng và bản thân .NET Core hiện chạy trên rất nhiều nền tảng. Mono (thuộc sở hữu của Xamarin, hiện thuộc sở hữu của Microsoft) là một sản phẩm hoàn thiện và trau chuốt hơn bao giờ hết và việc viết các ứng dụng hoạt động trên nhiều nền tảng không còn là lĩnh vực sâu sắc của trò hack .NET nữa, mà là một nỗ lực tương đối đơn giản. . Tất nhiên, có các thư viện, dịch vụ và ứng dụng chỉ dành cho Windows hoặc chỉ có thể nhắm mục tiêu các nền tảng cụ thể - nhưng Java (nói chung) cũng vậy.

Nếu tôi ở trong tình trạng của OP tại thời điểm này, tôi không thể nghĩ rằng không có lý do gì vốn có trong bản thân các ngôn ngữ hoặc công nghệ có thể ngăn cản tôi chọn .NET cho bất kỳ ứng dụng nào từ thời điểm này.


2
Tôi thực sự vui mừng khi đọc điều này và vui mừng về các phiếu bầu trong thế giới Microsoft. NET là thực sự tốt nhưng Java có một legitimity như tôi luôn cố gắng để giải thích như một NET developper và một tuổi Java một;)
JoeBilly

+1 cho điều này. Tôi nhận thấy tính di động của Java (đối với các ứng dụng không tầm thường, tức là máy chủ web, GUI phức tạp, công cụ phân tích) tốt hơn bất kỳ ứng dụng thay thế nào khác. Nó không hoàn toàn hoàn hảo, nhưng nó là thứ tốt nhất bạn có thể có ngay bây giờ.
mikera 20/12/12

1
@Ben, bạn vẫn giữ ý kiến ​​này trong năm 2013? Nếu bạn làm vậy, bạn có phiền đề cập như vậy không, và nếu bạn không cập nhật câu trả lời này? Rất nhiều khi đọc câu trả lời của trẻ 4 tuổi, thật khó để nói.
Benjamin Gruenbaum

1
@BenjaminGruenbaum vâng, mặc dù tôi đủ điều kiện cho ý kiến ​​của mình vào thời điểm này bằng cách nói rằng tôi đã không quan tâm nhiều đến Mono trong một thời gian dài, vì vậy có thể có những cải tiến trong thời gian chạy Mono (hoặc hệ sinh thái) mà tôi chưa được nhận thức được. AFAIK, vẫn không có hỗ trợ cho WPF, WCF hoặc WF. Mono có thể chạy trên iOS, nhưng theo hiểu biết của tôi, thời gian chạy Java vẫn chạy trên nhiều nền tảng hơn Mono. Vậy ... vâng. Đủ tiêu chuẩn, nhưng có.
Ben Collins

@HighCore lập luận không chống lại Mono. Đó chỉ là một tuyên bố thực tế: nếu bạn viết mã phụ thuộc vào WPF, thì bạn không thể sử dụng Mono; ergo nó là không thể di chuyển theo cách đó. Các khung giao diện người dùng của Java có thể tệ, nhưng theo tôi biết thì chúng sẽ hoạt động ở bất kỳ đâu mà Java hoạt động (và phần cứng hỗ trợ loại giao diện người dùng đó). Điều đó không làm cho Java tốt hơn , mà nó làm cho nó trở nên linh hoạt hơn theo cách cụ thể này.
Ben Collins

112

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.


3
Cảm ơn vì một câu trả lời sâu rộng như vậy vào cuối trò chơi. Tôi chưa sử dụng Mono / .Net / C # bao giờ, nhưng bài đăng của bạn dường như phản ánh một số phát triển gần đây hơn trong vũ trụ đó. Ví dụ, tôi không nhớ MonoTouch có ý nghĩa như vậy 3,5 năm trước.
Hanno Fietz

3
Tôi bối rối trước câu trả lời "Mono không lag .NET" của bạn. Bạn khẳng định điều đó, sau đó nêu rõ nửa tá cách mà nó thực hiện là lag .NET (Entity Framework, v.v.). Có thể nói rằng nó không làm chậm trình biên dịch C # của Microsoft, nhưng hệ sinh thái .NET tốt nhất là rời rạc trên Mono. Điều đó có vẻ ổn đối với mục đích của bạn, nhưng không phải đối với tất cả mọi người, và có một mối quan tâm chính đáng ở đó.
samkass,

1
@samkass: Tôi nghĩ vấn đề ở đây là sự khác biệt giữa 'trễ' và 'không triển khai thư viện này'. Trong thế giới Java, bạn có thể thấy điều này tương tự như việc Android không triển khai thư viện Swing. Cũng xin lưu ý rằng các nền tảng tương đương (và mã nguồn mở, btw) đã được đưa ra. Tôi đang sử dụng Mono mỗi ngày và 'tốt nhất là rời rạc' chắc chắn không phải là kinh nghiệm của tôi.
konrad.kruczynski

9
Việc thiếu hỗ trợ WCF và EF hoàn chỉnh và mạnh mẽ, và không có WPF là một kẻ giết người cho Mono đối với mọi thứ tôi đã làm việc kể từ .NET 3.0. Có, có các lựa chọn thay thế nhưng một phần rất lớn sức mạnh của .NET là các khuôn khổ bổ sung này. Nếu không có những thứ này, tôi không nghĩ rằng bạn có thể gọi Mono có thể so sánh được với .NET. Nó là một triển khai một phần tốt nhất. Tôi cũng đã sử dụng NHibernate và thành thật mà nói EF là một công nghệ tốt hơn. Chưa bao giờ sử dụng ServiceStack. IMO Mono có nhiều rủi ro.
MrLane

1
mọi người bỏ lỡ WCF nên xem qua servicestack. nghiêm túc, không thực hiện WCF là một điều tốt!
không thật.

54

Tôi thực sự phát triển trong .NET, chạy tất cả các thử nghiệm của mình trước tiên trên Mono, sau đó trên Windows. Bằng cách đó, tôi biết các ứng dụng của mình là đa nền tảng. Tôi đã thực hiện điều này rất thành công trên cả hai ứng dụng ASP.NET và Winforms.

Tôi không thực sự chắc chắn về việc một số người có ấn tượng Mono khủng khiếp đến vậy từ đâu, nhưng chắc chắn nó đã thực hiện được công việc đó trong các trường hợp và ý kiến ​​của tôi. nhưng cho đến nay, .NET 2.0 trên Windows và Linux là rất vững chắc đối với tôi.

Hãy nhớ rằng rõ ràng có rất nhiều điều kỳ quặc đối với điều này, nhưng hầu hết chúng đến từ việc đảm bảo rằng bạn đang viết mã di động. Trong khi các khung làm việc thực hiện rất tốt trong việc trừu tượng hóa hệ điều hành bạn đang chạy, những thứ nhỏ nhặt như phân biệt chữ hoa chữ thường của Linux trong đường dẫn và tên tệp cần một chút làm quen, cũng như những thứ như quyền.

.NET chắc chắn là nền tảng rất đa dạng do Mono dựa trên kinh nghiệm của tôi cho đến nay.


Gọi tôi là ngu dốt, nhưng bạn có cần phải kiểm tra ASP.NET với mono không? Mọi thứ sẽ là .NET đều là phía máy chủ, do đó không quan trọng nó được hiển thị trên hệ điều hành nào?
Ethan Gunderson 14/09/08

9
Ethan, sử dụng Mono, bạn có thể lưu trữ các ứng dụng ASP.net trên Linux.
Eric Haskins 14-08

2
Không phải ai cũng muốn chạy ứng dụng của họ trên Windows, vì bất kỳ lý do gì.
Bernard

2
@Rich B: nếu khách hàng không muốn sản phẩm MS, .NET rõ ràng là lựa chọn sai lầm.
Kjetil Ødegaard,

21
@Kjetil: Mono không phải là sản phẩm MS.
GEOCHET

26

Java thực sự là đa nền tảng như mọi người vẫn nói. Có một triển khai JVM cho bất kỳ hệ điều hành chính thống nào hiện có (thậm chí cả Mac OS X, cuối cùng) và tất cả chúng đều hoạt động thực sự tốt. Và có rất nhiều công cụ mã nguồn mở cũng giống như nền tảng chéo.

Điểm duy nhất là có một số thao tác riêng mà bạn không thể thực hiện trong Java nếu không viết một số DLL hoặc SO. Rất hiếm khi những điều này xuất hiện trong thực tế. Tuy nhiên, trong tất cả những trường hợp đó, tôi đã có thể vượt qua nó bằng cách tạo ra các quy trình gốc và sàng lọc kết quả.


1
Ngoài ra, trong hầu hết mọi trường hợp mà Java không thể thực hiện hoạt động gốc theo cách đa nền tảng, điều này cũng đúng với .NET
Eli Courtwright 15/09/08

Cuối cùng? Mac OS X đã triển khai JVM kể từ phiên bản 10.0. :)
mipadi

3
@Eli - Có lẽ đúng. Mặc dù vậy, nó chắc chắn dễ dàng hơn nhiều để tích hợp với chức năng gốc trong .NET / Mono so với trong Java. Vì vậy, nếu bạn chỉ đang cố gắng tích hợp tốt với nền tảng gốc, .NET / Mono mang lại một lợi thế thực sự.
Justin

rùng mình
Basic

Tôi sẽ phân minh với 'chỉ về bất kỳ hệ điều hành chính thống nào', vì không có JVM nào phù hợp cho cả Android hoặc iOS. Trong khi đó, với các thư viện lớp di động mới trong .NET, bạn thực sự có thể chia sẻ mã đã biên dịch (mặc dù thực tế không phải mã giao diện người dùng) trên các nền tảng bao gồm cả thiết bị di động.
Mathieson

18

Tôi nghĩ rằng câu hỏi được diễn giải không chính xác. C # so với Java kém thú vị hơn nhiều về cách sử dụng đa nền tảng hơn là (a) nền tảng nào bạn cần hỗ trợ và (b) xem xét các thư viện lõi và thư viện bên thứ ba có sẵn. Ngôn ngữ gần như là phần ít quan trọng nhất trong quá trình ra quyết định.


Đã đồng ý. Vấn đề là các máy ảo được hỗ trợ tốt như thế nào trên các kiến ​​trúc khác nhau.
Allain Lalonde 14/09/08

Đã đồng ý. Không có gì vui khi thực hiện một bản phát triển đầy đủ nếu khách hàng không thể chạy nó.
Thorbjørn Ravn Andersen

15

Java là lựa chọn tốt hơn để phát triển Đa nền tảng.

  • Hiệu suất. Java và .Net có mức hiệu suất tương tự do máy ảo, nhưng JVM thường có hiệu suất tốt hơn do tối ưu hóa nhiều năm.

  • Thư viện. Mặc dù điều này phụ thuộc vào nhiệm vụ của bạn, Java có nhiều mã nguồn mở hơn hoặc các thư viện của bên thứ ba có sẵn ở đó. Đối với ứng dụng máy chủ, J2EE, Spring, Struts, v.v. Đối với GUI, mặc dù .Net cung cấp API lớp Win32 nhưng điều này gây ra vấn đề tương thích. Java có Swing, SWT, AWT,… Nó hoạt động trong hầu hết các trường hợp.

  • Khả năng tương thích. Đây là vấn đề chính cần được xem xét khi phát triển chương trình đa nền tảng. Hai vấn đề: thứ nhất, khả năng tương thích nền tảng. Java vẫn chiến thắng vì JDK được duy trì tốt bởi công ty duy nhất và nguyên bản Sun. Mono không được MS duy trì, vì vậy bạn không có gì đảm bảo về khả năng tương thích cập nhật. 2. Khả năng tương thích ngược. Sun duy trì một danh tiếng tốt về khả năng tương thích ngược của họ, mặc dù đôi khi điều này có vẻ quá cứng nhắc và làm chậm tốc độ.

  • Công cụ. Java có IDE đa nền tảng tốt. Netbeans, Eclipse, v.v. Hầu hết chúng đều miễn phí. VS Studio là tốt nhưng chỉ trên Windows và không tốn một chút phí nào. Cả hai đều cung cấp các bài kiểm tra đơn vị tốt, gỡ lỗi, cấu hình, v.v.

Do đó, tôi đề nghị rằng Java là một lựa chọn tốt hơn. Như một ví dụ điển hình, có một số ứng dụng đa nền tảng dành cho máy tính để bàn nổi tiếng được phát triển bởi Java: Vuze, Limewire, BlogBridge, CrossFTP, chưa kể những IDE đó. Đối với .Net, tôi có ít kiến ​​thức về các ứng dụng thành công như vậy.


Làm việc với mono trên Linux "khác" trở nên khó khăn. Điều này phản ánh vấn đề lớn của mono: Tương lai của mono quá phụ thuộc vào chế độ độc tài của Miguel de Icaza. Điểm chung: Đang giảm dần hỗ trợ cho "other ... (không được hỗ trợ)" [ mono-project.com/Other_Downloads] Linux dường như có mối tương quan ( IMHO ) với sự vỡ mộng của Miguel de Icaza với Linux ( tirania.org/blog/archive/ 2013 / Mar-05.html ). Java không gặp phải vấn đề độc tài này. C # có thể chạy trên nhiều nền tảng hơn, nhưng điều đó đi kèm với chi phí, rủi ro, sự thỏa hiệp và phụ thuộc nhiều hơn vào ông de Icaza. Không, cám ơn.
StartupGuy

@ Michael.M vậy bạn có muốn làm theo ý thích của Oracle không?
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen: Sai. Hãy để tôi chia nhỏ nó một cách đơn giản nhất có thể: .Net -> Nền tảng MSFT (công ty thành công ổn định; hệ sinh thái hạn chế nhưng gọn gàng); Mono -> De Icaza framework (el dictador; không nóng cho Linux và nó hiển thị: [ Cultofmac.com/218632/… - hãy thử cài đặt mono trên Centos 6.4, đó là một cơn ác mộng "không được hỗ trợ"); Java là một đặc điểm kỹ thuật mà thuộc về cộng đồng và có nhiều triển khai nhà cung cấp khác nhau (Oracle chỉ là một là) [ coderanch.com/t/327542/java/java/...
StartupGuy

@ ThorbjørnRavnAndersen: .. hơn nữa, một nhà tài trợ cộng đồng Java lớn thậm chí có thể loại trừ Oracle mà vẫn thành công và được hỗ trợ cực kỳ tốt - Java hoàn toàn không theo ý thích của Oracle --- vui lòng xem: news.techworld.com/application/3252787/ … Oracle có thể loại bỏ tất cả sự tham gia vào Java của họ và nó vẫn sẽ tồn tại. Những nhà cung cấp nào khác có nền tảng .Net? Ai khác cung cấp thời gian chạy đơn ngoài Xamarin? Java là Java duy nhất trong số này không bị chế độ độc tài và có quyền kiểm soát cộng đồng thực sự, hỗ trợ cộng đồng và quản lý cộng đồng.
Khởi độngGuy

1
@ Michael.M Đặc điểm kỹ thuật? Thuộc về cộng đồng? Tôi nghĩ bạn đã nhầm - tôi cũng tin rằng lý do duy nhất khiến dự án OpenJDK không bị đóng cửa sau khi mua lại Sun, là GPL. Java nằm trong tay đấm sắt của Oracle, đơn giản vì TCK không có sẵn miễn phí và đó là thứ cần thiết để tạo ra một JVM hoạt động giống như Oracle JVM. Tôi không gặp vấn đề với Mono hay De Icaza, nhưng tôi không nghĩ rằng tình hình Java tốt hơn nhiều. Dự án JVM thay thế duy nhất có động lực đã chết khi IBM ngừng hỗ trợ nó.
Thorbjørn Ravn Andersen


8

Tôi cũng sẽ nói Java. Nếu bạn nhìn vào khía cạnh trưởng thành, Sun (và những người khác) đã dành nhiều thời gian và nỗ lực hơn để đưa JVM hoạt động trên các nền tảng không phải Windows.

Ngược lại, Mono chắc chắn là công dân hạng hai trong hệ sinh thái .NET.

Tùy thuộc vào khách hàng mục tiêu của bạn là ai, bạn cũng có thể thấy rằng có một sự phản đối thực sự đối với việc sử dụng Mono - liệu Novell có cung cấp cùng một loại hỗ trợ của nhà cung cấp cho Mono mà bạn sẽ nhận được cho Java hoặc .NET trên Windows không?

Nếu bạn chủ yếu nhắm mục tiêu lưu trữ dịch vụ của mình trên Windows, sẽ rất hợp lý khi cân nhắc lựa chọn này, nhưng vì bạn đang nhắm mục tiêu chủ yếu vào Linux, nên đối với tôi, điều đó có vẻ như không có trí tuệ.


Tôi có xu hướng đồng ý với việc Mono là công dân hạng 2, nhưng không phải với kết luận. Java đã xuất hiện từ rất lâu và vẫn còn tồn tại những vấn đề khó hiểu về kế thừa và vấn đề quản lý bộ nhớ, chưa kể đến việc nó hầu như luôn chọn cách làm gì đó dài dòng nhất. Nó cũng khá trì trệ (ngôn ngữ) trong nhiều năm và gần đây mới bắt đầu kết hợp các tính năng đã có trong .Net trong nhiều năm. IMHO, đó là sự lựa chọn giữa hai tệ nạn ... Nền tảng Flakey hỗ trợ w / .Net hoặc một con khổng lồ ì ạch rất chậm phát triển và một công việc vặt để viết mã.
Cơ bản

7

Java được thiết kế để trở thành đa nền tảng; C # /. Net không. Khi nghi ngờ, hãy sử dụng công cụ được thiết kế cho mục đích của bạn.

CHỈNH SỬA: công bằng mà nói, .NET được thiết kế để hoạt động trên môi trường nhúng / PC / Server, vì vậy đó là SORT của đa nền tảng. Nhưng nó không được thiết kế cho Linux.


3
C # được tiêu chuẩn hóa ISO, vì vậy ý ​​tưởng là có một cái gì đó đa nền tảng. microsoft không muốn phát triển triển khai cho các nền tảng khác, nhưng nó được để cho các bên khác vì ngôn ngữ là tiêu chuẩn. .Net framework là một câu chuyện phức tạp hơn.
zappan 14/09/08

Mono là dù và DotGNU (dành cho Mac quá) thực hiện tốt
Andrei Rînea

1
zappan: điểm hợp lệ trên C # (không biết), nhưng .NET rất lớn. Phải thừa nhận rằng tôi không có kinh nghiệm cá nhân ở đây.
AlexeyMK

@zappan - từ góc độ thực tế, việc C # được chuẩn hóa là không liên quan (hoặc Mono tạo ra một bản sao khá tốt của C #). Tính di động của nền tảng là về toàn bộ nền tảng (bao gồm cả thư viện và hệ sinh thái công cụ), không chỉ riêng ngôn ngữ. Theo nghĩa đó, .Net chắc chắn không hoàn toàn đa nền tảng.
mikera 20/12/12

7

Tôi nghĩ câu trả lời là "nó phụ thuộc." Java chạy trên hầu hết mọi thứ, nhưng .NET / Mono là (IMHO) là một khuôn khổ tốt hơn cho máy tính để bàn. Vì vậy, tôi đoán câu trả lời thực sự phụ thuộc vào nền tảng bạn định nhắm mục tiêu.


Máy tính để bàn không đồng nghĩa với cửa sổ mặc dù nó có phần lớn nhất của không gian máy tính để bàn.
ZOXIS

6

Để bổ sung thêm một chút cho cuộc trò chuyện, Java sẽ dễ di chuyển hơn nếu bạn vẫn còn chậm hơn một phiên bản - Java 5 vẫn có nhiều tính năng tuyệt vời nên bạn có thể chờ đợi Java 6 và vẫn còn rất nhiều phạm vi về ngôn ngữ và thư viện để phát triển với. Mac là nền tảng chính có thể mất một thời gian để bắt kịp phiên bản Java mới nhất.

Java cũng có một cơ quan tiêu chuẩn tuyệt vời giúp phát triển nền tảng một cách thông minh dựa trên đầu vào từ nhiều công ty khác nhau. Đây là một tính năng bị bỏ qua nhưng nó giữ cho các tính năng mới thậm chí hoạt động tốt trên nhiều nền tảng và cung cấp nhiều hỗ trợ thư viện cho một số thứ bí truyền (dưới dạng phần mở rộng tùy chọn).


OS X 10.6 hiện đã được cập nhật đầy đủ với bản phát hành Sun Java 6.
Thorbjørn Ravn Andersen

5

Tôi sẽ bỏ phiếu cho Java dễ di động hơn C #. Java chắc chắn cũng có một bộ thư viện tiêu chuẩn rất phong phú. Ngoài ra còn có một loạt các thư viện mã nguồn mở của bên thứ 3 như những thư viện được cung cấp bởi dự án Jakarta ( http://jakarta.apache.org/ ).

Tất cả các nghi ngờ thông thường cũng tồn tại đối với CI, Unit testing, v.v. Hỗ trợ IDE đa nền tảng cũng rất tốt với các ứng dụng như Eclipse, Netbeans, IntelliJ IDEA, v.v.


4

Có nhiều lựa chọn ngôn ngữ khác. Tôi khá thích Python, hoạt động tốt trên Windows, Linux và Mac, và có một bộ thư viện phong phú.


Vâng, tôi yêu Python và nó có Django mà tôi thích cho các ứng dụng web, nhưng có một số thứ khiến nó không thể chấp nhận được, quan trọng nhất là GIL trong việc triển khai C chuẩn của trình thông dịch. Tôi có một số hoạt động được hưởng lợi rất nhiều từ tính toán song song trên các máy đa lõi và tôi phải tạo ra các quy trình để thực hiện điều đó trong cPython.
Hanno Fietz

3

Mặc dù Mono có một số vấn đề, tôi nghĩ rằng nó có một câu chuyện tương thích đa nền tảng tốt hơn, đặc biệt là NẾU bạn phụ thuộc vào lệnh gọi nền tảng gốc.

Không có đủ từ ngữ trên Stack Overflow để nhấn mạnh rằng việc tải một thứ gì đó gốc được gọi và thực thi trong .NET / Mono trên nhiều nền tảng so với nỗ lực tương đương của Java sẽ mượt mà hơn bao nhiêu.


Tôi đồng ý, việc gọi mã nền tảng cụ thể từ .NET / Mono là cực kỳ dễ dàng miễn là nó có thể được gọi từ C. Với CXXI ​​(phát âm là sexy), nó cũng đang trở thành một lối mòn để gọi mã C ++. tirania.org/blog/archive/2011/Dec-19.html
Justin

2

Gatorhall, bạn có một số dữ liệu để sao lưu không?

Hiệu suất. Java và .Net có mức hiệu suất tương tự do máy ảo, nhưng JVM thường có hiệu suất tốt hơn do tối ưu hóa nhiều năm.

Thông tin cơ bản: Tôi là một người dùng Windows từ Windows 3.1 và hiện là người dùng Linux (vẫn đang chạy Windows 7, hệ điều hành tuyệt vời, trên máy ảo cho Visual Studio 2010 và các công cụ khác).

Điểm mấu chốt: tôi và rất nhiều người dùng (windows, linux, v.v.) mà tôi biết, có thể không đồng ý với bạn. Java có xu hướng hoạt động chậm hơn ngay cả trên một ứng dụng máy tính để bàn Linux, ASP.NET hoạt động nhanh hơn các trang máy chủ java nhiều lần. Một số có thể đồng ý rằng ngay cả PHP không được biên dịch cũng hoạt động tốt hơn trong một số trường hợp.

Java đa nền tảng hơn? Tôi không nghi ngờ gì về điều này (lịch sử trở lại điều này), nhưng nhanh hơn (không nói .NET là) không chắc chắn lắm và tôi muốn xem một số điểm chuẩn thực sự.


một câu hỏi khác có thể hữu ích và tất nhiên là có cuộc đấu súng về ngôn ngữ . JVM có thể được tối ưu hóa nhiều hơn nhưng nó gần giống (đặc biệt là trên Windows). Điểm chuẩn cho ASP.NET so với J2EE hoặc JSP thậm chí còn bị nghi ngờ hơn nhưng tôi không khó tin rằng ASP.NET nhanh hơn nhiều ngay cả khi thời gian chạy ràng buộc.
Justin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.