Warum ist Embedded Strictly C / C ++ [geschlossen]

15

Ich mochte diese Frage nicht, da sie nicht einfach zu beantworten ist, aber ich kann sie vielleicht umformulieren: "Was hindert Embedded daran, die Sprache zu wechseln?"

Zum Beispiel sehen wir C / C ++ für Embedded (ich glaube, ich habe ADA schon einmal erwähnt? Korrigiere mich, wenn ich falsch liege)

Aber was genau hindert die Embedded-Welt daran, die Sprache zu wechseln? Ist es nur so, dass C zu einfach zu bedienen ist, oder gibt es einfach kein "Bedürfnis" nach einer Änderung, da C alles in Ordnung bringt?

Das hat mich immer irgendwie verwirrt, nicht dass ich mich beschwere. Da es auf wenige Sprachen beschränkt bleibt, bleiben die Dinge standardisiert. Trotzdem bleibt die Frage.

Mir ist klar, dass dies eine Art subjektive Frage ist, aber meine Hauptfrage ist "Warum" und nicht "WENN / WANN".


quelle
2
Gibt es eine bestimmte höhere Sprache, die Sie auf eingebetteten Systemen sehen möchten? EDIT: oder vielmehr, welche Sprachfunktionen interessieren Sie, die C nicht bietet?
Jon L
1
@ JonL - Es gibt eine Reihe von Low-Level-Funktionen, die ich mir wünschte, C hätte. ZB bessere Bit / Nibble / Byte / Word-Manipulation in großen Ints. Bessere Sicherheitsunterstützung, zB die Art der Funktionen, die Ada bietet.
Rocketmagnet
3
Eingebettet ist nicht unbedingt C. Hier sind einige Hochsprachen für eingebettete Systeme: electronics.stackexchange.com/questions/3423/…
Kellenjb
1
"Embedded" hat unterschiedliche Bedeutungen. Ein 4-Bit-Mikrocontroller, auf dem ein Toaster ausgeführt wird, unterscheidet sich von einem Steuergerät oder einer Set-Top-Box. Dieses Spektrum macht Ihre Frage schwer zu beantworten.
Toby Jaffey
1
Und wie erwartet wurde dies geschlossen. Ich hatte die Hoffnung, dass diese Frage qualitativ hochwertige Antworten erhalten würde, und die Leute würden daran arbeiten, dass sie eine gute Frage bleibt. Dies ist nicht der Fall. Stattdessen erhalten wir viele Antworten, bei denen es sich um einen Satz handelt, für den mehrere positive Stimmen abgegeben wurden. Wir haben eine Antwort, bei der es in Prosa einen negativen Krieg mit unzähligen Flaggen gibt, und die anderen Antworten haben innerhalb eines Tages mehr Flaggen generiert als der Rest der Website zusammen . Das Problem ist, dass es für viele Menschen viele verschiedene richtige Antworten gibt, warum sie sich nicht geändert haben.
Kortuk

Antworten:

18

Zunächst einmal: Vergessen Sie "eingebettet", da dies keine nützliche Unterscheidung ist. Die alles entscheidende Eigenschaft ist "ressourcenbeschränkt". Die wichtigste Ressource ist oft die Zeit. In diesem Fall sprechen wir von Echtzeitsystemen, aber es kann sich auch um Speicher oder Energie handeln.

  • Die Übernahme neuer Sprachen ist schwierig und selten. Es erfordert eine Umschulung, neue Werkzeuge und einen guten Weg, mit der neuen Sprache umzugehen. Dies ist insbesondere für die Early Adopters kostenintensiv. Es ist auch ein Henne-Ei-Problem: Ohne eine große Anwenderbasis gibt es keine qualitativ hochwertigen Tools und Bibliotheken, aber ohne diese wird es keine große Anwenderbasis geben. Daher muss eine neue Sprache einen großen Vorteil gegenüber den bestehenden haben, sonst hat sie keine Chance.

  • Die jüngsten Sprachentwicklungen haben die Lücke zwischen der verfügbaren CPU-Leistung und den Anforderungen des Benutzers geschlossen. Mit anderen Worten: Sie können eine ineffiziente Geschwindigkeit aufweisen, dies wird jedoch durch eine geringere Belastung des Programmierers ausgeglichen. Denken Sie an den Aufstieg von Sprachen wie Java, Python, Perl und Tcl, die im Wesentlichen von einem Interpreter ausgeführt werden (möglicherweise nach einer gewissen Kompilierung), und nutzen Sie die dynamische Speicherverwaltung in hohem Maße. Dies passt jedoch nicht gut zu der ressourcenbeschränkten Welt, in der wir a) das Beste aus den verfügbaren Ressourcen herausholen wollen, selbst auf Kosten eines höheren Programmieraufwands, und b) eine vorhersehbare Ressourcennutzung.

  • C und C ++ (oder eine geeignete Untergruppe) sind immer noch die am häufigsten verwendeten Sprachen der höchsten Ebene (genug, dass gute Tools, ausreichend geschulte Programmierer und umfangreiche Bibliotheken zur Verfügung stehen), die vorhersehbare räumliche und zeitliche Anforderungen erfüllen, die nicht weit entfernt sind von dem, was auf aktueller Hardware möglich ist. Der einzige Konkurrent ist meiner Meinung nach Ada, aber er hatte einen schlechten Start: Die ersten Implementierungen waren (als zu langsam empfunden?) Und ineffizient, und jetzt (obwohl gute Implementierungen verfügbar sind) ist die Sprache etwas zurückgefallen Funktionen (im Vergleich zu C ++). Persönlich finde ich das schade, ansonsten fliege ich lieber in einem Flugzeug, das in Ada programmiert ist, als in C oder C ++.

Wouter van Ooijen
quelle
+1 - nette Antwort. Ada scheint eine interessante Sprache zu sein. Gibt es Ada-Compiler für kleine Mikros?
Oli Glaser
Es gibt GNAT, den GCC Ada Compiler. Aber AFAIK es wurde nicht viel auf Mikros verwendet, so dass Sie es schwer haben, etwas zu finden, das gelesen werden kann, um zu laufen.
Wouter van Ooijen
Ja, ich habe gesehen, dass GNAT auf der Wiki-Seite erwähnt wurde. Sie haben Recht, es gibt nicht viel für kleine Mikros, aber es scheint einiges an Unterstützung (wie zu erwarten) für unternehmenskritische Dinge auf 68k, x86, MIPS usw. (z. B. DDCI ) zu geben
Oli Glaser,
Ich sehe, dass es auch SPARK Ada gibt, wie von Deek unten erwähnt. Ich muss es überprüfen, wenn ich etwas von dem schwer fassbaren Zeug habe, das sie als Zeit bezeichnen ...
Oli Glaser
2
Ada, in der Form von Gnat, funktioniert gut mit dem AVR-Mikroprozessor, wie in Arduino zu sehen. Die kleinste ausführbare Gnat-Datei, die ich erstellt habe, war 65 Byte. Zugegeben, alles, was es tat, war das Blinken einer LED, obwohl die entsprechende Arduino-Skizze mehr als 1K betrug. Als meine ausführbare Datei 600 Bytes erreichte, wurden 2 Schrittmotoren unabhängig voneinander angesteuert ... Sie benötigen keinen SPARK - es sei denn, Sie möchten beweisen, dass Ihr LED-Blinker formal korrekt ist!
Brian Drummond
9

Bei eingebetteten Systemen mit 8- und 16-Bit-Mikrocontrollern ist es einfacher, Software zu entwickeln, die in die begrenzten Ressourcen dieser sehr bescheidenen Speicherbeschränkungen passt (möglicherweise einige 100 Byte RAM für 8-Bit-Mikrocontroller der unteren Preisklasse) , mit 2-8 KiB ROM oder EPROM / Flash zur Codespeicherung).

In diesen Fällen sind kleine Sprachen wie C oder Assembler die am häufigsten verwendeten Entwicklungssprachen. Als sehr grober relativer Vergleich können ein vollständiger Assembler und ein C99-Compiler auf eine einzige Diskette passen, während Sie für ein modernes C ++ - Entwicklungssystem (mit STL usw.) mehrere MiB benötigen .

Wenn Sie sich mit High-End-Mikros (High-End-16-Bit und meistens 32-Bit, mit ziemlich seltenen 64-Bit) und DSP in eingebetteten Umgebungen beschäftigen, werden die Einschränkungen schwächer, und die Softwareentwicklung macht möglicherweise den größten Teil der Entwicklung aus Daher ist es sinnvoll, die produktivsten Entwicklungstools zu verwenden, einschließlich erweiterter Sprachen mit Funktionen wie objektorientierter Programmierung (OOP) wie C ++ und neueren Sprachen (Java, Perl, Ruby, Python).

In Assembly und C kann vorhergesagt werden, wie viel Speicher verwendet wird, sodass ein Design mit beschränktem Speicherplatz möglich ist. Erweiterte Funktionen wie Vorlagen, Ausnahmebehandlung und Laufzeitbindung machen es jedoch unmöglich, den erforderlichen Speicherbedarf genau zu kennen für ein Standard-C ++ - Programm im Voraus. Ich weiß nicht genug über MISRA C ++ , das eine Teilmenge von C ++ ist, um es zu kommentieren.

Sprachen, die auf virtuellen Maschinen basieren, auf denen Bytecode ausgeführt wird (Java, Perl, Python), sind in der Erfahrung des eingebetteten Entwicklers weniger ausgereift, und da diese Sprachen so konzipiert sind, dass sie den Programmierer von der jeweiligen Hardware isolieren, wird es auch schwieriger, sich dessen bewusst zu sein Beschränkungen und Einschränkungen eines solchen eingebetteten Hardwaresystems. Dies ist bei schnellen 32-Bit-Prozessoren (z. B. ARMv7) mit MiB weniger ein Problem, wenn nicht GiB RAM.

Alle mir bekannten BASIC-Implementierungen sind in den Sprachfeatures recht simpel und bleiben weitgehend dem Erbe von Dartmouth BASIC aus den 1960er-Jahren treu. Dies bedeutet, dass die Sprache keine komplexen Laufzeitbibliotheken oder Ausnahmebehandlungen hat und ein Interpreter oder Compiler ziemlich einfach zu schreiben ist und auch eine geringe Dateigröße hat. Für die meisten Mikrocontroller steht mindestens ein BASIC-Compiler zur Verfügung.

Ich hoffe, dass in groben Zügen die Gründe aufgeführt sind, warum C und Assembly hauptsächlich auf kleineren oder älteren eingebetteten Systemen verwendet werden und sich mit den Einschränkungen neuerer eingebetteter Mid- bis High-End-Systeme nur geringfügig von einem herkömmlichen Desktop-Personalcomputer unterscheiden.

mctylr
quelle
5

Die meisten Antworten gaben bereits die historischen Gründe an (wohlbekannt, jeder benutzt sie, es wäre nicht einfach, die Gewohnheiten usw. zu ändern). Obwohl ich ihnen zustimme, sollten wir bedenken, dass es einen weiteren wichtigen Grund gibt.

Es ist nicht so, dass "C eine schlechte oder veraltete Wahl ist, aber wir verwenden es immer noch aus Gewohnheit" (wie die QWERTZ-Tastaturen).

C ist an sich eine sehr gute Wahl für die Embedded-Entwicklung, insbesondere in zeitkritischen Anwendungen. Warum?

  • Es ist niedrig genug, um einfach zum Implementieren von Echtzeitprogrammen verwendet werden zu können. Wenn Sie die Zeit in Nanosekunden messen müssen, alle 5 Mikrosekunden einen Interrupt abfangen müssen oder genau 64 Byte RAM benötigen , ist es mit einer Sprache auf sehr hohem Niveau meistens entweder unmöglich oder sehr schwer, ihn zu lösen . Mit C haben Sie eine viel bessere Kontrolle über die Hardware als mit höheren Sprachen. Dies ist einer der wichtigsten Unterschiede zwischen der Entwicklung für Embedded und PC.

  • Es ist hoch genug, um im Vergleich zu Assembly schnell und einfach zu codieren.

Daher ist C der beste (oder einer der besten) Kompromiss zwischen der Geschwindigkeit und dem direkten Hardwarezugriff von Assembly und dem einfachen Lesen und Verstehen von Hochsprachen.

vsz
quelle
1
Ich denke, ein wichtiger Aspekt für C ist, dass man Code für eine bestimmte Plattform optimieren kann, während ein solcher Code auf anderen Plattformen (möglicherweise nicht so effizient) ausgeführt werden kann. Auf so etwas wie einem PIC werden viele C-Anweisungen vorhersehbar in Maschinenanweisungen übersetzt. Eine Schleife wie diese unsigned char i=63,j=128; do {something;} while(--j); while(--i);ist zwar nicht so lesbar unsigned int i=16000; do {something;} while(--i);, läuft jedoch schneller und ist auf dem PIC effizienter. Wenn der Code in den ARM verschoben würde, wäre der zweite Ansatz effizienter, aber der erste würde immer noch funktionieren.
Supercat
4

Es ist genau der gleiche Grund, warum sich bei der regulären Programmierung die (am häufigsten verwendeten) Sprachen nicht (wirklich) ändern:

  1. Sehr viel vorhandener Code (Bibliotheken / vorhandene Implementierungen)
  2. Großes Tool-Set, das mit diesen Sprachen arbeiten kann (IDEs, Simulatoren, ...)
Sam
quelle
4

In der Embedded-Welt kann es sehr viel schwieriger (oder unmöglich) sein, Software-Updates bereitzustellen. Umso wichtiger ist es, die Richtigkeit zu gewährleisten. Leider bietet C in dieser Hinsicht nur sehr wenig Hilfe und ermöglicht es dem Programmierer, schnell und locker zu spielen.

Es tut mir weh, C für eingebettete Systeme zu verwenden, und ich wünschte, ich könnte zumindest zu C ++ wechseln, um die vielen Vorteile zu nutzen, die es in Form von Einschränkungen wie const, Referenzen, Stringer-Typisierung usw. bietet.

Ich denke, die Antwort ist einfach, dass wir bei C stecken bleiben, weil das Ändern nicht kommerziell rentabel ist. Jeder kennt C, es gibt jede Menge Compiler, Bibliotheken und Tools, um es zu generieren. Mit einer neuen Sprache würden wir von vorne anfangen.

Ich denke, deshalb benutzen die Leute immer noch PHP .

PHP Doppelklauenhammer.

Raketenmagnet
quelle
Wenn Sie die Frage diskutieren möchten, verwenden Sie Kommentare oder Meta, wenn Sie den Benutzer für eine gute Frage auf die Rückseite klopfen möchten, stimmen Sie sie oder kommentieren Sie sie.
Kortuk
Sie können Pascal immer verwenden - es scheint die zusätzlichen Einschränkungen zu haben, die Sie suchen :-). Oder irgendeine Form von Super-Lint.
Russell McMahon
2
Ein wahrscheinlich sehr wichtiger Grund für C ist, dass das Schreiben eines einfachen C-Compilers wesentlich einfacher ist als das Schreiben eines C ++ - Compilers. Ich habe eine Weile an einer gearbeitet, bevor mich wichtigere Aufgaben davon abgezogen haben. Lustige Sachen! Schreiben eines C ++ - Compilers? Pfui. Ich bevorzuge jedoch C ++ als Benutzer.
Darron
1
@RussellMcMahon - Ich kann Pascal nicht verwenden, da es keinen Pascal-Compiler für die von mir verwendeten MCUs gibt.
Rocketmagnet
@ Darron - Das ist ein sehr guter Punkt. Es gibt jedoch sehr gute Open-Source-C ++ - Compiler wie gpp. Sie müssten nur ein Backend dafür schreiben.
Rocketmagnet
4

Hat hier niemand von SPARK Ada gehört?

Dies ist eine "kleine" Version der Ada-Sprache und der zugehörigen Entwicklungstools für eingebettete Systeme, z. B. Avionik und andere sicherheitskritische Anwendungen wie medizinische Geräte.

Studien haben gezeigt, dass die Verarbeitungsgeschwindigkeit im Vergleich zu C / C ++ mit der zuverlässigeren SPARK-Codierung nur um 5-10% abnimmt.

Ich denke, dass die Verbreitung von C in eingebetteten Systemen wirtschaftliche Gründe hat:

  • Es ist bereits vorhanden und in der Regel für die meisten Anwendungen funktionsfähig - und die meisten Anwendungen auf Volumenbasis sind unkritisch. Wenn die Waschmaschine überläuft, stirbt niemand. Warum also ändern?

  • Das SPARK-Toolset ist eine zusätzliche Ausgabe für sich und die Schulung des Personals.

  • Die zusätzlichen Vorteile von SPARK (oder anderen Nicht-C-Sprachen) für das Embedded-Controller- / Management-System reichen möglicherweise nicht aus, um die erforderliche Prämie für den Produktpreis in den Augen des Verbrauchers zu rechtfertigen - insbesondere dann, wenn sich anscheinend "gute" Konkurrenzmarken verkaufen zu einem günstigeren Preis.

  • Das AdaCore-Unternehmen achtet darauf, nicht zu tief in die Massenmarktanwendungen einzudringen, da diese zwangsläufig eine starke Aufstockung des technischen Supports erfordern, um nicht zum Kerngeschäft gehörende Probleme zu lösen. AdaCore ist ein hoch qualifiziertes Unternehmen, das sich als solches auszeichnet und seine Produkte und Dienstleistungen bei Hochtechnologieunternehmen anbietet. Es ist ungewöhnlich, dass eine Sprache in neue Märkte vordringt, es sei denn, die Hauptakteure möchten dies wirklich.

Also, @ Wouter, du brauchst dir keine Sorgen zu machen, dass du aus Mangel an Ada-Embedded-Code am Himmel stirbst!

Es ist bereits seit vielen Jahren in den Flugzeugsystemen. Ebenso für Ihren Herzschrittmacher.

Aber für die Spülmaschine, die Gebäudeleittechnik, die Laborofensteuerung und andere nicht so streng geregelte Bereiche - lohnt es sich wirtschaftlich, noch einen Schritt weiter zu gehen?

Deek
quelle
Interessant, danke - ich hatte noch nie von SPARK gehört, werde es ausprobieren.
Oli Glaser
Einige Studien zeigen eine Beschleunigung im Vergleich zu einer vorhandenen Anwendung in C - schauen Sie sich den DNS-Server "Ironsides" an ...
Brian Drummond
3

Ich vermute, der Hauptgrund für die Popularität von C ist, dass erstens C beliebt ist und viele Leute es kennen und zweitens keine der neuen populären Sprachen wie Java, C # und sogar viele Aspekte von C ++ für eingebettete Arbeit geeignet sind. Grundsätzlich basieren die drei anderen Sprachen, die ich erwähnte, sehr auf dynamischem Speicher, was eine nicht deterministische Programmausführung mit sich bringt, auf Objekten, die dynamischen Speicher mit sich bringen, und einem großen Speicherbedarf (da eine der wichtigsten Seiten von OO die Verwendung von ist) größere Anzahl von Klassen), die zunehmende Beliebtheit des Just-in-Time-Compilierens (und viele Embedded-Plattformen können nicht einmal ihren eigenen C-Code kompilieren) ...

Es gibt auch die Tatsache, dass viele der Bibliotheken, die mit Java oder C # geliefert werden, für eine große Anzahl eingebetteter Projekte unbrauchbar sind.

Auf der anderen Seite haben wir ältere Sprachen wie Pascal oder Basic. Aus meiner Sicht sind sie nicht so beliebt, weil sich C selbst zum "Industriestandard" gemacht hat und sehr viele Programmierer und Ingenieure heute C lernen. In einigen Schulen werden Pascal oder Basic nicht einmal erlernt. Es gibt auch die Tatsache, dass viele der heute populären Sprachen eine C-ähnliche Syntax haben und die Verwendung von Pascal für einen C-Programmierer ungewöhnlich wäre.

Was FORTRAN betrifft, denke ich, dass es in ein Nischenfeld gegangen ist und hauptsächlich von Ingenieuren und Wissenschaftlern genutzt wird, die in Gebieten arbeiten, in denen es ein geeignetes Ökosystem für seine Verwendung gibt. Ich sehe keinen bestimmten Grund (außer denjenigen, die ich für Pascal und Basic erwähnt habe), weshalb es auf eingebetteten Systemen nicht verwendet wird.

Beachten Sie, dass ich mich in dieser Antwort hauptsächlich auf kleinere Systeme konzentriert habe. Es gibt auch viele eingebettete Geräte, die komplexere Betriebssysteme wie GNU / Linux oder ein anderes Unix-Derivat verwenden und für deren Programmierung mehr oder weniger jede beliebige Sprache verwendet werden kann.

AndrejaKo
quelle
1
C ist beliebt, weil C beliebt ist? :-)
Stevenvh
2
@ stevenvh Ja, das stimmt. Es ist eine Art positive Rückkopplungsschleife. Je beliebter es ist, desto beliebter wird es.
AndrejaKo
3

C ist eine sehr einfache Sprache und wurde schon mehrmals als schicke Assemblersprache bezeichnet . Dies entspricht nahezu dem Mindestmaß an Abstraktion, das Sie über dem Assemblycode bereitstellen können, da die C-Konstrukte direkt auf Konstrukte auf Maschinenebene abgebildet werden.

Aus diesem und mehreren anderen Gründen ist es sehr einfach, einen C-Compiler auf einem neuen Chip zu implementieren. Ein Großteil der Arbeit ist bereits erledigt, die Komplexität ist vergleichsweise gering oder es liegen Fehler vor, und mit der Steuerung auf niedriger Ebene können Sie die Schwächen Ihrer Hardware relativ einfach bewältigen.

C ++ kann (eigentlich war) als Quellcode-Übersetzungsebene über C implementiert werden, was bedeutet, dass Sie C ++ (oder zumindest eine Version davon) kostenlos mit Ihrem C-Compiler erhalten.

Mit C und C ++ haben Sie so ziemlich alles, was Sie für Ihren neuen Chip benötigen, und sind somit der logische Ausgangspunkt.

tylerl
quelle
3

Einige Gründe haben die anderen nicht erwähnt:

  • Problemraum: C eignet sich für kleine und einfache Systeme. Wenn Sie nur auf externe Signale reagieren und ein paar Zahlen verschieben, funktioniert C recht gut (keine komplexen Datenstrukturen, kein Malloc, keine komplexe Fehlerbehandlung).

  • Produktionsvolumen: Wenn Sie große Produktionsmengen haben, ist es wirtschaftlich sinnvoll, an jeder Hardwareeinheit zu sparen und mehr für Programmierer auszugeben, da die Programmierung einmalig ist.

sternenblau
quelle
2

Ich denke, das liegt daran, dass C / C ++ die niedrigsten und höchsten Sprachen sind.

Amit Tomar
quelle
1

Tatsächlich ist C für kleine eingebettete Systeme viel beliebter als C ++. Und der Grund dafür ist derselbe wie, dass andere Sprachen nicht verwendet werden. C ++ benötigt eine Laufzeitumgebung, es sei denn, Sie geben die meisten Funktionen preis, die es von C unterscheiden.

Abgesehen von Assembly ist C die einzige mir bekannte Sprache, die in systemeigenen Code kompiliert und für die eine Laufzeit optional ist. Dies garantiert den geringsten Platzbedarf und die schnellste Ausführungszeit in einer eingeschränkten Umgebung (außer wenn Sie Assembly verwenden).

Auf der anderen Seite würde ich in mittleren und großen eingebetteten Systemen (was mehr Speicher und Takt bedeutet, größere Wortgröße) nicht sagen, dass C (oder C ++) so weit verbreitet ist. Ich habe Systeme gesehen, die Python, Forth ... sogar Java unterstützen.

Aber natürlich haben Sie fast immer die Möglichkeit, C / C ++ zu verwenden, natürlich aus den gleichen Gründen, die ich oben erwähnt habe. Und wenn Sie die Option haben und jemand sind, der bereits mit C für Small-Embedded vertraut ist, warum sollten Sie dann eine andere Sprache wählen?

fceconel
quelle
4
C ++ kann viel Overhead verursachen, aber der vollständig kompatible C ++ - Compiler, den ich für MSP430 verwendet habe, erforderte keine Laufzeit, C ++ kompilierte in nativen Code. Es tut mir leid, anderen zu sagen, ist ein schlechter Dienst und ich habe Sie abgelehnt. Sie können das Downvote entfernen, indem Sie Referenzen angeben, die mich davon überzeugen, dass ich falsch bin (was schwierig sein wird, ich habe die Assembly-Liste von kompiliertem C ++ für meine Projekte gelesen, um sicherzustellen, dass es effizient kompiliert wird), oder Sie können Ihre Antwort löschen, die entfernt wird die Auswirkungen auf Ihren Ruf (obwohl Sie zu diesem Zeitpunkt +8 Netto-
Mitarbeiter
3
Ich stimme Kortuk voll zu. Einige Teile von C ++ erfordern umfangreiche Laufzeitunterstützung, aber der Teil, der dies nicht tut, ist immer noch ein viel besseres C (und vollständig OO). Die Beschränkung auf diese Teilmenge wird von einigen Compiler- und Linker-Switches leicht erzwungen. In einigen Teilen (zum Beispiel dem gefürchteten printf) hat C ++ zumindest das Sprachpotential, eine wesentlich geringere Laufzeitunterstützung zu erfordern (wenn nur std :: cout für kleine Systeme implementiert wäre ...)
Wouter van Ooijen
1
@Kortuk, tut mir leid, dass ich dort nicht klar bin, aber als ich sagte, dass "C die einzige Sprache ist, die ..." nicht bedeutete, dass C ++ beides nicht hat, meinte ich, dass C die Kombination der beiden hat und C ++ hat eine davon. Mein Schwerpunkt lag auf dem Laufzeitbereich. Ich sage auch nicht, dass es völlig unmöglich ist, C ++ ohne Laufzeit zu verwenden, aber es ist ziemlich ungewöhnlich. Ich kann nicht sehen, wie Sie Dinge wie Ausnahmebehandlung und RTTI zum Beispiel ohne Laufzeit haben können, und das sind ziemlich wichtige Funktionen. Ich entschuldige mich jedoch dafür, dass die Art und Weise, wie ich dies ausdrückte, zu möglichen Missverständnissen geführt hat.
Fceconel
@fceconel, ich habe C ++ noch nie in einer Laufzeitumgebung verwendet, und wir diskutieren hier eingebettete Systeme. Ich habe noch nie eine Laufzeit für meine Mikrocontroller verwendet. Diese Frage ist etwas anders, als Sie sie vielleicht gelesen haben. Sie fragt, warum C / C ++ die einzigen vorherrschenden Optionen sind und nicht, warum C anstelle von C ++. Ich gebe zu, mit etwas so Einfachem, wie es in meinem Mikro niemals vorkommen wird. Ich habe ein paar freie Pins, keinen Bildschirm.
Kortuk