国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

假如你來發明編程語言

開發 后端
聰明的人類發現把簡單的開關組合起來可以表達復雜的bool邏輯,在此基礎之上構建了 CPU ,因此 CPU 只能簡單的理解開關,用數字表達就是0和1。

 [[389606]]

聰明的人類發現把簡單的開關組合起來可以表達復雜的bool邏輯,在此基礎之上構建了 CPU ,因此 CPU 只能簡單的理解開關,用數字表達就是0和1。

創世紀:聰明的笨蛋

CPU 相當原始,就像單細胞生物一樣,只能把數據從一個地方搬到另一個地方、簡單的加一下,沒有任何高難度動作,這些操作雖然看上去很簡單很笨,但 CPU 有一個無與倫比的優勢,那就是一個字:快,這是人類比不了了的,CPU 出現后人類開始擁有第二個大腦。就是這樣原始的一個物種開始支配起另一個叫做程序員的物種。

干活的是大爺

一般來說兩個不同的物種要想交流,比如人和鳥,就會有兩種方式:要不就是鳥說人話,讓人聽懂;要不就是人說鳥語,讓鳥聽懂;就看誰厲害了。

最開始 CPU 勝出,程序員開始說鳥語并認真感受 CPU 的支配地位,好讓 CPU 大爺可以工作,感受一下最開始的程序員是怎么說鳥語的:

[[389608]]

程序員按照 CPU 的旨意直接用0和1編寫指令,你沒有看錯,這破玩意就是代碼了,就是這么原生態,然后放到打孔紙帶上輸入給CPU,CPU 開始工作,這時的程序可真的是看得見摸得著,就是有點浪費紙。

 

這時程序員必須站在 CPU 的角度來寫代碼,畫風是這樣的:

 

  1. 1101101010011010 
  2. 1001001100101001 
  3. 1100100011011110 
  4. 1011101101010010 

乍一看你知道這是什么意思嗎?你不知道,心想:“這是什么破玩意?”,但 CPU 知道,心想“這就簡直就是世界上最美的語言”。

天降大任

終于有一天程序員受夠了說鳥語,好歹也是靈長類,嘰嘰喳喳說鳥語太沒面子,你被委以重任:讓程序員說人話。

你沒有苦其心志勞其筋骨,而是仔細研究了一下 CPU,發現 CPU 執行的指令集來來回回就那么幾個指令,比如加法指令、跳轉指令等等,因此你把機器指令和對應的具體操作做了一個簡單的映射,把機器指令映射到人類能看懂的單詞,這樣上面的01串就變成了:

 

  1. sub $8, %rsp 
  2. mov $.LC0, %edi 
  3. call puts 
  4. mov $0, %eax 

這樣,程序員不必生硬的記住1011.....,而是記住人類可以認識的ADD SUB MUL DIV等這樣的單詞即可。

匯編語言就這樣誕生了,編程語言中首次出現了人類可以認識的東西。

 

這時程序員終于不用再“嘰嘰喳喳。。”,而是升級為“阿巴阿巴。。”,雖然人類認知“阿巴阿巴”這幾個字,但這和人類的語言在形式上差別還是有點大。

細節 VS 抽象

盡管匯編語言已經有人類可以認識的單詞,但匯編語言和機器語言一樣都屬于低級語言。

所謂低級語言是說你需要關心所有細節。

關心什么細節呢?我們說過,CPU 是非常原始的東西,只知道把數據從一個地方搬到另一個地方,簡單的操作一下再從一個地方搬到另一地方。

因此,如果你想用低級語言來編程的話,你需要使用多個“把數據從一個地方搬到另一個地方,簡單的操作一下再從一個地方搬到另一地方”這樣的簡單指令來實現諸如排序這樣復雜的問題。

有的同學可能對此感觸不深,這就好比,本來你想表達“去給我端杯水過來”:

如果你用匯編這種低級語言就得這樣實現:

我想你已經 Get 到了。

 

彌補差異

CPU 實在太簡單了,簡單到不能了理解任何稍微抽象一點諸如“給我端杯水”這樣的東西,但人類天生習慣抽象化的表達,人類和機器的差距有辦法來彌補嗎?

換句話說就是有沒有一種辦法可以自動把人類抽象的表達轉為 CPU 可以理解的具體實現,這顯然可以極大增強程序員的生產力,現在,這個問題需要你來解決。

套路,都是套路

思來想去你都不知道該怎么把人類的抽象自動轉為 CPU 能理解的具體實現,就在要放棄的時候你又看了一眼 CPU 可以理解的一堆細節:

電光火石之間靈光乍現,你發現了滿滿的套路,或者說模式。大部分情況下 CPU 執行的指令平鋪直敘的,就像這樣:

這些都是告訴 CPU 完成某個特定動作,你給這些平鋪直敘的指令起了個名字,姑且就叫陳述句吧,statement。

 

除此之外,你還發現了這樣的套路,那就是需要根據某種特定狀態決定走哪段指令,這個套路在人看來就是“如果。。。就。。。否則。。就。。。”:

 

  1. if *** 
  2.   blablabla 
  3. else *** 
  4.   blablabla 

在某些情況下還需要不斷重復一些指令,這個套路看起來就是原地打轉:

 

  1. while *** 
  2.   blablabla 

最后就是這里有很多看起來差不多的指令,就像這里:

這些指令是重復的,只是個別細節有所差異,把這些差異提取出來,剩下的指令打包到一起,用一個代號來指定這些指令就好了,這要有個名字,就叫函數吧:

 

 

  1. func abc: 
  2.   blablabla 

現在你發現了所有套路:

 

  1. // 條件轉移 
  2. if *** 
  3.   blablabla 
  4. else *** 
  5.   blablabla 
  6.  
  7. // 循環 
  8. while *** 
  9. blablabla 
  10.  
  11. // 函數 
  12. func abc: 
  13.   blablabla 

這些相比匯編語言已經有了質的飛躍,因為這已經和人類的語言非常接近了。接下來你發現自己面臨兩個問題:

  1. 這里的blablabla該是什么呢?
  2. 該怎樣把上面的人類可以認識的字符串轉換為 CPU 可以認識的機器指令

盜夢空間

你想起來了,上文說過大部分代碼都是平鋪直敘的陳述句,statement,這里的blablabla 僅僅就是一堆陳述句嗎?

顯然不是,blablabla 可以是陳述句,當然也可以是條件轉移if else,也可以是循環while,也可以是調用函數,這樣才合理。

雖然這樣合理,很快你就發現了另一個嚴重的問題:

blabalbla中可以包含 if else 等語句,而if else等語句中又可以包含blablabla,blablabla中反過來又雙可能會包含if else等語句,if else等語句又雙叒有可能會包含blablabla,blablabla又雙叒叕可能會包含if else等語句。。。

就像盜夢空間一樣,一層夢中還有一層夢,夢中之夢,夢中之夢中之夢。。。一層嵌套一層,子子孫孫無窮匱也。。。

[[389611]]

此時你已經明顯感覺腦細胞不夠用了,這也太復雜了吧,絕望開始吞噬你,上帝以及老天爺啊,誰來救救我!

 

此時你的高中老師過來拍了拍你的肩膀,遞給了你一本高中數學課本,你惱羞成怒,給我這破玩意干什么,我現在想的問題這么高深,豈是一本破高中數學能解決的了的,抓過來一把扔在了地上。此時一陣妖風吹過,教材停留在了這樣一頁,上面有這樣一個數列表達:

f(x) = f(x-1) + f(x-2)

這個遞歸公式在表達什么呢?f(x)的值依賴f(x-1),f(x-1)的值又依賴f(x-2),f(x-2)的值又依賴。。。

一層嵌套一層,夢中之夢,if中嵌套 statement,statement 又可以嵌套if。。。

 

等一下,這不就是遞歸嘛,上面看似無窮無盡的嵌套也可以用遞歸表達啊!你的數學老師仰天大笑,too young too simple,留下羞愧的你佛手而去,看似高科技的東西竟然用高中數學就解決了,一時震驚的目瞪狗帶不知所措無地自容。有了遞歸這個概念加持,聰明的智商又開始占領高地了。

遞歸:代碼的本質

不就是嵌套嘛,一層套一層嘛,遞歸天生就是來表達這玩意的 (提示:這里的表達并不完備,真實的編程語言不會這么簡單):

 

  1. if : if bool statement else statement 
  2. for: while bool statement 
  3. statement: if | for | statement 

上面一層嵌套一層的盜夢空間原來可以這么簡潔的幾句表達出來啊,你給這幾句表達起了高端的名字,語法。數學,就是可以讓一切都變得這么優雅。世界上所有的代碼,不管有多么復雜最終都可以歸結到語法上,原因也很簡單,所有的代碼都是按照語法的形式寫出來的嘛。至此,你發明了真正的人類可以認識的編程語言。之前提到的第一個問題解決了,但僅僅有語言還是不夠的。

讓計算機理解遞歸

現在還差一個問題,怎樣才能把這語言最終轉化為 CPU 可以認識的機器指令呢?

人類可以按照語法寫出代碼,這些代碼其實就是一串字符,怎么讓計算機也能認識用遞歸語法表達的一串字符呢?

這是一項事關人類命運的事情,你不禁感到責任重大,但這最后一步又看似困難重重,你不禁仰天長嘆,計算機可太難了。

此時你的初中老師過來拍了拍你的肩膀,遞給了你一本初中植物學課本,你惱羞成怒,給我這破玩意干什么,我現在想的問題這么高深,豈是一本破初中教科書能解決的了的,抓過來一把扔在了地上。

此時又一陣妖風掛過,書被翻到了介紹樹的一章,你望著這一頁不禁發起呆來:

樹干下面是樹枝,樹枝下是樹葉,樹枝下也可以是樹枝,樹枝下還可以是樹枝、吃葡萄不吐葡萄皮,不吃葡萄倒吐葡萄皮,哎?這句不對,回到上面這句,樹干生樹枝,樹枝還可以生樹枝,一層套一層、夢中之夢、子子孫孫無窮匱、高中數學老師,等一下,這也是遞歸啊!!!我們可以把根據遞歸語法寫出來的的代碼用樹來表示啊!

 

 

你的初中老師仰天大笑,圖樣圖森破,看似高科技的東西竟然靠初中知識就解決了。

 

優秀的翻譯官

計算機處理編程語言時可以按照遞歸定義把代碼用樹的形式組織起來,由于這棵樹是按照語法生成的,姑且就叫語法樹吧。

現在代碼被表示成了樹的形式,你仔細觀察后發現,其實葉子節點的表達是非常簡單的,可以很簡單的翻譯成對應的機器指令,只要葉子節點翻譯成了機器指令,你就可以把此結果應用到葉子節點的父節點,父節點又可以把翻譯結果引用到父節點的父節點,一層層向上傳遞,最終整顆樹都可以翻譯成具體的機器指令。

完成這個工作的程序也要有個名字,根據“弄不懂原則”,你給這個類似翻譯的程序起了個不怎么響亮的名字,編譯器,compiler。

 

現在你還覺得二叉樹之類的數據結構沒啥用嗎?至此,你完成了一項了不起的發明創造,程序員可以用人類認識的東西來寫代碼,你編寫的一個叫做編譯器的程序負責將其翻譯成 CPU 可以認識的機器指令。后人根據你的思想構建出了C/C++、以及后續的Java、Python,這些語言現在還有一幫人在用呢。

總結

世界上所有的編程語言都是遵照特定語法來編寫的,編譯器根據該語言的語法將代碼解析成語法樹,遍歷語法樹生成機器指令(C/C++)或者字節碼等(Java),然后交給 CPU(或者虛擬機)來執行。

也因此,高級語言的抽象表達能力很強,代價都是犧牲了對底層的控制能力,這就是為什么操作系統的一部分需要使用匯編語言編寫,匯編語言對底層細節的強大控制力是高級語言替代不了的。

最后請注意,本文為通俗易懂講解編程語言犧牲了嚴謹性,這里的語法沒有體現函數、表達式等等,真實語言的語法遠遠比這里的復雜,此外關于編譯器也不會直接把語法樹翻譯成機器語言,而是生成一種類似機器指令的中間語言,經過一系列復雜的優化后最終生成真正的機器指令,真實的編譯器遠比這里復雜。

希望本文對大家理解編程語言有所幫助。

責任編輯:華軒 來源: 碼農的荒島求生
相關推薦

2021-03-26 06:00:37

編程語言CPU

2015-12-09 09:03:22

2015-12-09 14:37:30

2012-11-01 13:41:25

編程語言BasicPerl

2023-02-10 08:58:46

2023-12-05 09:03:05

多核分布式

2025-03-13 00:35:00

2022-03-05 18:25:51

SSLTLS協議

2018-01-26 14:41:04

編程Python開發

2020-11-27 12:13:14

電飯煲來遙控電視

2018-06-19 16:25:40

編程語言Python爬蟲

2014-04-09 10:08:06

FacebookHack

2012-06-12 10:07:22

Web

2020-03-21 15:24:38

計算機代碼文言文

2018-07-06 09:04:14

編程語言PythonJava

2015-11-02 14:48:05

LinuxR 語言

2020-09-06 08:23:36

技術人工智能5G

2017-11-27 06:01:37

數據庫中間件中間層

2017-11-30 08:56:14

數據庫中間件架構師

2020-12-24 10:00:12

PythonPython基礎阿姆斯特朗數
點贊
收藏

51CTO技術棧公眾號

国产传媒欧美日韩成人| av一区二区高清| 91成人精品网站| av免费网站在线观看| 一二三四中文在线| 91精品午夜视频| 欧美黄网站在线观看| 欧美视频在线观看 亚洲欧| 裤袜国产欧美精品一区| 国产精品久久97| 高清不卡在线观看av| 国产一区二区影视| 欧美日韩第一页| 国产女优一区| 激情视频网址| 夜夜嗨av一区二区三区免费区| 亚洲国产精品综合久久久| 妞干网在线观看视频| 欧美日韩久久久| 久久99国内| av免费中文字幕| 亚洲国产精品99| 韩日精品在线| videoxxxx另类日本极品| www.日韩视频| 免费看欧美美女黄的网站| 邻居大乳一区二区三区| 性色av一区二区三区| 国产一区二区三区久久悠悠色av | 欧美一级片网址| 亚洲国产成人不卡| 色一情一乱一乱一91av| 亚洲ab电影| 国产午夜伦鲁鲁| 亚洲男人天堂2019| 亚洲欧美久久| 国产片在线观看| 成人激情视频免费在线| 亚洲免费高清视频在线| 亚洲高清在线一区| 欧美一级欧美一级| 亚洲精品xxx| 老牛国产精品一区的观看方式| 青青国产在线| 96pao国产成视频永久免费| 亚洲成人午夜影院| 欧美码中文字幕在线| 黄色av资源| 国产精彩精品视频| 亚洲精品一二三四区| 日韩高清在线免费观看| 免费yellow网站| 青青草成人在线| 一区二区视频在线看| 另类在线视频| 美女的尿口免费视频| 国产精品黄视频| 精品国产电影一区| 午夜精品一区二区三区国产| 中文字幕在线影视资源| 91超碰在线电影| 欧美日韩国产片| 在线一区视频| 爱情岛亚洲播放路线| 成人在线观看www| 色婷婷**av毛片一区| a美女胸又www黄视频久久| 国产精品成人3p一区二区三区 | 日韩a在线播放| 久久久久久69| 一区二区高清视频在线观看| 精品产国自在拍| 小草在线视频在线免费视频| 成人免费在线看片| 日韩欧美精品在线| 国产精品原创| 亚洲乱码一区| 一二三四在线视频观看社区| 精品免费av| 成人av在线播放| 中国女人久久久| 国产综合视频一区二区三区免费| 亚洲一区二区三区成人在线视频精品| 欧美性20hd另类| 欧美亚韩一区| 黄色影院在线看| 欧美视频在线观看视频| 久久久久久97| 亚洲一区免费视频| 99久久影视| 在线观看久久av| 国产精品久久久久影院老司| 91精品亚洲| 国产丝袜在线播放| 99久久久无码国产精品6| 国产精品福利观看| 日韩欧美综合一区| 久久女同互慰一区二区三区| 日韩av自拍| aa国产成人| 激情综合网五月激情 | 日韩在线不卡视频| 国产精品网站在线| 欧美在线国产| 狠狠躁少妇一区二区三区| 亚洲精品无码久久久久久| 国产成人综合亚洲| 欧美精品粉嫩高潮一区二区| 成人av在线资源网| 欧美hentaied在线观看| 国产美女精品写真福利视频| 羞羞小视频视频| 欧美高清一区二区| 日韩一级免费| 国产无一区二区| 国产麻豆精品久久一二三| 国产成人a视频高清在线观看| 丝袜制服影音先锋| 久久狠狠久久综合桃花| 在线观看国产精品网站| 国产精品久久一区主播| 日韩在线免费视频| 亚洲男人天堂2019| 日韩一区二区电影| 欧美在线播放高清精品| 色综合天天综合在线视频| 亚洲电影在线播放| 黑人狂躁日本妞一区二区三区| 夜夜亚洲天天久久| 午夜精品一区在线观看| 999精品视频在线观看| 一区二区成人| 国产 欧美 日韩 一区| 成人免费观看a| 北条麻妃99精品青青久久| 日本精品视频一区二区三区| av网站免费线看精品| 亚洲国产清纯| 国产精品极品| 美女91在线| 三级无遮挡在线观看| 欧美 国产 日本| 日韩欧美电影一区二区| 国产精品亚发布| 久久亚洲私人国产精品va| 欧美一区二区三区日韩视频| 国产精品私房写真福利视频| 韩国午夜理伦三级不卡影院| 亚洲五月综合| 免费看久久久| 伦一区二区三区中文字幕v亚洲| 麻豆传媒视频在线观看免费| 99精产国品一二三产品香蕉| 福利视频一二区| 欧美激情论坛| 亚洲尤物视频网| 国产69久久精品成人| 久久香蕉国产线看观看av| 欧美精品一区二区三| 欧美日韩一区二区不卡| 亚洲成av人片在线| 国产精品国产三级国产| 播五月开心婷婷综合| 精品一区中文字幕| 另类亚洲自拍| 亚洲理论在线| 欧美网站在线| 五月天久久网站| 久久99影视| 欧美韩一区二区| 中文字幕日韩亚洲| 日韩另类视频| av有声小说一区二区三区| 国产精品原创| 蜜桃av.网站在线观看| 午夜伦理大片视频在线观看| 午夜在线小视频| 黄色在线网站| 在线国产福利网站| 玖草视频在线| 最新在线你懂的| 性一爱一乱一交一视频| 色琪琪免费视频网站| 成人黄色影视| 无限国产资源| 区一区二日本| 黄动漫在线免费观看| а√最新版地址在线天堂| 先锋成人影院| 99不卡视频| 性色a∨人人爽网站| 日韩男人天堂| 伊人国产在线看一| 美女毛片在线看| av在线播放网| 操你啦视频在线| 91资源在线观看| www.久久草| 亚洲bt欧美bt日本bt| 久久国产精品-国产精品|