Seed7 - Seed7
Paradigma | multi-paradigma : rozšiřitelné , objektově orientované , imperativní , strukturované , obecné , reflexní |
---|---|
Navrhl | Thomas Mertes |
Poprvé se objevil | 2005 |
Stabilní uvolnění | Před 2021-08-07 / 69 dny |
Kázeň při psaní | statický , silný , bezpečný , nominativní , manifestní |
OS | Cross-platform : BSD , Linux , OS X , Unix , Windows |
Licence | GPL , LGPL (pro runtime knihovnu) |
Rozšíření názvu souboru | .sd7, .s7i |
webová stránka | seed7 |
Hlavní implementace | |
implementace open source reference | |
Ovlivněn | |
Pascal , Modula-2 , Ada , ALGOL 68 , C , C ++ , Java |
Seed7 je rozšiřitelný univerzální programovací jazyk navržený Thomasem Mertesem. Je syntakticky podobný Pascalovi a Adě . Spolu s mnoha dalšími funkcemi poskytuje mechanismus rozšíření. Seed7 podporuje zavádění nových prvků syntaxe a jejich sémantiky do jazyka a umožňuje definovat a psát nové jazykové konstrukce v Seed7. Programátoři mohou například zavést syntaxi a sémantiku nových příkazů a uživatelem definovaných symbolů operátorů . Implementace Seed7 se výrazně liší od jazyků s pevně kódovanou syntaxí a sémantikou.
Funkce
Seed7 podporuje programovací paradigmata : imperativní , objektově orientované (OO) a obecné . Podporuje také k dispozici, jako je volání podle jména , vícenásobné odeslání , funkce přetížení , přetížení operátorů , zpracování výjimek a výpočty s libovolnou přesností .
Mezi hlavní funkce patří:
- Uživatelem definované příkazy a operátory
- Abstraktní datové typy
- Šablony bez speciální syntaxe
- Objektově orientované s rozhraními a vícenásobným odesláním
- Statické psaní
- Lze interpretovat nebo kompilovat
- Přenositelnost zdrojového kódu
- Běží pod BSD , Linux , Mac OS X , Unix , Windows
Zobecňuje se několik konceptů programovacího jazyka:
- Deklarace typů (které přiřazují název typu) a definice funkcí mají formu konstantních definic.
- Výrazy v době kompilace mohou spouštět funkce definované uživatelem.
- Přetížení a objektová orientace (s vícenásobným odesláním) jsou považovány za běžné koncepty. Prostě k nim dochází v různých časech: čas kompilace a doba běhu .
- Názvy typů a popisy typů lze použít jako výsledek parametru a funkce.
- K definování objektů lze použít funkce, které se provádějí v době kompilace .
- Šablony jsou zapsány jako funkce kompilace času s parametry typu.
- Pole , hash mapy a struktury nejsou pevně zakódovanou funkcí. Místo toho jsou definovány jako abstraktní datový typ v knihovnách .
- Analyzátor a tlumočník jsou součástí runtime knihovny.
- Podpora Unicode UTF-32 . Tím se zabrání problémům s kódováním s proměnnou délkou, jako je UTF-8 a UTF-16 .
Projekt Seed7 obsahuje tlumočníka i překladač . Tlumočník spouští programy velmi rychle a podporuje rychlý vývoj programu. Kompilátor používá rozhraní parseru a reflexe z run-time knihovny ke generování programu C , který je následně kompilován do strojového kódu . Kompilované programy Seed7 mohou mít srovnatelný výkon jako programy C.
Knihovny
Seed7 má mnoho knihoven, zahrnujících oblasti včetně kontejnerů , numerických funkcí, lexikální analýzy , manipulace se soubory, sítí ( sokety , Transport Layer Security (TLS/SSL), Hypertext Transfer Protocol (HTTP), HTTP Secure ( HTTPS ), File Transfer Protocol (FTP) ), Simple Mail Transfer Protocol (SMTP) atd.), Grafika , pixmapová a vektorová písma , API nezávislé na databázi , podpora Common Gateway Interface (CGI), komprese dat , archivní soubory ( tar , zip , cpio , ar , rpm ), kódování znaků , zpracování času a data, zpracování XML , přehledy zpráv a další. Tyto knihovny omezují potřebu používat přímo přenosné funkce operačního systému a knihovny třetích stran (které nemusí být vždy k dispozici). Knihovny Seed7 obsahují abstrakční vrstvy pro hardware , operační systém a knihovny třetích stran, např. Grafické a databázové knihovny. Jinými slovy, k přesunu programů Seed7 mezi různé procesory nebo operační systémy nejsou nutné žádné změny .
Knihovna TLS
Seed7 má vlastní implementaci Transport Layer Security . Knihovna obsahuje kryptografii AES a eliptickou křivku .
Abstrakce databáze API
Seed7 poskytuje knihovnu s databázově nezávislým API. Programy se mohou připojit k databázím MySQL , MariaDB , SQLite , PostgreSQL , Oracle , Open Database Connectivity (ODBC), Firebird , InterBase , Db2 a SQL Server . Nezávisle na databázi lze vytvářet připravené příkazy, používat vázané proměnné, provádět příkazy a načítat sady výsledků.
Dějiny
Seed7 je založen na MASTER, rozšiřitelném programovacím jazyce popsaném v diplomových a doktorských pracích Thomase Mertese. Většinu původních myšlenek programu MASTER, jako jsou uživatelsky definované příkazy a operátory, najdete v Seed7. V původním projektu byl navržen, ale neimplementovaný, předkompiler , který má přeložit MASTER na Pascal. V roce 1989 byl zahájen vývoj tlumočníka pro MASTER s názvem HAL. V roce 2005 byly projekty MASTER a HAL vydány jako open source pod názvem projektu Seed7. Od té doby byly vydávány nové verze každé dva nebo tři týdny. Od verze 2021-04-25 obsahuje projekt Seed7 více než 500 000 zdrojových řádků kódu a několik stovek stran dokumentace.
Prodlužovací mechanismus
Rozšíření obsahuje dvě části: definici syntaxe, která poskytuje šablonu pro novou syntaktickou formu, a standardní funkci Seed7, která se používá k definování sémantiky.
Definice syntaxe
Definice syntaxe používá strukturovaný popis syntaxe Seed7 (S7SSD). Podobné prohlášení S7SSD
$ syntax expr: .(). + .() is -> 7;
určuje syntaxi +
operátoru . Šipka doprava ->
popisuje asociativitu : Vazba operandů zleva doprava. Se 7
na priority tohoto +
operátora je definována. Syntaxe .(). + .()
je zavedena a oddělena tečkami ( .
). Bez teček je vzor () + ()
. Symbol ()
je neterminální symbol a +
je symbolem terminálu. S7SSD nerozlišuje mezi různými neterminálními symboly . Namísto toho ví jen jeden terminálního symbolu funkce: ()
.
Sémantické rozšíření
Definice +
operátoru pro komplexní čísla je pouze definicí funkce:
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;
Reference
externí odkazy
- Oficiální web - domovská stránka s FAQ, manuál, screenshoty, příklady, popisy knihoven, benchmarky a sada algoritmů
- Seed7 na GitHub
- Stáhněte si Seed7 z jeho hlavního úložiště na SourceForge
- Seed7 na Rosetta Code - obsahuje mnoho příkladů Seed7
- Quest for the Ultimate Cycle zkoumá rozšíření 3n+C programů Collatz Conjecture s Seed7
- Blog Rema Laubachera : Staticky propojené spustitelné soubory Linux s GCJ, Seed7 a haXe (2011)
- Blog Davida Gudemana Programovací jazyk Seed7 (2015)
- Port FreeBSD / viz také zde , spravuje Pietro Cerutti
- Port OpenBSD , který poskytuje Brian Callahan
- Balíček Seed7 pro openSUSE/Fedora (viz také zde nebo zde )
- Diskuse, kde je Seed7 popsán jako jazyk, kde mohou uživatelé jazyka skutečně definovat novou syntaxi
- Seed7 na „Fossies“ - Fresh Open Source Software Archive