Modula-2 ist eine prozedurale Systemprogrammiersprache, die Niklaus Wirth ab 1978 an der ETH Zürich entwarf und 1980 veröffentlichte. Sie ist der direkte Nachfolger von Pascal und vereint dessen klare Struktur mit den Modul- und Low-Level-Fähigkeiten, die für Betriebssysteme und eingebettete Systeme nötig sind.
Die Kernidee: Module
- DEFINITION MODULE: deklariert die öffentliche Schnittstelle eines Moduls – was andere Module nutzen dürfen.
- IMPLEMENTATION MODULE: enthält den dazugehörigen Code. Die Trennung von Schnittstelle und Implementierung erzwingt Information Hiding und erlaubt getrennte Kompilierung.
- SYSTEM-Modul: gibt Low-Level-Zugriff auf Speicheradressen und Maschinenoperationen – Modula-2 kann damit systemnah programmieren, ohne auf Assembler ausweichen zu müssen.
- Coroutinen: zur Programmierung nebenläufiger Abläufe, integriert in die Sprache.
Modula-2 im Beispiel
DEFINITION MODULE Rechner;
PROCEDURE Quadrat(x: INTEGER): INTEGER;
END Rechner.
IMPLEMENTATION MODULE Rechner;
PROCEDURE Quadrat(x: INTEGER): INTEGER;
BEGIN
RETURN x * x
END Quadrat;
END Rechner.
Wirths Sprachfamilie
Modula-2 steht am Ende der ALGOL-Linie, die mit ALGOL 60 begann und über Pascal führte. Die Modul-Idee beeinflusste Ada, und Wirth selbst entwickelte später Oberon als Nachfolger. Gemeinsam mit den Objektkonzepten von Simula zeigt Modula-2, wie aus ALGOL zwei getrennte Systematik-Linien erwuchsen: die objektorientierte und die modulare.
Twig ist die führende Template-Engine für PHP. Sie wurde 2009 von Fabien Potencier als moderne Alternative zu Smarty entwickelt, ist ein fester Bestandteil des Symfony-Frameworks und ihre Syntax ist stark von Jinja und den Django-Templates beeinflusst. Twig kompiliert Templates in optimierten PHP-Code und ist damit schnell und sicher.
Syntax im Überblick
{{ variable }} <!-- Ausgabe -->
{% if x %} ... {% endif %} <!-- Logik -->
{% for i in items %} ... {% endfor %} <!-- Schleife -->
{% extends 'base.html.twig' %} <!-- Vererbung -->
{% block inhalt %} ... {% endblock %}
Erste Schritte
composer require twig/twig
php -r "require 'vendor/autoload.php'; echo (new TwigEnvironment(new TwigLoaderArrayLoader(['h' => 'Hallo {{ name }}'])))->render('h', ['name' => 'Hanse']);"
Praxis-Tipps
- Vererbung:
{% extends %}mit{% block %}baut Basis-Layouts;{% include %}bindet Fragmente ein. - Autoescaping: Twig escaped Ausgaben standardmäßig je nach Kontext (HTML, JS, CSS) — Schreibschutz gegen XSS ist eingebaut.
- Filter:
|upper,|date,|lengthund viele weitere Filter transformieren Werte direkt im Template. - Symfony: Twig ist die Standard-Template-Engine von Symfony und wird dort über das
twig-bridge-Paket nahtlos integriert.
Verwandte Grundlagen: PHP-Befehle sowie die Schwester-Engines EJS-Befehle und Jinja-Befehle.
EJS (Embedded JavaScript) ist eine einfache Template-Engine für Node.js, mit der sich HTML-Seiten direkt aus JavaScript-Code erzeugen lassen. Der Name steht für „Effective JavaScript“: EJS will keine eigene Template-Sprache erfinden, sondern nutzt die vertraute JavaScript-Syntax für Ausgaben, Schleifen und Bedingungen.
Syntax im Überblick
<%= variable %> <!-- escaped Ausgabe -->
<%- rohesHtml %> <!-- unescaped Ausgabe -->
<% if (x) { %> ... <% } %> <!-- JavaScript im Template -->
<% include('header') %> <!-- Partial einbinden -->
Erste Schritte
npm install ejs
node -e "console.log(require('ejs').render('<h1><%= name %></h1>', {name: 'Hanse'}))"
Praxis-Tipps
- Express-Integration:
app.set('view engine', 'ejs')macht EJS zur Standard-Template-Engine von Express-Anwendungen. - Partials: Mit
<%- include('header') %>lassen sich Kopf- und Fußzeilen wiederverwenden — wie bei PHP-include. - Layouts: EJS selbst kennt keine Vererbung, Layouts lassen sich aber über Partials oder zusätzliche Layout-Manager nachbauen.
- Sicherheit:
<%= %>escaped automatisch;<%- %>gibt Roh-HTML aus und ist nur für vertrauenswürdige Inhalte gedacht.
Verwandte Grundlagen: JavaScript-Befehle sowie die Schwester-Engines Jinja-Befehle und Twig-Befehle.
Jinja (offiziell Jinja2) ist die bekannteste Template-Engine für Python. Sie wurde von Armin Ronacher entwickelt, von den Django-Templates inspiriert und ist die Standard-Engine des Flask-Frameworks. Ihr Motto: schnell, ausdrucksstark und erweiterbar — mit Sandbox-Modus für unsicheres Umfeld.
Syntax im Überblick
{{ variable }} <!-- Ausgabe -->
{% if x %} ... {% endif %} <!-- Logik -->
{% for i in liste %} ... {% endfor %} <!-- Schleife -->
{% extends 'base.html' %} <!-- Vererbung -->
{% block inhalt %} ... {% endblock %}
Erste Schritte
pip install jinja2
python -c "from jinja2 import Template; print(Template('Hallo {{ name }}').render(name='Hanse'))"
Praxis-Tipps
- Template-Vererbung:
{% extends %}und{% block %}erlauben Basis-Layouts, die Kind-Templates gezielt füllen. - Autoescaping: Jinja escaped Ausgaben standardmäßig in HTML-Kontexten — schützt vor XSS, solange man nicht gezielt
|safeverwendet. - Sandbox: Der
SandboxedEnvironmentbeschränkt den Zugriff auf Python-Interna, wenn Templates aus nicht vertrauenswürdigen Quellen kommen. - Flask: Flask bringt Jinja automatisch mit und nutzt es als einziges Template-System.
Verwandte Grundlagen: Python-Befehle sowie die Schwester-Engines EJS-Befehle und Twig-Befehle.
Handlebars.js ist eine logiklose Template-Engine für JavaScript, die 2010 von Yehuda Katz (Mitbegründer von Ember.js) veröffentlicht wurde. Sie erweitert das ältere Mustache um Helper, Partials und Pfad-Ausdrücke und hält Präsentation strikt von Geschäftslogik getrennt.
Basis-Syntax
{{variable}} <!-- einfache Ausgabe -->
{{#if bedingt}} <!-- Bedingung -->
{{else}}
{{/if}}
{{#each liste}} <!-- Schleife -->
{{this}} (Index {{@index}})
{{/each}}
{{> partial}} <!-- Partial einbinden -->
Helpers und Blöcke
Helper sind registrierte Funktionen, die Logik kapseln: Handlebars.registerHelper('link', function (text, url) { ... }). Eingebaute Block-Helper sind #if, #unless, #each und #with. Eigene Partials werden mit registerPartial() definiert und über {{> name}} eingebunden.
Kompilierung
var tmpl = Handlebars.compile(quelle);
var html = tmpl({ name: 'Welt' });
Handlebars ist als Superset von Mustache konzipiert — einfache Templates beider Engines sind weitgehend austauschbar. Verwandt: Mustache-Befehle, Pug-Befehle (einrückungsbasiert) und JavaScript-Befehle.