Сид7
Парадигма | мультипарадигмальность : расширяемая , объектно-ориентированная , императивная , структурированная , универсальная , рефлексивная. |
---|---|
Разработано | Томас Мертес |
Впервые появился | 2005 г |
Стабильная версия | 2023-05-29
/ 369 дней назад [1] |
Дисциплина набора текста | статический , сильный , безопасный , именительный , манифестный |
ТЫ | Кроссплатформенность : BSD , Linux , OS X , Unix , Windows. |
Лицензия | GPL , LGPL (для библиотеки времени выполнения) |
Расширения имен файлов | .sd7, .s7i |
Веб-сайт | семя7 |
Основные реализации | |
с открытым исходным кодом эталонная реализация | |
Под влиянием | |
Паскаль , Модуль-2 , Ада , АЛГОЛ 68 , C , C++ , Java |
Seed7 — расширяемый язык программирования общего назначения , разработанный Томасом Мертесом. Синтаксически он похож на Паскаль и Аду . Наряду со многими другими функциями, он предоставляет механизм расширения. [2] Seed7 поддерживает введение в язык новых элементов синтаксиса и их семантики, а также позволяет определять и записывать новые языковые конструкции в Seed7. [3] Например, программисты могут ввести синтаксис и семантику новых операторов и определяемых пользователем операторов символов . Реализация Seed7 существенно отличается от реализации языков с жестко запрограммированным синтаксисом и семантикой.
Особенности [ править ]
Seed7 поддерживает парадигмы программирования : императивную , объектно-ориентированную (ОО) и универсальную . Он также поддерживает такие функции, как вызов по имени , множественную отправку , перегрузку функций , перегрузку операторов , обработку исключений и арифметику произвольной точности .
Основные функции включают в себя:
- Определенные пользователем операторы и операторы
- Абстрактные типы данных
- Шаблоны без специального синтаксиса
- Объектно-ориентированный с интерфейсами и множественной диспетчеризацией.
- Статическая типизация
- Можно интерпретировать или компилировать
- исходного кода Переносимость
- Работает под BSD , Linux , Mac OS X , Unix , Windows.
Обобщены несколько концепций языка программирования:
- Объявления типов (которые присваивают типу имя) и определения функций принимают форму определений констант.
- Выражения времени компиляции могут выполнять определяемые пользователем функции.
- Перегрузка и объектная ориентация (с множественной диспетчеризацией) считаются общими понятиями. Просто они происходят в разное время: во время компиляции и во время выполнения соответственно.
- Имена типов и описания типов могут использоваться в качестве параметров и результатов функции.
- Функции, которые выполняются во время компиляции , могут использоваться для определения объектов.
- Шаблоны записываются как функции времени компиляции с параметрами типа.
- Массивы , хэш-карты и структуры не являются жестко запрограммированными функциями. Вместо этого они определяются в библиотеках как абстрактный тип данных .
- Парсер и интерпретатор являются частью библиотеки времени выполнения.
- UTF-32 Поддержка Юникода . Это позволяет избежать проблем с переменной длины кодировками , такими как UTF-8 и UTF-16 .
Проект Seed7 включает в себя как интерпретатор , так и компилятор . Интерпретатор очень быстро запускает программы, поддерживая быструю разработку программ. Компилятор использует интерфейсы синтаксического анализатора и отражения из библиотеки времени выполнения для создания программы на языке C , которая впоследствии компилируется в машинный код . Скомпилированные программы Seed7 могут иметь производительность , сравнимую с программами на C. [4]
Библиотеки [ править ]
Seed7 имеет множество библиотек, охватывающих такие области, как контейнеры , числовые функции, лексический анализ , манипулирование файлами, работа в сети ( сокеты , безопасность транспортного уровня (TLS/SSL), протокол передачи гипертекста (HTTP), защищенный HTTP ( HTTPS ), протокол передачи файлов (FTP). ), Simple Mail Transfer Protocol (SMTP) и т. д.), графика , растровые и векторные шрифты , независимый от базы данных API , Common Gateway Interface поддержка (CGI), сжатие данных , архивные файлы ( tar , zip , cpio , ar , rpm ), кодировка символов , обработка времени и даты, обработка XML , дайджесты сообщений и многое другое. [5] Эти библиотеки уменьшают необходимость напрямую использовать непереносимые функции операционной системы и сторонние библиотеки (которые не всегда могут присутствовать). Библиотеки Seed7 содержат уровни абстракции для оборудования , операционной системы и сторонних библиотек, например графических библиотек и библиотек баз данных. не требуется никаких изменений Другими словами, для перемещения программ Seed7 между разными процессорами или операционными системами .
библиотека TLS [ править ]
Seed7 имеет собственную реализацию Transport Layer Security . [6] Библиотека включает AES и криптографию на основе эллиптических кривых .
API абстракции базы данных [ править ]
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 в Паскаль был предложен, но не реализован в исходном проекте. В 1989 году началась разработка интерпретатора MASTER под названием HAL. В 2005 году проекты MASTER и HAL были выпущены с открытым исходным кодом под названием проекта Seed7. С тех пор новые версии выпускались каждые две или три недели. По состоянию на 25 апреля 2021 г. проект Seed7 содержит более 500 000 строк исходного кода и несколько сотен страниц документации.
Механизм расширения [ править ]
Расширение включает в себя две части: определение синтаксиса, дающее шаблон для новой синтаксической формы, и стандартную функцию Seed7, используемую для определения семантики. [2]
Определение синтаксиса [ править ]
В определении синтаксиса используется структурированное описание синтаксиса Seed7 (S7SSD). Оператор S7SSD, например
$ syntax expr: .(). + .() is -> 7;
определяет синтаксис +
оператор . Правая стрелка ->
описывает ассоциативность : Связывание операндов слева направо. С 7
приоритет +
оператор определен. Синтаксический шаблон .(). + .()
вводится и ограничивается точками ( .
). Без точек узор такой () + ()
. Символ ()
является нетерминальным символом и +
является терминальным символом. [10] 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;
Ссылки [ править ]
- ^ Мертес, Томас (29 мая 2023 г.). «Новый выпуск Seed7 29 мая 2023 г.» . Проверено 29 мая 2023 г. - через SourceForge .
- ↑ Перейти обратно: Перейти обратно: а б Дэниел Зингаро , «Современные расширяемые языки» , отчет SQRL 47 Университета Макмастера (октябрь 2007 г.), стр. 16 ( альтернативная ссылка ).
- ^ Абриал, Жан-Раймонд и Глассер, Уве, «Строгие методы построения и анализа программного обеспечения» , ISBN 978-3-642-11446-5 , Springer, 2010, стр. 166.
- ^ Стадфельд, Пол (1 апреля 2010 г.). «В поисках окончательного цикла (включает сравнение производительности Python, Seed7 и C)» . Архивировано из оригинала 25 октября 2013 года . Проверено 19 августа 2019 г.
- ^ Библиотеки Seed7
- ^ Библиотека Transport Layer Security (TLS), написанная на Seed7.
- ^ API абстракции базы данных
- ^ Мертес, Томас, «Проектирование расширяемого языка программирования высокого уровня», дипломная работа Венского технологического университета (1984) ( Резюме ) .
- ^ Мертес, Томас, «Определение расширяемого языка программирования высокого уровня» , докторская диссертация Венского технологического университета (1986). ( Резюме )
- ^ Дэвид Гудеман (26 марта 2015 г.), «Язык программирования Seed7» (в Seed7 вы можете указать такой синтаксис)
Внешние ссылки [ править ]
- Официальный сайт — домашняя страница с часто задаваемыми вопросами, руководством, скриншотами, примерами, описаниями библиотек, тестами и набором алгоритмов.
- Зеркало домашней страницы Seed7
- Seed7 на GitHub
- Загрузите Seed7 из основного репозитория на SourceForge.
- Seed7 в Rosetta Code — содержит множество примеров Seed7.
- В поисках окончательного цикла исследуется 3n+C расширение гипотезы Коллатца с помощью программ Seed7.
- Блог Ремо Лаубахера : Статически связанные исполняемые файлы Linux с помощью GCJ, Seed7 и haXe (2011)
- Блог Дэвида Гудемана Язык программирования Seed7 (2015)
- Порт FreeBSD / см. также здесь , поддерживается Пьетро Черутти.
- Порт OpenBSD , предоставленный Брайаном Каллаханом.
- Пакет Seed7 для openSUSE/Fedora (см. также здесь или здесь )
- Обсуждение, в котором Seed7 описывается как язык, новый синтаксис которого фактически может определяться пользователями языка.
- Seed7 в «Fossies» — архиве свежего программного обеспечения с открытым исходным кодом
- Мультипарадигмальные языки программирования
- Статически типизированные языки программирования
- Объектно-ориентированные языки программирования
- Кроссплатформенное программное обеспечение
- Языки программирования с расширяемым синтаксисом
- Бесплатное программное обеспечение, написанное на C.
- Бесплатные компиляторы и интерпретаторы
- Языки программирования, созданные в 2005 году.
- Программное обеспечение, использующее лицензию GPL