mikrocontroller.net

Forum: Compiler & IDEs Informationen zu C vs C++ / aka Futter für die Diskussion


Autor: Wilhelm M. (wimalopaan)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Hallo zusammen!

der Titel sagt es schon: es geht um das (alte) Thema: C vs C++ für 
eingebettete Systeme / MCUs.

Ich mache hier einfach mal den Versuch, in diesem Thread eine Sammlung 
von wertvollen Links zu dem Thema zusammen zu stellen. In unser allem 
Interesse sollten wir in diesem Thread hier nicht diskutieren, sondern 
nur Informationen sammeln. Wenn jemand zu einem Aspekt diskutieren 
möchte, sollte er dafür einen neuen Thread eröffnen.

Gut, dann fange ich mal an mit ein paar Links, die in meinen bookmarks 
enthalten sind (die Reihenfolge ist keine Wertung):

http://www.springer.com/us/book/9783642429156

http://aristeia.com/TalkNotes/C++_Embedded_Deutsch.pdf

http://www.cprogramming.com/c++11/c++11-compile-ti...

http://codedive.pl/pl/speaker/speaker/scott-meyers...

http://codedive.pl/pl/speaker/speaker/bartosz-szur...

https://www.youtube.com/watch?v=k8sRQMx2qUw

https://www.youtube.com/watch?v=AKAYc9ZFBhk

https://www.youtube.com/watch?v=FnGCDLhaxKU

https://www.gitbook.com/book/arobenko/bare_metal_cpp/details

http://files.meetup.com/10475902/TypeSystemIsYourF...

http://www.embedded.com/design/programming-languag...

Zugegeben: ich von von der C++-Fraktion ;-)

Request for more!

Autor: Carl Drexler (jcw2)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
More:
http://sbrc2010.inf.ufrgs.br/anais/data/pdf/wtr/st...

Dan Saks, CppCon2016: "if you argue, you loose!"
-> keiner der's nicht schon weiß, wird es glauben wollen.

Autor: Johannes S. (jojos)
Datum:

Bewertung
-4 lesenswert
nicht lesenswert
wer soll denn das alles lesen? C++: nicht lange diskutieren, just do it 
und fertig.

Autor: Verschwender (Gast)
Datum:

Bewertung
-6 lesenswert
nicht lesenswert
Johannes S. schrieb:
> C++: nicht lange diskutieren, just
> do it
> und fertig.

Nach zwei Jahren C++ Studium und mit dickem MC zur Hand :)

Autor: A. K. (prx)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Verschwender schrieb:
> Nach zwei Jahren C++ Studium und mit dickem MC zur Hand :)

Zählt ein ATmega32 als "dick"? Ein RTOS ist auch noch mit im Spiel.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Apropos "dick" und C++:

Jason Turner "Rich Code For Tiny Machines: A Simple Commodore 64 Game In 
C++17"
https://www.youtube.com/watch?v=zBkNBP00wJE

BG, Tom

Autor: Wilhelm M. (wimalopaan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Christopher Johnson (christopher_j23)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin auf eine recht interessante Bibliothek bzw. Framework für die 
Bare-Metal-Programmierung mit C++ gestoßen:
http://kvasir.io

Auf der Seite gibt es den Link zum Github-Repo sowie noch ein paar 
Youtube-Videos in denen das Framework vorgestellt wird.

Der Ansatz ist ähnlich dem was Wilhelm für AVR hier schonmal vorgestellt 
hatte, nutzt also vor allem Sprachmittel aus C++11 wie z.B. constexpr. 
"Gefüttert" wird das Framework direkt mit Registerdefinitionen aus den 
SVD-Dateien der Hersteller.

Ich persönlich würde mich (derzeit jedenfalls) zwar definitiv in der 
C-Ecke verorten aber vielleicht findet ja der ein oder andere seinen 
Gefallen daran. Ich finde es jedenfalls einen sehr interessanten Ansatz 
und bin gerade dabei mal ein bisschen damit herumzuspielen.

Autor: Vincent Hamp (vinci)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
https://www.youtube.com/watch?v=PJwd4JLYJJY&index=...

Ben Deane is ein Genie... Wahnsinn.

Autor: Wilhelm M. (wimalopaan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Empfehlen möchte ich auch noch:

https://www.youtube.com/watch?v=n4ie7tPMXOQ

Ich nutze constraints in g++ schon seit geraumer Zeit und möchte diese 
feature nicht mehr missen: wesentlich(!) einfacher, leichter zu lesen 
und zu schreiben als SFINAE. Und: wir werden es definitiv in C++20 
offiziell haben (ggf. mit minimalen Änderungen) ...

Autor: Wilhelm M. (wimalopaan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und noch einer:

https://www.youtube.com/watch?v=PFdWqa68LmA

Wobei man beachten sollte, dass die SFINAE Technik, die er hier 
anwendet, eigentlich schon wieder veraltet ist -> s.a. concepts. 
Trotzdem ist der Vortrag grundsätzlich interessant.

Autor: Vincent Hamp (vinci)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal was ganz Spezielles an den Teil der ASM/C Fraktion, der glaubt 
er sei schlauer als der Compiler:

https://www.youtube.com/watch?v=bSkpMdDe4g4

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Vincent H. schrieb:
> der ASM/C Fraktion

Es geht halt nichts über ein gut gepflegtes Vorurteil – oder was soll
diese Bezeichnung sonst sein?

Autor: Raoul De Souza (raoul_d219)
Datum:

Bewertung
3 lesenswert
nicht lesenswert
Jörg W. schrieb:
> Vincent H. schrieb:
>> der ASM/C Fraktion
>
> Es geht halt nichts über ein gut gepflegtes Vorurteil – oder was soll
> diese Bezeichnung sonst sein?

Bitte keine persönlichen Abwertungen in diesem Thread: weder in die eine 
noch in die andere Richtung. Dafür gibt es schon genug andere ...
Der Admin mag gerne den letzten Beitrag ohne einen Link löschen.

: Bearbeitet durch User
Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Raoul D. schrieb:
> Dafür gibt es schon genug andere

Sehe ich auch so, daher meine Kritik an Vincents unsinnigem Vorurteil.

Autor: Wilhelm M. (wimalopaan)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Jörg W. schrieb:
> Raoul D. schrieb:
>> Dafür gibt es schon genug andere
>
> Sehe ich auch so, daher meine Kritik an Vincents unsinnigem Vorurteil.

Wer diese etwas augenzwinkernde Bemerkung als negatives Vorurteil 
wertet, fühlt sich wohl selbst ertappt. Also bitte Herr Moderator: 
löschen (inkl. dieses Posts)

Beitrag #5179535 wurde von einem Moderator gelöscht.
Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Wilhelm M. schrieb:
> augenzwinkernde Bemerkung

Augenzwinkernd?  Sorry, ich sehe da kein Augenzwinkern, sondern
höchstens Evangelismus rausgucken aus so einer Bemerkung.  Das ist
doch wie ein Mercedes-Fahrer, der LKW- und Fahrradfahrer in gleichem
Atemzug nennt, weil sie nicht in sein Weltbild passen, zumal sie
suggeriert, dass jemand nicht sowohl Fahrrad, LKW als auch Mercedes
fahren könnte.

> fühlt sich wohl selbst ertappt

Inwiefern?

Ob ich C++ mag, nicht mag, benutze oder nicht benutze hat damit herzlich
wenig zu tun.  (Wenn du hin und wieder mehr Beiträge von mir lesen
würdest, wüsstest du außerdem die Antwort darauf. ;-)

: Bearbeitet durch Moderator
Autor: temp (Gast)
Datum:

Bewertung
-3 lesenswert
nicht lesenswert
Christopher J. schrieb:
> Bin auf eine recht interessante Bibliothek bzw. Framework für die
> Bare-Metal-Programmierung mit C++ gestoßen:
> http://kvasir.io

Wenn man sich die Beispiele in dieser Lib ansieht kann man den Eindruck 
kriegen hier mischen die Monitorhersteller mit. Jedenfalls braucht man 
für diesen Programmiersteil wohl einen 2m 8K Minitor um ein wenig Code 
auf den  Schirm zusammenhängend darzustellen...
Mag sein, dass C++ mit den ganzen neuen Erwiterungen eine tolle Sprache 
ist, aber verständlicher ist der Code auch nicht als Spagettiecode in C 
von vor 20 Jahren. Ich programmiere auch in C++ vermisse aber nichts was 
in C++11 oder C++17 hinzu gekommen ist.

Autor: Nop (Gast)
Datum:

Bewertung
6 lesenswert
nicht lesenswert
Mal was Generelles, die YT-Dokus sind eine Unart. Wir haben 
Schriftlichkeit erfunden, und das zu lesen ginge weitaus schneller, als 
einem sprechenden Kopf zuhören zu müssen. Wenn es dem sprechenden Kopf 
aber zu unwichtig war, es hinzuschreiben, sondern es primär um seine 
Selbstvermarktung ging, ist das für den Zuschauer auch verzichtbar.

Davon ab sind noch mehr, noch viel mehr und NOCH VIEL MEHR supertolle 
C++-Features generell absolut kein Überzeugungsmittel (im Gegenteil) für 
diejenigen, der C++ vor allem wegen des außer Kontrolle geratenen 
Sprachumfanges und den sich daraus ergebenden Folgen ablehnt. Daran 
ändern auch überflüssige Videodokus nichts.

Autor: jz23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
temp schrieb:
> Ich programmiere auch in C++ vermisse aber nichts was
> in C++11 oder C++17 hinzu gekommen ist.

Schau dir mal range-based-for, auto und constexpr an. Das sind sehr sehr 
praktische Änderungen.

Autor: Vincent Hamp (vinci)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Nop schrieb:
> Mal was Generelles, die YT-Dokus sind eine Unart. Wir haben
> Schriftlichkeit erfunden, und das zu lesen ginge weitaus schneller, als
> einem sprechenden Kopf zuhören zu müssen. Wenn es dem sprechenden Kopf
> aber zu unwichtig war, es hinzuschreiben, sondern es primär um seine
> Selbstvermarktung ging, ist das für den Zuschauer auch verzichtbar.
>
> Davon ab sind noch mehr, noch viel mehr und NOCH VIEL MEHR supertolle
> C++-Features generell absolut kein Überzeugungsmittel (im Gegenteil) für
> diejenigen, der C++ vor allem wegen des außer Kontrolle geratenen
> Sprachumfanges und den sich daraus ergebenden Folgen ablehnt. Daran
> ändern auch überflüssige Videodokus nichts.


Bin nicht sicher ob jemand der "Dokus" nicht von einer Konferenz 
unterscheiden kann überhaupt der "Schriftlichkeit" mächtig ist?

Aber ich gebs eh schon auf. Statt auf irgendeinen der Talks einzugehn 
postet man halt lieber Schwachfug, damit man sich nur ja nicht mit der 
Materie beschäftigen muss.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Vincent H. schrieb:
> Bin nicht sicher ob jemand der "Dokus" nicht von einer Konferenz
> unterscheiden kann überhaupt der "Schriftlichkeit" mächtig ist?

Wenn allerdings das erste, was auf einer Webseite zu sehen ist, ein
paar Konferenzvideos sind, eine Doku weit und breit nicht zu erkennen
ist, dann macht das schon stutzig.

Ich würde eine Webseite zum Thema jedenfalls so aufbauen, dass die
Leute die Doku finden (bzw. ich würde nicht nur, sondern ich habe es
in den Projekten, die ich betreue, auch so getan).

Gerade nochmal in deren Git-Repo nachgesehen: Tutorial "coming soon",
doc/ Verzeichnis besteht derzeit aus einigen Zeilen "lorem ipsum".

Autor: Wilhelm M. (wimalopaan)
Datum:

Bewertung
7 lesenswert
nicht lesenswert
Leute, was soll das?

Ich hatte diesen Thread eröffnet, um Lesern, die offen für neue Ideen 
sind, eine Sammlung von Informationsquellen zu bieten, damit diese sich 
nicht alles lebst ergooglen müssen. Die Intention war doch klar, oder? 
Und wer einen Aspekt diskutieren möchte, soll bitte dafür einen neuen 
Thread eröffnen, damit die Ursprungsquellen hier in der Flut von 
Beiträgen nicht untergehen.

Leider passiert hier aber gerade das, was leider in diesem Forum zu oft 
passiert: ohne etwas zum Thema beizutragen verteidigen einige mit 
offenem Messer ihre eigene Scholle, wobei weder der gute Wille zu 
erkennen ist, ggf. über die Fehler anderer hinweg zu sehen noch sich 
tatsächlich fundiert mit neuen Aspekten auseinander zu setzen oder 
anderen einfach mal zuzuhören, ohne gleich mit schwerem Geschütz zu 
antworten.

Wer über die Komplexität der Sprache C++ diskutieren möchte, kann das 
gerne ja in einem anderen Thread machen. Aber nicht hier. Wer neue 
Features grundsätzlich nicht ansehen und das gerne für alle begründen 
möchte, kann das auch in einem anderen Thread machen. Aber nicht hier.

Dieser Thread soll "Futter für die Diskussion" liefern, soll aber nicht 
Ort der Diskussion selbst sein. Und wer gleich bei einer flapsigen 
Bemerkung hoch geht wie ein HB-Männchen, hat sich in meinen Augen selbst 
disqualifiziert.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Wilhelm M. schrieb:
> Ich hatte diesen Thread eröffnet, um Lesern, die offen für neue Ideen
> sind, eine Sammlung von Informationsquellen zu bieten, damit diese sich
> nicht alles lebst ergooglen müssen.

Das ist ja auch völlig OK (und du hast selbst viele Links beigetragen).

Wenn aber jemand einen Link zu einem möglicherweise interessanten
Projekt (wie kvasir.io) postet, dieses Projekt aber bislang außer ein
paar Konferenz-Vorträgen offensichtlich keinerlei Dokumentation hat,
dann sollte man das hier ebenfalls erwähnen dürfen, denn es macht es
potenziellen Nutzern nicht gerade leichter, die Nutzung in Erwägung
zu ziehen.

Autor: Rolf Magnus (rmagnus)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
temp schrieb:
> Wenn man sich die Beispiele in dieser Lib ansieht kann man den Eindruck
> kriegen hier mischen die Monitorhersteller mit. Jedenfalls braucht man
> für diesen Programmiersteil wohl einen 2m 8K Minitor um ein wenig Code
> auf den  Schirm zusammenhängend darzustellen...
> Mag sein, dass C++ mit den ganzen neuen Erwiterungen eine tolle Sprache
> ist, aber verständlicher ist der Code auch nicht als Spagettiecode in C
> von vor 20 Jahren. Ich programmiere auch in C++ vermisse aber nichts was
> in C++11 oder C++17 hinzu gekommen ist.

Gerade die Übersichtlichkeit und Größe des Code wurde durch die neueren 
C++-Versionen erheblich verbessert:
for (std::list<std::string>::const_iterator it = mylist.begin(); it != mylist.end(); ++it)
{
    std::cout << *it << '\n';
}
vs
for (const auto& elem : mylist)
{
    std::cout << elem << '\n';
}

: Bearbeitet durch User
Autor: H. S. (Gast)
Datum:

Bewertung
-3 lesenswert
nicht lesenswert
Wilhelm M. schrieb:
> Wer über die Komplexität der Sprache C++ diskutieren möchte, k

Die Diskussionen sind dort die gleichen - Auseinandersetzungen zwischen 
Ideologen. Hier ist ja schon gemütlicher. Die Platformen sind ja auch 
kleiner. Vielleicht sind Microcontrollerentwickler auch irgendwie 
praktischer, als die Unix-BSD-CPP-Franktion, mit der Ich sonst so zu tun 
habe :D

Autor: Wilhelm M. (wimalopaan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Dumdi Dum (dumdidum)
Datum:

Bewertung
-5 lesenswert
nicht lesenswert
Rolf M. schrieb:
> for (const auto& elem : mylist)
> {
>     std::cout << elem << '\n';
> }

Ja, das ist besser. Hier gleich noch die Frage, ich brauch neben den 
Element noch den 'Index'. In Python loest man das mit enumerate. Was ist 
da der moderne C++ Weg? (Man koennt natuerlich ausserhalb der Schleife 
eine Variable deklarieren, null setzen und in der Schleife hochzaehlen, 
waere das die präferierte Lösung?)

Autor: Wilhelm M. (wimalopaan)
Datum:

Bewertung
3 lesenswert
nicht lesenswert
Dumdi D. schrieb:
> Rolf M. schrieb:
>> for (const auto& elem : mylist)
>> {
>>     std::cout << elem << '\n';
>> }
>
> Ja, das ist besser. Hier gleich noch die Frage, ich brauch neben den
> Element noch den 'Index'. In Python loest man das mit enumerate. Was ist
> da der moderne C++ Weg? (Man koennt natuerlich ausserhalb der Schleife
> eine Variable deklarieren, null setzen und in der Schleife hochzaehlen,
> waere das die präferierte Lösung?)

Könntet Ihr bitte die Diskussion zu einem Detailthema in einen eigenen 
Thread packen (s.o. erster Beitrag). Damit man den eigentlichen Inhalt 
in diesem Thread nicht aus den Augen verliert.

Autor: dumdidum (nicht angemeldet) (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Scott Meyers: Youtube-Video "Things that Matter - Scott Meyers | DConf2017"
Wer nicht den ganzen Talk sehen möchte, ich finde 41:00 bis 43:00 
erklärt einige Diskussionen.

Autor: mh (Gast)
Datum:

Bewertung
-3 lesenswert
nicht lesenswert
dumdidum (nicht angemeldet) schrieb:
> z

dumdidum (nicht angemeldet) schrieb:
> Scott Meyers: Youtube-Video "Things that Matter - Scott Meyers |
> DConf2017"
> Wer nicht den ganzen Talk sehen möchte, ich finde 41:00 bis 43:00
> erklärt einige Diskussionen.

Ohne nochmal reingeguckt zu haben (hab das Video vor einigen Wochen 
gesehen) worum es in dem Abschnitt genau geht: Es ist erwähnenswert, 
dass es sich um DConf und nicht um CppCon handelt.

Autor: Mikro 77 (mikro77)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Guideline Support Library

https://github.com/Microsoft/GSL

Ich mag gsl::not_null.

dumdidum (nicht angemeldet) schrieb:
> Youtube-Video "Things that Matter - Scott Meyers DConf2017"

"Why is the C++ community having so much trouble?"
...
"Frankly, the standardization committee doesn't really care".

Und das von Scott Meyers! :-)

Beitrag #5191855 wurde von einem Moderator gelöscht.
Beitrag #5192302 wurde vom Autor gelöscht.
Beitrag #5192455 wurde von einem Moderator gelöscht.
Beitrag #5192508 wurde von einem Moderator gelöscht.
Autor: Wilhelm M. (wimalopaan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Wilhelm M. (wimalopaan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Type Punning wird ja hier im Forum auch oft diskutiert, dabei werden nur 
allzu oft die Unterschiede zwischen C und C++ ausser Acht gelassen (s.a. 
unions):

Youtube-Video "CppCon 2017: Scott Schurr “Type Punning in C++17: Avoiding Pun-defined Behavior”"

Autor: Vincent Hamp (vinci)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Folgender Talk von Vinnie Falco zeigt wunderbar wie mächtig gutes Design 
in modernem C++ sein kann. Das ist insofern erfrischend, weil sich ein 
Großteil der Talks halt doch meist auf spezifische und sehr theoretische 
Themen bezieht und weniger auf "Problem X -> Lösung Y".

Youtube-Video "CppCon 2017: Vinnie Falco “Make Classes Great Again! (Using Concepts for Customization Points)”"

Autor: Sheeva Plug (sheevaplug)
Datum:

Bewertung
-4 lesenswert
nicht lesenswert
Carl D. schrieb:
> More:
> http://sbrc2010.inf.ufrgs.br/anais/data/pdf/wtr/st...
>
> Dan Saks, CppCon2016: "if you argue, you loose!"
> -> keiner der's nicht schon weiß, wird es glauben wollen.

...wobei das Englische "to argue" nicht im Sinne von "argumentieren" 
oder "diskutieren" gemeint ist, sondern vielmehr "streiten" meint. Das 
ist ein kleiner, aber feiner Unterschied, der häufig zu 
Mißverständnissen führt.

Autor: Carl Drexler (jcw2)
Datum:

Bewertung
-4 lesenswert
nicht lesenswert
Sheeva P. schrieb:
> Carl D. schrieb:
>> More:
>> http://sbrc2010.inf.ufrgs.br/anais/data/pdf/wtr/st...
>>
>> Dan Saks, CppCon2016: "if you argue, you loose!"
>> -> keiner der's nicht schon weiß, wird es glauben wollen.
>
> ...wobei das Englische "to argue" nicht im Sinne von "argumentieren"
> oder "diskutieren" gemeint ist, sondern vielmehr "streiten" meint. Das
> ist ein kleiner, aber feiner Unterschied, der häufig zu
> Mißverständnissen führt.

Naja, hier ist jeder Versuch einer sachlichen Diskussion in der ein 
großes C und zwei Plusszeichen vorkommen, spätesten nach Auftauchen der 
"x-beliebig"-Hasser, ein Streit.

Autor: Sheeva Plug (sheevaplug)
Datum:

Bewertung
-5 lesenswert
nicht lesenswert
Carl D. schrieb:
>>> Dan Saks, CppCon2016: "if you argue, you loose!"
>>> -> keiner der's nicht schon weiß, wird es glauben wollen.
>>
>> ...wobei das Englische "to argue" nicht im Sinne von "argumentieren"
>> oder "diskutieren" gemeint ist, sondern vielmehr "streiten" meint. Das
>> ist ein kleiner, aber feiner Unterschied, der häufig zu
>> Mißverständnissen führt.
>
> Naja, hier ist jeder Versuch einer sachlichen Diskussion in der ein
> großes C und zwei Plusszeichen vorkommen, spätesten nach Auftauchen der
> "x-beliebig"-Hasser, ein Streit.

Darauf hat sich Dan bei seiner Aussage aber nicht bezogen, würde ich 
vermuten.

Autor: Vincent Hamp (vinci)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alfred Bratterud
“Delegate this! Designing with delegates in modern C++

Youtube-Video "CppCon 2017: Alfred Bratterud “Delegate this! Designing with delegates in modern C++”"

Recht langweiliger Talk über eine sehr nette Klasse. Die im Talk 
angesprochene Implementierung findet man im IncludeOS Repo hier:
https://github.com/hioa-cs/IncludeOS/blob/master/a...

Im Grunde verhält sich delegate wie std::function ohne jedoch jemals 
Speicher anzufordern. Damit erspart man sich unschöne Überraschungen 
wenn man zum Beispiel größere Lambda Objekte in einem function Objekt 
ablegen will, die größer sind als der von vornherein reservierte 
Speicherplatz.
std::array<size_t, 3> a1 { 1, 2, 3};

auto big_lambda = [=] () -> int
{
  trace_printf("big_lambda: ");
  return a1[0] + a1[1] + a1[2];
};

// allocates memory (@GCC 7.2 for a cortex M4 platform)
std::function<int()> stdf_big_lambda { big_lambda };


Delegate besitzt war auch eine vorab definierte Größe, die ist aber ein 
Template Parameter und lässt sich somit justieren. Passt das gewünschte 
Objekt nicht hinein, gibts gleich einen Compilezeit Fehler.
// use just enough memory to store "big_lambda"
auto del_big_lambda { delegate<int(), spec::inplace_triv, sizeof(big_lambda)>(big_lambda) };


Ebenfalls erwähnenswert ist, dass delegate 3x verschiedene 
Konfigurationen besitzt. Dies ist am 2. Template Parameter ersichtlich. 
Je nach benötigtem Verhalten lässt sich delegate als
- spec::pure (reiner function pointer)
- spec::inplace_triv (function object mit definierter Größe)
- spec::inplace (function object mit definierter Größe, kopierbar, 
Destruktor Unterstützung)
anlegen.


Nach meinen Benchmarks (GCC 7.2, -O2, Cortex M4) ist delegate für freie 
Funktionen etwa 3.5x, für Lambdas 1.75x schneller.


/edit
Die Default Größe von Delegate ist mit "sizeof(size_t) * 4" für die in 
diesem Forum am häufigsten verwendeten Platformen natürlich etwas groß 
gewählt... also aufpassen hier.

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.