動機

Ref的文章看起來很有趣,還沒看過用這種方式探討PL的 所以就寫下自己的心得了

COBOL

記憶體就是一層又一層的嵌套 而記憶體就是這些不會變大也不會變小

就是C中的struct、union、array

控制可見度

大家都在同一塊地方,沒辦法控制可見度

如何access

因為只有primitive type所以用算的去看offset

序列化

都只有固定長度,所以容易序列化

LISP

只有pointer

十分的靈活

但

  1. 需要GC
  2. 容易type error
  3. 要管理pointer
  4. 占用大量記憶體

控制可見度

有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但是

  1. 只能是tree(所有有分leaf與node)
  2. 只有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 种内存模型