序:
Hello大家吼,這里是多年沒(méi)寫(xiě)教程的任?!@次不寫(xiě)c語(yǔ)言了,什么?c語(yǔ)言教程的坑這么多年還沒(méi)填完?不管不管,我現(xiàn)在就不寫(xiě)c了,誰(shuí)愛(ài)寫(xiě)誰(shuí)寫(xiě)去……
我會(huì)盡量貼合以前寫(xiě)c語(yǔ)言教程的風(fēng)格來(lái)寫(xiě)這一篇,也就是純文本文檔敲……
然后,讓我們從python開(kāi)始新世界吧
第一節(jié):程序語(yǔ)言的類別
語(yǔ)言的分類其實(shí)還是有蠻多種的
比如機(jī)器語(yǔ)言,匯編語(yǔ)言,高級(jí)程序語(yǔ)言
比如機(jī)器語(yǔ)言,匯編語(yǔ)言,面向過(guò)程語(yǔ)言,面向?qū)ο笳Z(yǔ)言
比如機(jī)器語(yǔ)言,匯編語(yǔ)言,標(biāo)記語(yǔ)言,編程語(yǔ)言,腳本語(yǔ)言
沒(méi)錯(cuò),不管怎么分,機(jī)器語(yǔ)言和匯編語(yǔ)言都是遺世而獨(dú)立的
機(jī)器語(yǔ)言就是計(jì)算機(jī)用的語(yǔ)言,很簡(jiǎn)單,0和1,我們地球人不用這個(gè)
匯編語(yǔ)言其實(shí)不是語(yǔ)言,它的正確名字應(yīng)該是cpu指令集匯編
參考一下知呼的答案:
處理器架構(gòu)就是處理器的硬件架構(gòu),稱為微架構(gòu)。是一堆硬件電路,去實(shí)現(xiàn)指令集所規(guī)定的操作運(yùn)算。
是的,指令集決定了處理器的架構(gòu),因?yàn)樘幚砥骷軜?gòu)就是用硬件電路實(shí)現(xiàn)指令集。但是具體用什么樣的處理器架構(gòu),設(shè)計(jì)怎樣的硬件電路,每個(gè)人設(shè)計(jì)的都可以不一樣。MIPS是一種采取精簡(jiǎn)指令集(RISC)的處理器架構(gòu),既有指令集,也有相應(yīng)的處理器架構(gòu)。大名鼎鼎的龍芯就是MIPS的。
匯編語(yǔ)言是用人類看得懂的語(yǔ)言來(lái)描述指令集。否則指令集的機(jī)器碼都是一堆二進(jìn)制數(shù)字,人類讀起來(lái)非常麻煩,但匯編是用類似人類語(yǔ)言的方式描述指令集,讀起來(lái)方便多了。
地址:https://www.zhihu.com/question/23474438
ok,讓我們接著往下
面向過(guò)程和面向?qū)ο笃鋵?shí)和語(yǔ)言本身關(guān)系不大,它更多的只是一種程序設(shè)計(jì)思路,雖然在語(yǔ)言的設(shè)計(jì)開(kāi)發(fā)過(guò)程中,本身會(huì)有偏向和著重點(diǎn),但是除了DSL,高級(jí)程序語(yǔ)言一般不會(huì)只針對(duì)某一方面,具體的在這里不再作表述,感興趣可以自己谷歌一下
我現(xiàn)在寫(xiě)的是python教程,python是一個(gè)腳本語(yǔ)言,所以我們直接說(shuō)第三個(gè)
標(biāo)記語(yǔ)言在我們的日常生活中非常常見(jiàn),比如你現(xiàn)在在看的網(wǎng)頁(yè),html的正式名稱就是超文本標(biāo)記語(yǔ)言(HyperText Markup Language)
通過(guò)標(biāo)記定義文本,然后在使用內(nèi)部的解釋器對(duì)被標(biāo)記的文本進(jìn)行簡(jiǎn)單的處理
具體的實(shí)現(xiàn)原理也可以參考我正在開(kāi)發(fā)的死亡蘿莉的富文本構(gòu)架:https://github.com/pokemonchw/dieloli/blob/master/pyera_engine/core/RichText.py
編程語(yǔ)言就是用來(lái)編寫(xiě)程序的語(yǔ)言
比起只關(guān)心最終表現(xiàn)的標(biāo)記語(yǔ)言,傳統(tǒng)的編程語(yǔ)言的開(kāi)發(fā)重心,更多的在考慮表現(xiàn)的過(guò)程上
比如說(shuō)你同樣是要在屏幕上繪制行星運(yùn)動(dòng)軌跡
你使用標(biāo)記語(yǔ)言,只要直接告訴電腦,這幾張行星圖片要怎么跑就ok
而你使用傳統(tǒng)的程序語(yǔ)言,更多的開(kāi)發(fā)重心是在模擬行星的運(yùn)動(dòng)過(guò)程,或者電腦要如何繪制圖片,以及繪制圖片的運(yùn)動(dòng)軌跡上
在這兩者之間的,就是我們的腳本語(yǔ)言
腳本語(yǔ)言同時(shí)具備標(biāo)記語(yǔ)言的特征(無(wú)需編譯)和傳統(tǒng)編程語(yǔ)言的能力(注重過(guò)程)
設(shè)計(jì)者將他預(yù)設(shè)的,有關(guān)這個(gè)腳本語(yǔ)言底層實(shí)現(xiàn)的部分,進(jìn)行了預(yù)編譯和封裝,我們執(zhí)行的腳本,只是在通過(guò)固定的接口對(duì)他們封裝的程序進(jìn)行調(diào)用
因而,在大多數(shù)時(shí)候,我們都需要定義對(duì)應(yīng)的解釋器,或者通過(guò)固定的程序去執(zhí)行這個(gè)腳本
比如py腳本只能通過(guò)python的解釋器去執(zhí)行,js離了瀏覽器也不能跑
但是,在底層被大量封裝,失去了對(duì)內(nèi)部的直接管理的同時(shí),我們也擁有了比標(biāo)記語(yǔ)言更多的可能性
比如說(shuō)我在死亡蘿莉中,用tk偽造了一個(gè)shell出來(lái),為了完成它,我自定義了監(jiān)聽(tīng)鍵鼠操作的接口,覆寫(xiě)了輸入框的部件,若是你使用標(biāo)記語(yǔ)言,這些都是無(wú)法做到的,這也是H5構(gòu)架除了html+CSS,還需要一個(gè)js的原因
第二節(jié):python語(yǔ)言的介紹
如上節(jié)所言,python是一門(mén)腳本語(yǔ)言
同樣的,它也有著它的解釋器
比如你在官網(wǎng)下載python3后安裝到本地的解釋器是cpython,顧名思義,它是由c語(yǔ)言實(shí)現(xiàn)的
cpython的項(xiàng)目地址:https://github.com/python/cpython
如你所見(jiàn),其實(shí)就是將c語(yǔ)言的函數(shù)實(shí)現(xiàn)的功能進(jìn)行集成,然后封裝成模塊,之后如同死亡蘿莉的富文本那樣,讀取你的py腳本,來(lái)對(duì)這些封裝的模塊進(jìn)行調(diào)用
需要注意的是,并非所有的程序語(yǔ)言都是從方便人類使用的角度進(jìn)行設(shè)計(jì)的,比如Brainfuck
它的helloworld是這樣的:
++++++++++[>+++++++>++++++++++>+++>+??-]>++.>++.>+.+++++++..+++.>++.?+++++++++++++++.>.+++.------.--------.>+.>.
回歸正題,python也有著許多的解釋器
比如從cpython之上擴(kuò)展增強(qiáng)而來(lái)的IPython
又或者用java實(shí)現(xiàn)的Jython
然后是pypy,它使用jit技術(shù),將python腳本直接編譯成機(jī)器碼,而非調(diào)用執(zhí)行c的函數(shù)
最后是微軟的IronPython,它是微軟在.net實(shí)現(xiàn)的編譯器,將py腳本編譯為.net的字節(jié)碼來(lái)執(zhí)行
什么?你說(shuō)這倆和上面對(duì)腳本語(yǔ)言的定義有沖突了?不不不,python的實(shí)現(xiàn)方案確實(shí)是以cpython為基準(zhǔn)的,這兩者是為了更快的速度(pypy),或者為了更好的兼容調(diào)用(.net的實(shí)現(xiàn)接口),而強(qiáng)行設(shè)計(jì)出來(lái)的額外技術(shù)棧
解釋器的選擇上各有優(yōu)劣,不過(guò)通常來(lái)說(shuō),我們都是以cpython為標(biāo)準(zhǔn)即可
第三節(jié):python語(yǔ)言的用途
作為一門(mén)地球人使用的程序語(yǔ)言,它的用途十分的廣泛
比較常見(jiàn)的,它被應(yīng)用于科學(xué)研究領(lǐng)域,什么?你說(shuō)julia?去去去
或者也有人用它來(lái)做服務(wù)器后臺(tái)……甚至是網(wǎng)站前端開(kāi)發(fā)……當(dāng)然,這就和用見(jiàn)鬼的ruby寫(xiě)網(wǎng)站一樣……
稍微大眾一些的,用它來(lái)寫(xiě)爬蟲(chóng),抓取網(wǎng)站數(shù)據(jù),比如一些常見(jiàn)的,從氣象臺(tái)的api獲取天氣數(shù)據(jù),從github上抓取別人的commit紀(jì)錄進(jìn)行推送,或者那些臭名昭著的廣告機(jī)……要不也可以用來(lái)抓取網(wǎng)易云音樂(lè)的歌單進(jìn)行推薦之類
不過(guò)這個(gè)教程……我不教你寫(xiě)爬蟲(chóng)……爬蟲(chóng)實(shí)在沒(méi)什么好講的,抓下數(shù)據(jù),寫(xiě)個(gè)正則,處理一下,完事……
當(dāng)然,它也可以用于深度學(xué)習(xí)……你問(wèn)我深度學(xué)習(xí)有什么用?阿爾法狗啦,或者預(yù)測(cè)股市啦,或者警方的人臉識(shí)別啦,甚至監(jiān)獄系統(tǒng)里,用來(lái)識(shí)別和預(yù)測(cè)罪犯可能存在的暴力行為(目前已經(jīng)有應(yīng)用,未來(lái)可能不再局限于監(jiān)獄,你懂的)
不過(guò),這個(gè)教程要給你講的只有一種,那就是它的本地應(yīng)用設(shè)計(jì)
第四節(jié):本教程預(yù)期的內(nèi)容和教學(xué)方式
比起以前寫(xiě)的c語(yǔ)言教程,這個(gè)教程會(huì)稍微深入一些
更多的說(shuō)明在程序的設(shè)計(jì)思路和編程經(jīng)驗(yàn)上
如你所見(jiàn),我曾經(jīng)是個(gè)c佬,后來(lái)去寫(xiě)了ruby,然后是js,c++,c#,java,gml,krl,gds,lua,各種各樣,雜七雜八……
所以我的思路不會(huì)太局限于某種語(yǔ)言特性,或者是寫(xiě)面向過(guò)程還是面向?qū)ο?/p>
同樣的,我可能也會(huì)存在著一些,為了自己的編寫(xiě)舒適度,無(wú)視語(yǔ)言特性和優(yōu)秀的解決方案,自己強(qiáng)行實(shí)現(xiàn)接口進(jìn)行調(diào)用的問(wèn)題
若是有人注意到了,也歡迎指出
在本教程中,我會(huì)從helloworld開(kāi)始,然后參考正在開(kāi)發(fā)的死亡蘿莉給大家進(jìn)行講解
并給出死亡蘿莉的設(shè)計(jì)和實(shí)現(xiàn)思路
也歡迎大家提出意見(jiàn),以及為死亡蘿莉貢獻(xiàn)代碼
以上
聯(lián)系方式:
老規(guī)矩,谷歌郵箱
pokemonchw@gmail.com