BASIC-PLUS

редактировать
Диалект языка программирования BASIC, используемого в операционной системе RSTS / E на компьютерах PDP-11
BASIC-PLUS
Парадигма императив
Впервые появилась1970; 50 лет назад (1970 г.)
OS RSTS / E
Под влиянием
Dartmouth BASIC, Tymshare SUPER BASIC
Под влиянием
Microsoft BASIC

BASIC-PLUS является расширенным диалектом BASIC языка программирования, который был разработан Digital Equipment Corporation (DEC) для использования на его RSTS / E операционная система с разделением времени для 16-разрядных миникомпьютеров серии PDP-11 с начала 1970-х по 1980-е годы.

BASIC-PLUS был основан на BASIC-8 для TSS / 8, который сам очень близко основан на оригинальном Dartmouth BASIC. BASIC-PLUS добавил ряд новых структур, а также функции из JOSS, касающиеся условных операторов и форматирования. В свою очередь, BASIC-PLUS был версией, на которой был скопирован оригинальный Microsoft BASIC.

Язык был позже переписан как настоящий компилятор на BASIC -Plus-2, и был перенесен на платформу VAX-11 в качестве собственной реализации BASIC этой машины. Эта версия пережила несколько изменений платформы и сегодня известна как VSI BASIC для OpenVMS.

Содержание
  • 1 Операция
  • 2 Синтаксис и функции
  • 3 Виртуальная машина
  • 4 BASIC Plus 2
  • 5 Сравнение с MS BASIC
  • 6 См. Также
  • 7 Примечания
  • 8 Ссылки
    • 8.1 Цитаты
    • 8.2 Библиография
Операция

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

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

Виртуальное адресное пространство пользователя RSTS / E было ограничено чуть менее 64 КБ пространства. При использовании BASIC-PLUS около половины этого виртуального адресного пространства использовалось объединенным интерпретатором команд и библиотекой времени выполнения (названной системой времени выполнения в RSTS / E). Это ограничивало пользовательские программы примерно 32 кБ памяти.

Большие программы были разбиты на различные части с помощью оператора CHAIN ​​, и программы могли связать с определенными номерами строк во вторичной программе, чтобы указать, что программа должен начинать выполнение с другой точки от его первой строки. Эта функция привязки к определенному номеру строки позволяла программам сигнализировать друг другу, что они вызываются из другой программы. Использование раздела разделяемой памяти под названием core common также позволяло программам передавать данные друг другу по мере необходимости. Файлы с диска также можно было использовать, но они работали медленнее.

Для экономии памяти в систему включен диспетчер памяти для сбора мусора, используемый как для строковых данных, так и для байт-кода.

Выполняющуюся программу можно прервать, проверить и изменить переменные, а затем возобновить.

Синтаксис и функции

BASIC-PLUS во многом повторяет более поздние версии Dartmouth BASIC, включая его мощные команды MAT. Вдобавок к этому DEC добавила ряд уникальных структур управления потоком.

Номера строк были положительными целыми числами от 1 до 32767. Логические строки кода можно было продолжить на нескольких физических строках, используя перевод строки в конце строки вместо обычного символ возврата каретки. Для облегчения внешнего редактирования исходного файла более поздние версии BASIC-PLUS также допускали использование символа ив качестве символа продолжения строки.

В одну строку можно поместить несколько операторов, используя :в качестве разделителя операторов. Система позволяла использовать табуляции в качестве встроенных пробелов и использовалась для того, чтобы сделать циклы более понятными, как в современных языках. В комментариях использовалось ключевое слово REMили символ !, в отличие от MS BASIC, в которых использовались имена переменных REMи '.

в ранних версиях BASIC. -PLUS может быть одной буквой или одной буквой, за которой следует одна цифра. С включением «Режима расширения» в более поздних версиях имена переменных могли быть длиной до 29 символов, а точка (.) Была добавлена ​​как разрешенный символ. Однако каждое имя переменной должно начинаться с буквы.

Как и в большинстве версий BASIC, ключевое слово LETдля присвоения переменных было необязательным. Он может установить несколько переменных в одно значение, например LET A, B, C = 10. Язык поддерживает три типа данных; числа с плавающей запятой, целые числа и строки. Переменные без суффикса были с плавающей запятой (8 байтов, диапазон от 0,29 x 10E-38 до 1,7 x 10E38, точность до 16 знаков). Целочисленные переменные (16-битные, диапазон от -32768 до +32767) обозначались суффиксом %, строковые переменные (переменной длины) обозначались суффиксом $.

Оператор DIMможет выделять одномерные и двухмерные массивы любого из трех типов данных. Диапазон индексов всегда начинался с 0 (но операторы MATне устанавливали элементы в строке 0 или столбце 0).

Оператор DIM #«виртуальный DIM» мог отображать "виртуальные массивы данных" или "виртуальные массивы" в файл на диске, что позволяло использовать массивы больше, чем доступная память компьютера (или даже его адресное пространство), и позволяло использовать элементы массива для чтения, записи, и расширить файлы на диске (постоянное хранилище). Они назвали эту схему «виртуальным хранилищем данных» и «виртуальным ядром», но при этом не использовался современный подход к размещению массивов и отображенного в память файла в той же виртуальной памяти и затем разрешая диспетчеру виртуальной памяти обрабатывать весь доступ через подкачку. Вместо этого программа сначала выполнит оператор OPEN, который открывает файл со связанным номером файла и назначает ему один файловый буфер с одной записью (512 байт). Затем оператор DIM #свяжет область данных этого файла с одним или несколькими массивами, которые можно «использовать» так же, как любой массив на основе памяти. При каждом доступе к элементу виртуального массива BASIC-PLUS будет вычислять, какая запись файла содержит данные. Если правильной записи не было в буфере файла, он прочитает эту запись. (Если бы в буфер была произведена запись, он бы записал этот «грязный» буфер обратно на диск перед чтением новой записи.) Когда присутствует правильная запись, BASIC-PLUS скопирует данные в правую часть или из правой части буфер. Оператор CLOSEвызывал перезапись буфера (при необходимости) перед закрытием файла. Поскольку никакие дополнительные секторы не кэшировались, доступ к данным в «неправильном» порядке мог умножить количество обращений к диску. Дополнительные правила были наложены на виртуальные массивы, так что один элемент данных никогда не мог перекрывать границу записи: каждый тип данных был выровнен по кратному своему размеру. Виртуальные строки хранились как данные ASCIIZ фиксированной длины с размерами, ограниченными 2, 4, 8, 16, 32, 64, 128, 256 или 512 байтами, и доступ к ним осуществлялся с помощью LSETи RSET.

В язык также включен ряд команд MATдля работы со всем массивом (или MATrix). Команда MAT READзаполняет матрицу значениями в операторе DATA, MAT INPUTзаполняет массив значениями, введенными пользователем, а MAT PRINTраспечатает элементы в 1D или 2D формате. MATможет также использоваться для установки значений по умолчанию в матрице с использованием связанных ключевых слов, например, MAT A = ZERзаполнит массив A нулями. TRNпреобразует всю матрицу, а INVинвертирует ее. Кроме того, +, -и *можно использовать в матрицах, выполняя соответствующую матричную операцию.

Команда PRINTразделяет экран на области шириной 14 пробелов, и запятая использовалась для перемещения между этими местами; PRINT 1,2,3выведет 1, 2 и 3 с разнесением, а PRINT 1; 2; 3оставит один пробел и выдаст «1 2 3 ". INPUTпозволяет указать строку приглашения, но использует точку с запятой для ее разделения, а не запятую; ВВОД «ЧТО ТАКОЕ ЗНАЧЕНИЕ»; A.

Строки могут быть разделены одинарными или двойными кавычками. В дополнение к функциям CHRи ASCII, которые преобразовывают отдельные символы в строковый формат и из него, BASIC-PLUS также поддерживает мощную команду Дартмута CHANGE. CHANGEвыполняет итерацию строки и возвращает значение ASCII каждого символа как слот в числовом массиве. Например, CHANGE 'HELLO' TO Xвернет массив из пяти элементов. Можно также отменить операцию: CHANGE X TO A $считывает отдельные числа в массиве X и конвертирует их в строку.

Циклы FORработали так же, как в более поздних версиях BASIC, а команду NEXTнельзя использовать в выражении. Вместо этого можно использовать ключевые слова UNTILи WHILEдля управления ранним выходом. Например, FOR I = 1 UNTIL 10продолжить цикл до тех пор, пока I = 10, с предположением, что следующий код установит значение I.

BASIC-PLUS также позволяет большинству управляющих структур размещаться после других команд. Например, PRINT I IF I <10эквивалентно IF I>= 10 THEN PRINT IТакже было предусмотрено обратное: PRINT I UNLESS I = 10был эквивалентом IF I <>10 THEN PRINT I. Использование условного выражения может создать цикл, например, X = X + 1 WHILE X <100будет повторяться до тех пор, пока X не станет 100. Это предложило компактный формат для многих общих структур цикла.

Виртуальная машина

BASIC-PLUS была не интерпретатором, а системой compile and go : каждая строка BASIC переводилась в "PPCODE" (Push-Pop Code) по мере ввода, для последующего быстрого выполнения на своей виртуальной машине. Эти переводы не токенизировали строки BASIC, но переписывали их для использования на стековой машине; вы не можете перевести эти представления обратно в операторы BASIC. Это избавило от необходимости многократно декодировать ключевые слова как строки: после преобразования в PPCODE ключевые слова были числами, указывающими на подпрограммы для запуска этой функции. BASIC-PLUS включал команду COMPILE, но это не был настоящий компилятор; это просто сохраняло представление PPCODE программы, так что его не нужно было перекомпилировать при следующей загрузке программы BASIC в память. Система хранит программу пользователя в двух форматах. Один из них - это редактируемый исходный код в текстовом формате, созданный с помощью команды SAVEи обычно помещаемый в файл.BAS. Другой был PPCODE-версией программы, созданной командой COMPILEи сохраненной в файле.BAC; Файлы.BAC были меньше, загружались и работали быстрее, но их нельзя было редактировать.

BASIC Plus 2

Связанный продукт под названием Basic Plus 2 («BP2» или BASIC-Plus-2 ), позже был разработан DEC для добавления дополнительных функций и повышения производительности.

Он использовал настоящую компиляцию в многопоточный код и записывал свой вывод в объектные файлы, совместимые с объектными файлами машинного кода, созданными ассемблером и другими языковыми системами. Эти объектные файлы могут храниться в библиотеках. Компоновщик (построитель задач TKB) затем создал исполняемые файлы из объектных файлов и библиотек. TKB также поддерживает оверлеи; это позволяло при необходимости переносить отдельные подпрограммы в виртуальное адресное пространство, перекрывая подпрограммы, которые в настоящее время не используются. Кроме того, программы

BP2 работали в системе времени выполнения RSX; этот RTS занимал только 8 КБ виртуального адресного пространства пользователя, оставляя 56 КБ для программы пользователя. (В RSTS / E версии 9 было введено отдельное пространство инструкций и данных, а также «исчезающая» система времени выполнения RSX, разрешающая до 64 Кбайт каждого кода инструкции и данных.) Эти два фактора позволили отдельным программам BP2 быть намного больше, чем BASIC- PLUS, что часто снижает необходимость в ЦЕПИ между несколькими программами.

В отличие от BASIC-PLUS (который был доступен только в RSTS / E), BP2 также был доступен для операционной системы RSX-11. Программы BP2 также были более совместимы с более поздней версией VAX BASIC.

Сравнение с MS BASIC

Microsoft BASIC был очень похож на BASIC-PLUS. В более ранних версиях MS BASIC, серии 1.x, отсутствовали целочисленные переменные, но они были добавлены в серию 2.x, которая использовалась на многих машинах, включая более поздние модели Commodore PET и Коммодор 64. Возможность размещать логические и циклические команды в строке, например I = I + 1 UNTIL I = 10не была скопирована и не появляется ни в одной из распространенных версий микрокомпьютерного BASIC. В MS BASIC также отсутствовали матричные команды.

См. Также
Примечания
Ссылки

Цитаты

Библиография

Последняя правка сделана 2021-05-11 14:53:20
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте