VSI BASIC для OpenVMS — это последнее название диалекта языка программирования BASIC, созданного Digital Equipment Corporation (DEC) и в настоящее время принадлежащего VMS Software Incorporated (VSI). Первоначально он был разработан как BASIC-PLUS в 1970-х годах для операционной системы RSTS-11 на мини-компьютере PDP-11 . Позднее он был портирован на OpenVMS , сначала на VAX , затем на Alpha , Integrity и совсем недавно на x86-64 .
Прошлые названия продукта включают: 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 является встроенная поддержка мощных Record Management Services (RMS) OpenVMS . До выпуска VAX BASIC встроенная поддержка RMS была доступна только в компиляторе COBOL компании DEC.
История продукта VSI BASIC для OpenVMS охватывает период более 30 лет, и за это время он претерпел множество изменений имени и владельца. Он также был портирован на ряд новых платформ , разработанных DEC, Compaq, HP и VSI. Название компании и/или платформы часто включалось в название продукта, способствуя распространению названий.
VSI BASIC начинался как BASIC-PLUS , созданный DEC для своей операционной системы RSTS-11 и мини-компьютера PDP-11 . Операторы языка программирования можно было либо набирать непосредственно в командном интерпретаторе , либо вводить в текстовый редактор , сохранять в файл, а затем загружать в командный интерпретатор из файла. Ошибки в исходном коде сообщались пользователю сразу после ввода строки.
Программы сохранялись как исходный файл .BAS с помощью команды "SAVE". Его можно было "скомпилировать" в нередактируемый двоичный файл .BAC с помощью команды "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». Программы могли объединяться в цепочку с определенными номерами строк во вторичной программе. Использование раздела общей памяти, называемого core common, также позволяло программам передавать данные друг другу по мере необходимости; также можно было использовать дисковые файлы, но они были медленнее.
Интерпретатор включал менеджер памяти для сбора мусора, используемый как для строковых данных, так и для байт-кода. Работающая программа могла быть прервана, переменные могли быть проверены и изменены, а затем возобновлены. Многие из управляющих структур, используемых в других языках высокого уровня, существовали в BASIC-PLUS, включая WHILE и UNTIL. Язык также поддерживал использование условных модификаторов в одной строке. Например, строка " " выводила бы значение "I", если бы I не было меньше 10.PRINT I UNLESS I < 10
Basic Plus 2 ( BP2 или BASIC-Plus-2 ) был позже разработан DEC для добавления дополнительных функций и повышения производительности. Он использовал настоящую компиляцию в потоковый код и записывал свой вывод в объектные файлы машинного языка . Они были совместимы с другими объектными файлами в системе и могли быть собраны в библиотеки. Затем компоновщик (TKB taskbuilder) создавал из них исполняемые файлы . TKB также поддерживал оверлеи; это позволяло по мере необходимости загружать отдельные процедуры в основное пространство памяти.
Программы BP2 работали под управлением RSX-11 или RSTS/E's RSX Run Time System. Эта RTS занимала всего 8 КБ (позже 2 КБ) адресного пространства пользователя, оставляя 56 КБ для программы пользователя. Эти два фактора позволяли отдельным программам BP2 быть намного больше, чем программы BASIC-PLUS, часто устраняя необходимость в CHAINing. В отличие от BASIC-PLUS (который был доступен только на RSTS-11), BP2 допускал использование и в операционной системе RSX-11.
С созданием миникомпьютера 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 , созданные путем компиляции с последующей компоновкой .
Когда в 1997/98 году компания DEC была приобретена компанией Compaq , продукты были переименованы в Compaq BASIC for OpenVMS VAX и Compaq BASIC for OpenVMS Alpha .
Аналогично, когда Compaq объединилась с HP в 2001/02 годах, продукты были переименованы в HP BASIC для OpenVMS на VAX и HP BASIC для OpenVMS на AlphaServer . Позднее HP выпустила HP BASIC для OpenVMS на Integrity для своих серверных платформ Integrity на базе процессоров Itanium компании Intel .
В середине 2014 года HP продала всю экосистему OpenVMS компании VSI, которая переименовала продукт в VSI BASIC for OpenVMS . [1]
VSI BASIC — это структурированный вариант BASIC, в котором номера строк необязательны, а язык поддерживает как SUB, так и FUNCTION.
распечатать "Привет, мир!"
функция real to_fahrenheit(реальный градус Цельсия) to_fahrenheit = (по Цельсию * 1,8) + 32конечная функция внешняя действительная функция to_fahrenheit(real)объявить реальный temp_celsiusкогда ошибка в распечатать "Введите температуру в градусах Цельсия"; вход х temp_celsius = действительная(x)использовать print "Ошибка: введите допустимое числовое значение, пожалуйста."конец, когдаprint "Температура в градусах по Фаренгейту составляет "; to_fahrenheit(temp_celsius)конец