微軟終於對C、C+下手了!想用自主開發的程式語言改朝換代!

2020-12-12 騰訊網

76 年迭代與更新,程式語言界,誰主沉浮?

在六百多種程式語言中,對於開發者而言,其主觀印象中或只有幾種主流的程式語言,如 Java、C、C++、C#、新貴 Python 等,而之所以它們能夠成為主流,軟體開發生態必是其中不可或缺的一個重要部分。

以最通用的程式語言之一 C# 為例,作為類型安全、面向對象的程式語言,C# 可以良好地運行在 .NET 框架運行時環境中。

隨著其優勢的逐漸顯現,微軟作為背後最重要的推動者之一,全面將其運用於資料庫、Web 服務、遊戲、行動應用程式、伺服器應用程式等場景中,由此也吸引了無數開發者加入其生態構建。

除此之外,一直以來,微軟也是 C++、C 程式語言的生態發展的重要推手。

如今,微軟是否會為另一個程式語言——Rust,以及類似於該語言且是微軟最新開發的 Verona 的生態帶來積極地影響力,我們將拭目以待。

猶記得在 Quora 上,曾有網友發帖求教「開發 Windows 10 用了哪種程式語言?」

對此,直至今年 4 月,微軟內核工程師 Axel Rietschin在該問題下回應過了

Windows 10 與 Windows 8.x、7、Vista、XP、2000 和 NT 的代碼庫是相同的,其中每一代都在之前的基礎上進行重大的重構,並增加大量新功能,改進性能和硬體支持,此外還有安全性的提升,同時保持非常高的前向兼容性。

其中,如 ntoskrnl.exe 內核大部分是使用 C 編寫的,在內核模式下運行的大多數內容也是用 C 編定的,包括文件系統、網絡與驅動程序等。其中也包含一些 C++ 代碼,而越靠近用戶模式、越接近新的源碼時,C 的使用變得越來越少,反之 C++ 變多。

除此之外,如 .NET BCL 與一些相關庫和框架通常都是用 C# 編寫的,但它們也只不過是帶有幾座 C++ 小島的 C 汪洋大海的一慄,它們自不同的部門,代碼並不屬於 Windows 源碼樹。

由此可見,佔據全球桌面作業系統龍頭老大的 Windows 其內部結構錯綜複雜,運用的程式語言也遠遠不止一種。

而如今,除了 C、C++、C# 等主流程式語言之外,微軟還宣布,正在探索使用Mozilla 主導開發的通用、編譯型程式語言 Rust 語言來作為 C、C++ 和其他語言的替代方案;

與此同時,微軟也正在研發類似於 Rust 的新的程式語言——Verona,不過,微軟採取該兩種策略的最終目的只有一個,就是希望以此來加固 Windows 10 的安全性。

微軟為何要用 Rust 替代 C、C++?

之所以大動篇幅地想要在安全上面有所改進與提升,必是曾在這個地方跌倒過。

事實上,確實如此。此前據微軟官方博客報導,自 2004 年以來,微軟安全響應中心(MSRC)對所有微軟安全漏洞報告進行了分類,從中發現,所有微軟年度補丁中約有 70% 是針對內存安全漏洞的修復。

根據深入地調查,我們發現這些漏洞是由開發者無意中在其 C、C++ 代碼中插入內容損壞錯誤引起的。

微軟每年修復的 CVE 漏洞中約有 70% 是內存安全問題

在清晰地認知這一點後,微軟也開始了尋找更安全的程式語言之路。

在探索伊始,微軟熟知有幾種語言在一定程度上可以被用來防止內存損壞漏洞,如 C#。

但令人無奈的是,像 C++ 這類的程式語言在某些情況下又是必不可少的,畢竟其在運行的速度、內存和磁碟佔用的空間上均有優勢,除了以上,C++ 還可以預測執行。

對此,兩者是否可以合二為一,即是否可以運用 .NET、C# 之類的語言來保證所有內存安全,再加上 C++ 所具備的效率。

綜合之下,想要滿足這些條件,素來以「安全、並發、實用」為設計準則的 Rust 或是一個最佳的選擇。對此,微軟安全部門也認可道,Rust 是一種從根本上考慮安全性的程式語言,它像 C、C++ 一樣也有一個最小的可選「運行時」;

此外,它的標準庫依賴於 libc,但標準庫也是可選的,因此在沒有作業系統的平臺上運行也是可能的。

微軟對安全的深入研究——Verona 語言

不過,世界上沒有足夠安全的作業系統,當然也不會有完美無瑕疵的程式語言。在基於 Rust 完善 Windows 系統安全之際,MSRC 也發現該語言缺乏與 C++ 的一流互操作性,以及與現有 Microsoft 工具的互操作性。

對此,據外媒 ZDNet 報導,微軟研究人員 Matthew Parkinson 在近日的一次演講中對外透露,微軟正在開發類似於 Rust 的新程式語言——Verona。

和以前的目的一樣,微軟旨在通過Verona 來開發低級的 Windows 組件以完善 Windows 10 的安全性問題。

「內存安全」是編碼框架的術語之一,可幫助保護內存空間免受惡意軟體的濫用。微軟希望藉助 Verona 項目推動在安全方面的工作以關閉這種攻擊媒介。此前,有不少業界人士表示,微軟的 Vernoa 項目計劃可能只是一個無濟於事的實驗。

不過,在近期的演講中,微軟研究人員 Matthew Parkinson 分享了微軟在 MemGC(Memory Garbage Collector)上所做的工作,以及 Verona 的最新進展。

MemGC 是指 IE 和 Edge 瀏覽器上的內存垃圾回收器,它解決了標準瀏覽器功能(稱為文檔對象模型(DOM))中的漏洞。

Matthew Parkinson 表示:「我們為 DOM 構建了一個垃圾收集器(GC)。

開發者可以通過免費使用,能在 IE 中找到利用 DOM 引擎中的內存管理方法。然後,微軟引入了 MemGC,它是 DOM 的保守 GC。它針對這種非常特殊的漏洞樣式,從根本上消除了它作為攻擊媒介。」

除了以上,Matthew Parkinson 也一直在鑽研一個可能引起其產品客戶共鳴的問題:「我們將如何構建最安全的產品?如何應對遺留問題?我們不能想著僅僅丟棄已有的東西,而是思考可以在更安全的系統中構建什麼。」

基於這樣的信念,Parkinson 表示,「如果想要隔離,並精簡遺留的部分代碼,以使攻擊者的利用代碼無法逃逸出來,那麼在語言設計該有何創新?」

這就是微軟最新的「安全基礎結構編程」 ——Verona 語言 ,據了解,這一項目將很快「開源」。

目前,該項目得到 C# 項目經理 Mads Torgensen 和 Microsoft Research Cambridge 研究軟體工程師 Juliana Franco 的支持。

對於微軟而言,其當前面臨的挑戰是應對廣泛的「應用程式範圍」,如從用於桌面應用程式的 C# 到用於 Exchange 的 C 或 C#、ASP.NET、Azure 和設備驅動程序,再到內存管理和啟動加載器等底層 Windows 組件,以及 Windows 內核硬體抽象層(HAL)。

Matthew Parkinson 表示:「執行內存管理確實很困難。如果有任意並發突變,那麼,臨時內存安全性將非常困難。」

此外,Matthew Parkinson 還介紹了 Verona 的設計思路,「Verona 的所有權模型是基於對象組的,而不是像 Rust 那樣基於單個對象的所有權模型。

在 C ++ 中,開發者可以獲得指針,並且它是基於對象的,並且幾乎是每個對象。不過,這和我關於數據和語法的思考不同,我認為數據結構是對象的集合,而對象的集合則是生命周期。

「因此,通過對象的所有權級別來獲得所有權,我們就可以更接近人們正在使用的抽象級別,它使我們能夠構建數據結構而不會超出安全範圍。」

你如何看待 Verona 語言?

那麼,Verona 究竟是否會為 Windows 的安全性帶來突破性的進展,我們將拭目以待。而在此同時,不少網友也紛紛感嘆道:

一定是 Rust 本身不夠好,寧願自己重寫,也不願參與一起開發讓 Rust 更好;

放出這消息的是 Microsoft Research ,並不是 Microsoft。就和之前為 Rust 設計 com 庫的是微軟安全部一樣。而且研究院更多的是偏向於研究性質,指不定只是搞著實驗用的;

Rust 語法很繁瑣複雜,C# 是出了名的很甜的語言,MS 肯定不能忍 Rust 這囉嗦繁瑣的語法,估計要推出升級版,看好。

你怎麼看呢?歡迎下方留言,分享你的看法。

相關焦點

  • c語言編程軟體哪個好?c語言編程軟體下載地址
    c語言編程軟體哪個好?c語言編程軟體下載地址 2019年1月14日 HuangJiang來源:網際網路 繁體
  • 現代程式語言起點,C語言之環境搭建
    1972 年,為了移植與開發 UNIX 作業系統,丹尼斯·裡奇在貝爾電話實驗室設計開發了 C 語言。UNIX 作業系統,C編譯器,和幾乎所有的 UNIX 應用程式都是用 C 語言編寫的。C 語言是一種廣泛使用的計算機語言,它與 Java 程式語言一樣普及,二者在現代軟體程式設計師之間都得到廣泛使用。C 語言被廣泛使用,比如:Linux 作業系統和 RDBMS(關係資料庫管理系統) MySQL 都是使用 C 語言編寫的。
  • 自學編程:C語言的概述
    >C語言的應用領域分兩大塊:①系統軟體開發 作業系統:UNIX、Windows、Linux。驅動一般是用C語言和彙編語言寫的,C++ 在這方面稍弱。 資料庫:SQL Server、Oracle、MySQL、DB2②應用軟體開發 辦公軟體:WPS。 圖形圖像多媒體:Photoshop、Mediaplayer。 嵌入式軟體開發:嵌入式軟體開發說得簡單點就是晶片編程,比如我們以後學習在單片機和 ARM 上進行的開發都屬於嵌入式軟體開發。
  • 【C語言】02.第一個C語言程序
    學習任何一門語言,首先要掌握的肯定是語法。學習C語言語法的目的:就是能夠利用C語言編寫程序,然後運行程序跟硬體(計算機、手機等硬體設備)進行交互。由於我們的最終目的是學習iOS開發,學習iOS開發的話必須在Mac系統下,因此我就在Mac系統環境下開發C語言程序,而不是在Windows環境下。
  • 盤點目前初學者適合用的C語言編程工具!C語言初學者必看!
    手機軟體1.C語言編譯器:這是手機上的一個C語言編程軟體,可以直接在手機上編譯運行baiC語言程序,2.C++編譯器:也即C4droid,手機上的一個C/C++編程軟體,基本功能和C語言編譯器差不多,也可以直接編譯運行C語言程序,、電腦軟體
  • C語言編程工具的選擇
    我們計算機專業沒有C語言這門課。其他工科專業會學C語言這門課。據我所知,其他的工科專業需要過C語言2級考試。計算機專業不用考2級、3級...這些考試。我們計算機專業學的第一門程式語言是C++。那我們當時老師上課是用什麼編程工具的?是VC++ 6.0。VC++6.0界面簡潔(簡陋),沒有多餘花哨的功能,淡白色的界面。
  • 物聯網應用開發之C語言介紹
    一、C語言的主要特點c語言是一種結構化語言,它有著清晰的層次,可按照模塊的方式對程序進行編寫,十分有利於程序的調試,且c語言的處理和表現能力都非常的強大,依靠非常全面的運算符和多樣的數據類型,可以輕易完成各種數據結構的構建,通過指針類型更可對內存直接尋址以及對硬體進行直接操作,因此既能夠用於開發系統程序,也可用於開發應用軟體。
  • 為什麼要學習「 C」程式語言?
    「 C」編程是另一種程式語言的基本基礎,像java、php,C++等熱門程式語言都是「 C」編程最為底層開發,所以我們通常稱「 C」編程編程「母語」。「 C」編程是一種簡單的語言,可以更快地執行。「 C」編程還是一種極其緊湊的語言,這意味著以「 C」編程方式尋址的程序可以在不同的機器上運行。C程式語言的優勢作為中級語言,C連接了低級和高級語言的功能。C語言可用於底層編程。例如用於內核和驅動程序的腳本,它還有助於使用高級程式語言,例如用於軟體應用程式的腳本等。
  • 移動開發是什麼?蘋果,安卓開發,手機app,C語言JAVA的關係
    現在手機流行啊,就業好啊,很多人想學手機app開發,卻不知道到底是什麼玩意,今天給大家簡要介紹一下,快速了解。首先,android開發,繞不開的就是JAVA編程,因為android的底層就是java,再底層就是C語言,可以這樣理解:java是一種程式語言,android應用用java開發,而c語言是另一種程式語言,也可以在android開發,但是需要通過java去調用C語言。
  • 加速程序開發 Python整合C語言模塊
    Python是一種用於快速開發軟體的程式語言,它的語法比較簡單,易於掌握,但存在執行速度慢的問題,並且在處理某些問題時存在不足,如對計算機硬體系統的訪問,對媒體文件的訪問等。而作為軟體開發的傳統程式語言C語言,卻能在這些問題上很好地彌補Python語言的不足。
  • 嵌入式系統高級C語言編程
    內容簡介  《嵌入式系統高級C語言編程》將主要介紹針對嵌入式系統的基於C語言的軟體項目開發的流程,較為複雜的c語言編程知識和技巧,編程風格和調試習慣
  • 單片機C語言編程心得
    寫這個8*8按鍵程序的過程中,不管是在自己寫還是參考別人程序的過程中,發現自己對C語言有些基本知識點和編程規範有很多不懂的地方,有些是自己以前的編程習慣不好,有些就是基礎知識不紮實的表現,所以總結出來。
  • C/C+編程筆記:C語言預處理命令是什麼?不要以為你直接寫#就行!
    使用庫函數之前,應該用#include引入對應的頭文件。其實這種以#號開頭的命令稱為預處理命令。 關於編譯和連結的過程、目標文件和可執行文件的結構、.h 文件和 .c 文件的區別,我們將在後期專題中講解。 在實際開發中,有時候在編譯之前還需要對源文件進行簡單的處理。
  • 程式語言學哪個比較好?2019年最實用的程式語言
    這類語言都是非常通用的語言,它們並不局限於特定的編程平臺或用途。(毫無疑問,你應該熟悉這四種語言。)第二大類語言包括Java、C#、PHP和Swift。Java 和 PHP 是主要的 Web 開發語言。C# 是微軟的程式語言,而 Swift 是蘋果新推出的主力語言。基本上來說,它們是平臺相關的。
  • C語言編程核心要點
    原文標題C語言編程核心要點,男人看了沉默,女人看了本文轉載自【微信公眾號:碼磚雜役,ID:whatis9527want】引言筆者有十餘年的C++開發經驗,相比而言,我的C經驗只有一兩年,C比較簡單,簡單到《The C Programming Language》(C程序設計語言)只有區區的200多頁,相比上千頁的C++大部頭,不得不說真的很人性化了
  • C語言?c+?到底先學哪個才能更好的理解編程,這些你造嗎
    本身C語言和c++的編程方法不同,一個面向過程,一個面向對象。而要做出大型的、複雜的、精彩的程序,面向對象的語言就更適合。所以要學習c++這樣的語言。但是,1.c語言是好多學校的基礎課;2.c語言很容易描述算法;3.軟體開發過程中也有很多面向過程的開發,以及模塊化程序設計思想。要學習這些,比起學c++的複雜、困難程度,學c語言就可以達到上述目的。
  • C 語言發展史的點點滴滴
    1966年,馬丁·理察德在劍橋大學,以CPL程式語言為基礎,發明了BCPL程式語言。1.3.2 B語言之父1.6 第一個C語言編譯器是怎樣編寫的?不知道你有沒有想過,大家都用C語言或基於C語言的語言來寫編譯器,那麼世界上第一個C語言編譯器又是怎麼編寫的呢?
  • 三天學會C語言編程 | 中篇
    本文是《三天學會C語言編程》的第二篇文章,承接上一篇《三天學會C語言編程 | 上篇》。本文重點介紹C語言的數據類型、表達式、變量和函數等內容。變量的名稱就好像郵箱的編號一樣,這樣我們在編程的時候就可以通過這個名字方便的訪問(讀或者寫)變量。在C語言中變量的名稱可以是英文字符、下劃線和數字,但只能以英文字符和下劃線開頭,不能以數字開頭。另外,C語言中變量名稱是區分大小寫的,也就是var_name和var_Name是兩個不同的變量。
  • 日常疑惑:編程學Java還是學C語言?
    這兩門程式語言都是IT行業的寵兒,Java與和C語言各自的技術特點、應用方向上有所不同,沒有伯仲之分,所以這也讓初學者們覺得很難選:應該選擇哪個做為入門語言呢?從學習的難易度上來說,java語言比C語言要簡單。
  • 程式設計師學習C語言編程的4種方法,C語言之父的大作不容錯過!
    如果新手要學習編程,一些前輩都會建議從Python、PHP、Java開始學。不過,有些程式設計師是直接從C語言強勢入門編程的。那麼,如何學習C語言呢?下面w3cschool提供4種入門C語言的方法:0、刷題絕大多數的程式設計師學編程的時候,還是會開啟簡單粗暴的刷題模式。刷面試對於面試以及技術的提高大有裨益,刷題網站強推Leetcode、Codility、Lintcode等。