Kompiliert: Michael, Pascal, Lukas
Auch die systemnahe Sprache C sollte im Wettbewerb nicht fehlen - das dachte sich Leser "Michael" (Nr. 36) und fütterte den Compiler gleich mit 349 Zeilen Quellcode. Bei seiner Implementierung, in der reguläre Ausdrücke einen guten Teil der Laufzeit ausmachen, scheint sich C allerdings nicht so richtig in seinem Element zu befinden. Bei der Laufzeit reicht es gerade mal für einen Platz im vorderen Mittelfeld. Da nimmt schon der Perl-Interpreter in zwei Fällen mehr Fahrt auf. Auch die C++-Lösung von "Pascal" (Nr. 8) landet, obwohl sie einen Compiler bemüht, bei der Laufzeit nur auf einem mittleren Rang.
Eine politische Sonderrolle bekleidet C#. Schöpfer der Sprache ist ausgerechnet Microsoft und der Linux-Port basiert auf dem Engagement von Novell. Die Sprache erntet dennoch viel Lob für ihre konstruktive Mischung aus C++- und Java-Features, siehe dazu den Artikel ab Seite 102. Einsender "Lukas" (Nr. 42) widmete sich in seiner Lösung dieser Sprache.
Dass C# konsequent objektorientiert ist, demonstriert Zeile 9 in Listing 9: Ein regulärer Ausdruck entsteht als neues Objekt mit dem Aufruf »new«. Die Methode »PrintFootNotes()« ab Zeile 18 demonstriert ein einfaches Error-Handling. Schnell und kurz ist die vorliegenden C#-Lösung allerdings nicht - das Listing zeigt nur einen kleinen Code-Auszug.
01 public class Footnotesorter
02 {
03 [...]
04 string _strFilename = String.Empty;
05 Dictionary<int, Footnote> _dictHashToFootnote = new Dictionary<int, Footnote>();
06 /* Footnote values will be cached for printing the right order on the bottom */
07 Dictionary<int, string> _dictIndexToValue = new Dictionary<int, string>();
08 /* Regular Expression for finding footnotes */
09 Regex _Regex = new Regex(@"[(d+)]", RegexOptions.Compiled);
10
11 [...]
12 MatchEvaluator me = new MatchEvaluator(MatchReplace);
13 /* Each match calls the MatchReplace function and replaces with its returnvalue */
14 s = _Regex.Replace(s, me);
15 Console.WriteLine(s);
16 [...]
17 /* Simply print all the Footnotes at the bottom in the right order*/
18 private void PrintFootnoteNotes()
19 {
20 for(int i = 1; i < _dictIndexToValue.Count + 1; i++)
21 {
22 try
23 {
24 Console.WriteLine("[" + i + "] " + _dictIndexToValue[i]);
25 }
26 catch(KeyNotFoundException ex){Console.WriteLine(ex.Message + ": " + i);}
27 }
28 }
29 }
30 }
|
Vielfältiges Ökosystem
Wenn Artenvielfalt ein Zeichen für ein gesundes Ökosystem ist, erfreuen sich Programmiersprachen bester Gesundheit. Dass die Leser die stark auf den Sysadmin-Alltag abgestimmte Aufgabe mit so vielen grundverschiedenen Sprachen lösen würden, hatte die Redaktion eingangs nicht erwartet. Besonders beeindruckend waren Einsendungen in Sprachen, die man in diesem Kontext nicht erwartet, etwa Ocaml oder Haskell. Auch das gute Abschneiden von Java überraschte.
Als weiteres Ergebnis bleibt, dass nicht so sehr die gewählte Sprache, sondern in erster Linie das Geschick des Entwicklers der Faktor ist, der über die Geschwindigkeit und die Übersichtlichkeit eines Programms entscheidet. Auch der Lösungsalgorithmus per se ist bei der gestellten Aufgabe nicht das alleinentscheidende Kriterium, dazu war die Aufgabenstellung zu einfach. Vielmehr ist die clevere Wahl von geschickten Datenrepräsentationen und den richtigen Programmbibliotheken für Geschwindigkeit und Speicherverbrauch ausschlaggebend. Kompetente Programmarchitekten bleiben also nach wie vor gefragt.
|
Sortiert nach Häufigkeit der Programmiersprachen haben folgende Leser Lösungsvorschläge an die Redaktion gesendet:
Python: Mike Müller, Jörg Lehmann, Andreas Lang-Nevyjel, Günter Jantzen, Julian Andres Klode, Klaus Bremer, Markus Korn, Richard Hacker, Aaron Digulla, Robert Hunger, Uli Fouquet, Stefan Schwarzer, Jens Kadenbach, Marc Rintsch, Adi J. Sieker; Perl: Dirk Jäger, Winfried Angele, Guenter Burgstaller, Daniel Pfeiffer, Jens E. Wunderwald, Horst-W. Radners, Daniel Pfeiffer, Simon Bertrang, Uwe Kerstan, Andreas Romeyke, Thomas Birnthaler, David Raab; C++: Joke de Buhr, Enrico Thierbach, Christoph Bartoschek, Marc Wäckerlin, Pascal Hofmann, Sebastian Redl, Christoph Buchetmann, Sebastian Mach; Ruby: Vincent Landgraf, Urs Meyer, Bernhard Reiter, Jörg Lehmann, Ronald Sacher, Knut Franke; Java: Kai Triebel, Oliver Siegmar, Werner Wetjen, Helmut Juskewycz; Awk: Heiner Steven, Marc Wäckerlin, Andreas Bruckmeier, Daniel Werner; Tcl: Holger Jakobs, Michael Schlenker, Gerhard Reithofer; Ocaml: Rörd Hinrichsen, Andreas Romeyke; C: Michael Heide; C#: Lukas Elsner; Groovy: Tobias Käfer; Haskell: Rörd Hinrichsen; Pascal: Stefan Hille.
|
| Whitepaper |
|
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele (Folge 2)
Der zweite Teil des Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele White Papers beleuchtet anhand weiterer ausgewählter Case Studies die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.
Download PDF (Registrierung erforderlich)
|
|
Usage Landscape Enterprise Open Source Data Integration
Die Nachfrage nach Datenintegrationslösungen für Unternehmen ist zunehmend gestiegen und vor allem das Interesse an Open Source Technologien wird immer größer. Doch wie und von wem werden Open Source Datenintegrationslösungen genutzt und welches Nutzungsverhalten lässt sich daraus ableiten? Das vorliegende White Paper präsentiert die Erfahrungswerte von über 1000 Open Source Nutzern und liefert fundierte Antworten auf diese Fragen.
Download PDF (Registrierung erforderlich)
|
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links"
nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedrucken Fassung entsprechen.
|
hypnos,
20.11.2008 18:32
hypnos,
20.11.2008 18:31