编程语言设计,编程哲学
机器代码 - 汇编代码 - 高级语言
语言处在 机器高效执行
与 人类可读性
的平衡点最好
json > yaml > toml
json有{},可以压缩空格;规则简单;存在较少的转义号
yaml去掉{},改用空格层级(类似python);规则较复杂
静态语言:rust > zig > C# > JAVA > C++ > C
rust 用{},更及时释放内存;报错智能,适合代码协作
zig 的数据类型简单替换,便可跨平台编译;用macro {}代替了写法奇怪的宏,像写正常代码一样
erlang, elixir 则有目前最好的高并发模型,基于函数式编程 https://github.com/discord/sorted_set_nif
c#语法糖
JAVA引入类
c++引入类
c最原始的语言
动态语言:python > golang > js
只有动态语言才有机会集成到浏览器中。
python 语法简单,函数模块设计友善,自带库功能强大(类比C)
golang
js 是html的官方支持脚本语言
三体合一
html:静态文档,数据访问层
css:静态样式,表示层
js: 动态语言,业务逻辑层
我不认为安卓、flutter那套绘制UI的方式很好,牵扯到生命周期,比html开发底层许多。
下一代浏览器可以独立成一个OS
现代浏览器提供了很多硬件访问的API接口给js
设计OS就是设计浏览器
再联想一下3D化:
<mesh>
</mesh>
如何设计一门好语言
- 词频统计,将人们最常用的词压缩(哈夫曼编码的思想)。可以通过分析github上的代码,来提取出常用的函数名
- 静态动态分离:静态预编译,动态运行时执行
...
- 树状文件管理:传统k-v模型,k可以是文件夹/文件,像json可嵌套;v是value。
- 文件内文档型:</标记>模型
I/O 抽象
Linux: everything is file
@长风:这种思想是硬件底层所支持的,对于所有的I/O设备,对他们进行控制只是数据的读入和读出,早先的CPU的I/O指令只有两个in和out,这很容易统一。对于CPU和内存来说,外部设备没有差别。我们要做的就是将数据放入一块内存区域,再将这块区域数据放入数据总线,外部设备接收这些数据。文件描述符的作用就是指向这块内存区域。
并不是操作系统将设备隐藏起来,而是计算机的体系结构已经将设备隐藏起来了。
https://www.zhihu.com/question/21040222
- 文件:固体,偏静态,存在读写者抢占问题
- 管道:液体,偏动态,I/O变成流体,A流向B。网络出现后需要解决通信问题,方便流媒体一播多
- ?:气体
面向文档,文件和管道都用得到。