繼 Linux 之父之後,獨立開發者 Jonathan Blow 再次炮轟 C+是可怕的語言
Jonathan Blow 是著名獨立解密遊戲《Braid》和《The Witness》的作者,近日,他表示C++ 真的是一種可怕的語言,可怕到他要停下手中的工作發明一種新語言來改善程序員們的生活質量。對於 C++,他認為在遊戲開發過程中,過於複雜的層狀生態系統增加了解決不同問題的複雜度。由此,他開發了一種名為 Jai 的語言來解決此問題,目前Jai 還在開發之中,尚未公開。
在 2014 年的某個時刻,Jonathan Blow 正在開發《The Witness》遊戲,彼時他突然感覺敲代碼可能是一種悲慘的經歷。
那是為什麼呢?套用 Blow 的話來說,「這是因為 C ++ 是一種「非常糟糕且可怕的語言」。」
近日,他在 Gamelab Barcelona 演講時闡述了他認為常用編程語言的問題,以及他希望通過自及研發的替代品——Jai,來實現預期的開發目標。
Blow 認為,C ++ 的主要缺陷在於它是一個非常複雜和分層的生態系統,在解決不同問題的過程中變得越來越複雜;層數越多,堆疊越高,那麼也就變得越不穩定,理解起來就越難。
Jonathan Blow
「人們認為編程語言應該是一個複雜的生態系統,」Blow 如是說。 「我不想學習一年的生態系統之後,只在那裡放置個 3D 圖形。」
之所以開發 Jai,Blow 是希望以此實現三件事:
提高程序員的生活質量,因為「我們不應該像我們中的許多人那樣悲慘」;
簡化系統;
通過允許程序員使用少量代碼構建大量功能來增強表達能力。
目前,Jai 的生產率提高了約 15%,但 Blow 認為,隨著時間的推移,它可能會提高到 50% - 80%。
倘若他對該語言的預測準確,那麼重塑獨立和 3A 級的遊戲開發也就指日可待了。
《The Witness》遊戲截圖
C++ 的混亂
C++ 誕生於20 世紀 70 年代,是以 C 語言為原型。經過了數十年的發展,C++ 發生了巨大的變化,層層疊疊的「歷史殘餘和古怪」的定義阻礙了其發展,C++ 變得越來越混亂。
Blow表示,「如果你已剛入手去學習 C++,或許你正在學習的很多東西比較碎片化。C ++在某種程度上是一種強大的語言,因為它是我們製作遊戲的關鍵性語言。但是如今的它正在使我們的過程更加艱難。」
隨著項目變得越來越大,修復更改所需的時間越來越長,由此編程的本質意味著大量的時間專註於「繁瑣的工作」。
於是,Blow 開始思考,是否會有人對此做一些改變。但不久之後,他便否決了這一荒謬的想法,畢竟每個人都有很多不同的選擇。作為遊戲開發者,Blow 僅使用了 C++ 這一語言開發遊戲,而其他的開發者可以選擇其他的編程語言。
很多人或許會說,也可以更換語言開發。但是現實是,公司擁有非常龐大的遊戲引擎,替換成本非常高。幾年前,像《刺客信條》這番的遊戲就有一千萬行源代碼,它現在或許更大了。
而就是以上這種「現狀偏見」在行業內產生了惰性,開發者不會在他們已經擁有一套完整任務的系統後重寫所有系統,無論這個過程多麼繁瑣。現在很多人都會有一種失敗主義的態度。「我實際上也有,那個小小的現實主義聲音在我耳邊告訴我,我無法改變這一點。」Blow 表示。但由於某種原因,他決定質疑:真的沒法改變了嗎?
「我越是質疑它,我說的越多"實際上這是多變的。我想我看到了我們在這裡做的具體事情"。一旦知道有辦法改變它,我突然間對我的日常工作感到非常高興,因為突然之間有一條出路。「
到目前為止,Blow 和他的團隊正在深入開發《The Witness》遊戲,所以 Jai 仍然是一個輔助項目,還在開發者。然而,未來幾年,這是 Blow 和他在 Thekla 公司的團隊的主要焦點。目前他有一個未公布的遊戲項目,其表示,是使用 Jai 建立的,旨在「測試對現實的想法」。
Jai 是現實還是夢境?
在許多方面,Blow 在開發新的編程語言方面具有獨特的優勢。他獨立於大型工作室和出版商,參與了非常長的項目(The Witness大約花了七年時間),並且是一位經驗豐富的程序員。
Blow 稱,作為設計師的經歷對於開發一種能夠用於構建遊戲的語言也是至關重要的,希望 Jai 可以避免 C ++ 的許多陷阱。於此同時,Blow 也意識到 Jai 面臨著成為「一堆廢墟」的同樣危險。
「你可以花費所有這些時間來設計你認為更好的東西並最終得到相同甚至更糟的東西。這可能會發生。但這就是我作為設計師的經驗所帶來的。
我設計的遊戲是大而複雜,你可以設計一種相同的編程語言,著眼於美學。「首先要努力保持簡單,但其次當你增加複雜性時(因為總會有更複雜的需求),就要考慮這種複雜性帶來了多少好處?有多容易理解(對於玩家)是我們一直在遊戲設計中考慮的問題。如果有人走進這個房間......他們會明白髮生了什麼嗎?我們如何幫助他們理解?
「那些相同的技能可以轉化為編程語言設計。我不認為這樣說有太多爭議,大多數時候,當編程語言被設計時,它們不是我們設計師所設計的。它們是由那些試圖解決技術問題的程序員設。」
最終,Blow 希望 Jai 能夠有力地為最大的 AAA 遊戲進行編程,但現在他正在與他的新遊戲進行「中間橋接」。
「這是一個真正的遊戲,我們只是選擇了一個更容易做的設計。一旦完成並且它可以運行,那麼我們可以擴展圖形引擎等等。」
雖然 Jai 目前還沒有開源,但 Blow 希望在今年年底之前完成封閉測試。 它是否能夠實現其潛力或達到個人希望,也許還有很長的路要走。
C++ 真的是一門「可怕的編程語言」?
不止Jonathan Blow 這樣說,早年間,Linux 之父 Linus Torvalds也曾表明 C++ 是一門很恐怖的語言,而比它更恐怖的是很多不合格的程序員在使用著它。那麼倘若撇開企業的項目需求,C++ 本身而言真的是一門「可怕的編程語言」嗎?對此,不少網友表示:
我已經用了 C ++ 很多年了。我忽略了它很多的特性,因為我不需要使用全部。沒有人說你必須使用它的每一點。在工作中,只需知道部分並完整地了解該工具如何才能完成工作,這就很好了。如今詆毀 C ++ 似乎成了一種趨勢,但如果你不擅長做某件事,你就會對此表達不好的情緒。基於這一年,每一種編程語言都有優劣,都會被人吐槽。
沒有「真正可怕的語言」,只是「非常可怕的程序員」。除了 C ++ 之外,還有 PHP、Javascript、APL、Ada 和 BASIC。
C ++ 從一個非常清晰的語法開始,大大簡化了一些重要的編程任務。 隨著人們越來越熟悉這種語言,他們發現了新的編程模式,語言無法很好地處理,因此增加了新的語法或功能,導致膨脹。如今 C ++ 已經存在了一段時間,並且已經添加了許多新東西,它已成為一種成熟的語言。 在某些時候,總是有人會提出一種新的通用語言,它以一致的語法結合了 C ++ 的許多優點,對許多人來說很有用,而不僅僅是為了開發遊戲或者 Web。但是為解決一些特定的功能,然後循環重複開發新的語言,那生態也會亂。
C ++ 很好,只要你在 C ++ 11 之前保持功能級別並且不使用 STL。
C ++ 太可怕了。我討厭它的多態性。更糟糕的是,很多人認為多態性是一種理想的功能,有助於創建清晰、可讀的代碼。它鼓勵創建對類進行操作的函數而不是對通用數據類型。
你怎麼看?
參考:
https://www.gamesindustry.biz/articles/2018-07-02-jonathan-blow-c-is-a-weird-mess
https://developers.slashdot.org/story/18/07/07/0342201/is-c-a-really-terrible-language


※Github 用戶喊話微軟:放棄 ICE 吧,不然會失去我們的
※AI時代的芯魂合一——天數智芯2018智能生態戰略發布會在京召開
TAG:CSDN |