show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次在文件流中读写了二进制浮点
- 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巨大成功的原因
- 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好的一面
- 他可以很方便地操作文件
- 其实我们也可以做一个拷贝程序?🤔
- 下次再说👋