Skip to content

Latest commit

 

History

History
287 lines (258 loc) · 8.81 KB

5080-190459-000508 python的进化.sy.md

File metadata and controls

287 lines (258 loc) · 8.81 KB
show version enable_checker
step
1.0
true

python的进化

回忆

  • 上次在文件流中读写了二进制浮点
  • python文件流读写浮点数还是很方便的
  • 这就比他的前辈ABC语言强了好多
  • 为什么python对文件读写这么重视?🤔

失败

  • python的成功很大一部分原因来自于ABC的失败
  • ABC上面的读写都是来自于punch card纸带和磁带
  • 潜在的用户是数学家和科学家
  • 个人电脑开始出现
  • 个人电脑带了形形色色的软件包
  • 用来处理文件.其中有电子表格文件、字处理文件
  • ABC 的用户希望能用ABC写个小程序
  • 从他们的字处理文件读出一些数据
  • 然后把数据写到电子表格里
  • 或者反过来
  • 但是他们望洋兴叹
  • 只能怪 IO 的无能
  • 他们想处理的是数据
  • 但是数据却呆在文件里面
  • 而 ABC 里没有文件的概念
  • 这让事情复杂化了
  • 让 ABC 里的缺位的文件支持雪上加霜的是
  • 要扩展 ABC 语言并非易事

架构

  • 如果你这样想
    • 这个语言是用 C 实现的
    • 所以我们在它的标准库里面加个读文件的函数难道不就行了?
  • 那就大错特错了
  • ABC 是没有标准函数库一说的
  • 它有的是内置命令
  • 但是管这些命令的是
    • 分词
    • parser 语法分析器
    • 语义分析
    • 都相关
  • ABC 也有内置函数
  • 但是这些函数和运行时绑在了一起
  • ABC也不支持导入import二进制包
  • 要为这个语言的标准功能添砖加瓦简直是难如登天
  • 得从根上解决
  • 其实这是每个语言都会遇到的问题
    • 哪些是关键字
    • 哪些是内置函数
    • 哪些是引入的模块
    • 哪些东西在编译的时候解决
    • 哪些东西运行时解决
  • Guido 真的希望ABC成功
  • 为此他进行了一次旅行

一次旅行

  • 在1986年的时候
  • Guido 进行了一次旅行
  • 当时还没有internet
    • 只有usenet和email
    • 学语言靠的还是杂志和书
    • 书出出来半年过去了
    • 可能会有一些回馈
    • 很慢
    • Guido的同事 Lion Bear 出了一本书
    • 所有的希望都在这本书上
    • 但是后来的编辑反馈很慢
    • 后来又找了一家出版公司
    • 总之了最后就黄了
  • Guido带着九轨磁带
    • 取美国见网友了
    • 他只有3、4个美国网友的电话和email
    • 还有地址
    • 这些网友是对ABC有兴趣的网友
    • Guido主动去和他们联系
    • 本想着在unix上安装ABC语言环境
    • 也能看出 Guido 积极获取用户反馈
  • 这真的很疯狂
  • 但是到了之后
    • 才发现必须得有特定型号的机器型号
    • 特定的unix版本
    • 特定版本的编译器
    • 虽然用的都是可移植的c
    • 但是当时的c编译器是各个硬件厂商自己做的
    • 本身也有问题
    • 没有预料到的硬件特性
  • ABC当时在美国没有机会运行
  • Guido很痛苦
  • 1987年 cwi 决定取消 ABC项目

反思

  • ABC 没有读写文件的原因是
    • cpu的架构不统一
    • 平台系统不统一
    • 读写方式不统一
      • 读写硬件不统一
      • 没有统一的驱动方式
    • 不是写一个c的函数就解决的问题
    • 因为没有一个可以调用的写好的c文件读写库
  • 潜在用户确有数据的需求
    • 科学方面的大量读写工作
    • 用户需要有自己的数据
    • 包括数据源和数据结果
  • python一开始就把读写文件作为一个核心
    • 不用引入任何的包
    • 直接open
    • 这是我见过最快速的文件打开方式
    • 从编写源程序的角度来说
    • 最快速的
  • 这无疑满足了用户需求
  • 也是后来python巨大成功的原因

ameoba

  • ABC项目黄了之后
  • 另一个程序员离开了cwi
  • Guido 开始新的工作
  • Guido 继续在tenenbaums的项目组里面工作
  • 这次的项目是Ameoba
    • 一个分布式的操作系统

图片描述

  • 单细胞有机体
  • 没有器官
  • 赤裸、柔软
  • 因可向各个方向伸出伪足
  • 以致体形不定而得名
  • 伪足除具行动的功能外
  • 还能摄食

系统

  • 阿米巴虫中的一种叫做黏菌
  • 黏菌饿了的话
  • 就会自我分裂出自身
  • 然后四散去寻找食物
  • 找到了之后
  • 还可以涌现emergence出一条食物传输的通道
  • 有点类似我们的血管和毛细血管
  • 分给其他黏菌
  • 这有点像计算机分出很多虚拟机
  • 然后跨计算机的虚拟机又构成集群的感觉
  • 大概这也是这个计划叫做阿米巴的原因
  • 经济学上也有类似的叫做阿米巴经营
  • 京瓷公司认为
    • 现场有神灵
    • 答案永远在现场
    • 把公司分为一个个的“阿米巴”小集体
    • 各个小集体就像是一家家的中小企业
    • 在保持活力的同时
    • 以“单位时间核算”这种独特的经营指标为基础
    • 把大公司的规模和小公司的好处统揽于一身。

阿米巴系统

  • 阿米巴系统是一个微内核
  • 基于以太网
  • 实现了类似于因特网的协议
  • 阿米巴系统之间可以互相通信
  • 当时已经有了unix 系统
  • ameoba 系统和 unix 之间可以通信
  • 有很多关于登录的理论
  • 但是没有一个真正的实现
  • Guido用c制作type磁带备份系统
  • 这个时候Guido 已经有了10-15年的c语言经验
  • 这时候的需求是开发登录系统
  • 他想用一种类似于ABC语言的东西开发这个登录系统
  • 这个时候是88、89年
  • 其实ABC的代码比86年的时候又有了一些进化
  • usenet上面也有一些贡献
  • 这也就是python开始的地方
  • Guido开始用业余时间用c写python这门语言
  • 早年间的概念是作为Amoeba系统的软件开发包存在的
  • 文件读写一开始就在python的内置的核心函数库
  • 还可以直接和Amoeba系统的网络api进行通信

制作过程

  • 最早的是词法分析器lexical analyser
  • 因为他是语法分析parser的前提
  • 当时有一些现成的东西
  • 但是靠不住
  • Guido开始自己写
  • 然后是解释器和一些类库
  • 总共花了3-4个月的时间

命名

  • ABC就很像American Business Consulting Group
  • 太大众化了
  • 需要一个能够获得注意力
  • 不长也不短的名字
  • 不想要来自希腊神话的名字
  • 也不想太过学术化
  • Python能让看过那部剧的人感到共情
  • 熟悉但不是特别常用的单词
  • 能够带来特定的态度
  • 就这样决定了

定位

  • 脚本shell语言并不是一门语言
  • 而是一些列命令的顺序执行流程
  • 会调用具体的二进制程序去处理相关的文件
  • 原本是敲三个命令
  • 现在变成把这三个命令放到一个脚本里面
  • 他只是依次执行命令的批处理
  • 但是比如检查输入输出是否存在之类的东西
  • 还是要靠程序本身
  • 今天的bash和zsh也一样
  • python可以自己定义读写的功能
  • 比如一行一行读之类的
  • c语言效率高
  • 可很好地操作底层硬件
  • 但是开发成本太高了
  • 当时的定位就是在c和脚本shell之间的桥梁
  • 既有shell的便捷也有 c语言的超级控制能力

吸取

  • ABC 并非一无是处

图片描述

  • ABC也有个游乐场可以交互
  • 比如用缩进控制语句组范围
    • 比如list和dictionary的数据结构
    • 字符串和数字的不可变
      • 这里指的不是字符串变量和数字变量
  • 不用指出所用数据类型,系统会自动辨认

排斥

  • ABC 也有很多缺陷

图片描述

  • 所有字母都大写
  • 关键字、函数名 大写
  • 变量和表达式小写
  • Guido不喜欢那些大写字母
  • 也难怪从小就是反战组织
  • 而且看的也是逆向思维的喜剧
  • 对于高大上有一种天然的排斥
  • 大写就像大喊大叫
  • 是早年间大型机那种很落伍的写法
  • 而相对来说 unix 都是小写
  • Guido选择unix的方式
  • ABC的列表也有缺陷
    • 都是必须排好序的
    • 对于颜色可以很合理
    • 但是对于文件的行就不合适
  • ABC还有个问题是他想干一切
    • 系统
    • 编程环境
    • 系统存储
    • 编辑器
  • unix哲学是
    • small tools that do things well
    • and work very well with other small tools that do different things.

读写的不同

  • ABC有自己的电子表格格式
  • 如果读到一个电子表格需要转化到ABC自己的数据结构
  • 很麻烦
  • python 直接读文件
  • 然后把电子表格解码就好了
  • 至于解码的代码
  • 社区会有人写出来作为一个库来存在
  • ABC 想从上而下统治一切
  • python 想打一场从下而上的人民战争
  • 拓扑的物理连接确实改变了社会科技的方方面面

总结

  • python的成功不是偶然的
  • 新的嫩芽一定是发于陈腐的腐殖质
  • 他吸取了ABC好的一面
  • 也吸取了shell和c好的一面
  • 他可以很方便地操作文件
  • 其实我们也可以做一个拷贝程序?🤔
  • 下次再说👋