如果所有的.NET語言都編譯爲CIL,那麼這是否意味着它背後的語言(VB.NET,C#等)並不重要?或者編譯過程是否在不同語言之間對待代碼?有顯着差異嗎?如果將.NET語言編譯爲CIL,那麼.NET語言選擇是否重要?
回答
如果所有.NET語言都編譯爲CIL,那麼這是否意味着它背後的語言(VB.NET,C#等)並不重要?
是的,這正是它的意思。無論您使用哪種語言,只要它符合CLS標準,CLR就不會在運行時關心MSIL。
不同的語言提供不同的語法,但在所有這些語法中,您應該能夠實現相同的最終目標。 C#和VB.NET是旗艦.NET語言,你可以期待微軟(和StackOverflow :-))提供的大部分功能,進展和支持。很顯然,每種語言都有自己的做事方式。
雖然有一個重要的事情要注意:有些功能是在MSIL中定義的,但尚未在C#/ VB.NET(還)中實現。例如,在MSIL中,您可以定義枚舉或委託通用約束,但不能使用高級語言。 Jon blogged關於這個有趣的功能。
至於你應該選擇哪一種,請確保你從不問這個問題,否則在關閉前1分鐘不可能存活。
從某種程度上說,這並不重要。編譯所有.Net語言的結果是CIL,您可以使用不同語言(大部分時間)使用其中一種語言創建的代碼。
儘管在某種程度上,不同的語言只有不同的語法,但並不完全正確。語法也很重要。例如,如果要編寫完全動態代碼,IronPython可能是比C#更好的選擇。如果你想編寫功能代碼,包括monad等更高級的功能,F#將比標準的程序.Net語言好得多。
那麼,有是語言之間的顯着差異。特別是,我相信C++/CLI有一些C#/ VB不具備的技巧(例如,能夠直接修改「框」中的值),並且我不會感到驚訝,如果反過來也是如此。例如,不同的語言編譯器可能會利用IL的不同方面--F#編譯器將使用前綴爲tail.
的前綴,例如C#編譯器不會。 (而且F#與C#,C++/CLI和VB顯然是完全不同的語言。)
但最終,JIT編譯器既不知道也不知道使用哪種源語言的情況。使用任何一種語言都可以使您的工作以最易讀和可維護的方式完成。這將取決於手頭的任務以及所涉及的開發團隊的經驗和偏好。有些語言比其他語言更適合某些任務。例如,在C#4之前,VB比C#更容易使用COM API,但是動態類型有助於在此平衡遊戲領域。因爲C#具有迭代器塊,所以C#會更適合實現LINQ to Objects ,而VB沒有任何可比的...但尚未在下一個版本中支持更好。
是的,它可以很重要。
例如,Visual Basic在XBox或.NET Micro框架上不受支持。
我不確定,但我相信Windows Phone 7不支持C++ CLI。動態語言當然不是。 (例如使用DLR的任何東西)。
如果工具需要代碼生成,它通常會在C#之前出現在其他語言之前。有些語言從來沒有得到工具支持。
所以,雖然我認爲VB是C#的高級語言,但我通常會使用C#來完成我的製作工作。
- 1. .NET彙編語言
- 2. .NET編程語言
- 3. 哪些語言編譯成CIL/MSIL
- 4. 編譯基於堆棧的語言CIL
- 5. 是否有可能將.NET字節碼編譯爲機器語言?
- 6. 是否有高級語言編譯爲低級語言(如C)的術語?
- 7. 用什麼語言編寫.NET Framework?
- 8. .Net TimeZoneInfo ID - Windows語言是否特定?
- 9. 那是什麼語言?
- 10. .net腳本語言
- 11. .net多語言cms
- 12. 選擇語言和翻譯
- 13. 如何創建.Net編程語言?
- 14. SharpDevelop:您是否可以爲非.NET語言創建語言插件
- 15. 如何爲該語言的某種語言編寫編譯器?
- 16. C#/ .NET MVC Razor語言翻譯
- 17. .NET自然語言編程/別名/(域特定語言)框架
- 18. 選擇語言
- 19. 編程語言選擇
- 20. .NET 4.0的CIL(公共中間語言)已更改嗎?
- 21. 什麼語言可以編譯爲javascript?
- 22. 標記語言是否被視爲編程語言?
- 23. 將函數式語言編譯爲C
- 24. 將Excel/VBA轉換爲編譯語言
- 25. (.net)中級語言exe編輯器?
- 26. 用動態語言編寫.NET?
- 27. php是編譯語言還是解釋語言?
- 28. 跨.NET語言表演
- 29. Windows API和.net語言
- 30. .Net多語言本地化
美味的MSIL早餐,午餐,晚餐和午夜小吃! –
@安德魯理髮師,垃圾收集器晚餐後,所有的美味:-) –
+1完美的答案!只是想拋出一個關於CLS合規性的鏈接:http://msdn.microsoft.com/en-us/library/bhc3fa7f%28v=VS.100%29.aspx(例如:無符號整數不保證在每一個工作.NET語言) – attack