Parrot

Eine VM für mehrere Skriptsprachen

Weitere Funktionalitäten

Parrot in C/C++ Programme einbinden

Die virtuelle Maschine von Parrot kann einfach und schnell in bestehende Programme eingepflanzt werden. Somit ist es Kinderspiel, eine Software, die zum Beispiel in C/C++ geschrieben ist, mit performanten Skripten zu erweitern.

Mit der mitgelieferten "libparrot" kann natürlich auch die Bindung zwischen Parrot und C/C++ programmiert werden.


$ parrot -o vm.pbc pasm/spruenge.pasm
$ cat vm.c
#include <stdio.hi>
#include <parrot/embed.h>

int main(int argc, char *argv[]) {
    Parrot_Interp interp = Parrot_new(NULL);
    Parrot_PackFile pf = Parrot_readbc(interp, "vm.pbc");
    Parrot_loadbc(interp, pf);
    getchar();
    Parrot_runcode(interp, argc, argv);
    Parrot_destroy(interp);
    return 0;
}

$ gcc -o vm vm.c -lparrot
$ ./vm

1 2 3 4 5 6 7 8 9 10

Der Speicherverbrauch für die VM ist gering und ist in erster Linie von dem geladenen Code abhängig. Somit eignet sich Parrot um komplexe Programme durch schnelle und einfache Skripte zu erweitern.


$ ps u | grep "./vm"
johbar    7148  0.0  0.2  36812  5148 pts/0    Sl+  21:56   0:00 ./vm
johbar    7169  0.0  0.0   2988   760 pts/2    S+   21:57   0:00 grep ./vm

Eigene Operationscodes

"libparrot" bietet auch die Möglichkeit, eigene Operationscodes zu programmieren. Daduch ist es möglich, der Software CPU von Parrot neue Befehle "beizubringen".

Somit wäre es zum Beispiel möglich, Parrot-fremden Bytecode auszuführen. Mit einen entsprechendem BytecodeLoader, welcher die Java-Klassendefinitionen in Parrot-PMCs umsetzt, wäre es Parrot möglich, Java-Bytecode nativ auszuführen.

Dieses Feature findet jedoch noch selten Verwendung. Es könnte jedoch später an Bedeutung gewinnen.

Erstellt von Johannes Barop