оккам (язык программирования)
![]() | |
Парадигма | Императивный , процедурный , совпадающий |
---|---|
Разработано | Дэвид Мэй |
Разработчик | Иммос |
Впервые появился | 1983 год |
Стабильная версия | 2.1 (официальная), 2.5 (неофициальная), 3 (не полностью реализована)
/ 1994 |
Диалекты | |
оккам-π (пи) | |
Под влиянием | |
Коммуникация последовательных процессов | |
Под влиянием | |
Легкость , вперед , Python |
occam — это язык программирования , который является параллельным и основан на алгебре процессов взаимодействующих последовательных процессов (CSP), [1] и разделяет многие его особенности. Она названа в честь философа Уильяма Оккама, в честь которого бритва Оккама названа .
occam — императивный процедурный язык (например, Паскаль ). Он был разработан Дэвидом Мэем и другими сотрудниками Inmos (торговая марка INMOS) по рекомендации Тони Хоара в качестве родного языка программирования для их транспьютерных микропроцессоров , но доступны реализации и для других платформ. Самая известная версия — occam 2; его руководство по программированию было написано Стивеном Эрикссоном-Зенитом и другими сотрудниками Inmos .
Обзор
[ редактировать ]В следующих примерах отступы и форматирование имеют решающее значение для анализа кода: выражения завершаются в конце строки, списки выражений должны находиться на одном уровне отступов. Эта функция, называемая правилом оффсайда , также встречается в других языках, таких как Haskell и Python .
Связь между процессами осуществляется через именованные каналы . Один процесс выводит данные в канал через !
в то время как другой вводит данные с помощью ?
. Ввод и вывод не могут продолжаться до тех пор, пока другой конец не будет готов принять или предложить данные. (В невыполненном случае часто говорят, что процесс блокируется на канале. Однако программа не будет ни вращаться, ни опрашивать; таким образом, такие термины, как wait , Hang или Give, также могут передавать поведение; также в контексте того, что это не будет заблокировать запуск других независимых процессов.) Примеры (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
.
Языковые версии
[ редактировать ]
оккам 1
[ редактировать ]оккам 1 [2] (выпущен в 1983 году) представлял собой предварительную версию языка, заимствованную из работы Дэвида Мэя над EPL и CSP Тони Хоара. Это поддерживало только тип данных VAR, который был целочисленным типом, соответствующим собственной длине слова целевой архитектуры, и массивы только одного измерения.
оккам 2
[ редактировать ]оккам 2 [3] это расширение, созданное Inmos Ltd в 1987 году, которое добавляет поддержку чисел с плавающей запятой , функций, многомерных массивов и других типов данных, таких как целые числа различных размеров (INT16, INT32) и байты.
Благодаря этой версии occam стал языком, способным выражать полезные программы, тогда как occam 1 больше подходил для изучения алгоритмов и изучения нового языка (однако компилятор occam 1 был написан на occam 1, [4] так что существует доказательство того, что полезные программы разумного размера могут быть написаны на occam 1, несмотря на его ограничения).
оккам 2.1
[ редактировать ]оккам 2.1 [1] был последним из серии разработок языка оккам, предоставленных Inmos. Определенный в 1994 году, он был создан под влиянием более раннего предложения языка occam 3 (также называемого «occam91» на ранней стадии его разработки), созданного Джеффом Барреттом из Inmos в начале 1990-х годов. Пересмотренное справочное руководство, описывающее occam 3, было распространено для комментариев сообщества. [5] но этот язык так и не был полностью реализован в компиляторе.
В occam 2.1 появилось несколько новых функций occam 2, в том числе:
- Именованные типы данных (ТИП ДАННЫХ x IS y)
- Именованные записи
- Упакованные записи
- Ослабление некоторых правил преобразования типов.
- Новые операторы (например, BYTESIN)
- Перетипирование каналов и массивы каналов
- Возможность возвращать из функции массив фиксированной длины.
Полный список изменений см. в Приложении P Справочного руководства Inmos occam 2.1 .
Оккам-π
[ редактировать ]Оккам-π [6] — это общее название варианта occam, реализованного в более поздних версиях компилятора occam Kent Retargetable ( KRoC ). Добавление символа π (пи) к названию оккама является намеком на оккам KRoC, включая несколько идей, вдохновленных π-исчислением . Он содержит несколько существенных расширений компилятора occam 2.1, например:
- Вложенные протоколы
- Создание процесса во время выполнения
- Мобильные каналы, данные и процессы
- Рекурсия
- протокола Наследование
- массивов Конструкторы
- Расширенное рандеву
См. также
[ редактировать ]- Язык программирования XC, основанный на occam, но с синтаксисом в стиле C.
- Параллельные языки программирования
- Список параллельных и параллельных языков программирования
Ссылки
[ редактировать ]- ^ Перейти обратно: а б Справочное руководство occam 2.1 (PDF) . SGS-Thomson Microelectronics Ltd., 12 мая 1995 г. Документ Инмос 72 occ 45 03
- ^ Оккам Руководство по программированию . Прентис-Холл. 1984. ISBN 0-13-629296-8 .
- ^ Эрикссон-Зенит, Стивен (1988). Справочное руководство occam 2 . Прентис-Холл. ISBN 0-13-629312-3 .
- ^ Кук, Барри М; Пил, RMA (11 апреля 1999 г.). «Оккам о программируемых вентильных матрицах» . В Куке, Барри М. (ред.). Архитектуры, языки и методы для параллельных систем . 22-я Всемирная техническая встреча группы пользователей Оккама и транспьютеров. Кил, Великобритания: IOS Press. п. 219. ИСБН 90-5199-480-Х . Проверено 28 ноября 2016 г.
- ^ Барретт, Джефф; Эрикссон-Зенит, Стивен (31 марта 1992 г.). «Справочное руководство occam 3» (PDF) . Инмос . Проверено 24 марта 2008 г.
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - ^ Барнс, Фред; Уэлч, Питер (14 января 2006 г.). «occam-pi: сочетание лучшего из CSP и пи-исчисления» . Проверено 24 ноября 2006 г.
Дальнейшее чтение
[ редактировать ]- Архитектуры коммуникативных процессов 2007 – WoTUG-30 . ИОС Пресс. 2007. С. 513 страниц. ISBN 978-1-58603-767-3 . [1]
- Архитектуры коммуникативных процессов 2006 – WoTUG-29 . ИОС Пресс. 2006. стр. 391 страница. ISBN 978-1-58603-671-3 . [2]
- Архитектуры коммуникативных процессов 2005 – WoTUG-28 . ИОС Пресс. 2005. С. 405 страниц. ISBN 978-1-58603-561-7 . [3]
- Керридж, Джон, изд. (1993). Транспьютер и исследования Оккама: новые направления . ИОС Пресс. стр. 253 страницы . ISBN 0-8247-0711-7 .
- Роско, Эндрю Уильям ; Хоар, Чарльз Энтони Ричард (1986). Законы программирования Оккама . Группа исследования программирования, Оксфордский университет.
- Егоров А., Технический университет – София, (1983–2011) Заметки о компьютерных архитектурах.
Внешние ссылки
[ редактировать ]- Информация, компиляторы, редакторы и утилиты на страницах WoTUG occam
- Компиляторы, документация, примеры, проекты и утилиты в Интернет-архиве параллельных вычислений (больше не поддерживается)
- Книги Оккама на Transputer.net
- Язык оккам-пи .
- Компилятор Tock occam — (переводчик с occam на C из Кента) компилятор на основе Haskell для occam и родственных языков.