Семя7 - Seed7
Эта статья слишком полагается на Рекомендации к основные источники.Сентябрь 2018 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Парадигма | мультипарадигма: расширяемый, объектно-ориентированный, императив, структурированный, общий, отражающий |
---|---|
Разработано | Томас Мертес |
Впервые появился | 2005 |
Стабильный выпуск | 2020-09-29 / 70 дней назад[1] |
Печатная дисциплина | статический, сильный, безопасный, именительный падеж, манифест |
Операционные системы | Кроссплатформенность: BSD, Linux, OS X, Unix, Windows |
Лицензия | GPL, LGPL (для библиотеки времени выполнения) |
Расширения имени файла | .sd7, .s7i |
Интернет сайт | семя7 |
Основной реализации | |
Открытый исходный код эталонная реализация | |
Под влиянием | |
Паскаль, Модула-2, Ада, АЛГОЛ 68, C, C ++, Ява |
Семя7 является расширяемый язык программирования общего назначения разработан Томасом Мертесом. Синтаксически похож на Паскаль и Ада. Наряду со многими другими функциями, он предоставляет механизм расширения.[2] Seed7 поддерживает введение в язык новых элементов синтаксиса и их семантики, а также позволяет определять и записывать новые языковые конструкции в Seed7.[3] Например, программисты могут вводить синтаксис и семантику новых заявления и определяется пользователем оператор символы. Реализация Seed7 значительно отличается от языков с жестко запрограммированный синтаксис и семантика.
Функции
Seed7 поддерживает парадигмы программирования: императив, объектно-ориентированный (OO), и общий. Он также поддерживает такие функции, как позвонить по имени, множественная отправка, перегрузка функции, перегрузка оператора, Обработка исключений и арифметика произвольной точности.
Основные функции включают:
- Пользовательские операторы и операторы
- Абстрактные типы данных
- Шаблоны без специального синтаксиса
- Объектно-ориентированный с интерфейсы и множественная отправка
- Статическая типизация
- Может быть интерпретирован или скомпилирован
- Исходный код переносимость
- Работает под BSD, Linux, Mac OS X, Unix, Windows
Обобщены несколько концепций языка программирования:
- Объявления типов (которые присваивают типу имя) и функция определения принимают форму постоянных определений.
- Выражения времени компиляции может выполнять пользовательские функции.
- Перегрузка и объектная ориентация (с множественной отправкой) рассматриваются как общие концепции. Просто они случаются в разное время: время компиляции и время выполнения, соответственно.
- Имена типов и описания типов может использоваться как параметр и результат функции.
- Функции, которые выполняются на время компиляции, можно использовать для определения объектов.
- Шаблоны записываются как функции времени компиляции с параметрами типа.
- Массивы, хеш-карты и структуры не являются жестко запрограммированной функцией. Вместо этого они определены как абстрактный тип данных в библиотеки.
- Парсер и интерпретатор являются частью библиотеки времени выполнения.
- UTF-32 Поддержка Unicode. Это позволяет избежать проблем переменная длина кодировки вроде UTF-8 и UTF-16.
Проект Seed7 включает в себя как устный переводчик и компилятор. Интерпретатор очень быстро запускает программы, поддерживая быструю разработку программ. Компилятор использует парсер и отражение интерфейсы из библиотеки времени выполнения для создания C программа, которая впоследствии компилируется в Машинный код. Скомпилированные программы Seed7 могут иметь сопоставимые спектакль в программы на C.[4]
Библиотеки
Seed7 имеет множество библиотек, охватывающих области, включая контейнеры, числовые функции, лексический анализ, манипулирование файлами, работа в сети (Розетки, Безопасность транспортного уровня (TLS / SSL), Протокол передачи гипертекста (HTTP), HTTP Secure (HTTPS ), протокол передачи файлов (FTP), Простой протокол передачи почты (SMTP) и т. Д.), графика, растровое изображение и вектор шрифты, независимый от базы данных API, Общий интерфейс шлюза (CGI) поддержка, Сжатие данных, архивные файлы (деготь, застегивать, cpio, ар, об / мин ), кодировка символов, обработка времени и даты, XML обработка, дайджесты сообщений и больше.[5] Эти библиотеки уменьшают необходимость использования непереносимый функции операционной системы и сторонние библиотеки (которые могут не всегда присутствовать) напрямую. Библиотеки Seed7 содержат слои абстракции для аппаратное обеспечение, Операционная система и сторонние библиотеки, например графические библиотеки и библиотеки баз данных. Другими словами, для перемещения программ Seed7 между разными процессоры или же операционные системы.
Библиотека TLS
Seed7 имеет собственную реализацию Безопасность транспортного уровня.[6] Библиотека включает AES и криптография с эллиптической кривой.
API абстракции базы данных
Seed7 предоставляет библиотеку с база данных независимый API.[7] Программы могут подключаться к MySQL, MariaDB, SQLite, PostgreSQL, Oracle, Открытое подключение к базе данных (ODBC), Жар-птица, InterBase, Db2 и SQL Server базы данных. Независимо от базы данных могут быть созданы подготовленные операторы, могут использоваться переменные связывания, операторы могут быть выполнены и могут быть получены наборы результатов.
История
Seed7 основан на MASTER, расширяемом языке программирования, описанном в дипломе и докторской диссертации Томаса Мертеса.[8][9] Большинство оригинальных идей MASTER, таких как определяемые пользователем операторы и операторы, можно найти в Seed7. А прекомпилятор, чтобы перевести MASTER на Паскаль, был предложен, но не реализован в исходном проекте. В 1989 году началась разработка интерпретатора для MASTER, названного HAL. В 2005 году проекты MASTER и HAL были выпущены как проекты с открытым исходным кодом под названием Seed7. С тех пор новые версии выпускались каждые две-три недели. По состоянию на 08.09.2013 проект Seed7 содержит более 300 000 исходные строки кода и несколько сотен страниц документации.
Механизм расширения
Расширение включает две части: определение синтаксиса, дающее шаблон для новой синтаксической формы, и стандартную функцию Seed7, используемую для определения семантики.[2]
Определение синтаксиса
В определении синтаксиса используется описание структурированного синтаксиса Seed7 (S7SSD). Заявление S7SSD вроде
$ синтаксис expr:. (). +. () равно -> 7;
определяет синтаксис +
оператор. Стрелка вправо ->
описывает ассоциативность: Связывание операндов слева направо. С 7
то приоритет из +
оператор определен. Шаблон синтаксиса .(). + .()
вводится и разделяется точками (.
). Без точек узор () + ()
. Символ ()
нетерминальный символ и +
- конечный символ.[10] S7SSD не различает разные нетерминальные символы. Вместо этого он знает только один нетерминальный символ: ()
.
Семантическое расширение
Определение +
Оператор для комплексных чисел - это просто определение функции:
const func complex: (in complex: summand1) + (in complex: summand2) is func result var complex: sum is complex.value; начало sum.re: = summand1.re + summand2.re; sum.im: = summand1.im + summand2.im; end func;
Рекомендации
- ^ Мертес, Томас (29 сентября 2020 г.). "Новый выпуск Seed7 2020-09-29". Получено 29 сентября 2020 - через SourceForge.
- ^ а б Даниэль Зингаро, «Современные расширяемые языки», Отчет 47 SQRL Университет Макмастера (Октябрь 2007 г.), стр. 16 (альтернативная ссылка ).
- ^ Абриаль, Жан-Раймон и Глессер, Уве, «Строгие методы построения и анализа программного обеспечения», ISBN 978-3-642-11446-5, Springer, 2010 г., стр. 166.
- ^ Стадфельд, Пол (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
- В поисках окончательного цикла исследует расширение 3n + C гипотезы Коллатца с программами Seed7
- Блог автора Ремо Лаубахер: Статически связанные исполняемые файлы Linux с GCJ, Seed7 и haXe (2011)
- Блог автора Дэвид Гудеман Язык программирования Seed7 (2015)
- Порт FreeBSD / см. также здесь, поддерживается Пьетро Черутти
- Порт OpenBSD, предоставлено Брайаном Каллаханом
- Пакет Seed7 для openSUSE / Fedora, (смотрите также здесь или же здесь )
- Обсуждение, в котором Seed7 описывается как язык, в котором пользователи языка могут фактически определить новый синтаксис
- Seed7 в "Fossies" - архив свежего программного обеспечения с открытым исходным кодом