Pawn

Pawn (pôvodne vyvýjaný pod názvom Small) (chybne nazývaný Pawno) je skriptovací jazyk, ktorý nachádza využitie najmä v programovaní (skriptovaní) serverov do hry Grand Theft Auto: San Andreas či do hry Counter strike.

Pawn je dynamický jazyk, so syntaxou vychádzajúcou z jazyka C, no voľnejšou. Pôvodne bol vyvýjaný s cieľom vytvoriť jednoduchý, rýchly, moderný a prenosný jazyk. Na jeho použitie je potrebné "prostredie" - AMX, v ktorom je daný program spustený. Prostredie AMX je dostupné na viaceré operačné systémy, aj na 8-bitové prístroje.

História 
Pôvodný názov Small-C bol čoskoro zmenený na Small, pretože autori považovali jazyk za niečo viac než len kópiu jazyka C. Došlo k fundamentálnym zmenám oproti jazyku C, napríklad odstránenie typov premenných, či nahradenie a prerobenie systému ukazovateľov (pointerov). Neskôr, keď jazyk nadobudol vyššiu komplexnosť, bol premenovaný ešte raz, na Pawn. Tento názov nesie už niekoľko rokov.

Technológia a AMX  
Ako skriptovací jazyk potrebuje virtuálne prostredie - virtuálny stroj, na fungovanie. Toto prostredie autori nazvali AMX, zo skratky Abstract Machine eXecutor. AMX vo veľkej miere udáva vlastnosti jazyka.  

Jazyk je beztypový, všetky údaje sa ukladajú do rovnako veľkých premenných, zväčša o veľkosti 4 Bajtov. Počas programovania je možné používať tzv. Tagy, ktoré umožňujú typovú kontrolu. Táto kontrola však neexistuje v reálnom čase, iba počas kompilácie je možné vytvárať vlastné typy, bežne dostupné sú Boolean či Float. U znakov a textových reťazcov sa tagy nepoužívajú. 

AMX používa technológiu "stack-based", čiže vo virtuálnom stroji sú všetky údaje uložené v zásobníku (Stack). Toto vo veľkej miere negatívne ovplyvňuje rýchlosť jazyka Pawn. Kompilácia má tak ako v podobných jazykoch dva kroky - prvotná kompilácia, ktorá pozostáva z prekladu zdrojového kódu do byte-kódu. Byte-kód ešte nie je spustiteľný na danom stroji. Musí teda prejsť cez AMX, kde je v reálnom čase prekladaný na binárny kód spustiteľný na danom stroji.

Ukážka kódu 
#include <float>
#include <core>

const new text[64] = "Addition";

main() {
    new cislo = 5;
    new Float:realneCislo = 7.43;
    
    printf("%s: %i + %f = %f", text, cislo, realneCislo, realneCislo + cislo);
    
    printf("Faktorial: %i! = %i", cislo, faktorial(cislo));
    printf("Faktorial2: %i! = %i", cislo, faktorial2(cislo));
}

stock faktorial(n) {
    return n > 0 ? (n*faktorial(n-1)) : 1;
}

stock faktorial2(n) {
    new ret = 1;
    while(n > 1) {
        ret *= n--;
    }
    return ret;
}

Referencie 

Skriptovacie jazyky