Past.0

序:

Hello大家吼,这里是多年没写教程的任桑~~~这次不写c语言了,什么?c语言教程的坑这么多年还没填完?不管不管,我现在就不写c了,谁爱写谁写去……

我会尽量贴合以前写c语言教程的风格来写这一篇,也就是纯文本文档敲……

然后,让我们从python开始新世界吧

第一节:程序语言的类别

语言的分类其实还是有蛮多种的

比如机器语言,汇编语言,高级程序语言

比如机器语言,汇编语言,面向过程语言,面向对象语言

比如机器语言,汇编语言,标记语言,编程语言,脚本语言

没错,不管怎么分,机器语言和汇编语言都是遗世而独立的

机器语言就是计算机用的语言,很简单,0和1,我们地球人不用这个

汇编语言其实不是语言,它的正确名字应该是cpu指令集汇编

参考一下知呼的答案:

处理器架构就是处理器的硬件架构,称为微架构。是一堆硬件电路,去实现指令集所规定的操作运算。

是的,指令集决定了处理器的架构,因为处理器架构就是用硬件电路实现指令集。但是具体用什么样的处理器架构,设计怎样的硬件电路,每个人设计的都可以不一样。MIPS是一种采取精简指令集(RISC)的处理器架构,既有指令集,也有相应的处理器架构。大名鼎鼎的龙芯就是MIPS的。

汇编语言是用人类看得懂的语言来描述指令集。否则指令集的机器码都是一堆二进制数字,人类读起来非常麻烦,但汇编是用类似人类语言的方式描述指令集,读起来方便多了。

地址:https://www.zhihu.com/question/23474438

ok,让我们接着往下

面向过程和面向对象其实和语言本身关系不大,它更多的只是一种程序设计思路,虽然在语言的设计开发过程中,本身会有偏向和着重点,但是除了DSL,高级程序语言一般不会只针对某一方面,具体的在这里不再作表述,感兴趣可以自己谷歌一下

我现在写的是python教程,python是一个脚本语言,所以我们直接说第三个

标记语言在我们的日常生活中非常常见,比如你现在在看的网页,html的正式名称就是超文本标记语言(HyperText Markup Language)

通过标记定义文本,然后在使用内部的解释器对被标记的文本进行简单的处理

具体的实现原理也可以参考我正在开发的死亡萝莉的富文本构架:https://github.com/pokemonchw/dieloli/blob/master/pyera_engine/core/RichText.py

编程语言就是用来编写程序的语言

比起只关心最终表现的标记语言,传统的编程语言的开发重心,更多的在考虑表现的过程上

比如说你同样是要在屏幕上绘制行星运动轨迹

你使用标记语言,只要直接告诉电脑,这几张行星图片要怎么跑就ok

而你使用传统的程序语言,更多的开发重心是在模拟行星的运动过程,或者电脑要如何绘制图片,以及绘制图片的运动轨迹上

在这两者之间的,就是我们的脚本语言

脚本语言同时具备标记语言的特征(无需编译)和传统编程语言的能力(注重过程)

设计者将他预设的,有关这个脚本语言底层实现的部分,进行了预编译和封装,我们执行的脚本,只是在通过固定的接口对他们封装的程序进行调用

因而,在大多数时候,我们都需要定义对应的解释器,或者通过固定的程序去执行这个脚本

比如py脚本只能通过python的解释器去执行,js离了浏览器也不能跑

但是,在底层被大量封装,失去了对内部的直接管理的同时,我们也拥有了比标记语言更多的可能性

比如说我在死亡萝莉中,用tk伪造了一个shell出来,为了完成它,我自定义了监听键鼠操作的接口,覆写了输入框的部件,若是你使用标记语言,这些都是无法做到的,这也是H5构架除了html+CSS,还需要一个js的原因

第二节:python语言的介绍

如上节所言,python是一门脚本语言

同样的,它也有着它的解释器

比如你在官网下载python3后安装到本地的解释器是cpython,顾名思义,它是由c语言实现的

cpython的项目地址:https://github.com/python/cpython

如你所见,其实就是将c语言的函数实现的功能进行集成,然后封装成模块,之后如同死亡萝莉的富文本那样,读取你的py脚本,来对这些封装的模块进行调用

需要注意的是,并非所有的程序语言都是从方便人类使用的角度进行设计的,比如Brainfuck

它的helloworld是这样的:

++++++++++[>+++++++>++++++++++>+++>+««-]>++.>++.>+.+++++++..+++.>++.«+++++++++++++++.>.+++.------.--------.>+.>.

回归正题,python也有着许多的解释器

比如从cpython之上扩展增强而来的IPython

又或者用java实现的Jython

然后是pypy,它使用jit技术,将python脚本直接编译成机器码,而非调用执行c的函数

最后是微软的IronPython,它是微软在.net实现的编译器,将py脚本编译为.net的字节码来执行

什么?你说这俩和上面对脚本语言的定义有冲突了?不不不,python的实现方案确实是以cpython为基准的,这两者是为了更快的速度(pypy),或者为了更好的兼容调用(.net的实现接口),而强行设计出来的额外技术栈

解释器的选择上各有优劣,不过通常来说,我们都是以cpython为标准即可

第三节:python语言的用途

作为一门地球人使用的程序语言,它的用途十分的广泛

比较常见的,它被应用于科学研究领域,什么?你说julia?去去去

或者也有人用它来做服务器后台……甚至是网站前端开发……当然,这就和用见鬼的ruby写网站一样……

稍微大众一些的,用它来写爬虫,抓取网站数据,比如一些常见的,从气象台的api获取天气数据,从github上抓取别人的commit纪录进行推送,或者那些臭名昭著的广告机……要不也可以用来抓取网易云音乐的歌单进行推荐之类

不过这个教程……我不教你写爬虫……爬虫实在没什么好讲的,抓下数据,写个正则,处理一下,完事……

当然,它也可以用于深度学习……你问我深度学习有什么用?阿尔法狗啦,或者预测股市啦,或者警方的人脸识别啦,甚至监狱系统里,用来识别和预测罪犯可能存在的暴力行为(目前已经有应用,未来可能不再局限于监狱,你懂的)

不过,这个教程要给你讲的只有一种,那就是它的本地应用设计

第四节:本教程预期的内容和教学方式

比起以前写的c语言教程,这个教程会稍微深入一些

更多的说明在程序的设计思路和编程经验上

如你所见,我曾经是个c佬,后来去写了ruby,然后是js,c++,c#,java,gml,krl,gds,lua,各种各样,杂七杂八……

所以我的思路不会太局限于某种语言特性,或者是写面向过程还是面向对象

同样的,我可能也会存在着一些,为了自己的编写舒适度,无视语言特性和优秀的解决方案,自己强行实现接口进行调用的问题

若是有人注意到了,也欢迎指出

在本教程中,我会从helloworld开始,然后参考正在开发的死亡萝莉给大家进行讲解

并给出死亡萝莉的设计和实现思路

也欢迎大家提出意见,以及为死亡萝莉贡献代码

以上

联系方式:

老规矩,谷歌邮箱

[email protected]

你可能感兴趣的:(Past.0)