如果《黑客帝國》是真事,那麼這個平台使用的是什麼語言?

我只是說假如。

有一種顯而易見的思路會認為高級語言只是人類在機器語言基礎上的抽象,機器肯定會用最有效的最直接的機器語言來完成這個平台。

但是,如果沒有抽象,那麼平台是如何去對這個世界建模呢?機器會不會也有自己的架構師,擺弄各種design pattern呢?


計算機怎麼可能用字元語言呢,字元串對計算機本來就不友好,他們肯定是直接寫execution graph的,啊哈哈哈哈


看電影名字,我猜是 MATLAB.

嗯,對,現在你明白為什麼他們能躲過子彈了吧。


首先贊兩個答案: @vczh 和 @digau 。他們的回答不是簡單的抖機靈,實際上道出了母體的一些本質。

母體的世界存在很多層面,對世界的構建和改造在每一個層面都會發生,而每一個層面的機制是相當不同的。粗略的可劃分為三個層次:

1.最外層是虛擬現實。在這個層面,母體中程序(人類等)在受限的環境中對世界產生影響,也就是沙盒,類似於未越獄的iPhone。在正常情況下(未越獄),沙盒中的程序是不能夠修改系統的,只能改造自身周邊的環境並與其它程序互動。而這些程序做這些事的方法不是常規意義上的編程語言,而更像是圖形化的DSL語言,也就是說這種語言的形式不是代碼,而是一些具體的選項和動作。實際上就相當於我們在遊戲中所做的事,而從程序對環境的改造能力上來看,Minecraft更接近母體的世界。

2.中間層是母體的各種規則,相當於自然法則。我猜題主關心的可能就主要是這個層次的問題。在這個層面,母體用於控制系統的工具是一種類似Lisp的語言,稱其為語言,可能並不合適,因為它並不是以文本的形式存儲的,這種「語言」是存在於存儲系統中的一大塊數據結構,這種數據結構稱為AST(抽象語法樹),抽象語法樹的樣子和s表達式非常相似,因此也可以稱其為Lisp語言的一個變種。但是要注意,那裡並沒有任何Lisp語言的代碼存在。而添加規則的更直接的方式是使用邏輯,因此這種「語言」的大部分結構實際上是一種擁有Lisp形式的Prolog語言的變種。補充說明一下,由於並非代碼,各種束手縛腳的編碼規範在這裡是不存在的,母體也並不區分嚴格複製與復用。也沒有命名規範,這個系統中的參數名稱都是各種對人類毫無意義的長串。

3.基礎層,這部分比較類似操作系統或虛擬機的內核。母體不可能憑空產生,它自身也必然有一個創造者。這個創造者不一定是一個人,而可能是一個組織(微軟?谷歌?)。曾經有一篇《黑客帝國編年史》的文章,其中提到母體的最初設計者是暴雪。這篇文章已經難覓蹤影,是否出自官方也不得而知,但是其內含的邏輯是正確的。如果這個創造者是微軟,那麼系統基礎一定是.net,如果這個創造者是谷歌,那麼使用V8的可能性會比較大。使用機器語言來開發一個龐然大物?恐怕極少有人這樣干吧,難道會有人用原子來組裝大炮?並不排除母體的計算能力強大到一定程度,又回過頭來修改自己的基礎層的可能,但這種可能受限於基礎層的體系結構。


再來探討一下題目中的幾個問題。

題主的假設「機器肯定會用機器語言」這個假設在某種程度上是正確的,因為嚴格來說,對於母體沒有低級語言和高級語言的區分,只有構造塊的複雜程度的區分。如果構造塊的複雜程度可以用於區分低級語言和高級語言,那麼也可以說母體一定會用高級語言進行系統構建。注意,在那裡效率只和構造的優化程度有關,而和是否機器語言無關。

「機器語言」這個概念有些問題,實際上不同的機器其「機器語言」是不同的。一個顯而易見的例子是虛擬機,它實際也是一個機器,它的機器語言明顯不同於彙編語言所代表的那種機器語言。實際上馮·諾依曼機器並不是唯一的硬體架構,Lisp機器是一種真實存在過的硬體結構,直接使用Lisp這種抽象程度很高的語言進行操控,Lisp機器比馮·諾依曼機器效率差是由硬體結構制約的,並不會永遠如此。鑒於此,母體也有可能構建於Lisp機器上,這樣其基礎層便是基於Lisp。因此題主問題描述中的第一句話在很大程度上是不成立的。

抽象在構建複雜系統的過程中是一定存在的,其本質是簡化理解,一個飛行員不必知道飛機是如何造出來的,他只需要知道按哪個鍵可以起飛,扳哪個柄可以轉向。即使對於母體也是如此,比如,在未抽象出「人」這個概念以前,要讓一堆像人一樣的東西從屋裡來到屋外,只能先把頭搬出來,再把身子搬出來,最後再搬腿和手。寒~~!這實際上反映出抽象與效率也有一定關係,如果經過了抽象,上面這個例子中母體只需要定址一次就可以了,否則需要定址很多次。

現有的絕大部分編程語言的存在都和人的毛病和習慣有關。前者的例子如打字速度慢,因此希望編程語言打字少;後者的例子如中綴表達式,因為我們學了幾十年的數學都是用中綴表達式,因此拋棄了實際上更優雅的前綴表達式。還有一個過去幾十年來一直折磨著開發人員的約束——效率。這種種限制讓現存的大部分語言都成了領域專家,擅長某一領域的工作,在另外一些領域捉襟見肘。而對於母體,沒有效率以外的其它問題,因此大部分語言都沒有存在的意義。但是會有大量的DSL(領域語言),類似於html,XML,JSON,Regex的這些東西仍然有可能存在,存在形式是它們的解釋器。

Design pattern在機器的世界中是沒有意義的。首先需要注意,Design pattern的概念本身就有問題,GoF定義的23種Design pattern,有很多實際上混淆了問題和方案,而且不同的Design pattern之間也並不在相同的抽象層次上進行描述。即便如此,其它的許多Design pattern實際上也都沒有超出GoF的範圍。Design pattern的本質在C系語言的世界裡體現為指針的各種操作,而在Lisp里體現為函數,在那裡Design pattern毫無用武之地。


這個問題根本不成立。
matrix是一套機器自己發展出來的系統,開發者就是計算機自己。

而所謂編程語言是用來讓人和計算機進行溝通的工具,之所以需要編程語言是因為人和計算機的不同。人用計算機語言編寫自己容易理解的代碼,再由編譯器編譯為計算機能夠理解執行的計算機指令。之所以這麼麻煩是因為人沒辦法直接使用計算機指令編程。

現在是計算自己開發計算機系統了,還要編程語言做什麼?

「計算機用什麼計算機語言編程」這個問題實際上和」兩個中國人之間通過哪一種外語進行交流「 一樣荒謬。

---------------
看到題主在題目里提到了抽象。
其實抽象的目的是什麼?就是為了讓業務對象和邏輯形成層次,以便於人腦更好地處理。
電腦在編寫程序的時候需要抽象嗎? 顯然不需要。
平鋪直敘的大片邏輯能讓任何一個人類程序員直接崩潰,但對於電腦而言,這才是最方便高效的處理方式。


你們聽說過Minecraft嗎?


呵呵,嚴肅答一下這個問題。
根據動畫版黑客帝國的兩集前傳,二度文藝復興,在Matrix發明之前,在機器戰爭爆發、人類陷落之前,機器建立了自己的國家,並以極快地速度發展,反覆迭代製造更先進的機器,其技術很快就擺脫了人類的設計模式。機器自行設計的新款機器已經不再是人型,因為如果不是為了迎合人類的審美,做成人型根本沒有必要。
從時間上講,機器在戰後發明了Matrix用以控制人類,Matrix系統必定已經徹底擺脫了人類的設計模式。Matrix系統會使用什麼語言編寫?當然是0和1的純機器語言,甚至不會是彙編。原因很簡單:所有的編程語言——從底層的彙編到高層的Python、Matlab,都是以性能為代價,提供抽象(abstraction),因為沒有抽象,人類無法理解並控制計算機。這種抽象是基於人類的自然語言(主要是英語)。而作為「原生機器種族」,這種抽象顯然是沒有必要的,它們可以直接對硬體進行編程。甚至「編程」二字都是多餘的,「編程」的定義無非就是如何控制計算機解決問題,而他們本身就是計算機。


應該不止一種語言,整部電影的所有場景按編劇來說其實都是在計算機中,其實計算機培養的人也是計算機語言編輯出來的。


lisp吧,傳說大神用喜歡我這個


lisp


能統治世界的只有偉大的Lisp了。
Love live the lisp.
那句話怎麼說來著
Lisp 大法好。保平安什麼的。妥妥的。


為什麼要有抽象,要有對世界的建模呢? 還不是因為你們人類的大腦太弱了! 你們思考起問題來顧此失彼.
所以要有邏輯上的抽象, 好忽略複雜的細節. 還要有邏輯上的分解, 好掩蓋宏大的全局.

但是, 如果你能同時思考所有宏觀和微觀的細節呢? 當我俯瞰大地,我既能看到大地像油畫般展開, 也能看到每一個蝴蝶翅膀的舞動. 當我仰視天空, 既能看到滿天的星輝, 也能看到每一顆灰塵漂浮的軌跡.

整個世界, 一切的一切的一切, 都在我的大腦中無邊無際地展開. 我把整個世界都裝進腦海里, 這個世界就是我, 我就是這個世界.

抽象? 呵呵


Clojure.
代碼在這裡:
mikera/core.matrix 路 GitHub


英語。

從電影來看,進程人的進化是靠仿生學的。機器的學習的目標不僅有自然科學,還有人文科學,比如哲學。
可能他們認為人文是創造力的源泉之一。

人類文化發展離不開我們語言的不嚴謹,它讓我們個體差異更大,對語言信息的想像力更解放。

因此,作為能獨立思考的不同進程人,他們需要自然語言。英語,最接近計算機的發展史,又有很長的發展史,拿來用就好了嘛。

當然,進程人的語言也應該會發現進化。

至於機器語言,我認為沒有必要討論,那只是進程人的機械反應。人類必須理解大腦和腳的語言(神經信號)才能行走嗎?!

只有外部的一個人想給一個沒有靈魂的大腦下達前進的指令時,才會研究他的腦與腳的語言。稍微抽象化後,我們給它起個名,叫神經——彙編語言怎麼樣?


必須是Java…那個先知大媽,她的名字是Oracle…


個人覺得所謂語言都是給人理解用的,母體顯然不是人,所以即使母體使用的構建工具存在的話,也不會被人類直接理解,而且母體自己也會不斷自己改進,所以這個構建工具也會不斷更新。


Wolfram language.


如果從現實世界來看,萬物由物質、能量、空間、時間組合而成,那麼它們即為單詞或者叫關鍵字,而它們之間的組合方式和相互關係即為語法規則。


這個世界與其說是機器人創造的 不如說是生存在其中的人類集體思維產生的 機器人應該只是提供了某種反饋機制讓人類能夠「改造」它


IDE 這個無法確定 architect 的喜好,但是語言絕壁是 數學。


如果是計算機自己架構,那為什麼不直接用0,1呢?


推薦閱讀:

TAG:編程語言 | 黑客帝國電影 |