Seed7

У этого термина существуют и другие значения, см. Seed (значения).
Seed7
Семантика императивный, объектно-ориентированный
Класс языка язык программирования, объектно-ориентированный и мультипарадигмальный
Тип исполнения интерпретатор, компилятор
Появился в 2005
Автор Томас Мертес
Расширение файлов .sd7 или .s7i
Выпуск
Система типов строгая, статическая
Испытал влияние Ada, C/C++, Java
Лицензия GNU GPL и GNU LGPL
Сайт seed7.sourceforge.net
ОС кроссплатформенность

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

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

Особенности

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

История

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

Примеры

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 для определения семантики[2].

Определение синтаксиса

Для определения синтаксиса используется часть языка, называемая 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. В пакет входит интерпретатор (файл s7) и компилятор (s7c), генерирующий промежуточный код на языке Си.

См. также

Примечания

  1. https://sourceforge.net/p/seed7/news/2023/01/new-seed7-release-2023-01-30/
  2. 1 2 Daniel Zingaro. Modern Extensible Languages → 8 Other Extensible Languages → 8.2 Seed7. — Hamilton, Ontario, Canada: McMaster University, April 11, 2007. — С. 16. Архивировано 1 марта 2012 года.
  3. Entwurf einer erweiterbaren höheren Programmiersprache Архивировано 5 февраля 2012 года. (нем.), Thomas Mertes, 1984, Diplomarbeit, Institut für Computersprachen Programmiersprachen und Übersetzer
  4. Definition einer erweiterbaren höheren Programmiersprache Архивировано 9 мая 2013 года. (нем.), Thomas Mertes, 1986, Dissertation, Institut für Computersprachen Programmiersprachen und Übersetzer

Литература

  • Пётр Семилетов. Таинственный незнакомец: язык программирования Seed7 // Open Source (приложение к журналу «Системный администратор»). — 16 ноября 2011. — Вып. 95. — С. 5-7.

Ссылки

  • seed7.sourceforge.net — официальный сайт Seed7
  • Seed7 на GitHub