Jump to content

БЕЙСИК-ПЛЮС

БЕЙСИК-ПЛЮС
Парадигма императив
Впервые появился 1970 год ; 54 года назад ( 1970 )
ТЫ РСТС/Э
Под влиянием
Дартмутский БЕЙСИК , Тимшер СУПЕР БЕЙСИК
Под влиянием
Майкрософт БЕЙСИК

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

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

Среди дополнений, внесенных в BASIC-PLUS, следует отметить появление строковых функций, таких как СРЕДНИЕ$ и LEFT$ в дополнение к оригинальному универсальному устройству Дартмута. Команда ИЗМЕНИТЬ . В будущих версиях языка, особенно 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 и '.

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

[ редактировать ]

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

Строки могут быть разделены одинарными или двойными кавычками. [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 , которые можно применять к любому оператору. Например, PRINT I IF I <> 10 является эквивалентом IF I <> 10 THEN PRINT I[14] Предусмотрено и обратное: PRINT I UNLESS I = 10 был эквивалентом IF I <> 10 THEN PRINT I. [15]

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

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

[ редактировать ]

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

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

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

The 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]

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

[ редактировать ]

The DIM# Оператор «виртуальный 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] (В 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. ^ Пробел перед цифрами был оставлен для возможного знака минус, это было стандартом почти во всех 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. ^ Перейти обратно: а б ПОДРОБНЕЕ 1972 , с. 2-3.
  5. ^ Перейти обратно: а б ПОДРОБНЕЕ 1972 , с. 2-6.
  6. ^ БОЛЬШЕ 1972 , с. 3-1.
  7. ^ БОЛЬШЕ 1972 , с. 3-7.
  8. ^ БОЛЬШЕ 1972 , с. 3-8.
  9. ^ БОЛЬШЕ 1972 , с. 3-10.
  10. ^ Перейти обратно: а б ПОДРОБНЕЕ 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.

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

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 5f1c7fda12bc48120977c89e6ec394b2__1691520660
URL1:https://arc.ask3.ru/arc/aa/5f/b2/5f1c7fda12bc48120977c89e6ec394b2.html
Заголовок, (Title) документа по адресу, URL1:
BASIC-PLUS - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)