Paradigm | Структурированный, императивный (процедурный ) |
---|---|
Разработан | W. А. Вульф, А. Н. Хаберманн |
Разработчик | Университет Карнеги-Меллона |
Впервые появился | 1970 |
Стабильная версия | BLISS-64 |
Дисциплина ввода | Без типов |
OS | Кросс- платформа : PDP-10, PDP-11, VAX, DEC PRISM, MIPS, DEC Alpha, Intel IA-32, Intel IA-64 |
Веб-сайт | pdp-10.trailing-edge.com / bb-m836d-bm / |
Диалекты | |
Общий BLISS | |
Испытанный | |
АЛГОЛ |
BLISS - это язык системного программирования, разработанный в Карнеги Университет Меллона от У. А. Вульф и А. Н. Хаберманн примерно в 1970 году. Это был, пожалуй, самый известный язык системного программирования до тех пор, пока несколько лет спустя не дебютировал C. С тех пор C взлетел, и BLISS растворились в безвестности. Когда C был в зачаточном состоянии, несколько проектов в Bell Labs обсуждали достоинства BLISS по сравнению с C.
BLISS - это язык с блочной структурой без типов, основанный на выражениях, а не на утверждениях, и включает конструкции для обработки исключений, сопрограмм и макросов. Он не включает инструкцию goto.
Название, по-разному, является сокращением от «Базовый язык для реализации системного программного обеспечения» или «Язык реализации системного программного обеспечения в обратном направлении». Иногда его называли «языком Билла для реализации системного программного обеспечения» в честь Билла Вульфа.
Первоначальный компилятор Карнеги-Меллона отличался широким использованием оптимизаций и лег в основу классической книги Дизайн оптимизирующего компилятора.
DEC разработала и обслуживала компиляторы BLISS для PDP-10, PDP-11, VAX, DEC Prism, MIPS, DEC Alpha и Intel IA-32. Язык не стал популярным среди клиентов, и у немногих был компилятор, но DEC широко использовала его в дом в 1980-е годы; большинство служебных программ для VMS операционной системы были написаны на BLISS-32. После приобретения DEC, Compaq разработала и обслуживала компилятор BLISS для Intel IA-64.
BLISS обладает многими функциями других современных языков высокого уровня. Он имеет блочную структуру, автоматический стек и механизмы для определения и вызова рекурсивных подпрограмм... предоставляет множество предопределенных структур данных и... средства для тестирования и итераций...
С другой стороны, BLISS опускает некоторые функции других языков высокого уровня. Он не имеет встроенных средств для ввода / вывода, потому что проект системного программного обеспечения обычно разрабатывает свой собственный ввод / вывод или строится на базовых службах ввода / вывода монитора или управления экраном... он разрешает доступ к специфическим для машины функциям, потому что системное программное обеспечение часто требует этого. BLISS имеет характеристики, необычные для языков высокого уровня. Имя... обычно интерпретируется как адрес этого сегмента, а не как значение сегмента... Кроме того, BLISS - это «язык выражения», а не «язык операторов».
Это означает, что каждая конструкция языка, не являющаяся объявлением, является выражением. Выражения производят значение, а также могут вызывать такие действия, как изменение памяти, передача управления или выполнение программного цикла. Например, аналогом «оператора» присваивания в BLISS, строго говоря, является выражение, которое само имеет значение. Значение выражения может быть использовано или отброшено в BLISS... Наконец, BLISS включает макро-средство, которое обеспечивает уровень возможностей, обычно свойственный только макроассемблерам.
— Bliss Language Manual, Digital Equipment Corporation (1987)Язык BLISS имеет следующие характеристики:
Z + 8
относится к добавлению 8 к адресу Z, а не к его значению. Если нужно добавить 8 к значению Z, необходимо поставить перед переменной точку; поэтому можно ввести .Z + 8
для выполнения этой функции, которая добавляет 8 к содержимому Z.=
, например Z = 8
- который говорит, что нужно создать константу из полного слова, содержащую 8, и сохранить ее в месте, адрес которого соответствует адресу Z. Итак, Z + 12 = 14
(или, в качестве альтернативы 12 + Z = 14
) помещает константу 14 в место, которое находится на 12 слов после адреса Z. (Это считается плохой практикой.)BEGIN
и завершается END
. Как и в случае с ALGOL, операторы заканчиваются точкой с запятой (";"). Когда значение вычисляется, оно сохраняется до конца следующего оператора, что означает, что значение может быть вычислено, присвоено переменной и при желании перенесено в следующий оператор. В качестве альтернативы, открывающая скобка может использоваться для начала блока, а закрывающая скобка используется для закрытия блока. Когда скобки включены в выражение, используются стандартные правила приоритета, в которых сначала вычисляются выражения в скобках,IF
, которое проверяет условие истина-ложь, выполняет альтернативные действия и возвращает результат.EQL
для равенства (в отличие от перегрузки символа = для с той же целью), GTR
для Greater Than и NEQ
для не равно. Например, следующий код присвоит абсолютное значение Z адресу, указанному Q:Q = (IF.Z GTR 0 THEN.Z ELSE -.Z);
OWN
. Объявление переменной обычно заставляет компилятор выделять для нее место; при необходимости переменной может быть назначен фиксированный машинный адрес через объявление BIND
. Эта функция в основном используется для доступа либо к машинным регистрам, либо к некоторым специальным адресам.ROUTINE
.MACRO
.VECTOR
.CASE
INCR
, который похож на оператор FOR ALGOLСледующий пример дословно взят из Bliss Language Manual:
МОДУЛЬ E1 (MAIN = CTRL) = BEGIN FORWARD ROUTINE CTRL, STEP; ROUTINE CTRL =! +! Эта процедура вводит значение, работает с ним и! затем выводит результат. ! - НАЧАТЬ ВНЕШНИЙ РЕЖИМ GETNUM,! Введите число с терминала PUTNUM; ! Выведите число на клемму LOCAL X,! Хранение входного значения Y; ! Хранение выходного значения GETNUM (X); Y = ШАГ (.X); PUTNUM (.Y) END; ОБЫЧНЫЙ ШАГ (A) =! +! Эта процедура добавляет 1 к заданному значению. ! - (.A + 1); END ELUDOM