Mono ทำงานได้ดีกว่าในการกำหนดเป้าหมายไปยังแพลตฟอร์มที่ฉันต้องการสนับสนุน นอกเหนือจากนั้นเป็นเรื่องส่วนตัวทั้งหมด
ฉันแชร์รหัส C # ในแพลตฟอร์มต่อไปนี้: - iOS (iPhone / iPad) - Android - เว็บ (HTML5) - Mac (OS X) - Linux - Windows
ฉันสามารถแชร์สถานที่ได้มากขึ้น: - Windows Phone 7 - Wii - XBox - PS3 - ฯลฯ
ตัวใหญ่คือ iOS เนื่องจากMonoTouchทำงานได้อย่างยอดเยี่ยม ฉันไม่รู้วิธีใดที่ดีในการกำหนดเป้าหมาย iOS ด้วย Java คุณไม่สามารถกำหนดเป้าหมาย Windows Phone 7 ด้วย Java ได้ดังนั้นฉันจะบอกว่าวันที่ Java ดีกว่าสำหรับมือถืออยู่เบื้องหลังเรา
ปัจจัยที่ใหญ่ที่สุดสำหรับฉันคือผลผลิต (และความสุข) ส่วนตัว C # เป็นภาษาที่อยู่ข้างหน้า Java IMHO หลายปีและกรอบงาน. NET เป็นความสุขที่จะใช้ สิ่งที่เพิ่มเข้ามาใน Java 7 และ Java 8 ส่วนใหญ่อยู่ใน C # มาหลายปีแล้ว ภาษา JVM เช่น Scala และ Clojure (ทั้งสองอย่างมีอยู่ใน CLR) นั้นค่อนข้างดี
ฉันเห็นว่า Mono เป็นแพลตฟอร์มที่ถูกต้อง (เป็นแพลตฟอร์มที่ยอดเยี่ยม) และถือว่า. NET เป็นการใช้งาน Mono บน Windows ของ Microsoft นั่นหมายความว่าฉันพัฒนาและทดสอบกับ Mono ก่อน นี่ทำงานได้อย่างยอดเยี่ยม
ถ้าทั้ง Java และ. NET (Mono สมมติว่า) เป็นโปรเจ็กต์ Open Source โดยไม่มีการสนับสนุนจากองค์กรใด ๆ ฉันจะเลือก Mono มากกว่า Java ทุกครั้ง ฉันเชื่อว่ามันเป็นเพียงแพลตฟอร์มที่ดีกว่า
ทั้ง. NET / Mono และ JVM เป็นตัวเลือกที่ดีแม้ว่าฉันจะใช้ภาษาอื่นที่ไม่ใช่ Java บน JVM เป็นการส่วนตัว
ฉันใช้ความคิดเห็นอื่น ๆ :
ปัญหา: ประสิทธิภาพ
** คำตอบ: ทั้ง JVM และ CLR ทำงานได้ดีกว่าที่ผู้ว่าทำ ฉันจะบอกว่า JVM ทำงานได้ดีกว่า โดยทั่วไปโมโนจะช้ากว่า. NET (แม้ว่าจะไม่เสมอไป)
โดยส่วนตัวแล้วฉันจะใช้ ASP.NET MVC มากกว่า J2EE ทุกวันทั้งในฐานะผู้พัฒนาและผู้ใช้ปลายทาง การสนับสนุนGoogle Native Clientก็ค่อนข้างดีเช่นกัน นอกจากนี้ฉันรู้ว่าประสิทธิภาพ GUI ที่ไม่ดีสำหรับแอป Java บนเดสก์ท็อปนั้นควรจะเป็นอดีตไปแล้ว แต่ฉันก็ยังคงพบสิ่งที่ช้า จากนั้นอีกครั้งฉันสามารถพูดเหมือนกันสำหรับ WPF GTK # เร็วมาก แต่ก็ไม่มีเหตุผลที่จะต้องช้า
ปัญหา: Java มีระบบนิเวศของไลบรารีที่ใหญ่กว่า
คำตอบ: อาจจะจริง แต่ไม่ใช่ประเด็นในทางปฏิบัติ
จริงทุก Java ห้องสมุด (รวมทั้ง JDK) วิ่งเพียงสำรวยเมื่อ .NET / โมโนขอบคุณที่IKVM.NET เทคโนโลยีชิ้นนี้เป็นสิ่งมหัศจรรย์อย่างแท้จริง การผสมผสานนั้นยอดเยี่ยมมาก คุณสามารถใช้ไลบรารี Java ได้เหมือนเดิม ฉันต้องใช้ไลบรารี Java ในแอป. NET เพียงแอปเดียว ระบบนิเวศ. NET / Mono โดยทั่วไปมีมากกว่าที่ฉันต้องการ
ปัญหา: Java มีการสนับสนุนเครื่องมือที่ดีกว่า (กว้างกว่า)
คำตอบ: ไม่ใช่บน Windows อย่างอื่นฉันเห็นด้วย MonoDevelop เป็นสิ่งที่ดี
ฉันต้องการที่จะให้ตะโกนออกไปMonoDevelop ; มันคืออัญมณี MonoDevelop รวมเครื่องมือส่วนใหญ่ที่ฉันต้องการใช้รวมถึงการเติมโค้ด (intellisense) การรวม Git / Subversion การสนับสนุนการทดสอบหน่วยการรวม SQL การดีบักการปรับโครงสร้างใหม่ที่ง่ายและการเรียกดูแอสเซมบลีด้วยการถอดรหัสแบบ on-the-fly เป็นเรื่องที่ยอดเยี่ยมที่จะใช้สภาพแวดล้อมเดียวกันสำหรับทุกอย่างตั้งแต่เว็บฝั่งเซิร์ฟเวอร์ไปจนถึงแอปบนอุปกรณ์เคลื่อนที่
ปัญหา: ความเข้ากันได้ข้ามแพลตฟอร์ม
คำตอบ: Mono เป็นฐานรหัสเดียวในทุกแพลตฟอร์มรวมถึง Windows
พัฒนาสำหรับ Mono ก่อนและปรับใช้กับ. NET บน Windows หากคุณต้องการ หากคุณเปรียบเทียบ. NET จาก MS เป็น Java แม้ว่า Java จะมีความได้เปรียบในแง่ของความสอดคล้องกันระหว่างแพลตฟอร์ม ดูคำตอบต่อไป ...
ปัญหา: โมโนล่าช้า. NET
คำตอบ: ไม่ได้ IMHO นี่เป็นคำแถลงที่ระบุ แต่ไม่ถูกต้อง
การกระจาย Mono จาก Xamarin มาพร้อมกับ C #, VB.NET, F #, IronPython, IronRuby และฉันคิดว่าอาจจะ Boo นอกกรอบ คอมไพเลอร์ Mono C # เป็นเวอร์ชันล่าสุดของ MS คอมไพเลอร์ Mono VB.NET ทำให้เวอร์ชัน MS ล่าช้า คอมไพเลอร์อื่น ๆ จะเหมือนกันบนทั้งสองแพลตฟอร์ม (เช่นเดียวกับภาษา. NET อื่น ๆ เช่น Nemerle, Boo และ Phalanger (PHP))
Mono มาพร้อมกับโค้ดที่เขียนโดย Microsoft จริงจำนวนมากรวมถึง Dynamic Language Runtime (DLR), Managed Extensibility Framework (MEF), F # และ ASP.NET MVC เนื่องจาก Razor ไม่ใช่ Open Source ปัจจุบัน Mono มาพร้อมกับ MVC2 แต่ MVC3 ทำงานบน Mono ได้ดี
แพลตฟอร์ม Mono หลักก้าวทัน. NET หรือหลายปีและความเข้ากันได้นั้นน่าประทับใจ คุณสามารถใช้ภาษา C # 4.0 เต็มรูปแบบและแม้แต่คุณสมบัติ C # 5.0 บางอย่างได้แล้ววันนี้ ในความเป็นจริง Mono มักจะนำ. NET ในหลาย ๆ ด้าน
Mono ใช้บางส่วนของข้อมูลจำเพาะ CLR ที่แม้แต่ Microsoft ก็ไม่รองรับ (เช่นอาร์เรย์ 64 บิต) หนึ่งชิ้นใหม่มากที่สุดที่น่าตื่นเต้นของเทคโนโลยีในโลก .NET คือRosylyn โมโนได้ให้บริการคอมไพเลอร์ C # เป็นเวลาหลายปี ข้อเสนอบางอย่างของ Rosylyn มีให้ผ่านทางNRefractoryเช่นกัน ตัวอย่างของ Mono ยังคงอยู่ข้างหน้าคือคำแนะนำ SIMD เพื่อเร่งประสิทธิภาพการเล่นเกม
Microsoft เสนอผลิตภัณฑ์จำนวนหนึ่งที่อยู่เหนือ. NET ที่ไม่มีใน Mono ซึ่งเป็นความเข้าใจผิดเกี่ยวกับ Mono lagging มาจาก Windows Presentation Foundation (WPF), Entity Framework (EF), WCF (Windows Communication Foundation) เป็นตัวอย่างของผลิตภัณฑ์ที่ใช้งานไม่ได้หรือได้รับการสนับสนุนไม่ดีบน Mono ทางออกที่ชัดเจนคือใช้ทางเลือกข้ามแพลตฟอร์มเช่น GTK #, NHibernate และ ServiceStack แทน
ปัญหา: Microsoft ชั่วร้าย
คำตอบ: จริง แล้วไง.
หลายคนเสนอเหตุผลต่อไปนี้เพื่อหลีกเลี่ยงการใช้ Mono:
1) คุณไม่ควรใช้ Mono เนื่องจากควรหลีกเลี่ยงเทคโนโลยีของ Microsoft
2) Mono ห่วยเพราะไม่อนุญาตให้คุณใช้ทุกเทคโนโลยีที่ Microsoft นำเสนอ
สำหรับฉันแล้วเป็นที่ชัดเจนว่าข้อความเหล่านี้ไม่เข้ากัน ฉันปฏิเสธคำสั่งแรก แต่จะข้ามข้อโต้แย้งนั้นที่นี่ คำสั่งที่สองเป็นจริงสำหรับทางเลือก. NET ทั้งหมด
JVM เป็นแพลตฟอร์มที่ยอดเยี่ยมและการขยายตัวของภาษา JVM นั้นยอดเยี่ยมมาก ใช้สิ่งที่ทำให้คุณมีความสุข สำหรับตอนนี้นั่นมักจะเป็น. NET / Mono สำหรับฉัน