BLISS

редактировать
BLISS
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.

Содержание

  • 1 Описание языка
  • 2 Пример источника
  • 3 Версии
  • 4 Примечания
  • 5 Ссылки
  • 6 Внешние ссылки
    • 6.1 Загрузки

Описание языка

BLISS обладает многими функциями других современных языков высокого уровня. Он имеет блочную структуру, автоматический стек и механизмы для определения и вызова рекурсивных подпрограмм... предоставляет множество предопределенных структур данных и... средства для тестирования и итераций...

С другой стороны, BLISS опускает некоторые функции других языков высокого уровня. Он не имеет встроенных средств для ввода / вывода, потому что проект системного программного обеспечения обычно разрабатывает свой собственный ввод / вывод или строится на базовых службах ввода / вывода монитора или управления экраном... он разрешает доступ к специфическим для машины функциям, потому что системное программное обеспечение часто требует этого. BLISS имеет характеристики, необычные для языков высокого уровня. Имя... обычно интерпретируется как адрес этого сегмента, а не как значение сегмента... Кроме того, BLISS - это «язык выражения», а не «язык операторов».

Это означает, что каждая конструкция языка, не являющаяся объявлением, является выражением. Выражения производят значение, а также могут вызывать такие действия, как изменение памяти, передача управления или выполнение программного цикла. Например, аналогом «оператора» присваивания в BLISS, строго говоря, является выражение, которое само имеет значение. Значение выражения может быть использовано или отброшено в BLISS... Наконец, BLISS включает макро-средство, которое обеспечивает уровень возможностей, обычно свойственный только макроассемблерам.

— Bliss Language Manual, Digital Equipment Corporation (1987)

Язык BLISS имеет следующие характеристики:

  • Все константы являются полными словами для используемой машины, например на 16-битной машине, такой как PDP-11, константа составляет 16 бит; на компьютере VAX константа составляет 32 бита, а на PDP-10 константа составляет 36 бит.
  • A ссылка на переменную всегда указывает на адрес этой переменной. Например, инструкция Z + 8относится к добавлению 8 к адресу Z, а не к его значению. Если нужно добавить 8 к значению Z, необходимо поставить перед переменной точку; поэтому можно ввести .Z + 8для выполнения этой функции, которая добавляет 8 к содержимому Z.
  • Присваивание выполняется с помощью стандартного символа =, например Z = 8- который говорит, что нужно создать константу из полного слова, содержащую 8, и сохранить ее в месте, адрес которого соответствует адресу Z. Итак, Z + 12 = 14(или, в качестве альтернативы 12 + Z = 14) помещает константу 14 в место, которое находится на 12 слов после адреса Z. (Это считается плохой практикой.)
  • Операторы блока аналогичны те из ALGOL : блок запускается оператором 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

Версии

  • BLISS-10
  • BLISS-11 - кросс-компилятор для PDP-11
  • BLISS-16
  • BLISS-16C - версия BLISS-11
  • BLISS-32
  • BLISS-36
  • BLISS-64
  • Common BLISS - переносимая подмножество

Примечания

Ссылки

Внешние ссылки

Загрузки

Последняя правка сделана 2021-05-11 03:35:41
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте