Seed7 — расширяемый язык программирования общего назначения , разработанный Томасом Мертесом. Он синтаксически похож на Pascal и Ada . Наряду со многими другими функциями он предоставляет механизм расширения. [2] Seed7 поддерживает введение новых элементов синтаксиса и их семантики в язык и позволяет определять и писать новые языковые конструкции в Seed7. [3] Например, программисты могут вводить синтаксис и семантику новых операторов и определяемых пользователем символов операторов . Реализация Seed7 существенно отличается от реализации языков с жестко закодированным синтаксисом и семантикой.
Seed7 поддерживает парадигмы программирования : императивный , объектно-ориентированный (OO) и универсальный . Он также поддерживает такие функции, как вызов по имени , множественная диспетчеризация , перегрузка функций , перегрузка операторов , обработка исключений и арифметика произвольной точности .
Основные характеристики включают в себя:
Обобщены несколько концепций языка программирования:
Проект Seed7 включает в себя как интерпретатор , так и компилятор . Интерпретатор запускает программы очень быстро, поддерживая быструю разработку программ. Компилятор использует интерфейсы парсера и отражения из библиотеки времени выполнения для генерации программы на языке C , которая впоследствии компилируется в машинный код . Скомпилированные программы Seed7 могут иметь производительность , сопоставимую с программами на языке C. [4]
Seed7 имеет множество библиотек, охватывающих такие области, как контейнеры , числовые функции, лексический анализ , манипуляции файлами, сетевые технологии ( сокеты , Transport Layer Security (TLS/SSL), Hypertext Transfer Protocol (HTTP), HTTP Secure ( HTTPS ), File Transfer Protocol (FTP), Simple Mail Transfer Protocol (SMTP) и т. д.), графика , пиксельные и векторные шрифты , API, не зависящий от базы данных, поддержка Common Gateway Interface (CGI), сжатие данных , архивные файлы ( tar , zip , cpio , ar , rpm ), кодировка символов , обработка времени и даты, обработка XML , дайджесты сообщений и многое другое. [5] Эти библиотеки уменьшают необходимость использовать непереносимые функции операционной системы и сторонние библиотеки (которые не всегда могут присутствовать) напрямую. Библиотеки Seed7 содержат уровни абстракции для оборудования , операционной системы и сторонних библиотек, например, графических библиотек и библиотек баз данных. Другими словами, для перемещения программ Seed7 между различными процессорами или операционными системами не требуется никаких изменений .
Seed7 имеет собственную реализацию Transport Layer Security . [6] Библиотека включает AES и криптографию на эллиптических кривых .
Seed7 предоставляет библиотеку с API, независимым от базы данных . [7] Программы могут подключаться к базам данных MySQL , MariaDB , SQLite , PostgreSQL , Oracle , Open Database Connectivity (ODBC), Firebird , InterBase , IBM Db2 и SQL Server . Можно создавать независимые от базы данных подготовленные операторы, использовать переменные привязки, выполнять операторы и извлекать наборы результатов.
Seed7 основан на MASTER, расширяемом языке программирования, описанном в дипломной и докторской диссертациях Томаса Мертеса. [8] [9] Большинство оригинальных идей MASTER, таких как определяемые пользователем операторы и операторы, можно найти в Seed7. Прекомпилятор для перевода MASTER в Pascal был предложен, но не реализован в оригинальном проекте. В 1989 году началась разработка интерпретатора для MASTER, названного HAL. В 2005 году проекты MASTER и HAL были выпущены с открытым исходным кодом под названием проекта Seed7. С тех пор новые версии выпускались каждые две или три недели. По состоянию на версию 2021-04-25 проект Seed7 содержит более 500 000 исходных строк кода и несколько сотен страниц документации.
Мертес сказал, что название Seed7 произошло от концепции его идей о том, что язык будет распространяться как семена, которые будут расти по мере того, как другие будут его использовать. Часть «7» была добавлена, потому что это было простое число, которое, по его мнению, хорошо звучало с «семя». [10]
Расширение включает в себя две части: определение синтаксиса, дающее шаблон для новой синтаксической формы, и стандартную функцию Seed7, используемую для определения семантики. [2]
Определение синтаксиса использует описание структурированного синтаксиса Seed7 (S7SSD). Оператор S7SSD, такой как
$ синтаксис expr: .(). + .() is -> 7;
определяет синтаксис оператора +
. Правая стрелка ->
описывает ассоциативность : связывание операндов слева направо. С 7
приоритетом оператора определяется. Шаблон синтаксиса вводится и разделяется точками ( ). Без точек шаблон будет . Символ является нетерминальным символом и является терминальным символом. [11] S7SSD не различает различные нетерминальные символы . Вместо этого он знает только один нетерминальный символ: .+
.(). + .()
.
() + ()
()
+
()
Определение оператора +
для комплексных чисел — это просто определение функции:
const func complex : ( in complex : summand1 ) + ( in complex : summand2 ) — это результат функции var complex : sum is complex . ценить ; начать сумму . ре := слагаемое1 . re + слагаемое2 . ре ; сумма . я := слагаемое1 . я + слагаемое2 . я ; конец функции ;