2016-03-19 6 views
3

Как я понимаю, у BASIC были номера строк, потому что в то время вам приходилось использовать редактор строк для ввода вашей программы. Это позволило вам сделать что-то вроде этого:BASIC, как строки сохранялись в памяти?

20 END 
10 PRINT "HELLO WORLD" 

Эта программа будет печатать "HELLO WORLD". Мой вопрос в том, как BASIC позволяет вам вводить строки таким образом? Как они хранились в памяти? Я полагаю, что это была карта номеров строк и указателей на линии, которые обновлялись каждый раз, когда вы вводили строку. Но эту карту нужно было бы отсортировать перед запуском команды LIST/RUN. Это так? Если нет, то как именно BASIC хранит команды в памяти?

+2

Я действительно не знаю, но предположим, что они будут использовать что-то вроде карты на основе BST, которая сортируется автоматически. То есть, элементы вставлены таким образом, что карта всегда сортируется. – sepp2k

+0

@ sepp2k, спасибо! BST был изобретен в шестидесятых годах, и Microsoft BASIC был создан в 75, так что, возможно, это то, что они использовали. – Victor

ответ

4

Я предполагаю, что каждая базовая реализация использовала особый подход.

Основой, с которой я вырос, был 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 

Несмотря на то, что линии, где связанный список, основной интерпретатор не воспользоваться этим. Каждая строка была физически сохранена в линейной последовательности.

Как вы можете себе представить, вставка и удаление линий в середине существующей программы представляла собой большую работу. Если новые строки, вставленные между существующими, последующие строки были перемещены в памяти, чтобы освободить место для нового (-ов). Аналогично, удаление средней линии линий приведет к тому, что последующие строки будут перемещены вниз в памяти, чтобы выполнить пространство, оставшееся от удаленной (-ых). Это перемещение вверх и вниз по памяти означало, что все эти ссылки должны обновляться для каждой строки.

+0

Спасибо большое! Я начал подозревать, что какая-то версия BASIC должна использовать связанные списки, поскольку они очень логичны и (я полагаю) достаточно эффективны для задачи – Victor