Seed7
| Seed7 | |
|---|---|
| Семантика | императивный, объектно-ориентированный |
| Класс языка | язык программирования, объектно-ориентированный и мультипарадигмальный |
| Тип исполнения | интерпретатор, компилятор |
| Появился в | 2005 |
| Автор | Томас Мертес |
| Расширение файлов |
.sd7 или .s7i |
| Выпуск | |
| Система типов | строгая, статическая |
| Испытал влияние | Ada, C/C++, Java |
| Лицензия | GNU GPL и GNU LGPL |
| Сайт | seed7.sourceforge.net |
| ОС | кроссплатформенность |
Seed7 — язык программирования общего назначения.
Главной особенностью языка является его расширяемость. Синтаксис языка определён в одной из библиотек и может быть изменён пользователем.
Особенности
[править | править код]Язык синтаксически подобен Паскалю и Аде. В дополнении к стандартному Паскалю и ранним версиям Ады включает механизмы объектно-ориентированного программирования а также механизмы расширения языка: мощный механизм шаблонов для определения новых синтаксических конструкций (который, подобно Camlp4[англ.] включает средства позволяющие задавать ассоциативность и приоритет операций) и нечто вроде стандартных функций, позволяющих задавать семантику таких конструкций. Такие функции, выполняемые на этапе компиляции, принимают в качестве параметров переменные, типы и выражения, включаемые в синтаксические конструкции, и выполняют с ними необходимые преобразования. Если определяемая таким образом грамматика допускает двусмысленное толкование, генерируется ошибка компиляции[2].
История
[править | править код]Томас Мертес начал разрабатывать этот язык обучаясь в Венском техническом университете[3]. Он стал в 1984 темой его дипломной работы[4], а затем, в 1986 — диссертации[5].
Примеры
[править | править код]$ 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), генерирующий промежуточный код на языке Си.
См. также
[править | править код]Примечания
[править | править код]- ↑ https://sourceforge.net/p/seed7/news/2026/07/new-seed7-release-2026-07-11/
- 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 года.
- ↑ Seed7 links. Дата обращения: 28 июля 2011. Архивировано 24 августа 2011 года.
- ↑ Entwurf einer erweiterbaren höheren Programmiersprache Архивировано 5 февраля 2012 года. (нем.), Thomas Mertes, 1984, Diplomarbeit, Institut für Computersprachen Programmiersprachen und Übersetzer
- ↑ 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