2013-04-29 12 views
5

Ich lerne gerade, mein Arduino zu programmieren, aber ich habe einen ziemlich soliden Hintergrund in C++, was bedeutet, dass ich sehr enttäuscht war, dass ich die C++ Standardbibliothek nicht verwenden konnte. Ich habe mich umgesehen und versucht, genau herauszufinden, warum das so ist, und bis jetzt ist die einzige plausible Erklärung, dass AVR-GCC nicht dem C++ - Sprachstandard entspricht.C++ Standardkonformität in AVR-GCC

Jetzt weiß ich, dass die meisten Compiler kleine Abweichungen vom Standard haben, aber ich denke, dass es etwas wirklich Großes geben muss, das AVR-GCC mit GCC, Clang oder irgendeinem der anderen Compiler trennt, die ich benutzt habe Vor. Wie ein sehr wichtiges Feature, das völlig fehlt oder so. Es muss einen guten Grund dafür geben, warum ich zum Beispiel std::vector nicht verwenden kann. Es ist einfach zu nützlich, um ohne Grund aufzuhören.

Also was ist das? Was ist das riesige Loch im AVR-GCC-Dialekt, das die C++ - Standardbibliothek auf einem Arduino unbrauchbar macht? Und ich frage das nicht nur aus Neugier, denn wenn es in der Sprache riesige Lücken gibt, dann muss ich etwas über sie wissen, bevor ich in ein undefiniertes Verhalten stolpere, das ich nicht erwartet habe.

+0

Das ist das C++, mit all seinen Nicht-Kompatibilitäts-, Inkompatibilitäts- und allgemeinen Hilfsfunktionen in embedded world. Das ist sehr bedauerlich, ich weiß. Wie 13 Jahre in das neue Jahrhundert fühlt es sich manchmal so an, als wären wir noch in den Neunzigern. –

+0

Es scheint mir, dass die meisten Embedded-C++ - Plattformen nicht mit der STDLIB ausgeliefert werden, weil niemand sie wirklich jemals verwenden würde – PlasmaHH

+1

@PlasmaHH: Teilweise, aber das klingt eher wie eine Entschuldigung. –

Antwort

-3

AVR-GCC ist clearly the work of hobbyists. Im Grunde ist niemand bereit, die harte Arbeit einer Standardbibliotheksimplementierung in Angriff zu nehmen. Das Schreiben einer Standardbibliothek ist keine einfache Aufgabe für Desktop-Plattformen, und die begrenzten Fähigkeiten des Arduino machen es nur schwieriger.

+1

Können Sie erklären, warum 'PROGMEM'" Hobbyisten "bedeutet? – angelatlarge

+1

@angelatlarge: Gute Compiler brauchen kein Schlüsselwort. Außerdem werden gute Compiler-Schreibvorgänge nicht mit "es gibt keine feste Regel darüber, wo' PROGMEM' gehen sollte "enden. Die Syntax von C und C++ kann einige Unklarheiten, aber nicht in diesem Maßstab. Die Syntax ist ** nicht ** unscharf. – MSalters

+3

Ich bin immer noch verwirrt von dieser Behauptung: ist etwas wie "flüchtige" Beweise für schlechte Compiler-Design? Was ist mit "registrieren"? Angesichts der Tatsache, dass AVR ein Prozessor der Harvard-Architektur mit sehr wenig RAM ist, aber die Fähigkeit hat, Daten im ROM zu speichern (mit verschiedenen Kosten verbunden), bin ich mir nicht sicher, ob ich über schnelle Regeln und Fuzzy-Syntax spreche. – angelatlarge