Charakterisierung von C++ (Charakterisierung von C++), Lektion, Seite 723114
https://www.purl.org/stefan_ram/pub/charakterisierung_c++ (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C++-Kurs

Charakterisierung von C++ 

Aussprache

/ʦe.plʊs.plʊs/ (deutsche Aussprache).

Wortherkunft

Der Name „C++ “ wurde im Sommer 1983 von Rick Mascitti  erfunden und von Bjarne Stroustrup  als Nachfolger der Bezeichnung “C with classes ” erkoren.

Der Name „C++ “ stammt vom Namen einer anderen Programmiersprache namens „C “ und der in einigen Programmen verwendeten Zeichenfolge »++« (im Sinne von „C  und mehr“, wodurch ausgedrückt werden sollte, daß C++  nichts entfernt, was Teil von C  ist, also alles von C  übernimmt und dann noch etwas hinzufügt; im Gegensatz zu abgeleiteten Sprachen, die nur einige Teile ihrer Basissprache übernehmen).

Kleine Chronologie der Sprache C++ 

Die Programmiersprache C++  wurde ab 1979 von /ˈbjɑːnə ˈsdʁʌʊ̯ˀsdʁɔb/ („Bjarne Stroustrup“, einem Dänen) auf Grundlage der Programmiersprache C  entwickelt. Sie hieß zunächst “C with classes ”, da sie die um 1970 entstandene Programmiersprache C  mit den um 1967 entstandenen Klassen verbinden sollte.

Quellen
http://cm.bell-labs.com/who/dmr/chist.html
http://www.olejohandahl.info/old/birth-of-oo.pdf
http://www.stroustrup.com/hopl2.pdf
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html

Zur Aussprache von „Bjarne Stroustrup“

Die Aussprache von „Bjarne Stroustrup“ lautet /ˈbjɑːnə ˈsdʁʌʊ̯ˀsdʁʊb/ (nach einigen Quellen: /…ɔb/, /…ʊb/ folgt seiner eigenen Aussprache, so wie sie von Stefan Ram gehört und notiert wurde). Einige der in der Lautschrift vorkommenden und weniger gebräuchlichen Symbole sind „ˀ“ zur Kennzeichnung der Glottalisierung (creaky voice ) und „  ̯ “ zur Kennzeichnung des zweiten nichtsilbischen Lautes eines Diphthongs.

Produktivität und Effizienz

Wir bezeichnen als Produktivität einer Programmiersprache hier das Maß, in dem sie Zeit des Programmierers spart, und als Effizienz das Maß, in dem sie Zeit des Prozessors spart.

Bis zirka 2003 wurden Taktfrequenzen von Prozessoren immer größer. Ein Programm wurde dadurch im Laufe der Zeit von alleine schneller. Es erschien dadurch als weniger wichtig, schnelle Programme zu schreiben. Dies war die Hochzeit der Produktivitätssprachen, welche die Produktivität von Programmierern auf Kosten der Effizienz der Programm erhöhten. Das Motto lautete: „Die Arbeitszeit von Programmierern ist teurer als die Kosten schneller Prozessoren.“

Seit 2004 steigen die Taktfrequenzen nicht mehr. Außerdem sind heute (2015) Mobilgeräte mit langsameren Prozessoren und begrenzten Energievorräten verbreiteter. Dadurch erhält die Effizienz einer Sprache wieder einen höheren Wert in Vergleich mit ihrer Produktivität. Sprachen, welche Taktfrequenzen und die Anzahl von Prozessoren effizient ausnutzen werden wieder wichtiger. Gleichzeitig sparen effiziente Programmiersprachen Strom und sind dadurch auch umweltfreundlicher.

Daher wählen heute (2015) verschiedene große Anwender von Programmiersprachen die effiziente Sprache C++. Wegen der hohen Kosten für Strom und Hardware in Rechenzentren, lohnt es sich wieder, mehr in die Ausbildung von Programmierern zu investieren.

Neuerungen im modernen C++  (C++  der zehner Jahre)

Effizienz der Sprache

Anwendbarkeit der Sprache

Funktionalität der Sprache

Standardbibliothek

Verfügbarkeit der Sprachspezifikation von C++ 

Die Spezifikation von C++  ist zwar öffentlich, aber nicht kostenlos.

Verfügbarkeit von Implementationen von C++ 

Eine Implementation einer Programmiersprache, erlaubt es, die in der Programmiersprache geschriebenen Programme auszuführen.

Für C++  gibt es verschiedene kostenlose Implementationen für die weit verbreiteten Betriebssysteme.

Popularität von C++ 

Der bekannte Popularitätsindex von Tiobe  bewertet die Popularität von Programmiersprachen an Hand verschiedener Quellen, etwa der Erwähnung der Programmiersprache in Zusammenhang mit Berufstätigkeit oder Kursen.

Laut Tiobe  steht C++  derzeit – wie auch in den 0er Jahren – an dritter Stelle. Die Tendenz der Popularität von C++  ist damit leicht fallend, denn in den 90er Jahren stand C++  noch auf Platz 2.

Nach dem “The Transparent Language Popularity Index ” (Stand: 2013) steht C++  ebenfalls an dritter Stelle.

Quellen
http://www.tiobe.com/index.php/tiobe_index
http://lang-index.sourceforge.net/
http://en.wikipedia.org/wiki/Measuring_programming_language_popularity

Effizienz von C++ 

Die Effizienz eines Programms gibt an, wie gut es Ressourcen (wie Zeit und Speicherplatz) ausnutzt. Ein Programm ist effizienter, wenn es zum Erledigen einer bestimmten Aufgabe weniger Zeit oder weniger Speicherplatz braucht. Oft denkt man beim Effizienz im besonderen an den Zeitbedarf und versteht unter einer effizienten Lösung eine schnelle Lösung.

Die bekannte Web-Seite Benchmarksgame  bewertet die Geschwindigkeit von Programmen, die in verschiedenen Programmiersprachen geschrieben wurden.

Dieser Web-Seite zufolge sind C++ -Programme sehr schnell und werden nur noch von C -Programmen übertroffen.

Quellen
http://benchmarksgame.alioth.debian.org/u64/which-programs-are-fastest.php
http://benchmarksgame.alioth.debian.org/u64/which-programs-are-fastest-firstlast.png

Schnittstellen von C++ 

Die folgende Aufstellung gibt an, welche Möglichkeiten die Standardbibliothek von C++  umfaßt:

Eine graphische Benutzeroberfläche: Nein
Zugriff auf Netze, wie das Internet: Nein
Inhalte eines Verzeichnisses des Dateisystems abrufen: Nein
Zugriffe auf Datenbanken: Nein

Es ist manchmal möglich, in der Standardbibliothek fehlende Funktionalitäten durch Verwendung von Zusatzbibliotheken für bestimmte Umgebungen (Betriebssysteme) hinzuzufügen, jedoch gibt die Programmiersprache keine Garantie dafür, daß solche Zusatzbibliotheken vorhanden sind.

C++ -Implementationen haben in der Regel eine Betriebssystemschnittelle (ABI), welche das Schreiben von Systemprogrammen ermöglicht. Viele Aspekte der Programmiersprache C++  kann man erst richtig verstehen, wenn man bedenkt, daß C++  auch für die Systemprogrammierung geeignet sein soll.

By systems programming I mean writing code that directly uses hardware resources, has serious resource constraints, or closely interacts with code that does. In particular, the implementation of software infrastructure (e.g., device drivers, communications stacks, virtual machines, operating systems, operations systems, programming environments, and foundation libraries) is mostly systems programming.” – Bjarne Stroustrup

In diesem Kurs wird nur die Standardbibliothek behandelt. Der Kurs behandelt weder spezielle Zusatzbibliotheken noch die Programmierung spezieller Betriebssystem, wie beispielsweise UNIX, obwohl spezielle Zusatzbibliotheken oder Betriebssysteme in einzelnen Anwendungsfällen von C++  jeweils eine wichtige Rolle spielen können. Diese liegt daran, daß spezielle Bibliotheken oder Betriebssysteme immer jeweils nur für einen Teil  der Leser interessant sind, aber Kenntnisse der Standardbibliothek in allen  Fällen nützlich sind. Außerdem ist die Standardbibliothek so umfangreich, daß nicht einmal sie  in den zur Verfügung stehenden Rahmen vollständig behandelt werden kann, die Behandlung weiterer Bibliotheken würde dann noch weniger  Platz zur Behandlung der Programmiersprache und ihrer universellen Standardbibliothek lassen.

Leser, die an den Möglichkeiten von Zusatzbibliotheken oder Betriebssystemen interessiert sind, müssen diese also aus anderen Quellen erlernen. Dabei kommen ihnen ohne Zweifel Kenntnisse der Programmiersprache und ihrer Standardbibliothek zugute, wie sie in diesem Kurs hier vermittelt werden.

Portabilität von C++ 

Ein C++ -Programm wird portabel genannt, wenn es unter jeder  C++ -Implementation ausgeführt werden kann. Ein Programm, welches zusätzliche Anforderungen stellt, wie beispielsweise ein bestimmtes Betriebssystem, ist nicht portabel. Die Portabilität eines Programms mißt man nach dem Zeitaufwand, der nötig ist, um es auf eine andere Umgebung zu übertragen, indem man es entsprechend überarbeitet. Bei einem vollständig portablen Programm sind gar keine Änderungen nötig. Ein vollständig nicht portables Programm kann auch mit großem Aufwand nicht übertragen werden (ein Programm zur Musikwiedergabe kann nicht auf einen Computer ohne Lautsprecher übertragen werden). Ein Programm, für dessen Übertragung auf eine andere Umgebung nur eine Stunde Arbeit nötig ist, ist portabler  als ein Programm, für dessen Übertragung mehrere Wochen Arbeit nötig sind.

Häufig erlauben es C++ -Implementationen einem C++ -Programm, Programme des Betriebssystems der Ausführungsumgebung aufzurufen. Dadurch kann ein C++ -Programm dann oft viel mehr machen als bei ausschließlicher Verwendung der C++ -Standardbibliothek. Auf diese Weise können C++ -Programme beispielsweise oft Verzeichnisse eines Dateisystems lesen, auf Netze zugreifen oder eine graphische Benutzeroberfläche verwenden.

Der Nachteil dieser Vorgehensweise besteht aber darin, daß solche C++ -Programme dann weniger portabel sind, denn wenn sie Aufrufe eines ganz bestimmten Betriebssystems oder eine ganz bestimmten Zusatzbibliothek voraussetzen dann laufen sie nicht mehr unter anderen Betriebssystemen oder Zusatzbibliotheken. Hersteller von Betriebssystemen oder Zusatzbibliotheken stellen ihre Produkte manchmal ein, was bedeutet, daß ein auf sie angewiesenes C++ -Programme dann unter Umständen nicht mehr weiterverwendet werden kann.

Ein Mangel an Portabilität könnte besonders bei der Anwendungsprogrammierung  schädlich sein, dann bei der Systemprogrammierung  wird ein Programm ganz bewußt speziell für eine bestimmtes Betriebssystem geschrieben. Ein Mangel an Portabilität liegt dann in der Natur der Sache.

Speicherverwaltung mit C++ 

Bestimmte, kompliziertere Programme benötigen eine Speicherverwaltung. Diese Speicherverwaltung erfolgt bei einigen Programmiersprachen vollautomatisch, so daß der Programmierer sich nicht mit ihr beschäftigen muß. In C++  muß der Programmierer sich jedoch selber  um die Verwaltung des Speichers kümmern, was zusätzlichen Aufwand und das Risiko von mehr Fehlern bedeutet. Dafür können Programme mit dieser manuellen (oder nur „halbautomatischen“) Speicherverwaltung unter Umständen schneller laufen.

Produktivitätskurve

Es benötigt oft vergleichsweise mehr Zeit und Zusatzkenntnisse, um mit C++  produktiv werden zu können, als in anderen Programmiersprachen. Dies liegt einerseits daran, daß eine Vielzahl technischer Details erlernt werden muß, und andererseits auch darin, daß viele Anforderungen mit C++  alleine noch nicht gelöst werden können, weil auch noch Zusatzbibliotheken oder Betriebssystemaufrufe eingesetzt und erlernt werden müssen.

Etwas überspitzt gesagt kann man sagen, daß ein C++ -Anwendungsprogramm oft schneller laufen wird als ein gleichwertiges Anwendungsprogramm in vielen anderen Programmiersprachen, aber dafür der Programmierer mehr Zeit für seine Ausbildung und die Entwicklung des Programms investieren muß als bei Verwendung anderer Programmiersprachen, die für eine schnelle, sichere und einfache Anwendungsentwicklung gedacht sind.

Sicherheit von C++ 

Eine Programmiersprache kann einen Programmierer mehr oder weniger vor eigenen Fehlern schützen. In C++  hat der Programmierer die Möglichkeit, einige entsprechende Schutzmechanismen zu aktivieren. Damit liegt C++  im Mittelfeld zwischen Sprachen ohne diese Möglichkeit und Sprachen, in denen solche Schutzmechanismen ständig aktiviert sind.

Einsatzgebiete von C++ 

What I did do was to design C++ as first of all a systems programming language: I wanted to be able to write device drivers, embedded systems, and other code that needed to use hardware directly. Next, I wanted C++ to be a good language for designing tools. That required flexibility and performance, but also the ability to express elegant interfaces.

Bjarne Stroustrup

http://www.stroustrup.com/MIT-TR-original.pdf

C++  wird sowohl in der Systemprogrammierung als auch in der Programmierung von Werkzeugen und Anwendungen eingesetzt. Jedoch sieht man C++  eher als eine Sprache zur Systemprogrammierung und zur Programmierung von Werkzeugen an.

In der Systemprogrammierung erlaubt es C++  oft, Programme mit einer bestimmten Schnittstelle zum Betriebssystem (ABI) zu schreiben. Somit können mit C++  oft auch Treiber oder Bibliotheken programmiert werden. Dies ist nicht mit allen verbreiteten Programmiersprachen möglich, setzt allerdings zusätzliche Spezialkenntnisse voraus.

In der Anwendungsprogrammierung erlaubt es C++  oft die übliche graphische Benutzeroberfläche eines Betriebssystems direkt zu nutzen. Dadurch sehen C++ -Programme dann wie „normale Programme“ dieses Betriebssystems aus. Jedoch setzt dies voraus, daß zusätzlich zur C++-Programmierung entsprechende Spezialkenntnisse erworben werden.

Viele andere Aufgaben können sowohl mit C++  als auch mit den meisten anderen Programmiersprachen erledigt werden. In der Regel wird die Bearbeitung mit C++  schwieriger sein und mehr Zeit kosten, aber – bei guter Programmierung – zu schnelleren (effizienteren) Programmen führen.

Ein weiteres wichtiges Anwendungsgebiet von C++  ist die Spieleprogrammierung. Für Spiele, die schnell auf Eingaben reagieren sollen und dabei komplexe Berechnungen erledigen müssen, ist C++  die verbreiteteste Programmiersprache. Minecraft  wurde ursprünglich in Java  geschrieben, aber lief wesentlich schneller, nachdem es in C++  umgeschrieben wurde. Weitere Beispiele: Doom 3, Counter Strike, World of Warcraft.

Da C++  bei einigen großen Herstellern eingesetzt wird, wird die Sprache auch gerne in der Ausbildung eingesetzt. Dort hat sie in den 90er Jahren teilweise andere Programmiersprachen verdrängt, weil in der Ausbildung auch die Programmierung mit Klassen gelehrt werden sollte, die in einigen klassischen Ausbildungssprachen nicht möglich war.

Einige typische Einsatzgebiete von C++  neben der Systemprogrammierung sind:

Beispiele von Programmen, die in C++  geschrieben wurden sind:

Beispiele von Anwendern der Sprache:

Weitere Produkte: LibreOffice, OpenOffice, WxWidgets, 7-zip, AbiWord, AutoHotkey, Audacity, Chromium (browser), ClassicShell, Code::Blocks, Cygwin, Doxygen, Firefox, GNUWin32, LyX, MiKTeX, Notepad++, Nullsoft Scriptable Install System, POV-Ray, PyQt, Qt, ReactOS, Sumatra PDF, TensorFlow, VirtualBox, WebKit, WinSCP, Wireshark, WxWidgets, WinMerge,

Siehe auch

en.wikipedia.org/wiki/Category:Free_software_programmed_in_C%2B%2B

www.stroustrup.com/GamesListOfCpp.pdf

Anwendungsprogrammierung und Systemprogrammierung

Ein Anwendungsprogramm ist ein Programm, das in der Regel direkt von einem Benutzer und nicht von anderen Programmen verwendet wird, und das einem speziellen Zweck dient. Die Programm, die ein Anwender eines Computers direkt bewußt startet, sind in der Regel Anwendungsprogramme. Anwendungsprogramme sind beispielsweise Computerspiele, Tabellenkalkulationen oder Textverarbeitungsprogramme.

Die Anwendungsprogrammierung umfaßt die Entwicklung von Anwendungsprogrammen, also Programmen für ein bestimmten Aufgabe, beispielsweise für die Buchhaltung oder ein bestimmtes Computerspiel. Ein Anwendungsprogramm verfügt oft über eine Benutzeroberfläche.

Ein Systemprogramm ist ein Programm (oder ein Programmteil), welches Dienste bereitstellt, die in vielen Fällen benötigt werden könnten und nicht zu einem bestimmten einzelnen Anwendungsgebiet gehören, beispielsweise ein Druckertreiber oder ein Sortierprogramm. Ein Betriebssystem umfaßt oft verschiedene Systemprogramme. Da Systemprogramme oft verwendet werden, werden an sie besonders hohe Anforderungen in Hinblick auf ihre Effizienz und Zuverlässigkeit gestellt. Da bei der Systemprogrammierung oft Kenntnisse über Algorithmen und Datenstrukturen, Betriebssystemaufrufe und manchmal auch Hardwarezugriffe nötig sind, ist sie tendenziell schwieriger als die Anwendungsprogrammierung. Systemprogramme werden von anderen Programmen oder von Benutzern verwendet. Auch Compiler kann man eher zu den Systemprogrammen zählen. Systemprogramme müssen oft in einer ganz bestimmten Form vorliegen und können daher mit einigen Programmiersprachen, die für die Anwendungsprogrammierung gedacht sind, gar nicht geschrieben werden.

Die Systemprogrammierung umfaßt die Programmierung von Programmen für die grundlegende Software eines Betriebssystems, für Infrastruktur wie Gerätetreiber, Kommunikationsstapel, virtuelle Maschinen, Betriebssysteme, Entwicklungsumgebungen oder Fundierungsbibliotheken (Bibliotheken mit universell nutzbaren Bestandteilen), es handelt sich hierbei oft um Programme, welche direkt mit Geräten kommunizieren oder die mit wenig Ressourcen auskommen müssen oder die direkt mit solchen Programmen interagieren. Solche Programme verfügen selten über eine Benutzeroberfläche.

Die Systemprogrammierung ist im allgemeinen schwieriger als die Anwendungsprogrammierung, da sie mehr Kenntnisse, mehr Abstraktionsfähigkeit und eine längere Ausbildung verlangt.

C++  ist eher für die Systemprogrammierung  gedacht und geeignet. 

Erlernbarkeit von C++ 

„Wenn man es mit anderen Sprachen vergleicht, ist C++  tatsächlich schwer gut zu erlernen.“

Bjarne Stroustrup

http://www.heise.de/developer/artikel/Interview-mit-C-Schoepfer-Bjarne-Stroustrup-2300861.html?artikelseite=2

C++  basiert auf der Programmiersprache C. Zusätzlich zu den Sprachbestandteilen von C  gibt es viele weitere spezielle C++ -Sprachbestandteile. Die Spezifikationen beider Sprachen umfassen zusammen mehr als 2000 Seiten. Damit ist C++  eine ausgesprochen große Programmiersprache, die vollständig zu erlernen Jahre braucht oder fast unmöglich ist. Hinzukommt, daß einige Teile von C++  inzwischen verändert wurden, so daß man heute in C++  nicht nur Überreste aus C , sondern auch aus früheren Versionen von C++  findet.

Zwar kann man schon einiges programmieren, wenn man nur einen Teil der Sprache kennt, jedoch geht mit unvollständigen Kenntnissen der Sprache auch das Risiko einher, Fehler zu machen. Von einem beruflichen C++ -Programmierer wird oft erwartet, vorhandene C++ -Programme zu überarbeiten, was schwierig wird, wenn er nur einen kleinen Teil der Sprache kennt, da in den zu überarbeitenden Programmen dann wahrscheinlich auch ihm unbekannte Teile der Sprache verwendet werden.

„Die andere Quelle von Schwierigkeiten beim Lernen von C++  ist die Kompatibilität mit C und mit den älteren C++ -Versionen. Man kann auch nicht einfach alles vergessen, was vor 2000 eingeführt wurde. Es gibt Milliarden Zeilen C++ -Code da draußen und viele entsprechen nicht dem heutigen Geschmack.“

Bjarne Stroustrup

http://www.heise.de/developer/artikel/Interview-mit-C-Schoepfer-Bjarne-Stroustrup-2300861.html?artikelseite=2

Es ist ein Fehler, wenn C++  als Lernsprache an Schule eingesetzt wird, oder von Anfängern zum Erlernen des Programmierens an sich ausgewählt wird, da C++  hierfür zu groß und schwierig ist während gleichzeitig die Bibliotheken für die motivierende Anwendungsprogrammierung (Web, Datenbanken, GUI) als Teil der portablen Standardbibliothek fehlen. Als Sprachen zum allgemeinen Lernen des Programmierens sollten am besten leichter erlernbare Programmiersprachen mit anwendungsnahen Bibliotheken, wie Java, herangezogen werden. C++  kann dann erlernt werden, wenn jemand schon bemerkt hat, daß er computertechnische Details besonders schnell erlernen kann und bereit ist, einen großen Teil seines Lebens in das Erlernen dieser Programmiersprache zu investieren. Dies betrifft hauptsächlich Personen, die erwarten, diese Programmiersprache zukünftig häufig zu verwenden, beispielsweise als hauptberufliche C++ -Programmierer. Für viele andere ist das Erlernen von C++  Zeitverschwendung.

C++ has indeed become too expert friendly at a time where the degree of effective formal education of the average software developer has declined. However, the solution is not to dumb down the programming languages but to use a variety of programming languages and educate more experts. There has to be languages for those experts to use – and C++ is one of those languages.

Bjarne Stroustrup

December 1, 2006, Questions for Bjarne Stroustrup (from Jason Pontin from MIT Technical Review)

http://www.stroustrup.com/MIT-TR-original.pdf

Lassen Sie sich nicht täuschen! Für Programmierkurse suchen Dozenten sich die einfachen Teile der Sprache aus und vereinfachen einiges. Daher erscheint ein C++ -Grundkurs oft als nicht schwieriger als ein Python -Grundkurs. Wenn man C++  aber in der Praxis gekonnt anwenden will, muß man es jahrelang erlernen, während man mit Python  schon früher produktiv werden kann. Das Erlernen von C++  lohnt sich daher nur, wenn es einen besonderen Grund dafür gibt, aus dem es gerade diese schwierige Sprache sein soll – beispielsweise die Effizienz der erzeugten Software.

Anwendbarkeit von C++ 

C++  ist nicht nur schwer zu erlernen, sondern auch schwer anzuwenden. Wahrscheinlich ist C++ sogar noch schwieriger anzuwenden als zu erlernen. Da der Standardbibliothek viele oft benötigte Teile fehlen, muß ein der Hersteller eines Programms sich oft um die Auswahl und Beschaffung von Zusatzbibliotheken  kümmern. Zusatzbibliotheken bringen verschiedene Probleme mit sich: Lizenz, zukünftige Verfügbarkeit, Portabilität, Qualität und Aktualität. Manche Bibliotheken sind für C  geschrieben und nutzen daher nicht alle Möglichkeiten von C++. In vielen Fällen ist es auch nötig, Funktionen des Betriebssystems der Ausführungsumgebung aufzurufen. Dies alles bedeutet, daß es oft noch nötig ist, zusätzlich zu C++  die Programmierung bestimmter Bibliotheken oder Betriebssystem zu erlernen. Dabei wird es oft nötig, sich auch mit der Programmierung auf einem relativ niedrigen Niveau zu beschäftigen, etwa mit manueller Speicherverwaltung oder Bitzugriffen.

Weitergabe von C++ -Programmen

C++ -Programme können als Quelltext, als Objektcode oder in gebundener Form weitergegeben werden.

Bei der Weitergabe als Quelltext benötigt der Empfänger eine passende C++ -Implementation, um den Quelltext als Programm starten zu können. Der Quelltext kann vom Empfänger vor der Verwendung auch noch geprüft oder angepaßt (überarbeitet) werden. Wenn ein portabler Quelltext weitergegeben wird, dann kann der Empfänger diesen mit einer beliebigen C++ -Implementation und damit unter vielen verschiedenen Betriebssystemen nutzen.

Die Weitergabe von Objektcode kommt meist zum Einsatz, wenn der Empfänger diesen als eine Bibliothek von Programmteilen in eigenen Programm nutzen können soll, aber den Quellcode nicht lesen können soll. Auch hier benötigt der Empfänger spezielle Programme, wie sie oft als Teil einer C++ -Implementation verfügbar sind. Oft kann weitergegebener Objektcode nur mit speziellen passenden C++ -Implementation und Betriebssystemen verwendet werden.

Schließlich kann ein ausführbares Programm weitergegeben werden, das vom Binder erzeugt wurde. Der Binder erzeugt Programme in der Regel für ein bestimmtes Betriebssystem. In dieser Form weitergegebenen Programme sind also nicht portabel. Der Empfänger kann sie direkt starten, ohne daß er eine C++ -Implementation oder C++ -Kenntnisse benötigt.

Rekonstruierbarkeit des Quellcodes bei Verwendung von C++ 

Der C++ -Quellcode, also der von einem Programmierer geschrieben Text, kann aus einem kompilierten Programm nur mit sehr viel Aufwand wiederhergestellt werden. Dadurch wird es Anwendern erschwert, die Verfahren in dem Programm zu lesen. Dies hat den Vorteil, daß die Verfahren besser vor Übernahme durch Dritte geschützt sind, aber die Programme sind auch weniger vertrauenswürdig, wenn die Quelltext nicht lesbar sind, weil sie dann vor dem Start des Programms nicht auf unerwünschte Funktionen hin überprüft werden können.

Herstellerabhängigkeiten von C++ 

Die Programmiersprache C++  wurde von einem Zusammenschluß verschiedener Hersteller und Einzelpersonen definiert. Die C++ -Norm wird von einer Organisation herausgegeben, die selber keine C++ -Implementationen herstellt. Es gibt C++ -Implementationen von verschiedenen Herstellern und für die meisten verbreiteten Betriebssysteme.

Dies bedeutet, daß keine Abhängigkeit von einem bestimmten Hersteller bei Verwendung von C++  besteht. Wenn ein einzelner Hersteller einer C++ -Implementation verschwindet, kann auf eine C++ -Implementation eines anderen Herstellers umgestellt werden. Zudem sind viele C++ -Implementationen sogar kostenlos erhältlich.

Allerdings gibt es nur einige wenige C++-Implementationen. Falls sie alle eingestellt werden sollten, kann C++  dann auf neueren Betriebssystemen nicht mehr verwendet werden. Dieses Szenario erscheint aber auf absehbare Zeit als unwahrscheinlich.

Tabelle

Tabelle

C++

Spezifikation vorhanden +
Spezifikation zugänglich o
Spezifikation unabhängig +
Mehrere Implementationen +
populär +
effizient +
Schnittstellen zu VNG o
Portabilität o
Speicherverwaltung o
Erlernbarkeit -
Sicherheit o
Weitergebbarkeit +
Quellcodeschutz +

Tabelle (Legende)


Spezifikation vorhanden Gibt es eine formale und korrekte Beschreibung der Programmiersprache?
Spezifikation zugänglich Ist die Spezifikation einfach erhältlich?
Spezifikation unabhängig Ist die Spezifikation herstellerunabhängig
Mehrere Implementationen Gibt es mehrere Implementationen verschiedener Hersteller?
populär Wird die Sprache häufig eingesetzt?
effizient Sind die erzeugten Programme schnell und speicherschonend?
Schnittstellen zu VNG Sind Zugriffe auf Verzeichnisse, Netz und Graphik Teil der Sprache?
Portabilität Sind die Programme leicht auf andere Computertypen übertragbar?
Speicherverwaltung Gibt es eine automatische Speicherverwaltung?
Erlernbarkeit Ist die Sprache leicht zu erlernen?
Sicherheit Hat die Sprache immer wirksame Mechanismen gegen bestimmte Fehler?
Weitergebbarkeit Können die kompilierten Programm leicht weitergegeben werden?
Quellcodeschutz Ist der Quellcode bei Weitergaben von Programm unlesbar?

+ Ja
o mit Einschränkungen
- Nein

Übungsfragen

?   Schöpfer

Wie heißt der Schöpfer von C++ ?

Anhang Akronyme von C++  *

RAII

ADL

SFINAE

CRTP

1TBS

COW

EBO

EDO

GOTW

NVI

NSDMI non-static data member initializer

NRVO

PIMPL

RTTI

RVO

SSO

Anhang Fachbegriffe von C++  *

the zero-overhead principle

exception-safety

Koenig lookup

lvalue reference

perfect forwarding

rule of three/zero/five (seven?)

rvalue reference

Scope Guard

Traits

vtbl/vtable

Anhang Implementationen von C++  *

g++ (gcc)

clang

Microsoft Visual C++

http://www.edg.com/cpp.html

Anhang Was C++  bereitstellt (Auswahl) *

Algorithmen, konkrete Klassen, abstrakte Klassen, Namensräume, virtuelle, rein virtuelle und nicht-virtuelle sowie statische Elementfunktionen, Konstruktoren, Destruktoren, RTTI, verschachtelte Klassen, Fehlparameter (default parameters ), Schauplätze (locales ), Überladung von Methoden und Operatoren, constexpr, new and delete, Bitoperationen, Lambda-Ausdrücke, Iostream-Bibliothek, Vererbung, Zugriffsarten (öffentlich, privat, geschützt, virtuell, mehrfach) für Vererbung und Elemente einer Klasse, statische Speicherklassen, Schablonen mit vollständiger oder teilweiser Spezialisierung, Einreihen von Funktionen, atomare Typen, Ausnahmen, mehrere Arten von Referenzen, New-Handlers, Friends, drei verschiedene Speichermodelle, benutzerdefinierte Literale, rohe und Zeigerverwaltungen, Promises, Futures, Typableitung, die STL, zwei Arten von Enums.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723114 stefan_ram:723114 Charakterisierung von C++ Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723114, slrprddef723114, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/charakterisierung_c++