存在可能替代C語言的其他語言嗎? -Erik Engheim

banq發表於2020-12-01

儘管C程式語言早在1972年就已釋出,但它仍是當今使用最廣泛的語言之一,並且按照當今的標準存在許多限制和缺陷。
這就是為什麼應該替換C的關鍵原因。太多關鍵軟體都是用C / C ++編寫的,其含義廣泛。一個示例是OpenSSL之類的庫中的錯誤。眾所周知,C在捕獲諸如緩衝區溢位之類的問題方面表現不佳。C是一種允許您以多種方式讓自己陷入麻煩的語言。
但是如果C太糟糕了,為什麼還沒有被替換呢?有很多原因。在某種程度上,它已經被替換了。Java,C#,C ++和許多其他語言已經接管了以前用C完成的任務。
因此,這實際上是關於剩下的那種軟體,其中C仍然占主導地位:
  • 作業系統核心。如Linux
  • 微控制器
  • 影片編解碼器
  • 共享的低階庫,例如OpenSSL
  • Unix命令列工具,如ls,cat和git

為什麼C仍然主導著這些領域?因為直到最近的替代方案還不是很好。
曾經有諸如D之類的語言,但是它具有C ++級別的複雜性,可能對C開發人員沒有吸引力。它最初還要求進行垃圾收集,這很可能使其不適用於所提到的許多領域。您不想在嘗試保持幀速率時啟動垃圾收集器。
 

Go和Rust表現出可能性
我認為,對C和C ++的現代化表現出濃厚興趣的第一個真實跡象是Go和Rust的日益普及。我們看到過去通常使用C或C ++編寫的許多典型工具現在都用Go或Rust編寫。彈出了許多命令列工具,例如,已經用這些語言之一編寫過。我在這裡介紹了其中一些工具。您會看到人們試圖用Rust編寫遊戲引擎。
 

LLVM:缺少的難題
由於LLVM的成熟,如今,存在提供CI替代方案的很大一部分可能性。LLVM意味著生成高效能程式碼並針對許多平臺的真正複雜的工作已解決。它使更多人可以進行語言開發。
Go和Rust為如何LLVM帶來了一些啟發,一些可能替代C的家庭手工業正在興起:

  • Zig,我已經在這裡這裡詳細介紹了。
  • Odin,看起來像Go的C替代品。
  • V語言。另一種類似C的語言,具有大量的Go和Rust啟發。

 

什麼是C替換語言?
要替換C,通常需要一種語言來適應C仍占主導地位的壁壘。並非所有型別的語言都適合於此。因此,我列出的語言具有許多共同點,可以替代C:

  • 現有的C庫易於重用。Ada,Modula-2等在很大程度上失敗了,因為您無法在大型C生態系統中有效使用它們。
  • 以已建立的知識和慣例為基礎。Go確實很快就可以使用,因為儘管語法有所更改,但API和編碼方式與C程式設計師非常相似。
  • 沒有垃圾收集/手動記憶體管理。C在需要嚴格控制記憶體使用的區域中占主導地位。在這個空間中,垃圾收集機制不會動搖它。這就是阻止Go完全替代C的原因。
  • 小二進位制檔案。像C一樣,Zig例如允許您製作很小的二進位制檔案。如果要在嵌入式空間中使用其他語言,則不能使用會產生較大二進位制程式碼的語言(例如Go)。
  • 系統級友好。您需要能夠操縱位和位元組。您需要良好的二進位制運算子和指標。在過去的幾十年中,許多語言都沒有正確的指標。Java使指標成為一個髒話,但Go卻部分地將其帶回來。
  • 逐步替換C程式碼。與C具有很好的二進位制相容性。

讓我們擴充套件最後一點。如果這意味著您需要一次性重寫整個程式,那麼甚至沒有人會開始著手替換現有的C基礎結構。以我的經驗,可以輕鬆地從Objective-C過渡到Swift的一件事是,我實際上可以一次重寫一個方法,重新編譯並測試該程式。
使用諸如Zig之類的語言,您可以輕鬆地做到這一點。



 

相關文章