Seed7

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Seed7
Семантика:

императивный, объектно-ориентированный

Тип исполнения:

интерпретатор, компилятор

Появился в:

2005

Автор(ы):

Томас Мертес

Выпуск:

05_20131110 (10 ноября 2013)

Система типов:

строгая, статическая

Испытал влияние:

Ada, C/C++, Java

Seed7 — язык программирования общего назначения.

Главной особенностью языка является его расширяемость. Синтаксис языка определён в одной из библиотек и может быть изменён пользователем.

Особенности[править | править вики-текст]

Язык синтаксически подобен Паскалю и Аде. В дополнении к стандартному Паскалю и ранним версиям Ады включает механизмы объектно-ориентированного программирования а также механизмы расширения языка: мощный механизм шаблонов для определения новых синтаксических конструкций (который, подобно Camlp4 (англ.)русск. включает средства позволяющие задавать ассоциативность и приоритет операций) и нечто вроде стандартных функций, позволяющих задавать семантику таких конструкций. Такие функции, выполняемые на этапе компиляции, принимают в качестве параметров переменные, типы и выражения, включаемые в синтаксические конструкции, и выполняют с ними необходимые преобразования. Если определяемая таким образом грамматика допускает двусмысленное толкование, генерируется ошибка компиляции.[1]

История[править | править вики-текст]

Томас Мертес начал разрабатывать этот язык обучаясь в Венском техническом университете[2]. Он стал в 1984 темой его дипломной работы[3], а затем, в 1986 — диссертации[4].

Примеры[править | править вики-текст]

Hello World
$ include "seed7_05.s7i";
const proc: main is
func
begin
  writeln ("hello world");
end func;

Здесь определяется процедура (функция без параметров) main (играющая ту же роль, что и в языке Си).

Числа Фибоначчи
const func integer: fib (in integer: num1) is func
result
  var integer: fib is 1;
begin
  if num1 <> 1 and num1 <> then
    fib := fib(pred(num1)) + fib(num1 - 2);
  end if;
end func;

Ключевое слово in перед объявлением параметра функции означает что это параметр константный, он не может изменятся в ходе выполнения функции, для объявления изменяемых параметров сложит слово inout. После слова result объявляется переменная, значение которой будет возвращаться функцией. Для объявления локальных переменных служит слово local.

Механизмы расширения[править | править вики-текст]

Расширения языка вклюяает в себя два основных этапа: синтаксическое определение, которое задаёт шаблон для новой синтаксической формы и стандартная функция Seed7 для определения семантики[1].

Определение синтаксиса[править | править вики-текст]

Для определения синтаксиса используется часть языка, называемая Seed7 Structured Syntax Description (S7SSD). Выражения S7SSD вида

$ syntax expr: .(). + .()  is -> 7;

определяет синтаксис операции + Стрелочка вправо -> описывает ассоциативность: связывание операндов слева направо. Число 7 задаёт приоритет операции +. Синтаксический шаблон: .(). + .() отделяется символами точки (.). Если их опустить, он будет выглядеть как () + () Символ () — нетерминальный, а + — терминальный. В S7SSD не делается различий между разными нетерминальными символами, вместо этого используется только один нетерминальный символ: ().

Определение семантики[править | править вики-текст]

Определение оператора + для комплексных чисел это просто определение функции:

const func complex: (in complex: summand1) + (in complex: summand2) is func
result
  var complex: sum is complex.value;
begin
  sum.re := summand1.re + summand2.re;
  sum.im := summand1.im + summand2.im;
end func;

Объектно-ориентированное программирование[править | править вики-текст]

В Seed7 используется модель объектно-ориентированного программирования, основанная не на классах и методах, но на интерфейсах и реализациях.

Реализация[править | править вики-текст]

Доступен в виде исходных кодов под лицензиями GPL и LGPL или готовых сборок под Windows. В пакет входит интерпретатор (файл hi) и компилятор (comp), генерирующий промежуточный код на языке Си.

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

  1. 1 2 Daniel Zingaro Modern Extensible Languages → 8 Other Extensible Languages → 8.2 Seed7. — Hamilton, Ontario, Canada: McMaster University, April 11, 2007. — С. 16.
  2. Entwurf einer erweiterbaren höheren Programmiersprache (нем.), Thomas Mertes, 1984, Diplomarbeit, Institut für Computersprachen Programmiersprachen und Übersetzer
  3. Definition einer erweiterbaren höheren Programmiersprache (нем.), Thomas Mertes, 1986, Dissertation, Institut für Computersprachen Programmiersprachen und Übersetzer

Литература[править | править вики-текст]

Ссылки[править | править вики-текст]