# Gosu (Programmiersprache)

Gosu ist eine statisch typisierte, allgemeine Programmiersprache, die auf der Java Virtual Machine (JVM) läuft. Ihre Einflüsse stammen aus Java, C# und ECMAScript. Die Entwicklung von Gosu begann 2002 intern bei Guidewire Software, und die Sprache wurde erstmals 2010 unter der Apache-2-Lizenz in der Community veröffentlicht.

## Merkmale

Gosu kann als Skriptsprache dienen und verfügt über Freiform-Programmtypen (.gsp-Dateien) für die Skripterstellung sowie statisch verifizierte Vorlagendateien (.gst-Dateien). Gosu kann diese und alle anderen Typen optional direkt aus dem Quellcode ohne Vorkompilierung ausführen, was es auch von anderen statischen Sprachen unterscheidet.

## Geschichte

Gosu ist eine statisch typisierte, Programmiersprache, die ursprünglich im Jahr 2002 als Skriptsprache namens GScript bei Guidewire Software entwickelt wurde. Die Sprache hat sich im Laufe der Zeit weiterentwickelt und wurde als eine Art Java-Variante beschrieben, die versucht, nützliche Verbesserungen einzuführen, während sie die grundlegende Nützlichkeit und Kompatibilität mit Java beibehält. In ihren Anfängen folgte sie den Richtlinien von ECMAScript.
Im Jahr 2010 wurde Gosu der Community in der Version 0.7 Beta vorgestellt, gefolgt von Version 0.8 Beta im Dezember 2010 und Version 0.8.6 Beta Mitte 2011. Letztere führte zusätzliche Funktionen ein, wie die Fähigkeit, XML-Schemadefinitionsdateien und XML-Dokumente als native Gosu-Typen zu laden. Die neueste verfügbare Version ist Gosu 1.10, die im Januar 2016 veröffentlicht wurde und gleichzeitig mit einem neuen IntelliJ-IDEA-Editor-Plugin herauskam.
Guidewire setzt Gosu weiterhin intensiv in seinen InsuranceSuite-Anwendungen ein. Obwohl Guidewire beschlossen hat, die Entwicklung neuer Konstrukte für die Gosu-Programmiersprache vorerst einzufrieren, bleibt Gosu ein integraler Bestandteil der Softwareentwicklung in dieser Branche.
Die Syntax von Gosu zeigt Einflüsse aus verschiedenen anderen Programmiersprachen. Zum Beispiel sind Deklarationen eher pascal ähnlich, wobei der Name zuerst steht. Gosu-Klassen können Funktionen, Felder, Eigenschaften und innere Klassen als Mitglieder enthalten. Das Typsystem unterstützt nominelle Vererbung, Komposition per Delegation sowie strukturelle Typisierung, ähnlich wie in der Go-Programmiersprache.

## Philosophy

Die Sprache wurde von Scott McKinney entwickelt, der auch die Rolle des Entwicklungsleiters innehat. McKinney betont bei der Gestaltung von Gosu den Pragmatismus, der sich in Aspekten wie Lesbarkeit und Auffindbarkeit widerspiegelt. Das statische Typsystem von Gosu ist ein integraler Bestandteil der Sprache.

## Verwendung

Die Programmiersprache wird hauptsächlich in den kommerziellen Produkten von Guidewire Software verwendet.

## Syntax
### Dateitypen

Gosu unterstützt mehrere Dateitypen:
* Klassen (.gs-Dateien)
* Programme (.gsp-Dateien)
* Erweiterungen (*.gsx-Dateien)
* Vorlagen (*.gst-Dateien)
Zusätzlich zu den Standardklassentypen unterstützt Gosu Enums, Interfaces, Strukturen und Annotationen.

### Variablen und Typdeklarationen

Gosu ist statisch typisiert, verwendet jedoch Typinferenz, um den Großteil des normalerweise mit statischer Typisierung verbundenen Syntaxoverheads zu eliminieren.

### Operatoren

Gosu unterstützt die standardmäßigen Java-Operatoren mit einigen geringfügigen Einschränkungen:

### Schleifen

Die for-Schleife in der Gosu-Programmiersprache ermöglicht es Entwicklern, eine bestimmte Anweisungssequenz wiederholt auszuführen, wobei sie die Kontrolle über den Iterationsprozess haben. Ein Gosu Beispiel:

### Switch

Die switch-Anweisung in Gosu kann jedes Objekt testen, wobei am Ende ein spezieller Standardfall (default case) vorgesehen ist.