Categories
Die Programmiersprache Perl

Perl 5.18: Ein kleiner, aber nachhaltiger Schritt | heise Developer

Perl 5.18: Ein kleiner, aber nachhaltiger Schritt | heise Developer

Eine der mit 5.18 kommenden Änderungen:

5.18 löst die uneinheitliche Behandlung von $_ in diesem (s.u.!) Zusammenhang, wird aber bestimmt “laufende Programme ins Stolpern bringen“:

  • Befehle wie given und Kernmodule verwenden wieder local $_ statt my $_.
Wenn durchgehend local $_ verwendet wird (der Normalfall in Perl), dann lässt sich das auch ordentlich schachteln, wenn in manchen Kontexten stattdessen my $_ (also ein “lexikalisches $_“) verwendet wird, dann führt das zu unerwarteten Verdeckungen (“override”).
Man sieht also z.B. in einem try/catch (aus Try::Tiny) innerhalb eines given/when ganz unerwartet das (lexikalische) $_ aus dem when statt des (local) $_ aus dem catch. Eines der Caveats in der Dokumentation von Try::Tiny beschreibt das Problem und auch den Work-Around.
Mit solchem Code hatte ich es kürzlich mit 5.14 in einem Projekt zu tun.
Categories
Die Programmiersprache Perl YAPC

Konferenz-Bericht: 13. Deutscher Perl-Workshop

13. Deutscher Perl-Workshop | heise Developer

Ich saß ganz zufällig neben Colin während dieser Tage.

So wie’s aussah, hatte er in der Tat eher kein Interesse an den leicht theoretisierenden und weniger praxisnahen Vorträgen. Was ihm aber so wirklich gefiel, hätte ich auch nicht sagen können.

Categories
Die Programmiersprache Perl

Evaluation des Deutscher Perl-Workshop 2011 – Evaluation eröffnet

Die Evaluation war ja schon vor dem Workshop (YAPC::Germany) angekündigt worden. Dabei war erklärt worden (IIRC), dass man schon nach dem jeweiligen Talk seine Statements dazu abgeben könne. Das war aber nicht so. Jetzt werde ich auf keinen Fall im nach hinein Talks kommentieren. Aber vielleicht haben andere da eine viel stärkere Motivation. Eine verpasste Chance.

Update:
Der Evaluations-Link wurde mir eigentlich schon vor dem Workshop zugesandt. Ist er erst seit heute “scharf” oder ist er schon einige Zeit scharf?

Categories
Die Programmiersprache Perl LinuxTag.org/2010

Bericht von Thomas Fahle zum Perl-Stand am LinuxTag.org/2010

Hübscher Artikel von Thomas Fahle. Der einzige vom “permanenten Standpersonal”, den er nicht erwähnt, bin ich, aber das kann ich ihm nicht verdenken, neben mir sieht er halt einfach Asbach aus, und das verträgt er nicht (kleiner Scherz am Rande, hi hi hi hi hi!). Unsere Wellen scheinen, nicht in Harmonie zu schwingen, um es mal so auszudrücken, und er hätte mich wohl gerne zum Zweikampf herausgefordert, wenn er nicht irgendwo bei mir “Luta Livre” und “Krav Maga” gelesen hätte. Schade eigentlich!

Categories
Die Programmiersprache Perl ebox LinuxTag.org/2010

ich auf dem LinuxTag.org/2010

Ignacio Correas Usón, “Mr. ebox”, der “Mann in rot”, und ich am Perl-Stand. Ignacio sucht ernsthaft deutsche Partner für die ebox.

Categories
Die Programmiersprache Perl RELAX NG XML

XML-Migration meines CANopen-Projekts abgeschlossen

Im Mai wurde ich vor die Aufgabe gestellt, in Ada geschriebene Software zu erweitern, welche in ihrer ursprünglichen Form von einem Bündel von Generatoren erzeugt, aber seit Jahren von Hand erweitert worden war.

Klar, dass der Gedanke von mir Besitz ergriff, kein generierbares Stück Code von Hand zu schreiben und vielmehr die quasi verloren gegangenen Generatoren neu zu schreiben.

Am liebsten hätte ich das mit ruby und xml erledigt, aber ich hatte zu diesem Zeitpunkt noch keine in ruby unter Zurhilfenahme von XML geschriebene Software, die nahe genug an dieser Aufgabe dran war, um daraus die Software für dieses Projekt abzuleiten.

Ich stand unter ziemlichem Druck, Ergebnisse abzuliefern, und so erledigte ich die Aufgabe in den darauf folgenden Wochen erst einmal in perl und baute die zentrale Datenstruktur einfach als perl-Datenstruktur.
Nach wenigen Wochen konnte ich alle generierbaren Code-Stücke wirklich aus dieser zentralen Datenstruktur erzeugen, und für den weiteren Verlauf des Projektes stand praktisch nur noch die Weiterentwicklung dieser zentralen Datenstruktur und natürlich das Arbeiten mit ihn in Ada auf dem “embedded system” an.

Nun es stellte sich schon noch heraus, dass mehr als ursprünglich erwartet generiert werden konnte. Der Erwartungsdruck hier war aber nicht mehr so groß wie der am Anfang, und ich wollte nach Möglichkeit mit XML-Techniken weiterarbeiten. Ich baute also einen Converter, um die perl-Datenstruktur in eine “en passant” zu definierende XML-Datenstruktur zu transformieren, natürlich ist die Spezifikations-Sprache dazu “RELAX NG” und die Datenstruktur wird seit dem im emacs im nxml-mode editiert. Das neue XML bekam dann hübsche Extra-Features mit eigenen Code-Generatoren, immer noch in perl. Der bittere Aspekt war jedoch selbstverständlich, dass ich bis auf weiteres alle Änderungen im Bereich der in perl gehaltenen Datenstruktur in der XML-Variante nachziehen musste. Es stellte sich heraus, dass sich in diesem Bereich wochenlang keine Änderungen bzw. Erweiterungen ergaben. Aber mittelfristig sollten aus meiner Sicht schon alle generierbaren Code-Stücke nur aus der XML-Variante erzeugt werden.

Nun gestern erreichte ich dieses Ziel, und darüber bin ich sehr zufrieden. Die Code-Generatoren sind zwar immer noch in perl geschrieben (nur die Datenstruktur-Zugriffe mussten schließlich angepasst werden) und werden das vermutlich zeitlebens auch bleiben, aber sie funktionieren und sie sind auch ganz gut zu lesen und zu pflegen.

Mittlerweile habe ich jedoch auch für ein paar kleine Anwendungsgebiete neue Code-Generatoren entwickelt, und die sind in ruby geschrieben. Für die nächsten größeren und kleineren Aufgaben werden sie bestimmt als Vorlage dienen.
Selbstverständlich benutzen auch die neuen XML-Spezifikationen wieder “RELAX NG”.

Mittlerweile ist das CANopen-Kommunikationsprofil für ein zweites Fahrzeug in diesem CANopen-XML begonnen worden, und die Zweifel an der Nützlichkeit werden zumindest nicht mehr lautstark diskutiert.

Zu den erwähnten Extra-Features dieses CANopen-XMLs zählen Records mit “representation specifications” und Aufzählungstypen (ebenso mit rep. specs), aus welchen die Ada-Records und -Aufzählungstypen generiert werden.
Die Unterprogramme, mit welchen in Ada die CANopen-PDOs zusammengebaut und abgeschickt werden, sind sozusagen halb-automatisch erstellt.
Diejenigen Unterprogramme, welche ankommende PDOs zerlegen, sind noch gänzlich handgeschrieben, die XML-mäßigen Spezifikationen der PDOs werden darin aber als hilfreiche Kommentare verwendet.

Wer weiß, vielleicht verlangt ja mal ein Auftraggeber “Traceability”, die Grundlagen dafür wären schon gelegt.
Alle XML-Tags bekämen passende Attribute und Werte dazu,
und diese würden überallhin durchgeschleift.