Skriptsprachen

Warum gibt es Skriptsprachen ?
  • Automatisierung (Makros, Erweiterungen, Webseiten)
  • Änderungen ohne Compiler/Linker möglich
  • Einfache Syntax/Strukturen
  • Schnell/Einfach zu nutzen
  • Langsamer als klassische Sprachen
Arten von Sprachen
  • Stapelverarbeitung
    • Im OS integriert
  • Dynamische Sprachen
    • "High-Level Skriptsprachen"
    • Standardbibliotheken decken i.d.R. schon vieles ab
    • Auch komplexe Strukturen möglich
    • PHP, JS, Lua, Ruby, Python, CoffeScript
(Ahead-of-time-)Compiler
  1. Highlevel-Code
  2. Lexikalische Analyse (Tokenizing)
    • Zerlegung in Tokens (y = Bezeichner, + = Additionsoperator, ...)
  3. Syntaktische Analyse (Parser, AST)
    • Erstelung eines Syntaxbaum, Prüfung ob Syntax Teil der Sprache ist
    • Fehler: z.B. fehlendes Symikolon
  4. Semantische Analyse
    • Wurden x, y verher definiert ? Stimmen Typen ?
    • Fehler: z.B. Variabel nicht definiert
  5. Zwischencode (Translator, Bytecode)
    • Ab hier Backend ! Oft Maschinencode sehr ähnlich
  6. Optimierung
    • Z.B.: Inline-Funktionen, Variabel-Swap über zwei Register, ...
  7. Codegenerator (Maschinencode)
    • Z.B.: In Objektdatei

Bei einem vereinfachten Interpreter entfällt einiges:

  • Keine semantische Analyse (Check ob z.B. Variabel gesetzt ist)
  • Keine Optimierung (Ausführung meist schneller als Optimierung)
JIT-Compiler
  • Kompilierung von Teilen des Programms zu Maschinencode
  • Soll schneller sein als Interpreter
  • Häufig ausgeführte Programmteile werden ermittelt und optimiert
  • "Type inference" - Compiler "rät" Typ und nutzt Maschinencode
  • "Hidden classes" - Statt Dictionaries werden Klassen erstellt
  • "Inline caches" - Hidden class wird wiederverwendet für andere Objekte
  • ...

PHP

Variablen
  • Dargestellt durch $VARNAME
  • Keine explizite Deklaration
  • Kein fester Typ
  • Nicht initialisiert: Typabhängiger defaultwert
  • "===" führt Typstarken Vergleich durch
  • Stringverkettung: "Test" . " " . "123"
Arrays
  • Keine feste Größe
  • Assoziative Arrays möglich
  • Mischformen von String und Integer als Key erlaubt
Dateieinbindung
  • include beschreibt optionale Dateien
  • In der Regel wird require genutzt
  • include_once und requice_once um Dateien nur ein mal einzubinden
Exceptions
  • Existieren, werden aber fast nie genutzt
Wichtige Funktionen
  • echo 'TEXT';
  • exit;
  • unset($variable);
  • isset($variable);
  • empty($variable);
  • define($name, $value);