Wyvern ist eine general-purpose Programmiersprache von Jonathan Aldrich (Carnegie Mellon University) und Alex Potanin (Victoria University of Wellington bzw. Australian National University) für die Entwicklung von Web- und Mobile-Anwendungen mit Sicherheit und Nachweisbarkeit („high-assurance applications“) als oberster Priorität. Die Sprache wird seit 2013 aktiv als Forschungsprojekt entwickelt.
Leitidee: typspezifische Sprachen
Wyverns erste Innovation sind type-specific languages: Für einen Typ lässt sich eine eigene, zur Domäne passende Syntax definieren. Ein Wert vom Typ SQLQuery wird dadurch direkt in SQL geschrieben, ein RegExp als regulärer Ausdruck — der Compiler prüft den eingebetteten Code statisch und typisiert. Das verbindet die Ausdrucksstärke von domänenspezifischen Sprachen mit der Sicherheit eines statischen Typsystems.
Kernkonzepte
- Einfaches Objektmodell mit guter Unterstützung für objektorientierte und funktionale Programmierung.
- Statische Typsicherheit mit starker Lokalitätsanalyse (Alias-Kontrolle) — Datenfluss wird so eingeschränkt, dass Sicherheitseigenschaften beweisbar bleiben.
- Modularität durch typspezifische Sprachen und modules, die als Werte erster Klasse behandelt werden.
Werkzeuge
bin/wyvern # Interpreter für .wyv-Dateien
bin/wypy # Wyvern → Python-Compiler (Prototyp)
wyvern rosetta/hello.wyv # Beispiel direkt ausführen
Syntax-Beispiel
def main():
var greeting = "Hallo Welt"
println(greeting)
// Typspezifische Sprache: SQL-Literal für einen SQLQuery-Typ
def queryUsers(): SQLQuery
return sql: select * from users where active = true
Praxis-Tipps
- Wyvern ist ein Forschungsprojekt: Releases liegen als ZIP auf der Projektseite, nach dem Entpacken direkt
bin/wyvernnutzen. - Die
examples-Ordner im Repository sind der schnellste Einstieg — sie zeigen typspezifische Sprachen, Objekte und sichere Datenbankzugriffe. - Konzeptionell interessant ist die Kombination mit statisch geprüften eingebetteten DSLs — ein Vorbild für sichere Web-/DB-Zugriffe.
Verwandte Grundlagen: Java-Befehle, Kotlin-Befehle, Rust-Befehle, TypeScript-Befehle, Oz-Befehle, Opa-Befehle.