從程序員的角度看,Windows 有哪些先進的地方?

比如說 IOCP?


子系統

在wsl出現之前windows早就有一個老掉牙的posix子系統,更詭異的是win32也只是windows的一個子系統,也就是說windows理論上可以支持無限多套api

兼容模式

windows10=windows 10+8.1+8+7+vista+xp,大寫的黑科技

從用戶角度感覺這倆黑科技最nb了


安卓誕生沒多久,2.x版本的許多app已經無法在後續版本上運行了。

windows…20年前的exe現在還跑的好好的…作為程序員,我只能大寫一個服。


程序員也是人啊。。。也是要追番,玩遊戲的啊。。。

所以當時我放棄 Linux 的原因是因為 chrome 的 flash 在我的 4k 屏上一全屏就蹦。。。

所以這也算是 windows 的優勢,有 bilibili 官方客戶端而且還可以翻牆,所以這應該算是優勢吧。。。


軟體可以二進位分發,不同Windows系統之間的API非常穩定,幾乎只增不減。現在主流的其它幾個系統,要麼缺少第一個,要麼缺少第二個。


MSDN,最好的開發文檔,當然近幾年新增的部分不算。


Direct3D,兼容性和開發生態完爆競爭對手。

Visual Studio,就不用提了吧。開發Win/Android/iOS/Linux全行。

Windows SDK。

更重要的是,開發的過程中累了,還能玩個大型遊戲。


Windows的驅動模型。

NT時代的東西,簡寫WDM,WIndowsDriverModel, .Net後好像又出現了Windows Driver Framework (WDF),沒研究過。我最開始接觸編程就是從WDM那本書開始的,因為對Windows驅動硬體很感興趣,看完後但發現書裡面並沒有告訴我計算機是如何讓硬體工作的,很失望,在多年後再次看WDM,才發現這又是微軟在複雜工程上的一次很宏偉的實踐。

WDM把一個設備驅動程序和OS以及硬體之間可能的業務需求做了很徹底的抽象。很多當時以及現代的硬體技術在驅動模型里都有體現,比如PCI匯流排/USB匯流排設備上的自枚舉,WDM將其抽象為描述硬體資源和狀態的「設備對象」的構造過程,這和面向對象的思想不謀而合。因為微軟在OS領域的強勢地位,驅動模型反過來也對硬體匯流排協議標準產生了影響。

WDM根據驅動程序同上層OS的介面到底層硬體匯流排的交互的不同的關注點,分離出堆棧式的層次結構,以體現最大化的代碼復用。比如只關心怎麼同最底層的匯流排硬體打交道的miniPort driver,關心功能點的Functional Driver,還有根據硬體類型抽象了各種可復用的helper function如協議處理的class driver,不同的driver之間通過一種叫I/O Request Packet交流,I/O Reqeust Racket(IRP)抽象了I/O請求,不管是storage driver,network driver,video capture driver從OS到Hardware之間的I/O請求和服務都被該IRP抽象。IRP的Reqeust還定義了同步/非同步 Request,以滿足驅動性能同系統整體性能的負載平衡。Driver同Driver之間交互,不再是基於函數調用sigture的靜態的綁定關係,而是更動態的運行期消息傳遞的關係,dynamic binding對複雜系統設計的重要意義是不言而喻的。

相比較於Linux到2.6才出現類似的驅動模型,其實還遠遠沒有WDM這麼徹底,Linux的驅動模型相當於只有抽象到WDM的匯流排驅動的層次,比如如何根據PCI匯流排的自枚舉功能創建硬體對象和生命周期的管理。但對於業務相似的一些subsystem之間,並沒有一個更統一的抽象模型。不同的subsystem(比如storage和network)大家都實現有自己的業務相似的基礎架構,不像WDM那樣圍繞IRP設計了一個更infrasture的系統。

當然對於驅動程序的編寫者來說,Windows代表的是更大一統,更heavy weight的框架,Linux代表的是學習曲線更平緩,更light weight的reference design,哪種更好,每個開發者的喜好是不一樣的。但不管怎樣,還是很佩服Windows的工程師從複雜業務過程中抓住本質的對象的系統設計能力。


宇宙最強兼容性。

有對硬體的兼容,更有向下兼容。

學過Windows SDK就知道,裡面很多東西都是為了兼容Win16的,真是辛苦了……換成Unix之類的估計早就扔掉不管了吧。

所以二十幾年前的老程序照樣能運行起來,換成OS X等別的系統,早就尿褲子了。

所以為什麼Windows能成為桌面OS的霸主?得兼容者得天下。


資源管理器啊!

我就想不明白為什麼非 win 的桌面系統有那麼多牛逼的地方,卻做不好一個資源管理器?

以前我還使用 free commander,後來主力機切換到 mac 之後,再回 windows 就改用原生資源管理器了,簡單又好用,簡直感動,尤其是被 finder 虐過之後。

ubuntu 裡面那個默認的資源管理器就更離譜了,簡直沒有任何優點。順便我問個事情,為什呢我安裝的 ubuntu,不管是虛擬機還是物理機,滾動條都不好使?表現為用滑鼠拖動反應滯後。需要特殊配置嗎?

再提一個的話,PowerShell 吧,真的是黑科技。


接觸Linux之後才發現,原來使用操作系統是需要專門學習的...


王垠的文章:談 Linux,Windows 和 Mac


visual studio,已經深深中毒,寫linux程序也一定要找插件。


Visual studio


對驅動的友好程度。

比如說一個設備,沒有windows 10的驅動,可以試一下8的,如果沒有8的,不妨試一下xp甚至十幾年前的系統,98的,說不定就能用了。

反觀某些系統,即使從4.0到4.1這種小升級也導致一大票機器用不了最新的rom。一問原因,驅動不兼容。


有宇宙超級無敵第一好用的IDE和宇宙超級無敵最先進的開發語言!


用完vs默默拋棄各種ide,界面設計粗糙,難用還很卡;

應用和軟體豐富多彩,生態龐大;

msdn完爆各路開發文檔,詳細還有中文版;

c#語言風騷的一匹,各種語法糖甜到生活不能自理;

api穩定,各個平台聯繫很大遷移方便;

你軟財大氣粗,各種折騰各種收購然後免費給你用全功能;

想到再補充,熱愛開源的兄弟們求別噴我


*nix最大的問題是類庫/軟體不是你想用,想用就能用。Windows的好處就是,大部分時候,你都能找到可以用的類庫/軟體。


當你有bug不想修的時候,可以告訴測試:這是微軟的bug


剛開始喜歡 *nix的命令行界面 感覺高效簡潔

後來喜歡用窗體程序進行交互 感覺簡潔高效


最近在測vista到win10,ie7到edge的組合上的html畫面。

基本上都是看到是ie我就放心了這種感覺。

Win系統的一大優點在於api比較統一,向下兼容好。另一大優點是出問題可以上網搜一下,一般都有無數先輩踩過坑。還有就是讓我們一直糾結於要不要再來發明一次輪子。一個程序員一生沒有怒摔鍵盤再發明一次輪子那就很難說他的人生完整。


推薦閱讀:

windows 32位 為什麼實際可用最大內存只有3G?
進程和線程之間有什麼根本性的區別,我總感覺線程是進程的進化版?求解答
Linux中進程具有父子層次結構,Windows中沒有進程層次,這兩種設計各有什麼優劣?
NT 之後操作系統內核是否就毫無長進了?
Linux 內核為什麼沒有第三方的版本或分支?

TAG:MicrosoftWindows | 操作系統 | 操作系統內核 | 操作系統開發 |