
Alef — мова системного програмування з підтримкою паралелізації. Стиль Alef називається Communicating Sequential Processes (комунікуючі послідовні процеси).

Опис
Alef був розроблений Філом Вінтерботтомом у Bell Labs як частина операційної системи Plan 9 і входив до її першого (1992) та другого (1995) видання. Крім того, існує реалізація Alef для операційної системи IRIX (Silicon Graphics, Inc.).

Мова надає обробку помилок, управління процесами та синхронізацію примітивів; автоматичного складання сміття немає. Існує дві основні моделі синхронізації процесів: через загальні змінні або через передачу повідомлень. Крім того, Alef підтримує об'єктно-орієнтоване програмування через статичне успадкування та приховування інформації.

Синтаксис мови дуже схожий на C (стандарт ANSI C), але програми на Alef відрізняються структурою та способом виконання. Так, Alef використовує препроцесор C, але моделі стека мов несумісні, тому об'єктні модулі мов неможливо використовувати один одного.

Програма на Alef складається з одного або кількох процесів, кожен із яких у свою чергу містить одне або кілька завдань. Процеси — це заплановані потоки виконання програми, які можуть виконуватися паралельно. Завдання виконуються спільно — лише одне завдання кожного процесу виконується у кожний момент, інші блокуються. Перше завдання програми створюється автоматично при її запуску і починається функції main(); додаткові процеси та завдання створюються програмно та починаються у функціях, заданих при їх створенні. Усі існуючі реалізації мови використовують модель із загальною пам'яттю, хоча мова цього не вимагає. Для зупинення програми всі її процеси мають завершитись у явному вигляді.

Потоки обмінюються інформацією через канали — типізовані засоби передачі, схожі на pipe. Оператор <-=передає результат виразу-правого операнда в канал-лівий операнд; оператор <-отримує повідомлення із каналу.

Мова Alef підтримує чотири різновиди складних типів: union (аналогічно unionC), aggr (схоже на комбінацію struct і typedefC), adt (абстрактний тип даних) і tuple (кортеж — тип, елементи якого безіменні; зазвичай використовується об'єднання кількох елементів передачі їх через канал чи в/з функції).

Alef надає два основних механізми обробки помилок. Команда check перевіряє задане затвердження та припиняє роботу програми, якщо воно неправильне. Команда raise збуджує виняток, а rescue перехоплює його і обробляє.

Примітки


Джерела
* 
* 





