# Pawn (Programmiersprache)

Pawn ist eine einfache, typenlose, 32-Bit-Erweiterungssprache mit einer Syntax, die der von C ähnelt. Ein Pawn-Programm wird in eine Binärdatei kompiliert. Der Pawn-Compiler erzeugt P-Code (oder Bytecode), der dann auf einer abstrakten Maschine ausgeführt wird. Die Ausführungsgeschwindigkeit, Stabilität, Einfachheit und ein geringer Speicherbedarf waren die Hauptdesignkriterien für die Sprache und die abstrakte Maschine.

## Geschichte

Die Pawn-Programmiersprache entstand Ende der 1990er Jahre durch IT-Studenten der Universität Uppsala in Schweden. Ihr Hauptziel war die Entwicklung einer einfachen, aber leistungsfähigen Skriptsprache, die vielseitig einsetzbar ist.

## Merkmale

Merkmale von Pawn
* C-ähnliche Syntax: Die Syntax von Pawn ist an C/C++ angelehnt, was sie für Entwickler, die mit diesen Sprachen vertraut sind, leicht verständlich macht.
* Kompaktheit: Pawn zeichnet sich durch seine geringe Größe aus und erfordert wenig Speicherplatz, was für den Einsatz in ressourcenbeschränkten Umgebungen wie Mikrocontrollern vorteilhaft ist.
* Precompiler-System: Das Precompiler-System von Pawn ermöglicht es Entwicklern, benutzerdefinierte Befehle und Funktionen zu erstellen, um ihre Arbeitsabläufe zu automatisieren und zu optimieren.
* Portabilität: Pawn ist auf verschiedenen Plattformen verfügbar und bietet somit eine hohe Portabilität für Entwickler.
* Modularität: Entwickler können Bibliotheken und Module in Pawn schreiben und wiederverwenden, um die Entwicklung von Skripten zu beschleunigen.

## Anwendungsbereiche

Pawn ist eine Programmiersprache, die in verschiedenen Anwendungsbereichen Verwendung findet.
Die Sprache erlangte insbesondere als Skriptsprache für Modding-Aktivitäten des Spiels "GTA San Andreas" im Kontext der Multiplayer-Modifikation SAMP (San Andreas Multiplayer) Bekanntheit. Obwohl Pawn oft mit SAMP assoziiert wird, findet es auch in anderen Bereichen Anwendung. So wird Pawn für die Programmierung von Mikrocontrollern und anderen Embedded-Systemen genutzt. Zudem findet Pawn Verwendung in weiteren Spielmodifikationen und Projekten.
Wenn Pawn für SAMP verwendet wird, erfolgt dies durch das Einbinden von SAMP-spezifischen Includes in das Skript wie z. B.:
Dadurch können alle relevanten Publics, Funktionen und Callbacks von SAMP benutzt werden.

## Variablen

Im Vergleich zu C weist Pawn weniger Variablentypen auf und die Deklaration ist unterschiedlich. In Pawn ist die Verwendung des Schlüsselwortes "new" erforderlich, welches bei Bedarf durch den entsprechenden Typ ergänzt und vom Variablennamen gefolgt wird. Standardmäßig werden Variablen in Pawn als Integer deklariert, sodass die explizite Typangabe oft entfallen kann. Es gilt als etablierte Konvention, Variablen bei der Deklaration stets zu initialisieren, obwohl der Compiler automatisch einen Wert zuweist.
| Typ | Deklaration | Spezifizierer |
| Integer | new a = 3; | %d, %i |
| Float | new Float:pi = 3.14; | %f (%.2f → 2 Dezimalstellen) |
| Boolean | new bool:lightOn = false; | %b |
| Charakter | new lettreB = 'B'; | %c (%d → code ASCII) |
| Zeichenkette/String | new monEncyclopedie = "Wikipédia"; | %s |

## Strukturen und Schleifen, Operatoren

Pawn kennt, analog zu C, Kontrollstrukturen wie if-else, switch; Schleifenkonstrukte wie for, while oder do while sowie arithmetische Operatoren (z. B. +) und auch logische (z. B. ||).

## Funktionen

Beispiel einer Funktion: