© Liashko/Shutterstock.com
Entwickler Magazin
Wissenswertes zum API-Design mit C++

Flexibel und performant, aber mit Tücken

Einst traten Java, C# und Co. an, um C++ aufs Altenteil zu schicken. Ein löblicher Versuch, der allen Herausforderern - wenn überhaupt - nur in kleinen Teilen gelang. C++ ist einfach zu flexibel und zu performant. Leider führt genau diese Flexibilität beim Design von APIs zu Problemen. Warum, erläutert dieser Artikelexkurs in die Welt von C++.

Tam Hanna


Da insbesondere im Spielebereich kein Weg an C++ vorbeiführt, hat sich eine Vielzahl von Unternehmen an der Entwicklung diverser Programmierschnittstellen für C++ versucht. Dabei entstand neben zahlreichen Design Patterns auch eine Gruppe von klassischen „Pain Points“, die man im Rahmen des Konzipierens eines API im Hinterkopf behalten sollte. Der Artikel erläutert überblicksartig die generischen Prinzipien des API-Designs.

Konzept: Wahnsinn

Die wichtigste Frage ist, wie das API „als Ganzes“ strukturiert ist. Im Bereich der C++-Programmierung gibt es hierbei viele verschiedene Vorgehensweisen, die ihre individuellen Vor- und Nachteile aufweisen.

Das mit Abstand primitivste Designparadigma ist mit Sicherheit die Realisierung eines „flachen C-API“. Es handelt sich dabei im Grunde genommen um eine Gruppe von Header-und Codedateien, die die objektorientierten Features von C++ nicht nutzen und theoretisch auch von einem C-Compiler akzeptiert bzw. bearbeitet werden können. Diese auf den ersten Blick veraltet wirkende Methode hat einen massiven Vorteil: Sie funktioniert auch auf leistungsschwachen Systemen und/oder Plattformen mit wenig ausgereiften C++-Compilern. Dies können zum Beispiel Mikrocontroller sein: Während die von den diversen Herstellern angebotenen und kostenpflichtigen Compiler meist problemlos funktionieren, schaut man als Nutzer eines Open-Source-Produkts schon mal in die Röhre.

Ein weiterer, in der heutigen Zeit allerdings unwichtiger werdender Vorteil von „flachen“ APIs ist, dass das Aufrechterhalten der Binärkompatibilität einfacher ist. C++-Compiler sind dafür berüchtigt, die Objektdateien mit diversen, von Kompilation zu Kompilation unterschiedlichen Hilfsstrukturen zu verunzieren.

Für C++-Programmierer am vertrautesten sind mit Sicherheit objektorientierte APIs, die in der Praxis auch in Form von templatebasierten APIs auftreten. So können sie im Grunde genommen alle Features von C++ nutzen. Ob der Einsatz von Templates allerdings Sinn ergibt, ist von Programmiersituation zu Programmiersituation unterschiedlich.

Zu guter Letzt gibt es noch datengetriebene APIs. Es handelt sich hierbei um ein sehr seltsames Programmierparadigma, das man in einfacher Form in Google Analytics findet. Die dahinterstehende Idee lässt sich am einfachsten anhand eines kleinen Snippets JavaScript-Code demonstrieren:

ga('create', 'UA-100857515-1', 'auto');ga('send', 'pageview');

Aufmerksame Beobachter bemerken sofort, dass die ga-Funktion für verschiedene Aufgaben einges...

Entwickler Magazin
Wissenswertes zum API-Design mit C++

Flexibel und performant, aber mit Tücken

Einst traten Java, C# und Co. an, um C++ aufs Altenteil zu schicken. Ein löblicher Versuch, der allen Herausforderern - wenn überhaupt - nur in kleinen Teilen gelang. C++ ist einfach zu flexibel und zu performant. Leider führt genau diese Flexibilität beim Design von APIs zu Problemen. Warum, erläutert dieser Artikelexkurs in die Welt von C++.

Tam Hanna


Da insbesondere im Spielebereich kein Weg an C++ vorbeiführt, hat sich eine Vielzahl von Unternehmen an der Entwicklung diverser Programmierschnittstellen für C++ versucht. Dabei entstand neben zahlreichen Design Patterns auch eine Gruppe von klassischen „Pain Points“, die man im Rahmen des Konzipierens eines API im Hinterkopf behalten sollte. Der Artikel erläutert überblicksartig die generischen Prinzipien des API-Designs.

Konzept: Wahnsinn

Die wichtigste Frage ist, wie das API „als Ganzes“ strukturiert ist. Im Bereich der C++-Programmierung gibt es hierbei viele verschiedene Vorgehensweisen, die ihre individuellen Vor- und Nachteile aufweisen.

Das mit Abstand primitivste Designparadigma ist mit Sicherheit die Realisierung eines „flachen C-API“. Es handelt sich dabei im Grunde genommen um eine Gruppe von Header-und Codedateien, die die objektorientierten Features von C++ nicht nutzen und theoretisch auch von einem C-Compiler akzeptiert bzw. bearbeitet werden können. Diese auf den ersten Blick veraltet wirkende Methode hat einen massiven Vorteil: Sie funktioniert auch auf leistungsschwachen Systemen und/oder Plattformen mit wenig ausgereiften C++-Compilern. Dies können zum Beispiel Mikrocontroller sein: Während die von den diversen Herstellern angebotenen und kostenpflichtigen Compiler meist problemlos funktionieren, schaut man als Nutzer eines Open-Source-Produkts schon mal in die Röhre.

Ein weiterer, in der heutigen Zeit allerdings unwichtiger werdender Vorteil von „flachen“ APIs ist, dass das Aufrechterhalten der Binärkompatibilität einfacher ist. C++-Compiler sind dafür berüchtigt, die Objektdateien mit diversen, von Kompilation zu Kompilation unterschiedlichen Hilfsstrukturen zu verunzieren.

Für C++-Programmierer am vertrautesten sind mit Sicherheit objektorientierte APIs, die in der Praxis auch in Form von templatebasierten APIs auftreten. So können sie im Grunde genommen alle Features von C++ nutzen. Ob der Einsatz von Templates allerdings Sinn ergibt, ist von Programmiersituation zu Programmiersituation unterschiedlich.

Zu guter Letzt gibt es noch datengetriebene APIs. Es handelt sich hierbei um ein sehr seltsames Programmierparadigma, das man in einfacher Form in Google Analytics findet. Die dahinterstehende Idee lässt sich am einfachsten anhand eines kleinen Snippets JavaScript-Code demonstrieren:

ga('create', 'UA-100857515-1', 'auto');ga('send', 'pageview');

Aufmerksame Beobachter bemerken sofort, dass die ga-Funktion für verschiedene Aufgaben einges...

Neugierig geworden?


   
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang