Я предполагаю, что каждая базовая реализация использовала особый подход.
Основой, с которой я вырос, был Microsoft Basic, работающий на компьютере MSX. Согласно «Красной книге MSX», которую я читал с жадностью в то время, MS-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
Несмотря на то, что линии, где связанный список, основной интерпретатор не воспользоваться этим. Каждая строка была физически сохранена в линейной последовательности.
Как вы можете себе представить, вставка и удаление линий в середине существующей программы представляла собой большую работу. Если новые строки, вставленные между существующими, последующие строки были перемещены в памяти, чтобы освободить место для нового (-ов). Аналогично, удаление средней линии линий приведет к тому, что последующие строки будут перемещены вниз в памяти, чтобы выполнить пространство, оставшееся от удаленной (-ых). Это перемещение вверх и вниз по памяти означало, что все эти ссылки должны обновляться для каждой строки.
Я действительно не знаю, но предположим, что они будут использовать что-то вроде карты на основе BST, которая сортируется автоматически. То есть, элементы вставлены таким образом, что карта всегда сортируется. – sepp2k
@ sepp2k, спасибо! BST был изобретен в шестидесятых годах, и Microsoft BASIC был создан в 75, так что, возможно, это то, что они использовали. – Victor