動機

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 种内存模型