# Wyvern (Programmiersprache)

Wyvern ist eine funktionale und objektorientierte Programmiersprache.
Der Name leitet sich von einer zweibeinigen und zweiflügeligen mythischen Kreatur mit einem Drachenkopf und einem giftigen Biss ab. Als Wortherkunft gilt das lateinische vipera (Viper, → althochdeutsch wipera).
Der kompakte Sprachkern erlaubt es, oft verwendete Sprachelemente wie z. B. Operatoren oder zusätzliche Kontrollstrukturen in Benutzerklassen zu implementieren und dadurch den Sprachumfang zu erweitern und eigene domänenspezifische Sprachen (englisch domain-specific language, DSL) zu erstellen.

## Konzepte
### Integration mit Java

Wyvern-Programme können Java-JARs ansprechen und umgekehrt. Es können bestehende Java-Bibliotheken und -Frameworks in Wyvern-Projekte eingebunden und dort genutzt werden. Ähnliches gilt für die meisten Werkzeuge: Entwicklungsumgebungen wie Eclipse oder IntelliJ unterstützen Wyvern ebenfalls.

### Objektorientierung

Wyvern ist, anders als Java, eine rein objektorientierte Programmiersprache. Jeder Wert ist ein Objekt.

### Funktionale Programmierung

Funktionen sind First-Class-Objekte. Sie können an allen Stellen verwendet werden, an denen Werte erlaubt sind, z. B. Zuweisung an eine Variable (hier ist nicht das Ergebnis der Funktionsauswertung gemeint, sondern die Funktionen selbst) oder bei der Parameterübergabe. Methoden können jederzeit in Funktionen umgewandelt werden, sind selbst aber keine First-Class-Objekte.

### Typsystem

Wyvern ist statisch typisiert. Generische Klassen verwenden Typen, die zum Entwicklungszeitpunkt noch nicht festgelegt sind.

## Sprache ohne Worte

Die Sprache selbst enthält – anders als andere Sprachen – kein definiertes Schlüsselwort. Statt jedes Schlüsselwort mit dem Parser im Umfeld seines Codeblocks zu analysieren, enthält der Sprachkern einen „Klassen-Parser“. Dieser unterstützt Klassen-Deklarationen, die andere Deklarationen enthalten können – auch für Methoden und Variablen. Hierbei verbindet das Wyvern Frontend das Parsen mit Typprüfungsstufen, was in anderen Sprachen getrennt voneinander erfolgt. Auf diese Weise erkennt Wyvern Schlüsselworte völlig verschiedener Sprachen – beginnend mit Java UND JavaScript – und verarbeitet diese. Unabhängig davon verwendet Wyvern zur lexikalischen Quelltext-Analyse die von Python bekannte Strukturierung durch Einrückungen im Quelltext.

## Entwurfsziel

Wyvern entstand mit dem Ziel, die Leistungsfähigkeit der Sprache Scala mit einem einfacheren aber flexibleren Sprachkern zu erreichen.

## Förderer

Wyvern entsteht im NSA-Labor der Carnegie Mellon University unter der Leitung von Jonathan Aldrich. Darüber hinaus wird die Entwicklung der Sprache unter anderem finanziell gefördert von der U.S. National Science Foundation und dem Pentagon.

## Systemvoraussetzungen

Wyvern erfordert ein installiertes Java 8 JDK. Die Wyvern-Kompilierung sollte mit einer IDE erfolgen. Eclipse Kepler sowie IntelliJ 13 oder höher werden unterstützt. Mit tslwyvern existiert auch eine Implementierung in Scala.

## Verwendung

Wyvern wird entworfen, um aufgrund der Typsicherheit hohen Sicherheitsanforderungen zu genügen. Dabei soll die Entwicklung von Apps für mobile Geräte und Web-Applikation gegenüber bisherigen Vorgehensweisen vereinfacht werden. Eine Anwendung sei laut der Carnegie Mellon University, aus nur wenigen Informations-Splittern allgemeingültige Muster zu finden.