Modern Code
https://www.nosid.org/
Modern Codedehttps://www.nosid.org/photo.jpgModern Code
https://www.nosid.org/
Swift: Unterscheidung statt Vererbung
https://www.nosid.org/swift-discrimination-vs-inheritance.html
Vererbung ist ein zentraler Bestandteil fast aller Objekt-orientierter Programmiersprachen. Verwendet wird sie in der Regel für Spezialisierungen von Klassen mit der sogenannten "Ist-ein"-Beziehung. Doch nicht jede "Ist-ein"-Beziehung lässt sich sinnvoll mittels Vererbung abbilden. Ein typisches Beispiel mit alternativer Abbildung.Sun, 27 Jul 2014 00:00:00 +000099 Bottles of Beer (Swift)
https://www.nosid.org/swift-example-99-bottles-of-beer.html
Swift ist die neue Programmiersprache für Apples Plattformen. Dieses einfache Beispiel soll dabei helfen, sich mit der Syntax und den Features vertraut zu machen.Sun, 20 Jul 2014 00:00:00 +0000The Power of Swift
https://www.nosid.org/power-of-swift.html
Swift ist eine neue – jedoch keineswegs experimentelle – Programmiersprache. Einordnen lässt sie sich am Ehesten neben Java und C#. Doch wie schlägt sie sich bei Ausdrucksstärke gegenüber Sprachen wie Ruby? Ein Vergleich ohne Ergebnis.Sun, 13 Jul 2014 00:00:00 +0000Kontextwechsel
https://www.nosid.org/context-switch-performance.html
Die Kosten für Kontextwechsel sind eines der wichtigsten Argumente für die asynchrone Programmierung. Doch wie teuer sind heutzutage Kontextwechsel tatsächlich? Ein kleines Testprogramm schafft Klarheit.Sun, 06 Jul 2014 00:00:00 +0000Swift: 10 bestechende Sprachmerkmale
https://www.nosid.org/swift-top-10-impressive-features.html
Zehn herausragende Features, die Swift von anderen Mainstream-Programmiersprachen abgrenzt, und wegweisend für die zeitgerechte Softwareentwicklung sein können..Sun, 29 Jun 2014 00:00:00 +0000Swift: Die Rückkehr der Referenz-Zähler
https://www.nosid.org/swift-automatic-reference-counting.html
Garbage Collection ist in Programmiersprachen seit einigen Jahren allgegenwärtig. Die neue und nicht zu unterschätzende Programmiersprache Swift hat sich allerdings dagegen ausgesprochen und setzt stattdessen auf altbewährte Referenz-Zählung. Entzündet sich hier erneut ein alter Wettstreit?Sun, 22 Jun 2014 00:00:00 +0000Java: Swing und CompletableFuture
https://www.nosid.org/java8-swing-and-completable-future.html
Die Klasse CompletableFuture ist neu in der Standardbibliothek von Java 8, und unterstützt die asynchrone Programmierung. Die Klasse lässt sich auf vielfache Weise einsetzen. Dass sie auch für die Programmierung mit Swing – sowie anderen Frameworks mit Event-Dispatch-Thread – interessant ist, zeige ich in diesem Beitrag.Sun, 15 Jun 2014 00:00:00 +0000Java: Thread-safe Lazy Initialization
https://www.nosid.org/java8-threadsafe-lazy-initialization.html
Es gibt in Java viele Möglichkeiten, die Lazy Initialization umzusetzen. Doch die meisten sind entweder schwierig zu verstehen oder ineffizient. Eigentlich sollte die Standardbibliothek von Java diese Anforderung direkt unterstützen. Wie das aussehen könnte zeigt dieser Artikel.Sun, 08 Jun 2014 00:00:00 +0000C++: Reduce und Collect
https://www.nosid.org/cxx-reduce-and-collect.html
Was in Java Stream::reduce und Stream::collect ist, ist std::accumulate in C++. Ein genauerer Blick auf dieses Funktionstemplate deckt jedoch Schwächen beim Umgang mit R‑Value-Referenzen auf. Anscheinend wurde die Spezifikation mit C++11 nicht angepasst. Dieser Artikel zeigt Alternativen.Sun, 01 Jun 2014 00:00:00 +0000Java 8: Stream::reduce vs. Stream::collect
https://www.nosid.org/java8-stream-reduce-vs-collect.html
Die Schnittstelle java.util.stream.Stream der mit Java 8 eingeführten Stream-API besitzt zwei Methoden, die sehr ähnlich aussehen und doch sehr unterschiedlich sind: reduce und collect. In diesem Artikel betrachte ich, was die beiden Methoden tatsächlich gemeinsam haben – und viel wichtiger – was sie unterscheidet. Denn Letzteres ist in vielen Fällen nicht so offensichtlich, wie es vielleicht sein sollte.Sun, 25 May 2014 00:00:00 +0000Java 8: IntStream – der Stream-Macher
https://www.nosid.org/java8-int-stream.html
Java 8 hat vier unterschiedliche Schnittstellen für Streams eingeführt: Die generische Schnittstelle Stream<T> für Referenztypen, sowie die drei Schnittstellen IntStream, LongStream und DoubleStream für primitive Typen. Doch eine dieser Schnittstellen ist besonders: Was die Zählschleife unter den Schleifen ist, ist der IntStream unter den Streams. Fünf Beispiele zur Verwendung.Sun, 18 May 2014 00:00:00 +0000C++: Race Conditions am laufenden Band
https://www.nosid.org/cxx-continuous-race-conditions.html
Mit dem Begriff Race Condition werden häufig Programmfehler assoziiert, die vom zeitlichen Verhalten abhängen, und aufgrund ihrer schlechten Reproduzierbarkeit nur schwer auffindbar sind. Doch was passiert, wenn man fortlaufend Race Conditions erzeugt? Ein Beispiel.Sun, 11 May 2014 00:00:00 +0000C++ vs. Java: Lambda ist nicht gleich Lambda
https://www.nosid.org/cxx-java-lambda-comparison.html
C++ unterstützt Lambda-Ausdrücke seit C++11 und Java seit der vor einigen Wochen freigegebenen Version 8. Doch trotz gleicher Termini unterscheidet sich die Semantik der beiden Umsetzungen deutlich. Dieser Artikel widmet sich dem wesentlichen Unterschied, den Entwickler kennen sollten, die in beiden Sprachen unterwegs sind.Sun, 04 May 2014 00:00:00 +0000GCC 4.9: Farbenfrohe Fehlermeldungen
https://www.nosid.org/cxx-gcc-diagnostics-color.html
Zu den Neuerungen von GCC 4.9 gehört unter anderem die Option -fdiagnostics-color für farbige Fehlermeldungen. Dieses Feature ist zwar nicht weltbewegend, doch zumindest beachtenswert. Denn die Farben helfen überraschend gut, auf die wesentlichen Informationen zu fokussieren, und damit das eigentliche Problem schneller zu identifizieren. Ein Beispiel.Sun, 27 Apr 2014 00:00:00 +0000std::map: emplace und die kontrollierte Objekterzeugung
https://www.nosid.org/cxx1y-map-emplace.html
Seit C++11 besitzen viele Container der Standardbibliothek eine oder mehrere emplace-Funktionen, mit denen sich Objekte an Ort und Stelle erzeugen lassen. Auch std::map bietet mit emplace und emplace_hint zwei solcher Funktionen. In diesem Artikel betrachte ich, wie sich unnötige Objekterzeugungen beim Einfügen von Elementen in eine std::map vermeiden lassen, und welche Rolle emplace dabei spielt.Sun, 20 Apr 2014 00:00:00 +0000Java: Über Arrays in Schnittstellen
https://www.nosid.org/java-about-arrays-in-interfaces.html
Sollte man Arrays als Parameter- oder Rückgabetypen in Schnittstellen verwenden? Das ist eine gute Frage. Doch was auch immer die Antwort ist, die Argumentation sollte weder Objekt-Orientierung, Typsicherheit noch Performance sein. Ein Kommentar.Sun, 13 Apr 2014 00:00:00 +0000Zeitrechnung
https://www.nosid.org/java8-chronology.html
Warum gibt es so viele Softwarefehler im Zusammenhang mit Zeitrechnung? Was ist nur so kompliziert an dem Ding, das sich den ganzen Tag im Kreis dreht? Möglicherweise liegt genau hier das Problem: So einfach ist es nicht, und ein paar Beispiele sollen zeigen, wie leicht man sich täuschen kann.Sun, 06 Apr 2014 00:00:00 +0000C++: Höherwertige Container
https://www.nosid.org/cxx-combining-containers.html
Die Standardbibliothek von C++ enthält zahlreiche Container für Listen, Mengen und assoziative Felder. Höherwertige Datenstrukturen sucht man dort allerdings vergebens. Viele Anwendungsfälle lassen sich dennoch durch geeignete Kombination der verfügbaren Container realisieren. Eine LRU-Datenstruktur im Eigenbau.Sun, 30 Mar 2014 00:00:00 +0000C++: Wann sollten Funktionen noexcept deklariert werden?
https://www.nosid.org/cxx11-noexcept.html
C++11 hat mit noexcept eine Alternative zu den unbeliebten throw-Deklarationen eingeführt. Die Semantik von noexcept ist sehr einfach. Unklarheit herrscht dagegen noch über den richtigen Einsatz. Daher ist es höchste Zeit, zumindest ein paar Leitplanken vorzugeben.Sun, 23 Mar 2014 00:00:00 +0000C++: Automatische Erkennung von Data Races
https://www.nosid.org/cxx-thread-sanitizer.html
Die Abwesenheit von Data Races ist in C++ die wichtigste Voraussetzung für die Korrektheit paralleler Programme. Doch viele Entwickler tun sich damit überraschend schwer. Sinnvolle Unterstützung bieten mittlerweile sowohl GCC als auch Clang: Ein Beispiel für die automatische Erkennung von Data Races anhand eines fehlerhaften Double-checked Locking.Sun, 16 Mar 2014 00:00:00 +0000