БЛАЖЕНСТВО
Парадигма | Структурированный , императивный ( процедурный ) |
---|---|
Разработано | В.А. Вульф , Д.Б. Рассел, А.Н. Хаберманн |
Разработчик | Университет Карнеги-Меллон |
Впервые появился | 1970 год |
Стабильная версия | БЛИСС-64
|
Дисциплина набора текста | Бестиповый |
Объем | Лексический |
Платформа | PDP-10 , PDP-11 , VAX , PRISM , MIPS , DEC Alpha , IA-32 , IA-64 , x86-64 |
ТЫ | Кросс-платформенный |
Веб-сайт | пдп-10 |
Диалекты | |
Общее БЛИСС | |
Под влиянием | |
АЛГОЛ |
BLISS — это язык системного программирования, разработанный в Университете Карнеги-Меллона (CMU) В.А. Вульфом , Д.Б. Расселом и А.Н. Хаберманном примерно в 1970 году. Это был, пожалуй, самый известный системный язык, пока C. несколько лет спустя не дебютировал С тех пор C стал популярным и распространенным, а BLISS канул в безвестность. Когда язык C находился в зачаточном состоянии, в нескольких проектах Bell Labs обсуждались преимущества BLISS перед C. [ нужна ссылка ]
BLISS — это бестиповый блочной структурой , язык программирования с основанный на выражениях, а не на инструкциях, и включает в себя конструкции для обработки исключений , сопрограммы и макросы . Он не включает оператор goto .
По-разному говорят, что это название является сокращением от « Базового языка реализации системного программного обеспечения» или «Языка реализации системного программного обеспечения, наоборот» . Однако в своей устной истории в 2015 году для проекта истории компьютерной безопасности Института Бэббиджа Вульф заявил, что аббревиатура изначально была основана на названии «Язык Билла для реализации системного программного обеспечения». [1]
Оригинальный компилятор Карнеги-Меллона отличался широким использованием оптимизаций и лег в основу классической книги «Проектирование оптимизирующего компилятора» .
Digital Equipment Corporation (DEC) разработала и поддерживала компиляторы BLISS для PDP-10 . [2] ПДП-11 , [2] ВАКС , [2] ДЕК ПРИЗМА , [3] МИПС , [2] ДЭК Альфа , [2] и Intel IA-32 , [2] Язык не стал популярным среди клиентов, и лишь немногие имели компилятор. [4] но DEC активно использовала его внутри компании до 1980-х годов; большинство служебных программ для OpenVMS операционной системы были написаны на BLISS-32. Компилятор DEC BLISS был портирован на архитектуры IA-64 и x86-64 как часть портирования OpenVMS на эти платформы. [2] [5] Компилятор BLISS x86-64 использует LLVM в качестве внутреннего генератора кода , заменяя собственный бэкэнд GEM, используемый для Alpha и IA-64.
Описание языка [ править ]
BLISS обладает многими функциями других современных языков высокого уровня. Он имеет блочную структуру, автоматический стек и механизмы для определения и вызова рекурсивных процедур... предоставляет множество предопределенных структур данных и... средства для тестирования и итерации...
С другой стороны, в BLISS отсутствуют некоторые особенности других языков высокого уровня. Он не имеет встроенных средств ввода/вывода, поскольку проект системного программного обеспечения обычно разрабатывает собственный ввод/вывод или основывается на базовом вводе/выводе монитора или службах управления экраном... он обеспечивает доступ к специфичным для машины функциям, потому что системное программное обеспечение часто требует этого. BLISS обладает характеристиками, необычными для языков высокого уровня. Имя... единообразно интерпретируется как адрес этого сегмента, а не как значение сегмента... Кроме того, BLISS является «языком выражений», а не «языком операторов».
Это означает, что каждая конструкция языка, не являющаяся объявлением, является выражением. Выражения создают значение, а также могут вызывать такие действия, как изменение памяти, передача управления или выполнение программного цикла. Например, аналогом «оператора» присваивания в BLISS, строго говоря, является выражение, которое само по себе имеет значение. Значение выражения может быть использовано или отброшено в BLISS... Наконец, BLISS включает в себя функцию макросов, которая обеспечивает уровень возможностей, обычно встречающийся только в макроассемблерах.
- Руководство по языку Bliss , Digital Equipment Corporation (1987). [6]
Язык BLISS имеет следующие характеристики:
- Все константы представляют собой полное слово для используемой машины, например, на 16-битной машине, такой как PDP-11 , константа равна 16 битам; на компьютере VAX константы имеют размер 32 бита, а на PDP-10 константа равна 36 битам.
- Ссылка на переменную всегда относится к адресу этой переменной. Например, инструкция
Z+8
относится к добавлению 8 к адресу Z, а не к его значению . Z нужно добавить 8 Если к значению , необходимо поставить перед переменной точку; так что можно было бы набрать.Z+8
для выполнения этой функции, которая добавляет 8 к содержимому Z. - Назначение выполняется по стандарту.
=
символ, напримерZ=8
– в котором говорится, что нужно создать константу из полного слова, содержащую 8, и сохранить ее в месте, адрес которого соответствует адресу Z. ИтакZ+12=14
(или, как вариант12+Z=14
) помещает константу 14 в позицию, которая находится через 12 слов после адреса Z. (Это считается плохой практикой. [ кем? ] .) - Операторы блока аналогичны операторам АЛГОЛА : блок начинается с
BEGIN
заявление и прекращено сEND
. Как и в Алголе, операторы завершаются точкой с запятой («;»). Когда значение вычисляется, оно сохраняется до следующего признака завершения оператора — это означает, что значение может быть вычислено, присвоено переменной и при желании перенесено на следующий оператор. Альтернативно, открывающая скобка может использоваться для начала блока, а закрывающая скобка — для закрытия блока. Когда в выражение включены круглые скобки, приоритета , согласно которым сначала вычисляются выражения в скобках. используются стандартные правила - Условное выполнение использует
IF
выражение, которое проверяет условие true-false, выполняет альтернативные действия и возвращает результат. - Для сравнения используются такие ключевые слова, как
EQL
для равенства (в отличие от перегрузки символа = для той же цели),GTR
для «Больше чем» иNEQ
ибо не равны. Например, следующий код присвоит абсолютное значение Z адресу, указанному Q:
Q = (IF .Z GTR 0 THEN .Z ELSE -.Z);
- Идентификаторы (переменные и константы) должны быть объявлены перед использованием, обычно с использованием метода
OWN
ключевое слово. Объявление переменной обычно приводит к тому, что компилятор выделяет для нее место; при необходимости переменной может быть присвоен фиксированный машинный адрес черезBIND
декларация. Эта функция в основном используется для доступа к регистрам машины или к определенным специальным адресам. - Подпрограммы в языке называются подпрограммами и объявляются с помощью ключевого слова
ROUTINE
. - Макросы , допускающие замену текста, объявляются с ключевым словом
MACRO
. - Язык поддерживает массивы , которые называются структурами и объявляются с помощью ключевого слова
VECTOR
. - Язык поддерживает некоторые языка программирования высокого уровня, конструкции такие как:
- Альтернативные пути выполнения через
CASE
выражение - Цикл с использованием
INCR
выражение, похожее на оператор FOR в Алголе. - Встроенные строковые функции
- Определенные автоматические преобразования данных (число в строку и т. д.)
- Альтернативные пути выполнения через
Исходный пример [ править ]
Следующий пример дословно взят из Bliss Language Guide : [6]
MODULE E1 (MAIN = CTRL) =
BEGIN
FORWARD ROUTINE
CTRL,
STEP;
ROUTINE CTRL =
!+
! This routine inputs a value, operates on it, and
! then outputs the result.
!-
BEGIN
EXTERNAL ROUTINE
GETNUM, ! Input a number from terminal
PUTNUM; ! Output a number to terminal
LOCAL
X, ! Storage for input value
Y; ! Storage for output value
GETNUM(X);
Y = STEP(.X);
PUTNUM(.Y)
END;
ROUTINE STEP(A) =
!+
! This routine adds 1 to the given value.
!-
(.A+1);
END
ELUDOM
Версии [ править ]
- БЛИСС-10
- BLISS-11 — кросс-компилятор для PDP-11.
- БЛИСС-16
- BLISS-16C — декабрьская версия BLISS-11.
- БЛИСС-32
- БЛИСС-36
- БЛИСС-64
- Common BLISS — портативное подмножество
Примечания [ править ]
- ^ Вульф, Уильям А. (23 июня 2015 г.). «Интервью с УИЛЬЯМОМ А. ВУЛЬФОМ, ОХ 477» (PDF) (Интервью). Беседовал Джеффри Р. Йост. Шарлоттсвилль, Вирджиния.
- ^ Jump up to: Перейти обратно: а б с д и ж г Брендер, Рональд Ф. (2002). «Язык программирования BLISS: история» (PDF) . Программное обеспечение: практика и опыт . 32 (10): 955–981. дои : 10.1002/спе.470 . S2CID 45466625 .
- ^ Макларен, Дон (27 августа 1987 г.). «Проект, описание и план компилятора DECWest» (PDF) . Bitsavers.org .
- ^ да Круз, Франк (16 сентября 1987 г.). «Новости о программах Kermit для VAX/VMS» . Инфо-Кермит Дайджест (список рассылки). Проект Кермита, Колумбийский университет . Проверено 5 мая 2019 г.
Kermit-32 написан на языке Bliss, «языке корпоративной реализации» DEC (первоначально разработанном в CMU). Bliss так и не завоевала популярность среди клиентов DEC; на немногих сайтах есть компиляторы Bliss.
- ^ «Собрание разработчиков LLVM 2017: Дж. Рейган «Портирование OpenVMS с использованием LLVM» » . Ютуб . 31 октября 2017 г. Архивировано из оригинала 21 декабря 2021 г.
- ^ Jump up to: Перейти обратно: а б Руководство по языку Bliss , Digital Equipment Corporation (1987)
Ссылки [ править ]
- Вульф, Вашингтон ; Рассел, Д.Б.; Хаберманн, А.Н. (декабрь 1971 г.). «БЛИСС: язык системного программирования» (PDF) . Коммуникации АКМ . 14 (12): 780–790. дои : 10.1145/362919.362936 . S2CID 9564255 . Также: «BLISS: Язык системного программирования» . (Постскриптум)
- Вульф, Вашингтон; Джонсон, РК; Вайншток, CB; Хоббс, ТАК; Гешке, CM (1975). Проект оптимизирующего компилятора . Нью-Йорк: Эльзевир, ISBN 0-444-00158-1 .
- Брендер, Рональд Ф. (2002). «Язык программирования BLISS: история» (PDF) . Программное обеспечение: практика и опыт . 32 (10): 955–981. дои : 10.1002/спе.470 . S2CID 45466625 .
Внешние ссылки [ править ]
- Руководство BLISS в DECUS
- Лехоцкий, Алан; пост о BLISS в DEC
- Мэдисон, Мэтью Д.; Заметки к сессии «Введение в BLISS» (PostScript)