現在哪些編程語言適合寫操作系統?

C 語言當然不用說了,C++ 應該只能用子集,到底是哪些子集呢?新的 Rust 怎麼樣?


如果是說內核的話,所有主流操作系統的內核都是 C 寫的。

但是操作系統內核不是給最終用戶使用的,操作系統要有外圍的應用程序才能給最終用戶使用,為了編寫各種不同的應用程序,程序員又編寫了各種不同的編程框架來方便應用程序的開發,這些編程框架可以基於各種不同的語言。

例如 Windows 有基於 C C++ C# VB 等各種不同語言的編程框架 API,而 OSX/iOS 主要是 ObjC 的框架。Android 有 C++ 跟 Java 的編程框架,而 Linux 本身只是個內核,其上可以有各種各樣的任何語言的框架。

如果是說嚴格意義上的操作系統,一般指的是內核,那麼我認為只有 C 語言最適合。

如果是廣義的 操作系統內核+外圍應用程序,那麼外圍應用程序可以用任何語言編寫,內核仍然是 C。


你要願意用 C# 都行,去搜 Singularity 項目


個人一點見解:

C就是為操作系統而生的,更加精確可控;而現在的眾多高級語言是為程序員而生的,不同的語言抽象級別不同。

有一句話總結的好,(在應用級別上)寧花機器十秒,不花程序員一秒。但是OS級別就恰恰相反了。


C++ C#都可以


理想狀況下可以只用彙編和一門高級語言實現一個操作系統。彙編負責底層的啟動、中斷等硬體直接交互代碼,剩下的全交給高級語言(所以C語言不是必須的,前提是你不想讓你的操作系統兼容現有的操作系統介面)。

我覺得關鍵在於這門高級語言的「實現」選擇,既你得選個編譯器(如C++、Haskell)而不是解釋器(如Ruby、Perl、Java等需要運行在虛擬機上的語言)。當然你也可以寫個編譯器把解釋型語言的位元組碼編譯成本地機器碼的編譯器,這樣你就能用Java寫操作系統了。樓上@Belleve 提到的那個微軟的C#操作系統好像就是這麼實現的。


彙編


理論上 c/c++/rust寫內核都沒問題


C以外的話,只有彙編靠譜了(如果把彙編當做編程語言)


有用java寫的操作系統,


推薦閱讀:

如果讀取硬碟上某個文件,使用完畢後釋放內存,然後立即再讀取這個文件,會從內存中還是從硬碟上再讀取?
多核CPU中,利用多線程進行排序中出現了一些奇怪的現象,不知道其背後的原因是什麼,希望有人能給予解答?
Linux內核是如何管理內存的換入換出,以及是如何實現磁碟緩存的?
微軟在 Windows 10 裡面加入 Linux,這是他們認輸了嗎?
實現一個shell解釋器需要哪些編譯原理方面的知識?

TAG:操作系統 | 編程語言 |