AngelScript
AngelScript | |
---|---|
Basisdaten | |
Paradigmen: | objektorientiert imperativ strukturiert funktional |
Erscheinungsjahr: | 2003 |
Entwickler: | Andreas Jönsson[1] |
Aktuelle Version | 2.35.0 (5. Dezember 2020) |
Typisierung: | statisch |
Wichtige Implementierungen: | AngelScript-Compiler (c++ und assembly library) |
Beeinflusst von: | C, C++ |
Betriebssystem: | plattformunabhängig |
Lizenz: | zlib-Lizenz |
angelcode.com/angelscript |
AngelScript (kurz AS) ist eine Skriptsprache, die sich stark an C++ orientiert. Sie wurde speziell als Erweiterung für C- und C++-Programme entworfen und wird hauptsächlich in Computerspielen bzw. deren zugrundeliegenden Engines verwendet. Über die Programmierschnittstelle (API) von AngelScript lassen sich AngelScript-Programme in C++-Programme einbinden. AngelScript ist Open Source, wird unter der freien zlib-Lizenz verteilt und ist zu vielen Betriebssystemen und Compilern kompatibel.
Sprache
Da AngelScript speziell zur Verwendung mit C++ ausgelegt ist, orientiert es sich stark daran. So unterstützt AngelScript die gleichen elementaren Datentypen (int, bool, …), ist objektorientiert und verwendet eine fast identische Syntax wie C++. Es existieren jedoch auch einige Unterschiede zu C++:
- Der Pointeroperator * aus C++ existiert nicht, stattdessen gibt es den @-Operator, der allerdings ähnlich funktioniert
- nur public und private als Zugriffsmodifikatoren (in C++ zusätzlich noch protected)
- Klassen können nur von einer Basisklasse erben (in C++ von beliebig vielen)
- Klassenfunktionen sind automatisch virtual (in C++ muss dies explizit gekennzeichnet werden)
AngelScript-Quelltext wird üblicherweise in .as-Dateien gespeichert. Ein Beispiel für eine einfache .as-Datei zeigt folgender Beispiel-Quelltext.
//Datei "beispiel.as" void main() { //Variablendeklarationen, -initialisationen und -operationen wie in C++ int a = 5; ++a; int b = a + 3; if(b == 9) { /* wurde die Funktion print(string) vorher im C++-Quelltext registriert, * so wird sie jetzt aus AS heraus aufgerufen */ print("Hello world\n"); } }
Verwendung
Eingesetzt wird AngelScript in vielen Computerspielen, unter anderem Amnesia: The Dark Descent, der Penumbra-Reihe, Warsow, Warhammer: Mark of Chaos, SuperTuxKart und vielen weiteren großen und kleinen Projekten.[2]
Die Einbindung in vorhandenen C++-Quelltext geschieht durch „Registrierung“ der C++-Funktionen und -Klassen an der AngelScript-Engine. Folgender Beispielquelltext gibt ein Beispiel zur Registrierung einer Klasse Auto mit seinen Methoden starten() und bremsen().
//Datei beispiel.cpp #include "angelscript.h" class Auto { public: void starten(){}; void bremsen(){}; }; int main() { asIScriptEngine *engine = asCreateScriptEngine(ANGELSCRIPT_VERSION); engine->RegisterObjectType("Auto", 0, asOBJ_REF); engine->RegisterObjectMethod("Auto", "void starten()", asMETHOD(Auto,starten), asCALL_THISCALL); engine->RegisterObjectMethod("Auto", "void bremsen()", asMETHOD(Auto,bremsen), asCALL_THISCALL); return 0; }
Auf ähnliche Weise lassen sich auch globale Funktionen registrieren.
Entwicklung
Im unregelmäßigen Abständen erscheinen neue Versionen mit Fehlerbeseitigungen und neuen Funktionen.[3] Da der Quelltext frei zugänglich ist, umfasst die Liste der Entwickler neben dem Hauptprogrammierer viele Freiwillige, die sich an der Entwicklung und Verbesserung der Sprache und der API beteiligt haben.
Weblinks
- AngelScript-Website
- AngelScript-Handbuch