Roles und Signaturen mit Moose: Moderne Erweiterungen für Perl 5

Seite 3: Miniatisierung

Inhaltsverzeichnis

Doch für viele ist das zu schwere Technik. Moose braucht seine halbe Startsekunde auf moderner Hardware und 5 MByte RAM ohne Zusatzmodule wie MooseX::Declare, das etwa gleichstark zulangt. Kein Vergleich mit den weit unter 12 kB von Role::Tiny, dessen Abhängigkeiten sich auf eine Handvoll winziger Kernmodule und die 4 kB vom erwähnten Try::Tiny erstreckt. Aber aus diesem winzigen Paket bekommt der Anwender requires, with, does, die Methodenmodifikatoren und apply_roles_to_object zum Anreichern der Objekte zur Laufzeit. Da diese Methoden sub geschrieben werden, lassen sie sich mit apply_roles_to_package in beliebige Namensräume exportieren. Lediglich in der Klasse wird es nur wenig umständlicher:

package Excalibur;
use Role::Tiny::With;

with 'VorlonenKanone', 'Gravitationsgenerator';

Um aus diesem Namensraum Excalibur eine Klasse zu machen, darf man zwischen der alten Schule und einem beliebigen Objektsystem wie Class::Tiny wählen, dass sich syntaktisch ebenfalls dicht an Moose hält.

Mouse tritt gerade in seiner Bedeutung etwas zurück, sodass es beinah kompatible Objektsysteme grob in drei Gewichtsklassen gibt: winzig (Class::Tiny, Role::Tiny), klein (Moo) und ausgewachsen (Moose) Interoperabilität und Migrationsfähigkeit dieser Module wurde in den letzten Monaten spürbar verbessert (siehe Moo::late ). Der Tradition Acme-Humors folgend, (die 2004 mit dem Objektsystem Spiffy seinen Anfang nahm), gibt es noch "Mo" (was in vier Tweets passt) und M, das lediglich diesen skurrilen Wettbewerb gewinnt. Aber von den stillen Freuden der eingefleischten Perl-Hacker abgesehen, bildete sich hier eine Infrastruktur mit großem praktischen Nutzen, die es erlaubt, die Kosten und Fähigkeiten der Objekterzeugung frei zu wählen. Gleichzeitig renoviert sie die wichtigsten Baustellen von Perl 5 und erleichtert es, Perl 6 zu erlernen, die sich anbahnende Sprachgeneration mit gleichem kulturellen Hintergrund. Neueste Detailoptimierungen umfassen MooseX::LvalueAttribute, das statt des leicht umständlichen

$excalibur->geschwindigkeit(2475);

$excalibur->geschwindigkeit = 2475;

gestattet, jedoch nur, wenn das Attribut als "lvalue" (zuweisungsfähig) gekennzeichnet wurde:

...
has geschwindigkeit => (
traits => ['Lvalue'], ...

Eine erfreuliche Entwicklung ist auch Moops, das mit Class::Tiny bis Moose zusammen- arbeiten kann und im Wesentlichen das Gleiche bietet wie MooseX::Declare. Es greift für die Einführung der Schlüsselworte (with, extends usw.) jedoch auf eine neuere und bessere API zurück und funktioniert deshalb nur mit Perl 5.14 oder neuer. Es ist wesentlich schlanker, trotz einiger zusätzlicher Zuckerl wie Try::Tiny, Type::Tiny sowie dem gefühlten besten neueren Entwicklungen aus Moose und Moo. Bevor dieser Artikel jedoch zu sehr in die Breite geht, schließen sich besser die Hangartore mit dem Hinweis auf mögliche, kommende Neuigkeiten, die sich noch vor ihrer Veröffentlichung hier einsehen lassen.

Herbert Breunung
schreibt regelmäßig Artikel über Perl 5, Perl 6 und GUI-Programmierung und spricht darüber auch auf Konferenzen im In- und Ausland. Außerdem führt er ein freies Softwareprojekt und den Aufbau einer hypertextfähigen Perl-6-Dokumentation.
(ane)