stringtranslate.com

БЕЙСИК-ПЛЮС

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, было введение строковых функций, таких как MID$ и LEFT$ , в дополнение к оригинальной универсальной команде CHANGE Дартмута . В будущих версиях языка, особенно Microsoft, CHANGE был удален, и строковые функции BASIC-PLUS стали единственным способом выполнения подобных операций. Большинство BASIC-ов по сей день следуют этому соглашению.

Позже язык был переписан как настоящий компилятор как 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и '.

Стандартные заявления

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

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

Модификаторы операторов

В BASIC-PLUS добавлена ​​концепция «модификаторов операторов», условий, подобных JOSS , которые можно применять к любому оператору. Например, является эквивалентом [14] Было также предусмотрено обратное: эквивалент . [15]PRINT I IF I <> 10IF I <> 10 THEN PRINT IPRINT I UNLESS I = 10IF I <> 10 THEN PRINT I

FORциклы работали, как и в других версиях BASIC, и NEXTкоманду нельзя было использовать в выражении для досрочного выхода. [16] Вместо этого ключевые слова UNTILи WHILEможно использовать для управления ранним выходом. Например, продолжайте цикл до тех пор, пока I=10, предполагая, что следующий код установит значение I, [17] это означает, что он может завершиться не после 10 итераций, а как только код установит I на 10. [18] Модификаторы могут также может использоваться для создания компактных однострочных циклов, например, будет выполняться до тех пор, пока X не станет 100. [19]FOR I=1 UNTIL I=10X=X+1 WHILE X<100

Переменные, выражения и матрицы

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

Язык поддерживал три типа данных; числа с плавающей запятой, целые числа и строки. Переменные без суффикса были с плавающей запятой (8 байт, диапазон 0,29 × 10).от −38 до 1,7 × 1038 , точность до 16 цифр). Целочисленные переменные (16-битные, диапазон от -32768 до +32767) обозначались суффиксом%, [21] строковые переменные (длина переменной) обозначались суффиксом$. [10]

Список математических и логических операторов был типичным для большинства Бейсиков, с некоторыми расширениями. Для математики поддерживались , , и , а также +альтернативная форма для компьютерных терминалов ,- которые могли не иметь этого символа. Стандартными логическими сравнениями были , , , , , и . Одним из интересных дополнений стал оператор «приблизительно равно». Это возвратило бы значение true, если бы два числа были напечатаны одинаково, то есть их шесть старших цифр были бы одинаковыми. [22] Логические операторы включали типичные , и , а также , которые возвращают истину, если оба A и B истинны или оба ложны, и который является ложным, если A истинно, а B ложно, а в противном случае всегда истинно. [23]*/^**^=<><=>=<>==NOT AA AND BA OR BA XOR BA EQV BA IMP B

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

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

Обработка файлов

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

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

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

БЕЙСИК Плюс 2

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

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

Кроме того, программы BP2 работали под управлением системы времени выполнения RSX; этот RTS занимал только 8 КБ виртуального адресного пространства пользователя, оставляя 56 КБ для программы пользователя. [33] (В версии 9 RSTS/E появилось отдельное пространство инструкций и данных, а также «исчезающая» система времени выполнения 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не копировалась и не присутствует ни в одной распространенной версии микрокомпьютерного Бейсика. В MS BASIC также отсутствовали матричные команды.

Смотрите также

Примечания

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

Рекомендации

Цитаты

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

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