occam (язык программирования) - occam (programming language)

Оккам
1983 1988 Торговые марки occam и occam 2 INMOS Limited.jpg
Парадигма Императивный , процедурный , параллельный
Разработано Дэвид Мэй
Разработчик Inmos
Впервые появился 1983 ; 38 лет назад ( 1983 )
Стабильный выпуск
2.1 (официальный), 2.5 (неофициальный), 3 (не полностью реализован) / 1994 ; 27 лет назад ( 1994 )
Диалекты
оккам-π (пи)
Под влиянием
Связь последовательных процессов
Под влиянием
Легкость , Вперед , Python

occam - это язык программирования, который является параллельным и основан на алгебре процессов взаимодействующих последовательных процессов (CSP) и разделяет многие из его функций. Он назван в честь философа Уильяма Оккама, в честь которого названа бритва Оккама .

occam - это императивный процедурный язык (например, Паскаль ). Он был разработан Дэвидом Мэем и другими сотрудниками Inmos (торговая марка INMOS), рекомендованным Тони Хоаром , как родной язык программирования для их транспьютерных микропроцессоров , но доступны его реализации для других платформ. Самая известная версия - occam 2; Руководство по программированию было написано Стивеном Эрикссон-Зенит и другими сотрудниками Inmos .

Обзор

В следующих примерах отступы и форматирование имеют решающее значение для синтаксического анализа кода: выражения завершаются концом строки, списки выражений должны находиться на одном уровне отступов. Эта функция, называемая правилом оффсайда , также присутствует в других языках, таких как Haskell и Python .

Связь между процессами осуществляется по именованным каналам . Один процесс выводит данные в канал через, !а другой вводит данные через ?. Ввод и вывод не могут продолжаться, пока другой конец не будет готов принять или предложить данные. (В не исходя случае часто говорят , что процесс блокирует на канале Тем не менее, программа будет ни спина , ни опрос,. , Таким образом , такие термины , как ожидание , зависание или выход может также передать поведение, и в том контексте , что она не будет блокировать выполнение других независимых процессов.) Примеры (c - переменная):

 keyboard ? c
 screen ! c

SEQвводит список выражений, которые вычисляются последовательно. Это не подразумевается, как в большинстве других языков программирования. Пример:

 SEQ
   x := x + 1
   y := x * x

PARначинает список выражений, которые могут оцениваться одновременно. Пример:

 PAR
   p()
   q()

ALTуказывает список охраняемых команд . Стражи представляют собой комбинацию логического условия и входного выражения, оба необязательны. Каждый сторож, для которого условие истинно и входной канал готов, считается успешным. Для исполнения выбирается одна из удачных альтернатив. Пример:

 ALT
   count1 < 100 & c1 ? data
     SEQ
       count1 := count1 + 1
       merged ! data
   count2 < 100 & c2 ? data
     SEQ
       count2 := count2 + 1
       merged ! data
   status ? request
     SEQ
       out ! count1
       out ! count2

Это будет читать данные из каналов c1 или c2 (в зависимости от того, что готово) и передавать их в объединенный канал. Если countN достигает 100, чтение из соответствующего канала будет отключено. На запрос в канале состояния ответят путем вывода счетчиков в out.

Изменения языка

1983 "Оккам" от INMOS Limited

Оккам 1

occam 1 (выпущенный в 1983 г.) был предварительной версией языка, заимствованной из работы Дэвида Мэя над EPL и CSP Тони Хора. Это поддерживало только тип данных VAR, который был целым типом, соответствующий собственной длине слова целевой архитектуры, и массивы только одного измерения.

Оккам 2

occam 2 - это расширение, созданное Inmos Ltd в 1987 году, которое добавляет поддержку операций с плавающей запятой , функции, многомерные массивы и другие типы данных, такие как различные размеры целых чисел (INT16, INT32) и байтов.

С этой версией occam стал языком, способным выражать полезные программы, тогда как occam 1 больше подходил для изучения алгоритмов и изучения нового языка (однако компилятор occam 1 был написан на occam 1, так что существует доказательство существования, имеющее разумные размеры. , полезные программы могли быть написаны на оккам 1, несмотря на его ограничения).

Оккам 2.1

occam 2.1 был последним из серии разработок языка occam, внесенных Inmos. Определенный в 1994 году, он находился под влиянием более раннего предложения по языку occam 3 (также называвшегося «occam91» во время его ранней разработки), созданного Джеффом Барреттом в Inmos в начале 1990-х годов. Пересмотренное Справочное руководство с описанием occam 3 было распространено для комментариев сообщества, но этот язык так и не был полностью реализован в компиляторе.

Occam 2.1 представил несколько новых функций в occam 2, в том числе:

  • Именованные типы данных (DATA TYPE x IS y)
  • Именованные записи
  • Упакованные записи
  • Ослабление некоторых правил преобразования типов
  • Новые операторы (например, BYTESIN)
  • Повторный набор каналов и массивы каналов
  • Возможность вернуть массив фиксированной длины из функции.

Полный список изменений см. В Приложении P Справочного руководства Inmos occam 2.1 .

Оккам-π

occam-π - это общее название варианта occam, реализованного более поздними версиями Kent Retargetable occam Compiler ( KRoC ). Добавление символа π (пи) к названию occam является намеком на KRoC occam, включая несколько идей, вдохновленных π-исчислением . Он содержит несколько значительных расширений компилятора occam 2.1, например:

Смотрите также

использованная литература

дальнейшее чтение

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