Open Source im professionellen Einsatz
Linux-Magazin 10/2008
© Orlando Florin Rosu, fotolia.com

© Orlando Florin Rosu, fotolia.com

Populäre Programmiersprachen treten gegeneinander an

Babylon zu fünft

,

Kaum ein Thema trennt Entwickler so nachhaltig wie die Frage nach der besten Programmiersprache. Typisierung, Datenstrukturen, Freiheit in der Syntax oder Kürze des Code halten als Argumente her. Das Linux-Magazin hat prominenten Protagonisten von fünf populären Sprachen die gleiche Aufgabe gestellt.

869

Kleine Scharmützel am Entwicklerstammtisch zwischen den Anhängern unterschiedlicher Progammiersprachen sind zwar meist unterhaltsam, verlaufen aber in der Regel ergebnislos. Wirklich vereint ernsthafte Entwickler nur die allerletzte Erkenntniss, dass die Frage nach der einen, der einzigen, der universellen Programmiersprache eher akademischer Natur ist. Allgemeine Zustimmung findet da meist auch die These, dass sich unterschiedliche Sprachen für manche Anwendungsszenarien besser oder schlechter eignen als andere.

Um in diesen Sprachverwirrungen einen Überblick zu gewinnen, hat das Linux-Magazin prominente Entwickler gebeten, eine überschaubare Programmieraufgabe in ihrer Lieblingssprache zu lösen. Gefordert war, eine Textdatei neu zu sortieren, deren Fußnoten durcheinandergeraten sind (siehe Kasten "Die Spezifikation der Aufgabe"). Der Algorithmus zur Lösung sollte keinen Sprachpapst vor unlösbare Herausforderungen stellen, und die Teilnehmer sollten sich weniger in einem Programmierwettbewerb wähnen, sondern sich eher als Botschafter der Konzepte der unterschiedlichen Sprachen verstehen. Aus diesem Grund durften sie die Aufgabenstellungen in einem gewissen Grad variieren, wenn sie das glaubhaft rechtfertigen konnten.

Primär war also nicht, wer die Aufgabe mit den wenigsten Zeilen löst oder welcher Code am schnellsten läuft, sondern wie die in den Sprachen angelegten Denkmodelle sich in den Lösungen niederschlagen.

Die Spezifikation der
Aufgabe

Ein Text möge ungeordnete Fußnoten enthalten. Am Ende des Textes folgt ein getrennter Abschnitt, der auf die Verweise im Text Bezug nimmt. Jede Fußnote zeigt genau zu einem Verweiseintrag, es darf jedoch mehrere Fußnoten geben, die auf den gleichen Eintrag verweisen. In der Eingabedatei sind sowohl Fußnoten als auch die Verweiseinträge am Textende ungeordnet, beide beginnen nicht notwendigerweise mit 1, die Reihenfolge darf Lücken aufweisen. Die Lösung ist ein Programm, das die Fußnoten aufsteigend nummeriert.

Format

Die Eingabedatei besteht aus Text, kodiert im Format ISO-8859-15, und enthält Fußnoten der Form »[13]«. Die Fußnoten dürfen überall im Text stehen, allerdings steht der Verweis immer ungetrennt auf einer Zeile.

Die eigentlichen Einträge folgen am Ende des Textes nach der Markierung »@footnote:«. Alle Nummern in eckigen Klammern nach dem Marker sind folglich Verweisziele, keine Verweise.

Beispiel:

A great brown fox [13] jumped of a pile 
of lorem ipsum [4], [7]. He met with a 
silver penguin, browsing the Linux Kernel 
Mailinglist [3]. They debated other the 
question whether to start a C-program with 
"main (int argc, char **argv)" or with 
"main (int argc, char *argv[])". Square 
brackets annoyed them [9999].
@footnote:
[13] Al Fabetus: "On characters and animals", 1888, self published.
[4] Lorem Ipsum, <a href="http://en.wikipedia.org/wiki/Lorem_ipsum">UWeb Link</a>
[9999] Annoying Link.
[7] B. Fox: "More on Blind Text".
[3] Linux Kernel Maintainers: LKML

Die Aufgabenstellung bearbeitet eine einzelne Textdatei, deren Namen ihr der Anwender als Aufrufparameter nennt. Das Ergebnis dazu erhält er direkt auf der Standardausgabe. Die Texte können von sehr unterschiedlicher Länge sein, angefangen von einigen wenigen KBytes bis hin zu mehreren Hundert MBytes.

Die Nummerierung der Implementierung soll einer der beiden folgenden Varianten folgen oder beide ermöglichen:

  • Die Einträge im unteren Abschnitt sind aufsteigend ab 1
    nummeriert. Die Fußnoten tragen entsprechende Nummern, die
    diese Reihenfolge reflektieren.
  • Die Fußnoten im eigentlichen Text sind aufsteigend
    numeriert. Wenn mehrere Fußnoten auf den gleichen Eintrag
    zeigen, wiederholt sich im Text die Nummer des ersten Auftretens.
    Die Einträge im zweiten Textteil sortiert das Programm
    entsprechend um, sodass diese ebenfalls sortiert sind.

Fünf Kandidaten auf dem Prüfstand

Ins Feld zogen schließlich PHP, Perl, Java, Python und Java FX. Gern hätte die Redaktion auch Ruby und andere antreten lassen, allein es erklärten sich keine VIPs dafür bereit. Alle Lösungen, die dieser Artikel in der Reihenfolge ihres Eingangs in der Redaktion präsentiert, konnten die geforderte Aufgabe lösen, auch wenn einzelne Entwickler kleine Modifikationen vorgenommen haben. Der Test bewertet dabei aber nicht nur die programmiertechnische Korrektheit, sondern auch den Ressourcenverbrauch des Programms.

Ein Thinkpad X60s im 32-Bit-Modus unter einem Intel Core Duo L2400 mit 1,6 GHz diente als Testsystem. Den vorhandenen üppigen Speicherausbau von 3 GByte schöpfte allerdings keines der Programme aus. Für die Messung zogen die Tester eine 55 MByte große Datei heran, in die sie eine Million zufällige Fußnoten eingetragen hatten.

PHP

PHP ist eine für Webanwendungen optimierte Skriptsprache mit einer C-ähnlichen Syntax, die als vergleichsweise leicht zu erlernen gilt [1]. Die Sprache ist schwach typisiert, seit Version 4 (ab Mitte 2000) enthält PHP erste Sprachkonstrukte für objektorientierte Programmierung, die Version 5 (ab Mitte 2004) vervollständigt.

Viele verbreitete Webanwendungen wie Typo3 [2], Wordpress [3] oder Joomla [4] sind in PHP geschrieben. Der Repository-Crawler Ohloh.net [5] bescheinigt der Sprache mit 107 Kernentwicklern eines der größten Teams in der Open-Source-Welt. Als Mängel gelten Inkonsistenzen der Syntax wie unterschiedliche Parameterreihenfolgen bei Funktionen mit ähnlicher Aufgabe, das fehlen eines Bytecode-Cache, fehlende Thread-Sicherheit, was den Einsatz des Apache-MPM Worker ausschließt, sowie die erst für Ende 2008 in Version 6 erwartete durchgängige Unicode-Untersützung [6].

Der Einsender der PHP-Lösung, Zeev Suraski (siehe Abbildung 1), entwickelte 1998 zusammen mit Andi Gutmans PHP 3, das auf der Konzeption von Rasmus Lerdorf basierte.

Abbildung 1: Zeev Suraski gründete zuammen mit Andi Gutmanns die Firma Zend, die nach wie vor treibende Kraft hinter PHP ist.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 11 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Babylon zu fünft

    Kaum ein Thema trennt Entwickler so nachhaltig wie die Frage nach der besten Programmiersprache. Typisierung, Datenstrukturen, Freiheit in der Syntax oder Kürze des Code halten als Argumente her. Das Linux-Magazin hat prominenten Protagonisten von fünf populären Sprachen die gleiche Aufgabe gestellt.

  • Vom Thron gestürzt

    Nur wenige Tage nach Erscheinen des vorletzten Hefts gingen die Einsendungen im Stundentakt ein. Anhänger aller möglichen Sprachen wollten beweisen, dass sie besser programmieren können als es die Sprachpäpste im Linux-Magazin getan hatten. Die Auswertung zeigt: Das Volk irrt nicht.

  • leser_sprachen

    Kaum hielten die ersten Abonnenten das Linux-Magazin 10/2008 in Händen, füllten sich die Postfächer der Redaktion: Das Titelthema "Sprachwahl - Programmier-Päpste lösen und kommentieren vorgegebene Aufgaben" provozierte Fragen, Kritik und Anregungen - und außerdem einiges an selbstgeschriebenem Code, von Python über Tcl bis hin zu C++.

  • Shell scripting with type-safety using Haskell

    Why is scripting usually done in dynamically typed languages? This article applies strong typing in Haskell to shell programs. The end result can still be light-weight but also save time by reducing runtime errors.

comments powered by Disqus

Ausgabe 08/2016

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.