Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

Операция [ править ]

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

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

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

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

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

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

Синтаксис и особенности [ править ]

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

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

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

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

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

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

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

В язык также включен ряд MATкоманд для работы со всем массивом (или МАТРИЦЕЙ). Команда MAT READзаполнит матрицу значениями в DATAоператоре, [13] MAT INPUT заполнит массив значениями, введенными пользователем, и MAT PRINTраспечатает элементы в 1D или 2D формате. [14] MAT также можно использовать для установки значений по умолчанию в матрице с использованием связанных ключевых слов, например, для MAT A=ZERзаполнения массива A нулями. [15] TRN транспонирует всю матрицу и INVинвертирует ее. [16] Кроме того, +, -и *может быть использован на матрицах, выполняя соответствующие им операции матрицы. [17]

Команда PRINTразделила экран на области шириной 14 пробелов, и запятая использовалась для перемещения между этими местами; PRINT 1,2,3выведет 1, 2 и 3 с разнесением, [18] тогда как PRINT 1;2;3оставит один пробел и даст «1 2 3». [19] INPUT позволяет указывать строку приглашения, но использует точку с запятой для ее разделения, а не запятую; . [20]INPUT "WHAT IS THE VALUE";A

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

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

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

Виртуальная машина [ править ]

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

BASIC Plus 2 [ править ]

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

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

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

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

Сравнение с MS BASIC [ править ]

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

См. Также [ править ]

  • Сравнение командных оболочек

Заметки [ править ]

  1. ^ До введения режима расширения пробелы между переменными и другими языковыми элементами не требовались:FOR I=STOPони интерпретировались как.FOR I = S TO P

Ссылки [ править ]

Цитаты [ править ]

  1. ^ К. Гордон Белл ; Дж. Крейг Мадж; Джон Н. Макнамара. Компьютерная инженерия: взгляд DEC на проектирование аппаратных систем (PDF) . Цифровая пресса . ISBN 0-932376-00-2. CS1 maint: обескураженный параметр ( ссылка )
  2. ^ a b Манес, Стивен (1993). Ворота . Даблдэй. п. 61.
  3. ^ PLUS 1972 , стр. 2-1.
  4. ^ а б PLUS 1972 , стр. 2-3.
  5. ^ а б PLUS 1972 , стр. 2-6.
  6. ^ PLUS 1972 , стр. 3-1.
  7. ^ PLUS 1972 , стр. 3-3.
  8. ^ PLUS 1972 , стр. 6-1, 6-2.
  9. ^ а б PLUS 1972 , стр. 5-2.
  10. ^ PLUS 1972 , стр. 3-21.
  11. ^ PLUS 1972 , стр. 5-3.
  12. ^ PLUS 1972 , стр. 9-17.
  13. ^ PLUS 1972 , стр. 7-2.
  14. ^ PLUS 1972 , стр. 7-3.
  15. ^ PLUS 1972 , стр. 7-5.
  16. ^ PLUS 1972 , стр. 7-7.
  17. ^ PLUS 1972 , стр. А-1.
  18. ^ PLUS 1972 , стр. 3-7.
  19. ^ PLUS 1972 , стр. 3-8.
  20. ^ PLUS 1972 , стр. 3-10.
  21. ^ PLUS 1972 , стр. 5-12.
  22. ^ PLUS 1972 , стр. 5-5.
  23. ^ PLUS 1972 , стр. 5-7.
  24. ^ PLUS 1972 , стр. 3-19.
  25. ^ PLUS 1972 , стр. 8-14.
  26. ^ PLUS 1972 , стр. 8-17.
  27. ^ PLUS 1972 , стр. 8-18.
  28. ^ PLUS 1972 , стр. 8-20.
  29. ^ "Встроенные операторы BASIC-PLUS, действительно ли они имеют смысл?" . Проверено 5 августа 2020 .
  30. ^ Справочное руководство BASIC V2 (PDF) . Мейнард, Массачусетс: Digital Equipment Corporation. 1991 г.

Библиография [ править ]

  • Руководство по языку BASIC-PLUS (PDF). Мейнард, Массачусетс: Digital Equipment Corporation. 1972 г.