微軟對 C++ 的影響力有多大?

操作系統中,Windows(微軟)是最支持 C++ 的,還搞了不少自己的技術。Visual Studio 甚至不真正地支持 C。Linux 之父 Linus 是反對 C++ 的,自然不可能對 C++ 的發展有所助益。

Herb Sutter 說,有一段時間微軟試圖把託管代碼放到操作系統的核心(WinFX),冷落了 C++。在這段時間,C++ 的發展有所減速,熱度也下降不少。等到微軟回過神來,不停地給 C++ 添磚加瓦,帶來了諸如 await 等種種先進的東西。

所以說,C++ 其實是微軟主導的嗎?

相關問題:為什麼 WinFX 未能取代 Win32? - .NET


很大,而且目前也依然在大力推進C++。

在C++17中,目前微軟的提案也是很多的,而且據我所知在C++ Core Guidelines isocpp · GitHub上微軟也投入了很多,並且在配套的GSL GitHub - Microsoft/GSL: Guidelines Support Library 庫 似乎也投入了全職工作人員,並開發了相關的Visual Studio插件。

微軟算C++開發者的一個非常理想的工作公司了。


C++ 不是微軟主導的。

Stephan T. Lavavej:

Source: I am an employee of the (Illuminati) Microsoft, and we definitely don"t control (the world) WG21. If we did, you"d be enjoying (Firefly season 14) next-gen range-for right now.

但是不得不說,沒有微軟就沒有現在的 C++。[nullptr](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2214.pdf) [delegating constructors](http://120.52.72.43/www.open-std.org/c3pr90ntcsf0/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf )[constexpr](http://120.52.72.51/www.open-std.org/c3pr90ntcsf0/jtc1/sc22/wg21/docs/papers/2006/n1980.pdf ) [enum class](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf)都是和微軟密不可分的。到了後期,Stephan T. Lavavej 也為 C++ Standard Library 做出了非常多的貢獻,包括 C++ 17 的 is_xxxx_v、C++ 14 的 is_transparent、C++ 14 的 make_unique。他還提過一個簡化 range-based for 的 proposal(就是 for(i : vec)),但是被否了(他還懷恨在心的樣子)。Herb Sutter 就更不用說了,他是 ISO C++ Commitee 的主席,可以在 CppCoreGuidelines 裡面看到他的 Lifetime.pdf ,不過他提的 proposal 好像通過率不是太高。。。他曾經試圖治理 C++ 的 ABI 問題,然而被否了。微軟的 GDR 目前負責 SG2(Module)SG12(Undefined Behavior),他提出要去掉一部分 C++ 求值順序的 UB:printf("%d%d",i++,++i);這樣的語句可能會合法。。。目前的 Module 就是由他主導的(順便提一下,Module 幾乎不可能出現在 C++ 17 里了)。微軟的 Gor Nishanov 目前在大力搞 C++ 的 await/async(已經改名為 co_await/co_yield/co_async),但是這個反對聲音不少,已經有人聯名上書反對 await 進入 C++。微軟的 Neil MacIntosh 最近提出了 array_view,他目前最大的貢獻是在維護 GSL。)

另一方面,微軟不時舉辦的 GoingNative,以及有它負責的 CppCon(沒錯,CppCon 是微軟負責的!)都為 C++ 社區做出了不可磨滅的貢獻。

雖然微軟在 C++ 上的貢獻很大,但是不得不說編譯器實在是令人失望啊。。。


個人認為C++雖然不是微軟的親兒子,但是真正把C++普及開來的,還是Windows平台。

微軟對待C++的態度是比較曖昧的,一方面C++具有很多天然的性能優勢,現在最好的Windows客戶端產品基本上都是用C++開發的,另一方面C++不是自己親生的,無法對他將來的發展起到決定性的掌控。

所以在Windows平台上,你永遠別指望C++能得到和C#一樣的待遇。


微軟雖然想C#一統天下,可惜自己牛逼的東西全是C++寫的,所以其實也只能這樣了。


有作用

win32 客戶端程序的複雜度,加上 1990 年代電腦的性能

你不用 C++ 你用啥?


其實有人說計算機專業教育剛上來就應該從linux/c/bash/vim(emacs)的環境開始,從底向上地構建整個知識體系。不過我覺得對於計算機有濃厚興趣的初學者可能還管點用,對於有心想學學技術的愛好者可能不是很友好。

我很欣賞王爽的《彙編語言》里講述的方式。了解一個新概念,從現成的知識體系中迭代遞進是比較容易被大眾接受,這也是我們所說的「平滑的學習曲線」。

微軟的策略是讓每個人都能從日常軟體的使用中,漸漸地能或多或少地會點編程,而不需要了解計算機技術的每一個細節,也不需要學會用純文本編輯器寫代碼和肉眼debug這樣的本領。像excel公式,VBA之類的應用就屬於這些。

我是從VB開始學程序的。雖然你可以吐槽VB多麼落後,現在用的人有多少。不過對於我來說,VB能夠讓當時的我以較低的學習成本來獲得較多成就感,從而讓我養成了編程的興趣。我覺得至少在普及教育這一點上,微軟是成功的。

Visual Studio是一脈相承的東西,天然的工程結構,友好的代碼提示,詳細的說明文檔和實例,IDE里集成的調試功能,都能有效降低初學編程時的挫敗感。這一點很重要,因為絕大多數人學編程往往就到此為止了。當時大家推devcpp推得很厲害,不過和同時代的VS比功能實在差太遠了,最大的黑點在於那個調試器總是莫名失去反應,功能也特別少。

當時宣揚DEVCPP的理由很簡單,因為使用mingw作編譯的它比VC要「符合C++標準」。不過我是實用主義者,也不搞OI,用什麼能快速做出軟體來就用什麼好了啊,難道我還非得把C++標準背個滾瓜爛熟才能寫程序嗎?站在初學者的角度來看,「符合標準」這件事遠遠不如用著舒服更容易保持熱情。

微軟在這一點上看的很明白,程序員們需要的並不是簡單的編譯器和編輯器,他們需要的是一種解決方案——如果有辦法能讓我能以簡單、快速的方法用C++做出軟體,縱然MFC現在看來陳舊不堪,手寫COM也非常麻煩,但是在Wizard上點一點滑鼠,填一填表單,就可以生成相應的代碼。直接把編寫難度下降了好幾個數量級。同時代的delphi,C++ Builder也是一樣的策略。

我們看到,微軟成功地把C++這個底層開發語言應用到了軟體開發的各個方面,並且有效地降低了學習成本和開發成本。

======================================

下面是廢話

做技術的往往會有一種心態——我想對任何事物都刨根問底搞個所以然。所以微軟的框架就很容易被黑——因為歷史、兼容性等多方面的原因,微軟的框架往往都比較複雜,軟體上的層次也比較多,原理不是一時半會能搞清楚,而且很多還不開源。這往往會引起一些簡潔主義者和開源主義者的不滿,而這種不滿往往就會被宣揚出來形成「前輩經驗」,從而過多地貶低了很多微軟產品的本身價值。對於剛入行的小白而言,微軟顯然是被過度妖魔化了。而他們也許不知道的是,這種成見可能會蒙蔽他們的雙眼,認為學C的正途就是gcc/vim/bash,學程序就是很難的,程序員都是天才。

學linux的時候我也被這種論調感染過,於是也抄起linux+vim開始搞點開發,並因為自己將轉型為「純粹的程序員「而自豪。但是當我看到身邊的許多高手用VS開發的速度遠遠快於我的時候,我發現的問題很現實——明明有好的工具,為什麼不用呢?那些用vim寫了一輩子程序的人,真的就會因為這一點而比用VS寫的人厲害嗎?

但是為什麼會有這樣的「共識」,認為用linux+vim的人平均水平就比用VS這種IDE的人高呢?

這是因為VS對新手更友好,因而小白用戶的佔比會高些,而用linux+vim並且在知乎上發聲的大部分都是非常有經驗的程序員,用戶群體本身就不一樣,並不能簡單地比較,更不能反過來得到是因為開發工具的原因導致了水平差異。


別的我不敢說,但是我目測有相當一部分人是分不清c++和vc6的


別的不說…

Visual Studio讓多少C++程序員脫離了苦海啊!


畢竟出了c++/cli和c++/cx這兩個擴展呢。。。

不過用vs總覺得c#的代碼提示和自動補全比c++舒服,果然vs的重心不是c++嘛?


不是親兒子,也沒有那麽滋詞,實際上巨硬對C++態度大概是不明不白不上不下一個狀態。

奈何C++說是和巨硬不清不楚但實際上仔細想想自己的軟體不也是人家寫的,所以巨硬也就只能那樣了。

結論就是,不起主導作用。


幾乎沒有影響力,如果有影響力的話,就不會出現C++/CLI和C++/CX


聽說過mfc嗎?

看過用c實現的偽c++嗎?

用過vs嗎?

調用過過WAStartup這個函數嗎?

如果沒有試一試我想你就會明白!


推薦閱讀:

為什麼要有堆區和棧區呢?
如何將一個有序的數組隨機排序?
從事C#開發兩年,25歲轉Cocos2d-x開發,會不會太晚?
C/C++ 中 bool 相比於 char 有什麼優勢?為什麼要設立 bool 類型?
二級C習題10.10為什麼選C?

TAG:微軟Microsoft | C | CC |