Открыть главное меню

Seed7

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

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

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

Содержание

ОсобенностиПравить

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

См. такжеПравить

ПримечанияПравить

  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 Архивировано 5 февраля 2012 года. (нем.), Thomas Mertes, 1984, Diplomarbeit, Institut für Computersprachen Programmiersprachen und Übersetzer
  3. 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.

СсылкиПравить