序:
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开始,然后参考正在开发的死亡萝莉给大家进行讲解
并给出死亡萝莉的设计和实现思路
也欢迎大家提出意见,以及为死亡萝莉贡献代码
以上
联系方式:
老规矩,谷歌邮箱