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

Sparkel

Русское название:
Спаркель
Дата создания:
2009
Создан под влиянием:
Парадигма:
Типизация:
Принятые расширения файлов:
.ski, .skl
Язык программирования

Sparkel — это язык программирования зелёных потоков, созданный по подобию языка SPARK, подмножества языка Ada. По сравнению с аналогичными системами (Erlang, Go, Limbo), имеет большую степень параллельности. Так, в упомянутых системах потоки создаются не средствами операционной системы, а средствами среды времени исполнения, предоставляемой языком программирования, и таких потоков может быть гораздо больше, чем потоков операционной системы, однако создавать зелёные потоки требуется явно. Например, в языке Go нужно явно написать ключевое слово “go” перед вызовом процедуры. По замыслу создателей Sparkel программа должна иметь возможность быть рассечена в любом месте по мере необходимости. Любое выражение, такое как «F(X) + G(Y)», может быть вычислено параллельно, освобождая разработчика от необходимости вручную разбивать вычислительный процесс. Активные потоки конкурируют за работу. Также по сравнению с императивным SPARK изменена семантика циклов. Циклы тоже могут быть автоматически разбиты на параллельно обрабатывающиеся задания, но если это невозможно и нужно строго соблюдать последовательность, это указывается новыми ключевыми словами.

Обратной стороной язвляется, например, отказ от исключений. В обычной императивном языке исключение прерывает исполнение программы в определённом месте, а в Sparkel элементы синтаксиса могут обрабатываться параллельно с разной скоростью, и концепция исключений не вписывается в эту модель исполнения. Также в Sparkel нет явных указателей. Вместо них есть «распахиваемые записи» с одиночными ссылками. Распахиваемая запись — это запись, наличие которой необязательно, то есть, значение таких переменных может отсутствовать, и место под поля записи в этом случае не выделено. Если запись распахнуть, семантически она становится аналогичной обычной записи, а на нижнем уровне выделяется память и присваивается указатель. Счётчика ссылок нет, и новую ссылку на ту же структуру нельзя создать. Можно только скопировать значение, получив полностью независимую реплику. Однако, чтобы всё же воспользоваться знанием о том, что на нижнем уровне используются указатели, вводится новая операция обмена двух переменных. Таким образом, язык остаётся удобным для параллельной обработки, но и острые углы срезаны.

Также от других аналогов Sparkel выгодно отличается тем, что его трансляторы и виртуальная машина реализована на языке Ada, а не на устаревшем C.

От Cyclone язык позаимствовал концепцию регионов. На нижнем уровне используется сегментированная модель памяти, а в каждом сегменте — линейная адресация. Как и SPARK, Sparkel — строго типизированный язык, поэтому у всех типов данных известно их низкоуровневое представление. Концепция регионов используется для установления ссылок между сегментами.

Так же, как и SPARK, Sparkel поддерживает обобщённое программирование, однако явно специализировать пакеты не требуется. Вместо этого обобщённые пакеты транслируются один раз в общий программный код, поведение которого управляется дескрипторами типов.

Текущая реализация компилятора производит байт-код. Далее этот байт-код может либо непосредственно исполняться на виртуальной машине PSVM, либо для повышения производительности быть скомпилирован через LLVM в машинные коды и загружен в таком виде в виртуальную машину. Виртуальная машина в этом случае выполняет роль планировщика и средства взаимодействия с внешним миром.

Аналогично тому, как Sparkel был сделан по подобию SPARK, в лаборатории SofCheck&AdaCore независимыми командами были сделаны Parython (PARallel + pYTHON) и Javallel (Java + paraLLEL). На основе этих трёх языков, собрав удачные решения, был создан новый язык программирования ParaSail (Parallel Specification and Implementation Language), который сейчас продвигается как основной в этой четвёрке. У всех четырёх языков общая виртуальная машина и некоторые другие средства разработки. Трансляторы для всех 4х, как правило, поставляются в одном архиве. Поэтому можно читать блог о ParaSail, скачивать средства разработки с сайта ParaSail, и многое из этого применимо к Sparkel в том числе. На сайте ParaSail средства разработки, например, новее, чем на сайте Sparkel.

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

Комментарий до конца строки --
Регистрозависимость да
Регулярное выражение идентификатора переменной [a-zA-Z](_?[a-zA-Z0-9])*
Присваивание значения переменной :=
Объявление переменной variable : type;
Объявление переменной с присваиванием значения variable : type := value;
Группировка выражений ( ... )
Блок begin ... end или foo ... end foo where foo in { if, loop, ... }
Тождественное равенство =
Тождественное неравенство /=
Сравнение < > <= >=
Определение функции function f(p1 : type1; p2 : in out type2; ... ) return return type3 is begin ... end f;
Вызов функции f(a, b, p3 => c, ...)
Вызов функции без параметров f
Последовательность ;
Если - то if condition then ... end if
Если - то - иначе if condition1 then ... elsif condition2 then ... else ... end if
Бесконечный цикл loop ... end loop
Цикл с предусловием while condition loop ... end loop
Цикл с постусловием loop ... exit when condition end loop
Цикл for - next для диапазона целых чисел с инкрементом на 1 for i in 1 .. 10 loop ... end loop
Цикл for - next для диапазона целых чисел с декрементом на 1 for i in reverse 1 .. 10 loop ... end loop

Комментарии

]]>

blog comments powered by Disqus

]]>

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