在「如何評價近十年來微軟審美進程」中,提到用C#實現vista一些核心功能,那在win10里,情況又如何呢?
在「如何評價近十年來微軟審美進程」中,提到用C#實現vista一些核心功能,那在win10里,情況又如何呢? 如今硬體性能應該更加強大了,C#的速度問題,也應該沒這麼顯著了吧?
--------------------------------------------------------------------------------------------------------------------------------謝謝大牛們的回答!
當初入門C#時,對C#一切都很好奇,而如今發現C#最大優點就是能力不是很強的人,也不會寫出性能很差的代碼,因為C#被人鄙視的「繁瑣"——反過來就是」規範「,加之,通過編譯器優化,能獲得不錯性能。。。這幾天在同時學習MVC5與Python+Flask,又有感慨了——若做桌面GUI,那Python比C#還繁瑣,可做Web,MVC就比Flask繁瑣多了,Web時代啊。。。
.net當年的宏大願景,就是把本地操作系統弱化,所有的東西跑在瀏覽器裡面,所以才把這個東西叫.net。後來微軟發現這種東西根本不現實,於是最後退化成了一個framework和幾門語言。題主說道的那個東西就是這個失敗的實驗的一部分。說道Windows 10,當然全部都是C++,連那個UAP也是C++和COM包裝出來的,然後VS的那些編譯器給你做個bridge,就可以在你不想用C++的時候,用C#、JS和OC來寫了。
然而最近又有一些公司不吃前車之鑒,想要干一樣的事情了。
C#實現操作系統內核,某種程度上來說是沒問題的。微軟研究院就搞過一個項目,叫做Singularity,目的就是做出一個基於託管語言的操作系統。這個系統用的主要開發語言叫Sing#,基於Spec#,後者又基於C#(這兩種語言都是研究性質的,其中Spec#里最重要的關於Contract的部分已經被.NET Framework吸收了)。Sing#為Spec#/C#增加了一些並發與底層編程的支持。
除此之外,還有一些開源項目嘗試過用C#編寫操作系統,如SharpOS、Cosmos等。它們都使用了AOT編譯,因此輸出的是機器碼而非位元組碼。http://asp.net做web繁瑣?總比ssh那種「改一個頁面要改七個文件」要簡單的多。
C#居然被人鄙視「繁瑣」,那java。。。
什麼叫核心功能?Kernel嗎?要把kernel也跑在CLR上那可不是性能問題這麼簡單了。目前windows上clr的實現還是基於很多現有的用戶態組件的,如果要到kernel裡面跑那就基本得重寫了。比如內存管理吧,現在的gcheap是基於用戶態VM機制的,換到kernel就得改成paged pool,non-paged pool這些,這就基本全改了。 然後你叫廠商們寫驅動也用c#寫?處理個中斷到一半突然發現需要GC了怎麼辦?
退一萬步,就算技術上可行,好處是什麼呢?編寫操作系統的話C#效率是不如C++的,當初Vista開發遭遇WinFS、Avalon全部重寫的時候,大部分用C#開發的組件已經被替換掉了。原因不全是效率問題。不了解Windows 10的實現,期待教主 @可可蘇瑪 和輪子哥 @vczh 給出正解。
Universal APP是.net的APP編寫的,因此確實是OS帶的一部分功能算是c#實現了,例如新的計算器-_-b,算不算核心你自己想。
用什麼實現只是手段,但是我們要的是結果而不是手段,因此這種問題頂多是以好奇心態提出的問題而不是有任何實質影響的問題。C#和.net平台的緊密綁定就決定了C#寫的代碼必須跑CLR上。CLR確實可以跟OS結合緊密一些但是無法到達最底層。一些OS核心部分如果跳過CLR更為高效且已經這麼玩了20年為什麼必須為了理想主義非要把它搬到CLR上面呢。
另外,假如哪一天C#跟CLR結合不是那麼緊密了C#的基本類庫直接由操作系統API提供,那C#寫操作系統組件和C/C++是不是只有語法區別了。你再想想,那時候的C#,和現在的C/C++又有什麼區別呢。目前木有專門針對IL位元組碼的processor,拼效率肯定搞不過C/C++,而且C同彙編、硬體這麼多年相互發展的關係,很難因為一門新語言而發生改變,可以說,任何語言都無法撼動彙編和C的地位
推薦閱讀:
※如何看待 Windows 10 即將原生支持 bash?
※如何評價優酷熱門的Win10評測視頻下方的這些評論?
※有沒有人覺得Windows 10的強制更新政策細思極恐?
※office2016為什麼打開時會創建一個副本?