Введение

диалект BASIC, созданный для операционной системы OpenVMS, ранее известный как HP BASIC для OpenVMS. VSI BASIC для OpenVMS – это текущее название диалекта языка программирования BASIC, разработанного компанией Digital Equipment Corporation (DEC) и в настоящее время принадлежащего VMS Software Incorporated (VSI). Изначально он был разработан как BASIC PLUS в 1970-х годах для операционной системы RSTS 11 на миникомпьютере PDP 11. Впоследствии он был портирован на OpenVMS, сначала на VAX, затем на Alpha и, наконец, на Integrity. Среди предыдущих названий продукта: BASIC PLUS, Basic Plus 2 (BP2 или BASIC Plus 2), VAX BASIC, DEC BASIC, Compaq BASIC для OpenVMS и HP BASIC для OpenVMS. Существуют также многочисленные вариации названий с указанием аппаратной платформы (VAX, AlphaServer и т.д.).

Примечательные особенности

VSI BASIC имеет множество расширений, подобных FORTRAN, а также поддерживает оригинальные матричные операторы Dartmouth BASIC. Номера строк необязательны, если не используется функция "ERL". Она позволяет создавать обработчики ошибок "WHEN ERROR" для защиты определенных операторов. Более традиционное, но менее изящное утверждение "ON ERROR" лишено подобного контекста или области действия. Одной из наиболее заметных особенностей VSI BASIC является встроенная поддержка мощных служб управления файлами (RMS) OpenVMS. До выпуска VAX BASIC, нативная поддержка RMS была доступна только в COBOL-компиляторе DEC.

История

История продукта VSI BASIC for OpenVMS насчитывает более 30 лет, за которые он неоднократно менял название и владельца. Он также был портирован на множество новых платформ по мере их разработки компаниями DEC, Compaq, HP и VSI. Название компании или платформы часто включалось в наименование продукта, что привело к увеличению их числа.

BASIC-PLUS

VSI BASIC начал свою историю как BASIC PLUS, разработанный DEC для их операционной системы RSTS 11 и миникомпьютера PDP 11. Операторы языка программирования можно было вводить непосредственно в интерпретатор команд или вводить в текстовый редактор, сохранять в файл, а затем загружать в интерпретатор команд из файла. Ошибки в исходном коде сообщались пользователю сразу после ввода строки. Программы хранились в виде исходного файла с помощью команды "SAVE". Их можно было "скомпилировать" в нередактируемый двоичный файл с помощью команды "COMPILE". Эта команда не создавала полноценные программы на машинном языке, а генерировала байт-код, называемый "токенами". Токены интерпретировались при выполнении, подобно более современному Java. Программы вводились в интерпретатор команд, начиная с номеров строк – целых чисел от 1 до 32767. Строки можно было продолжать на несколько строк с помощью символа новой строки. Для удобства внешнего редактирования исходного файла в более поздних версиях BASIC PLUS также допускалось использование символа & для продолжения строки. На одной строке можно было разместить несколько операторов, используя в качестве разделителя. Для систем PDP 11 с виртуальной памятью (RSTS/E) адресное пространство было ограничено примерно 64 КБ. При использовании BASIC PLUS около половины этого объема занимали объединенный интерпретатор команд и библиотека времени выполнения. Это ограничивало размер пользовательских программ примерно 32 КБ памяти. В более старых системах RSTS 11 виртуальная память отсутствовала, поэтому пользовательская программа должна была помещаться в объем физической памяти, оставшийся после использования RSTS и BASIC PLUS. Например, на PDP 11/35 с 32 КБ физической памяти, работающей под управлением RSTS 11 V04B 17, размер пользовательских программ был ограничен 7 КБ. Большие программы можно было разбивать на части с помощью инструкции "CHAIN". Программы могли переходить к определенным номерам строк во вторичной программе. Использование общего сегмента памяти, называемого общей областью, также позволяло программам обмениваться данными друг с другом по мере необходимости; дисковые файлы также можно было использовать, но они работали медленнее. Интерпретатор включал в себя менеджер памяти со сборкой мусора, который использовался как для строковых данных, так и для байт-кода. Выполняющуюся программу можно было прервать, изучить и изменить значения переменных, а затем возобновить ее выполнение. Многие структуры управления, используемые в других языках высокого уровня, присутствовали и в BASIC PLUS, включая WHILE и UNTIL. Язык также поддерживал использование условных модификаторов в одной строке. Например, строка "" выводила бы значение "I", если только I не было меньше 10.

BASIC плюс 2

Basic Plus 2 (BP2 или BASIC Plus 2) был позже разработан DEC для добавления дополнительных функций и повышения производительности. Он использовал настоящую компиляцию в потоковый код и записывал результат в объектные файлы машинного языка. Эти файлы были совместимы с другими объектными файлами в системе и могли быть скомпонованы в библиотеки. Затем компоновщик (TKB taskbuilder) создавал из них исполняемые файлы. TKB также поддерживал накладки, что позволяло подгружать отдельные подпрограммы в основное адресное пространство по мере необходимости. Программы BP2 работали под управлением RSX 11 или подсистемой времени выполнения RSX в RSTS/E. Эта подсистема занимала всего 8 КБ (позже 2 КБ) адресного пространства пользователя, оставляя 56 КБ для программы пользователя. Благодаря этим двум факторам отдельные программы BP2 могли быть значительно больше, чем программы BASIC PLUS, что часто избавляло от необходимости использования оператора CHAIN. В отличие от BASIC PLUS (доступного только в RSTS 11), BP2 можно было использовать и в операционной системе RSX 11.

VAX BASIC и DEC BASIC

С созданием миникомпьютера VAX, DEC портировала BASIC PLUS 2 на новую операционную систему VMS и назвала ее VAX BASIC. VAX BASIC использовал стандартные соглашения о вызовах VMS, поэтому объектный код, сгенерированный VAX BASIC, можно было связать с объектным кодом, сгенерированным любым другим языком VMS. Исходный код BASIC Plus 2 обычно работал на VAX BASIC без значительных изменений. Когда DEC создала свой микропроцессор Alpha, VMS была портирована на него и переименована в OpenVMS. VAX BASIC также был портирован на Alpha и переименован в DEC BASIC. В этот момент интерпретатор BASIC был окончательно исключен, что означало, что программы DEC BASIC могли выполняться только как исполняемые файлы OpenVMS, созданные компиляцией с последующей компоновкой.

Compaq, HP и VSI

Когда DEC была приобретена компанией Compaq в 1997/98 годах, продукты были переименованы в Compaq BASIC для OpenVMS VAX и Compaq BASIC для OpenVMS Alpha. Аналогичным образом, когда Compaq объединилась с HP в 2001/02, продукты были переименованы в HP BASIC для OpenVMS на VAX и HP BASIC для OpenVMS на AlphaServer. Позже HP выпустила HP BASIC для OpenVMS на Integrity для своих серверных платформ Integrity, основанных на процессорах Intel Itanium. В середине 2014 года HP продала всю экосистему OpenVMS компании VSI, которая переименовала продукт в VSI BASIC для OpenVMS.

Код образца

VSI BASIC — это структурированный вариант BASIC, в котором номера строк не обязательны, а язык поддерживает как подпрограммы (SUB), так и функции (FUNCTION).