Graine7 - Seed7
Paradigme | multi-paradigme : extensible , orienté objet , impératif , structuré , générique , réflexif |
---|---|
Conçu par | Thomas Mertès |
Première apparition | 2005 |
Version stable | 2021-08-07 / il y a 69 jours |
Discipline de frappe | statique , fort , sûr , nominatif , manifeste |
Système d'exploitation | Multiplateforme : BSD , Linux , OS X , Unix , Windows |
Licence | GPL , LGPL (pour la bibliothèque d'exécution) |
Extensions de nom de fichier | .sd7, .s7i |
Site Internet | seed7 |
Les principales mises en œuvre | |
implémentation de référence open source | |
Influencé par | |
Pascal , Modula-2 , Ada , ALGOL 68 , C , C++ , Java |
Seed7 est un langage de programmation polyvalent extensible conçu par Thomas Mertes. Il est syntaxiquement similaire à Pascal et Ada . Avec de nombreuses autres fonctionnalités, il fournit un mécanisme d'extension. Seed7 prend en charge l'introduction de nouveaux éléments de syntaxe et de leur sémantique dans le langage, et permet de définir et d'écrire de nouvelles constructions de langage dans Seed7. Par exemple, les programmeurs peuvent introduire la syntaxe et la sémantique de nouvelles instructions et des symboles d' opérateur définis par l'utilisateur . L'implémentation de Seed7 diffère considérablement de celle des langages avec une syntaxe et une sémantique codées en dur .
Caractéristiques
Seed7 prend en charge les paradigmes de programmation : impératif , orienté objet (OO) et générique . Il dispose également des supports tels que l' appel par le nom , l' envoi multiple , la surcharge de fonctions , la surcharge de l' opérateur , la gestion des exceptions et l' arithmétique de précision arbitraire .
Les principales caractéristiques comprennent :
- Instructions et opérateurs définis par l'utilisateur
- Types de données abstraits
- Modèles sans syntaxe spéciale
- Orienté objet avec interfaces et répartition multiple
- Saisie statique
- Peut être interprété ou compilé
- Le code source portabilité
- Fonctionne sous BSD , Linux , Mac OS X , Unix , Windows
Plusieurs concepts de langage de programmation sont généralisés :
- Les déclarations de type (qui attribuent un nom à un type) et les définitions de fonctions prennent la forme de définitions de constantes.
- Les expressions de compilation peuvent exécuter des fonctions définies par l'utilisateur.
- La surcharge et l'orientation objet (avec envoi multiple) sont considérées comme des concepts communs. Ils se produisent simplement à des moments différents : au moment de la compilation et au moment de l'exécution , respectivement.
- Les noms de type et les descriptions de type peuvent être utilisés comme paramètre et résultat de fonction.
- Les fonctions, qui sont exécutées au moment de la compilation , peuvent être utilisées pour définir des objets.
- Les modèles sont écrits sous forme de fonctions de compilation avec des paramètres de type.
- Les tableaux , les cartes de hachage et les structures ne sont pas une fonctionnalité codée en dur. Au lieu de cela, ils sont définis comme des types de données abstraits dans les bibliothèques .
- L'analyseur et l'interpréteur font partie de la bibliothèque d'exécution.
- Prise en charge UTF-32 Unicode. Cela évite les problèmes d' encodages à longueur variable comme UTF-8 et UTF-16 .
Le projet Seed7 comprend à la fois un interpréteur et un compilateur . L'interprète démarre les programmes très rapidement, ce qui permet un développement rapide des programmes. Le compilateur utilise les interfaces d' analyseur et de réflexion de la bibliothèque d'exécution pour générer un programme C , qui est ensuite compilé en code machine . Les programmes Seed7 compilés peuvent avoir des performances comparables aux programmes C.
Bibliothèques
Seed7 possède de nombreuses bibliothèques, couvrant des domaines tels que les conteneurs , les fonctions numériques, l'analyse lexicale , la manipulation de fichiers, la mise en réseau ( sockets , Transport Layer Security (TLS/SSL), Hypertext Transfer Protocol (HTTP), HTTP Secure ( HTTPS ), File Transfer Protocol (FTP) ), Simple Mail Transfer Protocol (SMTP), etc.), graphiques , polices pixmap et vectorielles , API indépendante de la base de données , prise en charge de Common Gateway Interface (CGI), compression de données , fichiers d'archive ( tar , zip , cpio , ar , rpm ), codage de caractères , gestion de l'heure et de la date, traitement XML , résumés de messages et plus encore. Ces bibliothèques réduisent le besoin d'utiliser directement les fonctionnalités du système d'exploitation non portables et les bibliothèques tierces (qui peuvent ne pas toujours être présentes). Les bibliothèques Seed7 contiennent des couches d'abstraction pour le matériel , le système d'exploitation et les bibliothèques tierces, par exemple les bibliothèques graphiques et de base de données. En d'autres termes, aucune modification n'est nécessaire pour déplacer les programmes Seed7 entre différents processeurs ou systèmes d'exploitation .
bibliothèque TLS
Seed7 a sa propre implémentation de Transport Layer Security . La bibliothèque comprend AES et la cryptographie à courbe elliptique .
API d'abstraction de base de données
Seed7 fournit une bibliothèque avec une API indépendante de la base de données . Les programmes peuvent se connecter aux bases de données MySQL , MariaDB , SQLite , PostgreSQL , Oracle , Open Database Connectivity (ODBC), Firebird , InterBase , Db2 et SQL Server . Indépendamment de la base de données, des instructions préparées peuvent être créées, des variables de liaison peuvent être utilisées, les instructions peuvent être exécutées et des ensembles de résultats peuvent être récupérés.
Histoire
Seed7 est basé sur MASTER, un langage de programmation extensible décrit dans les thèses de diplôme et de doctorat de Thomas Mertes. La plupart des idées originales de MASTER, telles que les instructions et les opérateurs définis par l'utilisateur, peuvent être trouvées dans Seed7. Un précompilateur , pour traduire MASTER en Pascal, a été proposé, mais non implémenté, dans le projet original. En 1989, le développement a commencé sur un interprète pour MASTER, nommé HAL. En 2005, les projets MASTER et HAL ont été publiés en open source sous le nom de projet Seed7. Depuis lors, de nouvelles versions sont publiées toutes les deux ou trois semaines. Depuis la version 2021-04-25, le projet Seed7 contient plus de 500 000 lignes de code source et plusieurs centaines de pages de documentation.
Mécanisme d'extension
Une extension comprend deux parties : une définition de syntaxe, donnant un modèle pour la nouvelle forme syntaxique, et une fonction standard Seed7, utilisée pour définir la sémantique.
Définition de la syntaxe
La définition de la syntaxe utilise la description de syntaxe structurée Seed7 (S7SSD). Une déclaration S7SSD comme
$ syntax expr: .(). + .() is -> 7;
spécifie la syntaxe de l' +
opérateur . La flèche droite ->
décrit l' associativité : Liaison des opérandes de gauche à droite. Avec 7
la priorité de l' +
opérateur est défini. Le modèle de syntaxe .(). + .()
est introduit et délimité par des points ( .
). Sans points, le motif est () + ()
. Le symbole ()
est un symbole non terminal et +
est un symbole terminal. Le S7SSD ne fait pas de distinction entre les différents symboles non terminaux . Au lieu de cela, il ne connaît qu'un seul symbole non terminal : ()
.
Extension sémantique
La définition de l' +
opérateur pour les nombres complexes est juste une définition de fonction :
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;
Les références
Liens externes
- Site officiel - Page d'accueil avec FAQ, manuel, captures d'écran, exemples, descriptions de bibliothèques, références et un ensemble d'algorithmes
- Seed7 sur GitHub
- Téléchargez Seed7 depuis son référentiel principal sur SourceForge
- Seed7 chez Rosetta Code - Contient de nombreux exemples Seed7
- The Quest for the Ultimate Cycle explore l'extension 3n+C de la conjecture de Collatz avec les programmes Seed7
- Blog de Remo Laubacher : Exécutables Linux liés statiquement avec GCJ, Seed7 et haXe (2011)
- Blog de David Gudeman Le langage de programmation Seed7 (2015)
- Un portage FreeBSD / voir aussi ici , maintenu par Pietro Cerutti
- Un portage OpenBSD , fourni par Brian Callahan
- Un package Seed7 pour openSUSE/Fedora , (voir aussi ici ou ici )
- Une discussion où Seed7 est décrit comme un langage où une nouvelle syntaxe peut en fait être définie par les utilisateurs du langage
- Seed7 à "Fossies" - la nouvelle archive de logiciels open source