Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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;

Ссылки [ править ]

  1. ^ Mertes, Томас (25 апреля 2021). «Новый выпуск Seed7 2021-04-25» . Проверено 25 апреля 2021 года - через SourceForge .
  2. ^ a b Даниэль Зингаро , «Современные расширяемые языки» , Отчет 47 SQRL, Университет Макмастера (октябрь 2007 г.), стр. 16 ( альтернативная ссылка ).
  3. ^ Абриаль, Жан-Раймонд и Глессер, Уве, «Строгие методы построения и анализа программного обеспечения» , ISBN 978-3-642-11446-5 , Springer, 2010, стр. 166. 
  4. ^ Stadfeld, Павел (1 апреля 2010). «В поисках окончательного цикла (включает сравнение производительности Python, Seed7 и C)» . Архивировано из оригинального 25 октября 2013 года . Дата обращения 19 августа 2019 .
  5. ^ Библиотеки Seed7
  6. ^ Библиотека безопасности транспортного уровня (TLS), написанная на Seed7
  7. ^ API абстракции базы данных
  8. ^ Мертес, Томас, "Entwurf einer erweiterbaren höheren Programmiersprache", дипломная работа Венского технологического университета (1984). ( Аннотация )
  9. ^ Мертес, Томас, "Определение einer erweiterbaren höheren Programmiersprache" , докторская диссертация Венского технологического университета (1986). ( Аннотация )
  10. ^ Дэвид Гудеман (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" - архив свежего программного обеспечения с открытым исходным кодом