Past.0

序:

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容