Idiom (Softwaretechnik)
In der Softwaretechnik gehören Idiome zu den Mustern (englisch pattern).
Idiomatische Programme / Idiomatische Programmierung
In der Programmierung ist die Bezeichnung für Idiomatische Programme oder Idiomatische Programmierung gebräuchlich[1][2][3][4]. Damit ist umgangssprachlich gemeint, ob der Programmierer den Quelltext so verfasst hat, wie es Experten in dieser Programmiersprache auch tun würden. Beispielsweise, ob sich ein Programm in C++ an übliche Konventionen hält, nicht zu viele, aber auch nicht zu wenig Möglichkeiten dieser Sprache ausnutzt oder ob es vielleicht im Gegensatz dazu Anzeichen gibt, dass der Programmierer eher Erfahrungen mit einer anderen Programmiersprache wie etwa C oder Assembler hat. In didaktischen Medien, insbesondere englischsprachigen, wird hierzu oftmals auf Besonderheiten idiomatischen Sprachstils hingewiesen. Es ist also umgangssprachlich eine Mischung aus Programmierstil, Verwendung der zur Verfügung stehenden Sprachmittel und einfachen Problemlösungsvorlagen gemeint.
Es ergibt sich eine Verwandtheit zum Begriff der Redewendung (Idiom) in natürlichen Sprachen. Analog lässt sich ein Idiom als Muster wie folgt subsumieren:
Idiome
Idiome können als Umsetzungen (Implementierungen) von abstrakten Mustern in einer spezifischen Programmiersprache verstanden werden. Also wie einfache Aufgaben (niedriger Abstraktionsstufe) in einer Programmiersprache gelöst werden. Es gibt keine festen anerkannten Idiome, allerdings gibt es eine Reihe von verbreiteten Idiomen, die helfen, die Syntax einer Programmiersprache zu verstehen und zu lernen. Bekanntestes Beispiel dürfte hierbei print 'Hello World'
sein.
Buschmann definiert: „Ein Idiom ist ein programmiersprachenspezifisches Muster und damit ein Muster auf einer niedrigen Abstraktionsebene. Ein Idiom beschreibt, wie man bestimmte Aspekte von Komponenten oder Beziehungen zwischen ihnen mit den Mitteln einer bestimmten Programmiersprache implementiert.“[5]
Ein Idiom zeichnet sich somit durch folgende Eigenschaften aus:
- es ist programmiersprachenspezifisch
- es ist zu finden im Feinentwurf und Implementierung (niedrige Abstraktionsebene). Es geht also dabei um die Implementierung von speziellen Entwurfsaspekten.
Es wird demzufolge beispielsweise folgendermaßen angewendet:
- Konkrete Implementierung eines Entwurfsmusters.
- Programmierkonventionen: Grundgedanke “The code is not yours”, z. B. Codeformatierung, Namenskonventionen, Kommentarformatierung usw. Dies kann mit oder auch ohne technische Unterstützung (Checkstyle/Pretty Printer) geschehen.
- Typische Code-Strukturen, z. B. minimale Klassenschnittstelle
- Typische Lösungsansätze für die durch die Programmiersprache nicht direkt unterstützten Probleme, z. B. Speicherverwaltung
Beispiele für Idiome sind in der Literatur zu finden, beispielsweise für Smalltalk,[6] C++[7] oder C#.[8][9]
Weblinks
- programming-idioms.org (englischsprachig) erklärt Implementierungen in gebräuchliche Programmiersprachen.
- More C++ Idioms in den englischsprachigen Wikibooks
Einzelnachweise
- The Computer Language Benchmarks Game (Memento vom 29. Januar 2018 im Internet Archive), abgerufen am 19. November 2020.
- Which Programming Languages are Write-Only?, abgerufen am 10. Februar 2017
- Lernhilfen zur Ausbildung Fachinformatiker, abgerufen am 10. Februar 2017
- Patrick Walton: C++ Design Goals in the Context of Rust. 5. Dezember 2010. Abgerufen am 10. Februar 2017: „... It’s impossible to be “as fast as C” in all cases while remaining safe... C++ allows all sorts of low-level tricks, mostly involving circumventing the type system, that offer practically unlimited avenues for optimization. In practice, though, C++ programmers restrict themselves to a few tools for the vast majority of the code they write, including stack-allocated variables owned by one function and passed by alias, uniquely owned objects (often used with
auto_ptr
or the C++0xunique_ptr
), and reference counting viashared_ptr
or COM. One of the goals of Rust’s type system is to support these patterns exactly as C++ does, but to enforce their safe usage. In this way, the goal is to be competitive with the vast majority of idiomatic C++ in performance, while remaining memory-safe...“ - Buschmann et al.: Pattern-orientierte Software-Architektur: Ein Pattern-System. Addison-Wesley, ISBN 3-8273-1282-5.
- Kent Beck: Smalltalk Best Practice Patterns. Prentice Hall, 1997, ISBN 0-13-476904-X.
- James Coplien: Advanced C++ Programming Styles and Idioms. Addison-Wesley, 1992, ISBN 0-201-54855-0 (englisch).
- Bill Wagner: Effective C# (covers C# 4.0): 50 Specific Ways to Improve Your C#. In: Effective Software Development. 2. Auflage. Addison-Wesley, Amsterdam 2010, ISBN 978-0-321-65870-8 (englisch).
- Bill Wagner: More Effective C#: 50 Specific Ways to Improve Your C#. In: Effective Software Development. 1. Auflage. Addison-Wesley, Amsterdam 2008, ISBN 978-0-321-48589-2 (englisch).