Skeptische Betrachtungen zu C++ und Objective C

C++ gilt als die Standarderweiterung zu C, während Objective C praktisch nur auf der Cocoa-Plattform in Mac OS X eingesetzt wird. ZDNet wirft einen Blick auf die historische Entwicklung der beiden Programmiersprachen und mögliche Alternativen.

Die Programmiersprache C++ wurde von Bjarne Stroustrup als Verbesserung der Programmiersprache C entwickelt und enthält eine Reihe von Optimierungen. Die wohl wichtigste besteht in den integrierten Funktionen für ein objektorientiertes Programmdesign, wie bereits aus einem im Frühstadium der Entwicklung des Projekts verwendeten Arbeitstitel „C with Classes“ (C mit Klassen) hervorgeht.

Die Sprache ist bei Softwareentwicklungen sehr verbreitet, in denen die Performance im Vordergrund steht, vor allem bei sehr komplexen Anwendungsentwicklungen, in denen ein wenig objektorientierte Programmierung viel dazu beitragen kann, diese Art von Komplexität in den Griff zu bekommen. Leider ist aber C++ selbst eine unglaublich komplexe Sprache.

Ursprünglich versprach sie, ein Superset der Sprache C mit Funktionen für objektorientierte Programmierung zu bilden. Eine weitere, etwa zur gleichen Zeit entwickelte Sprache (die gerade mal drei Jahre später veröffentlicht wurde) mit denselben Zielsetzungen war Objective-C. Die Unterschiede zwischen den beiden Sprachen lassen sich weitgehend auf folgende Faktoren zurückführen:

  • Einflüsse auf ihr Design
  • Wie gut sie diese ursprünglichen Ziele erreicht haben

C++ wird auf Wikipedia als durch zahlreiche Sprachen beeinflusst beschrieben, darunter C (natürlich), Ada 83, ALGOL 68, CLU, ML und Simula. Die meisten gelegentlichen Nutzer dieser Sprache würden wohl kaum von selbst auf diese Einflüsse kommen, und selbst wenn ihnen einmal etwas bekannt vorkommt, handelt es sich dabei nur um persönliche Eindrücke, die von einem C++-Programmierer zum anderen variieren. Die Einflüsse, denen C++ unterlag, sind nicht mehr klar zu erkennen, weil sie zur Anpassung an die neue Sprache stark abgeändert wurden.

Objective-C wurde dagegen von zwei Sprachen beeinflusst, die selbst jemand, der sehr selten mit Objective-C programmiert, sofort erkennen wird (ausgenommen all diejenigen, die nicht einmal wissen, dass die Sprache älter als MacOS X ist): C und Smalltalk. Der Wikipedia-Artikel über Objective-C nennt daher nur diese beiden Einflüsse für das Design der Sprache und betont dadurch, wie offensichtlich diese Einflüsse sind.

Was die ursprünglichen Zielsetzungen der Bereitstellung eines objektorientierten Supersets von C anbelangt, scheint Objective-C in allen wichtigen Aspekten erfolgreich gewesen zu sein, während C++ in mancher Hinsicht eher so wirkt, als habe man diese Ziele nach und nach aufgegeben, um stattdessen spektakulärere Aspekte umzusetzen.

Genau wie die Objective-C zugrundeliegenden Einflüsse viel einfacherer Natur sind als die von C++, so ist auch der Aufbau der Sprache viel einfacher. Der Grund, weshalb Apple (wie zuvor bereits NeXT) Objective-C als seine primäre Sprache für objektorientierte Anwendungs- und Systementwicklung gewählt hat, scheint offensichtlich: Objective-C bietet ein einfaches und elegantes Design, zumindest im Vergleich zu dem Design von C++. Doch abgesehen von der Wahl von Objective-C zur bevorzugten Sprache auf Apple-Plattformen wie MacOS X und Apples iOS, ist C++ ganz klar der Sieger in Hinblick auf Beliebtheit und Marktbedeutung. Selbst heute, so viele Jahre nach seiner Entstehung, und ohne nennenswerte Comebacks wie Objective-C sie erlebt hat, wird C++ weithin eingesetzt. So bildet es beispielsweise die zentrale Implementierungssprache für die gängigsten großen Webbrowser für Nicht-Apple-Plattformen: Chromium, Firefox, Internet Explorer und Opera sind allesamt weitgehend mit C++ erstellt. Selbst der Safari-Browser von Apple ist primär in C++ geschrieben, obwohl andere Browser für MacOS X stattdessen Objective-C verwendet haben.

Vielleicht war es der Umstand, dass C++ drei Jahre früher auf dem Markt war, der den enormen Erfolg der Sprache sowie die vergleichsweise geringe Popularität von Objective-C begründete. Heute findet man zwar endlich Bücher über Programmierung in Objective-C in allen großen Buchläden, doch behandeln diese immer die Entwicklung für MacOS X und Apples iOS. Die allgemeine, plattformunabhängige Verwendung der Sprache ist offenbar derart wenig gefragt, dass noch nicht einmal Bücher dazu verfasst werden.

Die Kritiken an C++ scheinen gegenüber dessen Vorteilen bei Weitem zu überwiegen. Allerdings wird Objective-C (meistens) nur von Entwicklern für Apple-Plattformen besprochen. Da Entwickler, die ausschließlich für Apple-Plattformen programmieren, im Allgemeinen von den meisten anderen Programmierern als wenig vertrauenswürdig eingestuft werden, da sie für Apple voreingenommen sind, werden ihre Lobeshymnen auf Objective-C von Entwicklern, die Apple-Plattformen meiden, kaum ernst genommen.

Die beiden treffendsten Kritiken an C++ werden beide Stroustrup selbst zugeschrieben. Die erste Kritik hat er in Form eines Vergleichs formuliert: Man könne sich mit C leicht selbst in den Fuß schießen, was bei C++ erschwert ist. Wenn man sich aber doch einmal mit C++ in den Fuß schieße, büße man dabei meist gleich sein ganzes Bein ein. Die zweite Kritik besteht in einem Interview für das IEEE Computer Magazine, das letztlich nicht veröffentlicht wurde. Darin „gesteht“ Stroustrup, dass C++ von Anfang an nur als Witz gedacht war, wobei er auf humorvolle Weise alle Mängel der Sprache aufzählt. Stroustrup hat sich von dem Artikel distanziert, den er als Fälschung bezeichnet, mit dem Hinweis, dass er selbst das Ganze viel witziger geschrieben hätte.

Wer dieses erfundene Interview gelesen hat, könnte sich durchaus einen Moment lang fragen, ob C++ nicht wirklich von Anfang an ein Witz war. Doch wenn dem so wäre, ginge dieser Witz auf Kosten von Objective-C, das fast eine Generation lang ein Schattendasein führte – im Bereich Computertechnologie sind das Äonen –, bevor es schließlich seine Nische im Apple-Ghetto fand. Fakt ist, dass Apple ohne Objective-C und Cocoa ernsthafte Schwierigkeiten gehabt hätte, Entwickler zu finden, die seine Plattformen unterstützen. Die Freude, die manche Programmierer an der Entwicklung mit diesen Tools haben, lässt Entwickler, die Ziel systematischer Ausgrenzung durch die Rechts- und Marketingabteilungen von Apple sind, einige ihrer Zweifel beiseite schieben.

Manch einer mag vielleicht meinen, dass die Tage von C++ nun gezählt sind. Der Markt ist mit Alternativen überschwemmt, die für dieselben Aufgaben viel besser gerüstet sind, und der vermeintliche direkte Wettbewerber – Objective-C – ist in gewisser Hinsicht die unbedeutendste dieser Alternativen. Objective Caml wird regelmäßig als Beispiel für eine hochgradig leistungsfähige Sprache zitiert, die C++ in Benchmarktests oft weit hinter sich lässt, einen kürzeren und besser organisierten Quellcode bietet und den Entwicklern viel übersichtlichere und interessantere Entwicklungsmodelle bereitstellt, wobei sie nicht einmal aus derselben Familie von Programmiersprachen stammt. D versucht ebenfalls in diesem Bereich mitzuhalten, obwohl seine proprietären Wurzeln seiner Verbreitung im Wege stehen könnten. Die Google-Sprache Go weist zwar verschiedene umstrittene Nachteile auf, doch besteht kein Zweifel, dass ihr Design für bestimmte Arten von Softwareentwicklung, etwa Nebenläufigkeit, enorme Vorzüge zu bieten hat.

Die Erfahrung lehrt jedoch, dass C++ durchaus noch eine ganze Weile in seiner Nische weiter existieren wird. Die Sprache wurde sogar einige Jahre lang für die Entwicklung von Betriebssystemkerneln verwendet, auch wenn dies für all diejenigen, die etwa auf die Zuverlässigkeit von Betriebssystemen Wert legen, erschreckend war. Zweifellos besitzt C++ einige Vorzüge im Vergleich zu C, was bestimmte Arten von leistungsorientierter Programmierung anbelangt, und seine Library-Unterstützung ist umfassend, ja sogar legendär. Trotzdem scheint die anhaltende Beliebtheit von C++ bei den Entwicklern zumindest teilweise auch auf der Unkenntnis der Alternativen zu beruhen, ein Umstand, gegen den etwaige Konkurrenzsprachen nur schwer ankommen.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

4 Kommentare zu Skeptische Betrachtungen zu C++ und Objective C

Kommentar hinzufügen
  • Am 2. Februar 2011 um 20:49 von jan

    Erfahren Sie: Warum man auch Artikel von Verlagspraktikanten vor der Veröffentlichung überprüfen sollte.
    Der Autor des Artikels wird sich wohl immer mit den Worten „ihr habt doch ALLE keine Ahnung“ verteidigen. Daher will ich mich nicht an der technisch / fachlichen Diskussion zu diesem Artikel beteiligen. Ich denke, dass hierzu bereits einiges an Kritik angebracht wurde. Ich will mich daher auf die mehr als fragliche Argumentationsstruktur des Artikels beziehen. Wo sind die Belege für und wieder einer Sprache? ? Inhaltlich sagt der Artikel lediglich aus: Objective-C ist besser als C++. Belege konnte ich an keiner Stelle finden. Das heißt, ein armseliger Verweis auf Wikipedia (zu ?woher kommt eine Sprache?). Das einzige, mehr schlecht als recht konkretisierte, Gegenargument zu C++ basiert auf einer als Hoax entlarvtem Artikel. Alle anderen Argumente sind in ihrer Korrektheit anzuzweifeln, da ihr Inhalt lediglich durch den Autor gesetzt wurde und keinerlei Beweise/Belege/Messdaten vorliegen. Es wäre ein leichtes gewesen, Benchmarkergebnisse beizubringen. Um es kurz zu machen, ein Student der eine deratige Hausarbeit einreicht, würde diese mit der Bitte zur Überarbeitung zurück erhalten. Wir alle haben unsere Lieblinge, jeder mag ein paar Sprachen, andere werden dafür abgründig gehasst. Wer jemals ein Treffen zwischen C# und VB.NET Programmierer gesehen hat, weiß wovon ich spreche. Dem Autor ist es auch überlassen, seine Waffen zu wählen. Nur sollte er auch bedenken, das es auch eine Entwicklung nach Objective-C gegeben hat. Zu fragen wäre hier, inwieweit sich C++ und Objective-C den aktuellen Trends angepasst haben und warum es zu dem angesprochenem Nieschendasein der einen und der weltweiten Massenverbreitung der anderen Sprache gekommen ist.
    Dieser Artikel zeigt das auch der moderne Onlinejournalismus nicht ohne eine gründliche Recherche auskommt.

  • Am 1. Februar 2011 um 15:33 von asc

    Objektivität? Fehl am Platz!
    Unabhängig davon, wie man zur einen oder anderen Programmiersprache steht, lässt dieser Artikel jegliche Objektivität fehlen. Schlecht recherchiert und einseitig berichtet kann man jeden Vergleich, zwischen zwei beliebigen Themen, auf ein vorgegebenes Fazit lenken.

    • Am 28. Oktober 2012 um 18:37 von bkupper

      Ich schließe mich dem an.

  • Am 1. Februar 2011 um 1:23 von UnmanagedDork

    UiUiUi
    I think you should try to understand C++and Objective-C first, before tyring to give some comments about these. Avoiding copy construction, copy assignment to ensure good performance, and using templates for defining implicit interface definition at compiler level. Passing by reference, const or not, to avoid the NULL pointer argument missuse well known by Java and C# dorks. But defining a method named init and trying not to break the correct behaviour of the base class by overloading, yeah that makes sense. Long live Objective-C.

    If objective or managed it is, reeingineer you should!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *