Семя7 - Seed7
Парадигма | мультипарадигма : расширяемая , объектно-ориентированная , императивная , структурированная , универсальная , рефлексивная |
---|---|
Разработано | Томас Мертес |
Впервые появился | 2005 |
Стабильный выпуск | 2021-08-07 / 69 дней назад |
Печатная дисциплина | статический , сильный , безопасный , именительный падеж , манифест |
Операционные системы | Кроссплатформенность : BSD , Linux , OS X , Unix , Windows |
Лицензия | GPL , LGPL (для библиотеки времени выполнения) |
Расширения имени файла | .sd7, .s7i |
Веб-сайт | seed7 |
Основные реализации | |
эталонная реализация с открытым исходным кодом | |
Под влиянием | |
Паскаль , Модула-2 , Ада , АЛГОЛ 68 , C , C ++ , Java |
Seed7 - это расширяемый язык программирования общего назначения, разработанный Томасом Мертесом. Синтаксически он похож на Паскаль и Аду . Наряду со многими другими функциями он предоставляет механизм расширения. Seed7 поддерживает введение в язык новых элементов синтаксиса и их семантики, а также позволяет определять и записывать новые языковые конструкции в Seed7. Например, программисты могут вводить синтаксис и семантику новых операторов и определяемых пользователем символов операторов . Реализация Seed7 значительно отличается от языков с жестко запрограммированным синтаксисом и семантикой.
Функции
Seed7 поддерживает парадигмы программирования : императивное , объектно-ориентированное (OO) и универсальное . Он также поддерживает такие функции, как вызов по имени , многократная отправка , перегрузка функций , перегрузка операторов , обработки исключений и произвольная точность арифметика .
Основные функции включают:
- Пользовательские операторы и операторы
- Абстрактные типы данных
- Шаблоны без специального синтаксиса
- Объектно-ориентированный с интерфейсами и множественной диспетчеризацией
- Статическая типизация
- Может быть интерпретирован или скомпилирован
- Переносимость исходного кода
- Работает под BSD , Linux , Mac OS X , Unix , Windows
Обобщены несколько концепций языка программирования:
- Объявления типов (которые присваивают типу имя) и определения функций принимают форму определений констант.
- Выражения времени компиляции могут выполнять пользовательские функции.
- Перегрузка и объектная ориентация (с множественной отправкой) рассматриваются как общие концепции. Просто они происходят в разное время: время компиляции и время выполнения соответственно.
- Имена типов и описания типов могут использоваться как результат параметра и функции.
- Функции, которые выполняются во время компиляции , могут использоваться для определения объектов.
- Шаблоны записываются как функции времени компиляции с параметрами типа.
- Массивы , хэш-карты и структуры не являются жестко запрограммированной функцией. Вместо этого они определены в библиотеках как абстрактный тип данных .
- Синтаксический анализатор и интерпретатор являются частью библиотеки времени выполнения.
- Поддержка Unicode UTF-32 . Это позволяет избежать проблем с кодировками переменной длины, такими как UTF-8 и UTF-16 .
Проект Seed7 включает в себя как интерпретатор, так и компилятор . Интерпретатор очень быстро запускает программы, поддерживая быструю разработку программ. Компилятор использует интерфейсы синтаксического анализатора и отражения из библиотеки времени выполнения для создания программы C , которая впоследствии компилируется в машинный код . Скомпилированные программы Seed7 могут иметь производительность, сравнимую с программами на языке C.
Библиотеки
Seed7 имеет множество библиотек, охватывающих области, включая контейнеры , числовые функции, лексический анализ , манипуляции с файлами, работу в сети ( сокеты , безопасность транспортного уровня (TLS / SSL), протокол передачи гипертекста (HTTP), HTTP Secure ( HTTPS ), протокол передачи файлов (FTP) ), Simple Mail Transfer Protocol (SMTP) и т. Д.), Графика , растровое изображение и векторные шрифты , API , независимый от базы данных , поддержка Common Gateway Interface (CGI), сжатие данных , архивные файлы ( tar , zip , cpio , ar , rpm ), кодировка символов , обработка времени и даты, обработка XML , дайджесты сообщений и многое другое. Эти библиотеки уменьшают необходимость использования непереносимых функций операционной системы и сторонних библиотек (которые могут не всегда присутствовать) напрямую. Библиотеки Seed7 содержат уровни абстракции для оборудования , операционной системы и сторонних библиотек, например, графических библиотек и библиотек баз данных. Другими словами, никаких изменений не требуется для перемещения программ Seed7 между разными процессорами или операционными системами .
Библиотека TLS
Seed7 имеет собственную реализацию безопасности транспортного уровня . Библиотека включает AES и криптографию на основе эллиптических кривых .
API абстракции базы данных
Seed7 предоставляет библиотеку с API, независимым от базы данных . Программы могут подключаться к базам данных MySQL , MariaDB , SQLite , PostgreSQL , Oracle , Open Database Connectivity (ODBC), Firebird , InterBase , Db2 и SQL Server . Независимо от базы данных могут быть созданы подготовленные операторы, могут использоваться переменные связывания, операторы могут быть выполнены и могут быть получены наборы результатов.
История
Seed7 основан на MASTER, расширяемом языке программирования, описанном в дипломе и докторской диссертации Томаса Мертеса. Большинство оригинальных идей MASTER, таких как определяемые пользователем операторы и операторы, можно найти в Seed7. Прекомпилятор , чтобы перевести MASTER Паскаля, был предложен, но неосуществленными, в оригинальном проекте. В 1989 году началась разработка интерпретатора для MASTER, названного HAL. В 2005 году проекты MASTER и HAL были выпущены как проекты с открытым исходным кодом под названием Seed7. С тех пор новые версии выпускались каждые две-три недели. По состоянию на 25 апреля 2021 года проект Seed7 содержит более 500 000 строк исходного кода и несколько сотен страниц документации.
Механизм расширения
Расширение включает две части: определение синтаксиса, дающее шаблон для новой синтаксической формы, и стандартную функцию Seed7, используемую для определения семантики.
Определение синтаксиса
В определении синтаксиса используется описание структурированного синтаксиса Seed7 (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;
использованная литература
внешние ссылки
- Официальный сайт - Домашняя страница с FAQ, руководством, скриншотами, примерами, описаниями библиотек, тестами и набором алгоритмов.
- Seed7 на GitHub
- Загрузите Seed7 из основного репозитория на SourceForge
- Seed7 в Rosetta Code - содержит множество примеров Seed7
- The Quest for the Ultimate Cycle исследует 3n + C-расширение гипотезы Коллатца с программами Seed7.
- Блог Ремо Лаубахера : Статически связанные исполняемые файлы Linux с GCJ, Seed7 и haXe (2011)
- Блог Дэвида Гудемана Язык программирования Seed7 (2015)
- Порт FreeBSD / см. Также здесь , поддерживается Пьетро Черутти
- Порт OpenBSD , предоставленный Брайаном Каллаханом
- Пакет Seed7 для openSUSE / Fedora (см. Также здесь или здесь )
- Обсуждение, в котором Seed7 описывается как язык, новый синтаксис которого фактически может быть определен пользователями языка.
- Seed7 в "Fossies" - архив свежего программного обеспечения с открытым исходным кодом