中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

說說程序員、編譯器、CPU之間的三角戀

發布時間:2020-07-06 12:13:47 來源:網絡 閱讀:3359 作者:毛散人 欄目:開發技術


編程工作的演進史

1、CPU需要的只是1和0組成的二進制數據

(1)不管編程怎么變,最終編程得到的可執行二進制程序都是給CPU運行的。CPU需要的只是按照CPU設計時的規律(機器指令)排布的一串二進制1和0組成的數字(機器碼),CPU根本不關心這些二進制是怎么來的。

(2)這些二進制可能是一個很厲害的程序員直接用1和0拼出來的;也可以是用匯編語言編寫最終編譯得到的;也可以是用C語言編寫最終編譯得到的;也可以是用java C# php bash等語言編寫然后解釋得到的;

(3)編程工作的演進其實一直是在處理上一個層次段落:就是使用何種語言編寫程序(用某種語言進行編程),然后如何把這種程序源代碼轉成二進制(編譯器的發明)。

(4)CPU接收到一串1010序列后如何工作達到目的,這就是設計制造CPU的公司要考慮的事情了,與軟件工程師完全無關。


2、早期的紙卡打孔編程者

(1)最早期的時候,CPU也很簡單,指令集很少,二進制位數也不多。那時候編譯器也沒被發明,編程語言也沒被發明,那時候就是用二進制直接編程的。

(2)總結:最早的編程沒有語言也沒有編譯器,程序員直接使用二進制和機器(CPU)對話。

(3)這種方式的壞處就是不容易擴展,隨著CPU的進一步復雜化,指令的變多,指令位數的變多,編程難度呈幾何倍數增長。人的大腦慢慢就跟不上這個節奏。


3、編程工作的第一次革命:由二進制機器碼到匯編語言

(1)第一次革命就是:發明了匯編語言。匯編語言的本質就是用一個符號來代替一串二進制。

MOV 10101010101010

SUB 01010101010101

(2)有了匯編語言之后,程序員就不用再去記憶二進制序列了。編程時只需要用匯編指令來編程即可,匯編指令就是一個符號(符號就是由文字構成的,如MOV)。因為人類大腦天生對文字符號更加友好,因此用符號編程更簡單。

(3)用匯編語言編寫的源程序不能直接給CPU運行,必須通過一個翻譯過程,把源代碼翻譯成二進制序列才能給CPU。這個翻譯的過程就叫匯編,執行翻譯動作的就是匯編器。


4、編程工作的第二次革命:由匯編語言到C語言

(1)匯編語言也有一些不盡如人意的地方,譬如:沒有可移植性。在這個CPU上寫的匯編程序無法直接在另一個CPU上運行。因此匯編語言是和CPU一一對應的。

(2)為了可移植性于是乎發明了高級語言。第一個高級語言就是C語言。C語言進一步靠近人的思維,為人的思維發明了很多CPU沒有的東西,譬如數組。最終的目的就是降低編程難度,讓高級語言更接近人的思維,然后通過編譯器、匯編器等的翻譯將這些源代碼變成二進制然后給CPU運行。


5、革命無窮盡、層次變更多

(1)在C語言之上還有更高級語言,譬如:C++、Java、C#、bash等。越往上越靠近人的思維,越往上語言本身提供的封裝越多,越往上編程難度越低、語言的掌握越容易。


1、CPU只認識二進制機器指令

(1)CPU是最終干活的,而CPU只認識只接受二進制。

2、人類喜歡符號而不是二進制

(1)人類的大腦本身不喜歡二進制而喜歡符號、文字。

(2)人類和機器之間天生有代溝,于是乎編程不容易。


3、連接人(程序員)與機器(CPU)的橋梁:編譯器

(1)編譯器降低了編程難度。編譯器的代表就是編程語言,每一種編程語言都有對應的編譯器,這個編譯器的作用就是把這種語言的源文件編譯成可執行程序。

(2)關鍵是:有了編譯器(高級語言)之后,我們程序員就不再盯著CPU(二進制),而是改為盯著編譯器(編程語言、編程語言的語法),所以我們學習編程的關鍵變成了學習編譯器的習性,也就是編程語言的語法。


4、發明一門語言關鍵就在于發明它的編譯器

(1)編譯語言的關鍵就是編譯器。yacc和lex工具就是用來發明編程語言的。


5、高級語言與低級語言的差別

(1)越高級的語言越靠近人類思維;越低級的語言越靠近機器的需要。

(2)人與機器總勞動量(總復雜度)守恒。人要是復雜一點機器就可以簡單一點;人簡單一點機器就需要復雜一點。這個規律描述的就是:編程語言越簡單,人使用起來越簡單,編譯器設計起來就更復雜;編程語言越復雜、程序員使用起來越麻煩,則編譯器設計越簡單,CPU執行效率越高。



像編譯器一樣思考吧

語法是什么?語法就是編譯器的習性

(1)編譯器反應在編程中就是語法。

譬如1:

for (i=0; i<10; i++);

{

xxx;

}


譬如2:

int i; !!i;

解析:!在C語言中是邏輯取反的意思,邏輯取反意思就是0取反就是1,不是0的數取反就是0

問題:讓你用C語言編程實現:如果一個數i是0則返回0,如果不是0則返回1

一般實現: if (i == 0){return 0;} else{return 1;}

或者可以用三母運算符: (i==0)?(0):(1);

極客式寫法: !!i;


習得一門語言就像認識一個朋友

(1)從新開始認識一個人到成為好朋友,這里面要經歷:時間、共事。

(2)學習一門編程語言也需要:時間、實踐(共事)

學習編程語言要懂得換位思考

(1)預處理中處理程序注釋、空行。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东乌珠穆沁旗| 永丰县| 兴安县| 威海市| 泾源县| 安多县| 绥滨县| 邵东县| 阿克苏市| 缙云县| 陆丰市| 库尔勒市| 民和| 新宁县| 高唐县| 黔江区| 石泉县| 昭通市| 江北区| 吉木萨尔县| 徐州市| 巴彦淖尔市| 和龙市| 紫云| 乐至县| 阳信县| 乌拉特后旗| 屯留县| 宁蒗| 玉林市| 寿光市| 西贡区| 卫辉市| 渭源县| 南城县| 开远市| 射阳县| 丹江口市| 乐陵市| 黄龙县| 长武县|