Многие микрокомпьютеры имели интерпретатор BASIC в ПЗУ, который запускался при загрузке. Проблема заключалась в том, что не было текстового редактора или файловой системы, о которых можно было бы говорить. У вас была интерактивная подсказка, чтобы все сделать. Если вы хотели вставить строку кода, вы просто набирали ее, начиная с номера строки. Он вставит его в правильное место в вашем коде. например:
>10 print "hello" >30 goto 10 >20 print "world" >list 10 PRINT "hello" 20 PRINT "world" 30 GOTO 10 >
(в этом примере> - это приглашение BASIC)
Если вы хотите стереть строку, введите что-то вроде ERASE 20
.
Некоторые действительно необычные системы давали вы редактор строк (например, EDIT 10
)
И если вы не планировали свои номера строк и закончились (как мне вставить строку между 10 и 11?), некоторые системы дали вам команда RENUM
, которая изменит нумерацию вашего кода (и соответствующим образом скорректирует GOTO
и GOSUB
).
Веселые времена!
IIRC, номера строк в основном использовались как метки для операторов GOTO и GOSUB, поскольку в некоторых (большинстве?) Разновидностей BASIC не было возможности пометить раздел кода.
Номера строк использовались в потоке управления. Не было именованных подпрограмм. Вам нужно было использовать GOSUB 60
, например, для вызова подпрограммы, начиная со строки 60.
В вашем обновлении не все языки имели метки, но все языки имели номера строк одновременно. Когда-то все было перфокартами. BASIC был одним из первых интерактивных языков, на котором можно было что-то набрать и сразу получить ответ. Номера строк по-прежнему оставались современной технологией.
Наклейки - это дополнительные расходы. Вы должны отслеживать корреляцию между символической меткой и кодом или данными, к которым она относится. Но если каждая строка имеет номер строки (и если все операторы передачи потока управления всегда относятся к началу строки), то вам не нужна отдельная таблица символов.
Также имейте в виду, что оригинальные интерпретаторы BASIC не нуждались в таблице символов для переменных: было 26 переменных с именами A – Z. Некоторые из них были сложными и имели ан-цин. Некоторые из них стали очень навороченными и добавили различие между строками, целыми числами и числами с плавающей запятой, добавив «$» или «%» после переменной. Но никакой таблицы символов не требовалось.
Они также использовались редактором - то есть вы сказали:
edit 100
для редактирования строки 100.
Номера строк были ЧАСТЬЮ языка, в некоторых ОЧЕНЬ ранних версиях даже ОС была просто этими простыми строками. ВСЕ, что у вас было, - это манипулировать одной строкой за раз. Попробуйте написать систему учета, используя 1–4 КБ программных файлов и сегментируя ее по размеру, чтобы добиться результата. Для редактирования вы использовали номера строк, чтобы указать, что вы редактировали. Итак, если вы введете:
10 PRINT "howdy"
20 GOTO 10
10 PRINT "WOOPS"
15 PRINT "MORE WOOPS"
20
RUN
ВЫ БУДЕТЕ ПОЛУЧИТЬ:
WOOPS
MORE WHOOPS
Пробел 20 эффективно удалит эту строку.
Во многих случаях он вводился в командной строке (или был в моем старом Commodore 64), поэтому текстовый редактор мог быть не всегда, а если и был, то он был довольно простым.
Кроме того, вам нужно будет делать GOTO и т.п., а также вставлять строки между другими.
то есть:
10 PRINT "HELLO"
20 GOTO 10
15 PRINT " WORLD"
где он будет логическим 10 15 20
В BASIC номера строк указывают последовательность.
Кроме того, многие старые редакторы были не для файлов, а просто для строк («линейные редакторы», например, ed, стандартный редактор ). Пронумеровав их таким образом, вы знали, над какой линией вы работаете.
Они использовались как метки для GOTO и GOSUB
Вот так:
10 PRINT "HELLO WORLD"
20 GOTO 10
В некоторых ранних версиях BASIC не было именованных меток
Они также требовались, если вы хотели вставить строку между двумя существующими строками кода, потому что в ранние времена у вас не было полноценных текстовых редакторов. Все нужно было набирать в "интерактивном" интерпретаторе.
Поэтому, если вы набирали:
15 PRINT "AND THE UNIVERSE"
Программа становилась:
10 PRINT "HELLO WORLD"
15 PRINT "AND THE UNIVERSE"
20 GOTO 10
Когда у вас заканчивались номера строк, вы могли запустить инструмент "перенумерации", чтобы перенумеровать все строки в вашей программе, но в самые ранние дни Commodore 64 и других домашних компьютеров, у нас даже не было этого, поэтому вам приходилось перенумеровывать вручную. Поэтому в номерах строк нужно было оставлять промежутки в 10 или более строк, чтобы можно было легко добавлять строки между ними.
Если вы хотите попробовать интерпретатор Commodore 64, посмотрите этот эмулятор C64, написанный на Flash: http://codeazur.com.br/stuff/fc64_final/ (установка не требуется)
Первоначальная нумера строк BASIC фактически была неотъемлемой частью языка и использовалась для управления потоком.
Команды GOTO и GOSUB будут принимать строку и использовать ее для потока управления. Это было распространено тогда (хотя сейчас это не рекомендуется).
Это были метки для операторов, так что вы могли GOTO
номер строки. Количество операторов не обязательно должно совпадать с номерами физических строк в файле.
На C64 даже не было настоящего редактора (по крайней мере, встроенного). Чтобы отредактировать часть программы, вы делали что-то вроде LIST 100-200, а затем вы могли редактировать только те строки, которые в данный момент отображались на экране (никакой прокрутки вверх!)
.Простой google показывает, что об этом говорит википедия:
Номера строк были обязательным элементом синтаксиса в некоторых старых языках программирования, таких как GW-BASIC.[2] Основная причина этого в том, что в большинстве операционных систем того времени отсутствовали интерактивные текстовые редакторы; поскольку интерфейс программиста обычно ограничивался строковым редактором, номера строк обеспечивали механизм, с помощью которого можно было ссылаться на определенные строки в исходном коде для редактирования, и с помощью которого программист мог вставить новую строку в определенное место. Номера строк также обеспечивали удобное средство различения между кодом, который должен быть введен в программу, и командами, которые должны быть выполнены сразу после ввода пользователем (которые не имеют номеров строк).
Как отмечали другие, эти номера строк использовались как часть подпрограмм.
Конечно, есть причина, по которой так больше не делается. Представьте, что вы говорите GOTO 20 в строке 10, а затем понимаете, что вам нужно написать еще 10 строк кода после строки 10. Внезапно вы натыкаетесь на 20, поэтому вам нужно либо сместить подпрограмму дальше (на более высокие числа) и изменить значение GOTO, либо написать другую подпрограмму, которая переходит дальше по коду.
Другими словами, это стало кошмаром настоящего спагетти-кода, и поддерживать его неинтересно.
Некоторые редакторы имели только режим "перезаписи" и не имели режима "вставки". Это делало редактирование существующего кода крайне болезненным. Однако, добавив эту функцию нумерации строк, вы могли исправлять существующий код из любой точки файла:
100 PRINT "Broken Code"
200 PRINT "Foobar"
...
101 patch the broken code
102 patch more broken code
Поскольку номера строк не обязательно должны быть упорядочены в файле.
В те времена все языки имели порядковые номера, все было на перфокартах. На каждой карточке была одна строка. Колоды карточек составляли вашу программу.
Когда вы сбрасывали карточки, вы клали их в сортировщик карточек, который использовал эти порядковые номера.
И, конечно, на них ссылались конструкции потока управления.