Vic*_*tor 3 basic language-design
据我了解,BASIC 有行号,因为当时您必须使用行编辑器来输入程序。它允许你做这样的事情:
20 END
10 PRINT "HELLO WORLD"
Run Code Online (Sandbox Code Playgroud)
该程序将打印"HELLO WORLD". 我的问题是 BASIC 如何允许您以这种方式输入行?它们是如何存储在内存中的?我想这是一个行号和指向行本身的指针的映射,每次输入一行时都会更新。LIST但在运行/命令之前必须对该映射进行排序RUN。是这样吗?如果不是,那么 BASIC 到底是如何在内存中存储命令的呢?
我猜每个基本实现都使用了特定的方法。
我成长过程中使用的 Basic 是在 MSX 计算机上运行的 Microsoft Basic。根据我当时如饥似渴地阅读的《MSX红皮书》,MS-Basic实际上使用了线性列表。
每个 Basic 行都存储为指向下一行的指针,后跟二进制形式的实际行号,后跟该行的标记化版本,最后跟一个空字符;像这样的东西:
Address | Content
8000 | 8009 -- next line
8002 | 10 -- this line number
8004 | .... -- opcodes for each instruction in the line
... | ...
8007 | ...
8008 | Null -- terminator
8009 | ... -- the next line
Run Code Online (Sandbox Code Playgroud)
尽管这些行是链接列表,但基本解释器并没有利用这一点。每行物理上都以线性连续的方式存储。
正如您可以想象的那样,在现有程序中插入和删除行需要大量工作。如果在现有行之间插入新行,则后续行将在内存中向上移动,以为新行腾出空间。同样,在程序中删除行将导致后续行在内存中向下移动,以填充已删除行留下的空间。这种在内存中上下移动意味着每移动一行就必须更新所有这些链接。