В этой статье слишком много ссылок на первоисточники . ( Сентябрь 2018 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
Парадигма | мультипарадигма : расширяемая , объектно-ориентированная , императивная , структурированная , универсальная , рефлексивная |
---|---|
Разработано | Томас Мертес |
Впервые появился | 2005 |
Стабильный выпуск | 2021-04-25 / 12 дней назад [1] |
Печатная дисциплина | статический , сильный , безопасный , именительный падеж , манифест |
Операционные системы | Кроссплатформенность : BSD , Linux , OS X , Unix , Windows |
Лицензия | GPL , LGPL (для библиотеки времени выполнения) |
Расширения имени файла | .sd7, .s7i |
Веб-сайт | seed7 |
Основные реализации | |
эталонная реализация с открытым исходным кодом | |
Под влиянием | |
Паскаль , Модула-2 , Ада , АЛГОЛ 68 , C , C ++ , Java |
Seed7 - это расширяемый язык программирования общего назначения, разработанный Томасом Мертесом. Синтаксически он похож на Паскаль и Аду . Наряду со многими другими функциями он предоставляет механизм расширения. [2] Seed7 поддерживает введение в язык новых элементов синтаксиса и их семантики, а также позволяет определять и записывать новые языковые конструкции в Seed7. [3] Например, программисты могут вводить синтаксис и семантику новых операторов и определяемых пользователем символов операторов . Реализация Seed7 значительно отличается от языков с жестко запрограммированным синтаксисом и семантикой.
Особенности [ править ]
Seed7 поддерживает парадигмы программирования : императивное , объектно-ориентированное (OO) и универсальное . Он также поддерживает такие функции, как вызов по имени , многократная отправка , перегрузка функций , перегрузка операторов , обработки исключений и произвольная точность арифметика .
Основные функции включают:
- Пользовательские операторы и операторы
- Абстрактные типы данных
- Шаблоны без специального синтаксиса
- Объектно-ориентированный с интерфейсами и множественной диспетчеризацией
- Статическая типизация
- Может быть интерпретирован или скомпилирован
- Переносимость исходного кода
- Работает под BSD , Linux , Mac OS X , Unix , Windows
Обобщены несколько концепций языка программирования:
- Объявления типов (которые присваивают типу имя) и определения функций принимают форму определений констант.
- Выражения времени компиляции могут выполнять пользовательские функции.
- Перегрузка и объектная ориентация (с множественной отправкой) рассматриваются как общие концепции. Просто они происходят в разное время: время компиляции и время выполнения соответственно.
- Имена типов и описания типов могут использоваться как результат параметра и функции.
- Функции, которые выполняются во время компиляции , могут использоваться для определения объектов.
- Шаблоны записываются как функции времени компиляции с параметрами типа.
- Массивы , хэш-карты и структуры не являются жестко запрограммированной функцией. Вместо этого они определены в библиотеках как абстрактный тип данных .
- Синтаксический анализатор и интерпретатор являются частью библиотеки времени выполнения.
- Поддержка Unicode UTF-32 . Это позволяет избежать проблем с кодировками переменной длины, такими как UTF-8 и UTF-16 .
Проект Seed7 включает в себя как интерпретатор, так и компилятор . Интерпретатор очень быстро запускает программы, поддерживая быструю разработку программ. Компилятор использует интерфейсы синтаксического анализатора и отражения из библиотеки времени выполнения для создания программы C , которая впоследствии компилируется в машинный код . Скомпилированные программы Seed7 могут иметь производительность, сравнимую с программами на языке C. [4]
Библиотеки [ править ]
Seed7 имеет множество библиотек, охватывающих области, включая контейнеры , числовые функции, лексический анализ , манипуляции с файлами, работу в сети ( сокеты , безопасность транспортного уровня (TLS / SSL), протокол передачи гипертекста (HTTP), HTTP Secure ( HTTPS ), протокол передачи файлов (FTP) ), Simple Mail Transfer Protocol (SMTP) и т. Д.), Графику , растровое изображение и векторные шрифты , API , не зависящий от базы данных , поддержку Common Gateway Interface (CGI), сжатие данных , архивные файлы ( tar ,zip , cpio , ar , rpm ), кодировка символов , обработка времени и даты, обработка XML , дайджесты сообщений и многое другое. [5] Эти библиотеки уменьшают необходимость использования непереносимых функций операционной системы и сторонних библиотек (которые могут не всегда присутствовать) напрямую. Библиотеки Seed7 содержат уровни абстракции для оборудования , операционной системы и сторонних библиотек, например графических библиотек и библиотек баз данных. Другими словами, никаких изменений не требуется для перемещения программ Seed7 между разными процессорами или операционными системами .
Библиотека TLS [ править ]
Seed7 имеет собственную реализацию безопасности транспортного уровня . [6] Библиотека включает AES и криптографию на основе эллиптических кривых .
API абстракции базы данных [ править ]
Seed7 предоставляет библиотеку с API, независимым от базы данных . [7] Программы могут подключаться к базам данных MySQL , MariaDB , SQLite , PostgreSQL , Oracle , Open Database Connectivity (ODBC), Firebird , InterBase , 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 вроде
$ синтаксис expr:. (). +. () равно -> 7;
определяет синтаксис +
оператора . Стрелка вправо ->
описывает ассоциативность : связывание операндов слева направо. С 7
в приоритетном порядке на +
оператора определяется. Шаблон синтаксиса .(). + .()
вводится и ограничивается точками ( .
). Без точек узор () + ()
. Этот символ ()
является нетерминальным символом и +
является конечным символом. [10] S7SSD не различает разные нетерминальные символы . Вместо этого он знает только один нетерминал символ: ()
.
Семантическое расширение [ править ]
Определение +
оператора для комплексных чисел - это просто определение функции:
const func complex: (в комплексе: слагаемое1) + (в комплексе: слагаемое2) равно func результат var сложный: сумма сложна.значение; начинать sum.re: = summand1.re + summand2.re; sum.im: = summand1.im + summand2.im; end func;
Ссылки [ править ]
- ^ Mertes, Томас (25 апреля 2021). «Новый выпуск Seed7 2021-04-25» . Проверено 25 апреля 2021 года - через SourceForge .
- ^ a b Даниэль Зингаро , «Современные расширяемые языки» , Отчет 47 SQRL, Университет Макмастера (октябрь 2007 г.), стр. 16 ( альтернативная ссылка ).
- ^ Абриаль, Жан-Раймонд и Глессер, Уве, «Строгие методы построения и анализа программного обеспечения» , ISBN 978-3-642-11446-5 , Springer, 2010, стр. 166.
- ^ Stadfeld, Павел (1 апреля 2010). «В поисках окончательного цикла (включает сравнение производительности Python, Seed7 и C)» . Архивировано из оригинального 25 октября 2013 года . Дата обращения 19 августа 2019 .
- ^ Библиотеки Seed7
- ^ Библиотека безопасности транспортного уровня (TLS), написанная на Seed7
- ^ API абстракции базы данных
- ^ Мертес, Томас, "Entwurf einer erweiterbaren höheren Programmiersprache", дипломная работа Венского технологического университета (1984). ( Аннотация )
- ^ Мертес, Томас, "Определение einer erweiterbaren höheren Programmiersprache" , докторская диссертация Венского технологического университета (1986). ( Аннотация )
- ^ Дэвид Гудеман (26 марта 2015 г.), «Язык программирования Seed7» (в Seed7 вы можете указать подобный синтаксис)
Внешние ссылки [ править ]
- Официальный сайт - Домашняя страница с 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" - архив свежего программного обеспечения с открытым исходным кодом