動機
Ref的文章看起來很有趣,還沒看過用這種方式探討PL的 所以就寫下自己的心得了
COBOL
記憶體就是一層又一層的嵌套 而記憶體就是這些不會變大也不會變小
就是C中的struct、union、array
控制可見度
大家都在同一塊地方,沒辦法控制可見度
如何access
因為只有primitive type所以用算的去看offset
序列化
都只有固定長度,所以容易序列化
LISP
只有pointer
十分的靈活
但
- 需要GC
- 容易type error
- 要管理pointer
- 占用大量記憶體
控制可見度
有pointer才能access,可見度很好控管
如何access
用pointer一路走過去
序列化
序列化不容易做,想想cycle-reference要怎麼辦? 如果有共用的部分要怎麼處理?
FORTRAN
世界只剩下array
有點像COBOL的折衷,因為可以用array的格子來表示結構或是union 但是不同於COBOL我們可以有很多塊array
控制可見度
因為array可以拆成好幾份,來保持不同的可見度
如何access
array加index
序列化
序列化容易做
其他
Pipe
當世界只剩下queue
有點像FORTRAN但是沒有index
這個Model經常用在concurrent上,可以看go的channel或是pi calculus
File&folder
有點像LISP但是
- 只能是tree(所有有分leaf與node)
- 只有leaf才能放資料
如何表示attribute
folder+many files (ex: /proc/
SQL
基本上就是COBOL加LISP key是pointer column從COBOL來 每次select都是新的matrix(FORTURN)
Ref
The memory models that underlie programming languages 编程语言中的 6 种内存模型