Почему BASIC имел нумерованные строки? [дубликат]

Возможные Дубликаты:
почему мы вообще беспокоились о номерах строк?

мне интересно, почему ранние версии базового языка программирования имели нумерацию строк, как в:

42 PRINT "Hello world!"

текстовые редакторы тогда не имели нумерации строк?

EDIT: Да, я знаю, что они используются для GOTOs, но почему? Я имею в виду, что иметь ярлыки было слишком дорого?

15 ответов


у многих микрокомпьютеров был базовый интерпретатор в ПЗУ, который начинался при загрузке. Проблема заключалась в том, что не было текстового редактора или файловой системы. У вас был интерактивный запрос, чтобы сделать все через. Если вы хотите вставить строку кода, Вы просто набираете ее, начиная с номера строки. Он вставит его в правильное место в вашем коде. е.г:

>10 print "hello"
>30 goto 10
>20 print "world"
>list
10 PRINT "hello"
20 PRINT "world"
30 GOTO 10
>

(в этом примере > является основным приглашением)

если бы вы хотели стереть строку, вы бы введите что-то вроде ERASE 20. Некоторые действительно причудливые системы дали вам редактор строк (т. е. EDIT 10) И если вы не планировали свои номера строк и закончились (как вставить строку между 10 и 11?) некоторые системы дали вам RENUM команда, которая будет перенумеровать ваш код (и настроить GOTOs и GOSUBs соответственно).

Веселые Времена!


исходная базовая нумерация строк была фактически неотъемлемой частью языка и использовалась для управления потоком.

команды GOTO и GOSUB возьмут строку и используют ее для потока управления. Это было распространено тогда (хотя сейчас это обескуражено).


они были использованы как ярлыки для Гото и ГОСУБ

такой:

10 PRINT "HELLO WORLD"
20 GOTO 10

в некоторых ранних базовых версиях не было именованных меток

Они также были необходимы, если вы хотели вставить строку между 2 существующими строками кода, потому что в первые дни у вас не было полнотекстовых редакторов. Все должно было быть напечатано в "интерактивном" интерпретаторе.

Итак, если вы набрали:

15 PRINT "AND THE UNIVERSE"

программа станьте:

10 PRINT "HELLO WORLD"
15 PRINT "AND THE UNIVERSE"
20 GOTO 10

когда у вас закончились номера строк, вы можете запустить инструмент "перенумеровать", чтобы перенумеровать все строки в вашей программе, но в самые первые дни Commodore 64 и других домашних компьютеров у нас даже не было этого, поэтому вам придется перенумеровать вручную. Вот почему вы должны были оставить пробелы 10 или более в номерах строк, чтобы вы могли легко добавлять строки между ними.

Если вы хотите попробовать интерпретатор Commodore 64, проверьте этот эмулятор C64, написанный в Флэш: http://codeazur.com.br/stuff/fc64_final/ (приложение)


в BASIC номера строк указывают последовательность.

кроме того, многие старые редакторы были не для файлов, а просто строки ("линейные Редакторы", например ed, стандартный редактор). Пронумеровав их таким образом, вы знали, над какой линией работаете.


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

когда вы уронили карты, вы положили их в сортировщик карт, который использовал эти порядковые номера.

и, конечно же, на них ссылались конструкции потока управления.


простой google показывает, что Википедия должна сказать об этом:

номера строк были обязательным элементом синтаксиса в некоторых старых языках программирования, таких как GW-BASIC.[2] Основная причина этого заключается в том, что большинство операционных систем в то время не имели интерактивных текстовых редакторов; поскольку интерфейс программиста обычно ограничивался редактором строк, номера строк обеспечивали механизм, с помощью которого конкретные строки в исходном коде могли быть ссылка для редактирования, и с помощью которой программист может вставить новую строку в определенной точке. Номера строк также обеспечивали удобное средство различения между кодом, вводимым в программу, и командами, выполняемыми немедленно при вводе пользователем (которые не имеют номеров строк).


на C64 даже не было реального редактора (по крайней мере, встроенного). Чтобы отредактировать часть программы, вы должны сделать что-то вроде списка 100-200, а затем вы сможете редактировать только те строки, которые в настоящее время отображаются на экране (без прокрутки вверх!)


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


номера строк использовались в потоке управления. Именованных подпрограмм не было. Вы должны были использовать GOSUB 60, например, для вызова подпрограммы, начинающейся с строки 60.


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

метки are дополнительные расходы. Вы должны отслеживать корреляцию между символической меткой и кодом или данными, на которые она ссылается. Но если каждая строка имеет номер строки (и если все операторы передачи потока управления всегда ссылаются на начало строки), то вам не нужна отдельная таблица символов.

также имейте в виду, что оригинальные базовые интерпретаторы не нуждались в таблице символов для переменных: было 26 переменных с именем Некоторые были изощренными и имели Ан-ЗН. Некоторые стали очень причудливыми и добавили различие между строкой, целым числом и плавающей точкой, добавив "$" или "%" после переменной. Но таблица символов не требовалась.


IIRC, номера строк в основном использовались в качестве меток для операторов GOTO и GOSUB, так как в некоторых (большинство?) вкусы BASIC не было никакого способа, чтобы обозначить раздел кода.


они также использовались редактором-то есть вы сказали:

edit 100

редактировать строки 100.


как указывали другие, эти номера строк использовались как часть подпрограмм.

конечно, есть причина, по которой этого не сделали. Представьте, что вы говорите GOTO 20 на строке 10, а затем позже понимаете, что вам нужно написать еще 10 строк кода после строки 10. Внезапно вы сталкиваетесь с 20, поэтому вам нужно либо переместить подпрограмму дальше (более высокие числа) и изменить значение GOTO, либо написать другую подпрограмму, которая прыгает дальше код.

другими словами, это стало кошмаром истинного кода спагетти и не весело поддерживать.


Он был введен в командной строке во многих случаях (или был, на моем старом Commodore 64), поэтому не всегда мог быть текстовый редактор, или если он был, это было довольно просто.

кроме того, вам нужно будет сделать GOTOs и тому подобное, а также вставлять строки между другими.

ie:

10 PRINT "HELLO"
20 GOTO 10
15 PRINT " WORLD"

куда бы он пошел в логическом 10 15 20


некоторые редакторы имели только режим "перезаписи" и без режима "вставки". Это сделало редактирование существующего кода чрезвычайно болезненным. Добавив эту функцию номера строки, вы можете, однако, исправить существующий код из любого места в файле:

100 PRINT "Broken Code"
200 PRINT "Foobar"
...
101 patch the broken code
102 patch more broken code

потому что номера строк не нужно было упорядочивать в файле.


номера строк были частью языка, в некоторых очень ранних, даже ОС была просто этими простыми строками. Все, что у тебя было, это одна линия за раз, чтобы манипулировать. Попробуйте написать систему учета, используя программные файлы 1-4k и сегментируя ее по размеру, чтобы сделать все. Для редактирования вы использовали номера строк, чтобы сказать, что вы редактировали. Итак, если вы вошли как:

10 PRINT "howdy"
20 GOTO 10
10 PRINT "WOOPS"
15 PRINT "MORE WOOPS"
20
RUN

ВЫ ПОЛУЧИТЕ:

WOOPS
MORE WHOOPS

пробел 20 эффективно удалит эту строку.