]]> ]]>
Править | Обсудить | История

Alef

Дата создания:
1992
Создан под влиянием:
Повлиял на:
Парадигма:
Типизация:
Принятые расширения файлов:
.a
Реализации и версии (свернуть все | развернуть все):
Язык программирования

Alef — язык системного программирования с поддержкой параллелизации. Стиль Alef называется Communicating Sequential Processes (сообщающиеся последовательные процессы).

Alef был разработан Phil Winterbottom в Bell Labs как часть операционной системы Plan 9 и входил в ее первое (1992) и второе (1995) издания. Кроме того, существует реализация Alef для операционной системы IRIX (Silicon Graphics, Inc.).

Язык предоставляет обработку ошибок, управление процессами и синхронизацию примитивов; автоматической сборки мусора нет. Существует две основных модели синхронизации процессов: через общие переменные или или через передачу сообщений. Кроме того, Alef поддерживает объектно-ориентированное программирования через статическое наследование и сокрытие информации.

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

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

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

Язык Alef поддерживает четыре разновидности сложных типов: union (аналогично union в C), aggr (похоже на комбинацию struct и typedef в C), adt (абстрактный тип данных) и tuple (кортеж — тип, элементы которого безымянны; обычно используется для объединения нескольких элементов для передачи их через канал или в/из функции).

Alef предоставляет два основных механизма обработки ошибок. Команда check проверяет заданное утверждение и прекращает работу программы, если оно неверно. Команда raise возбуждает исключение, а rescue — перехватывает его и обрабатывает.

Элементы синтаксиса:

Комментарии, которые не могут быть вложенными /* ... */
Регулярное выражение идентификатора переменной [_a-zA-Z][_a-zA-Z0-9]*
Цикл с предусловием while (condition) ...
Цикл с постусловием do ... while (!condition)

Примеры:

Hello, World!:

Пример для версий Alef (Plan 9, edition 2)

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

#include	<alef.h>

void
receive(chan(byte*) c)
{
	byte *s;
	s = <-c;
	print("%s\n", s);
	terminate(nil);
}

void
main(void)
{
	chan(byte*) c;
	alloc c;
	proc receive(c);
	c <-= "Hello, World!";
	terminate(nil);
}

Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам