Buch: Realtime C++

Beitrag #6437626 wurde von einem Moderator gelöscht.
Beitrag #6437629 wurde von einem Moderator gelöscht.
Beitrag #6437630 wurde von einem Moderator gelöscht.
Beitrag #6437632 wurde von einem Moderator gelöscht.
Beitrag #6437633 wurde von einem Moderator gelöscht.
Beitrag #6437634 wurde von einem Moderator gelöscht.
Beitrag #6437635 wurde von einem Moderator gelöscht.
#6437638
Lesenswert?

Arduino Fanboy D. schrieb:
> A. B. schrieb:
>> Unter welcher Umgebung compilierst du das?
> In dem Punkt ist Wilhelm steif.
> Von seinem Elfenbeintürmchen aus, interessiert ihn das Fußvolk schlicht
> nicht.

Für etwa die AVRs mit:
1
avr-gcc (GCC) 11.0.0 20200818 (experimental)
2
Copyright (C) 2020 Free Software Foundation, Inc.
3
This is free software; see the source for copying conditions.  There is NO
4
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Allerdings gehört da natürlich eine libstdc++ dazu. Diese existiert 
nicht, und ich kann die Sourcen zu meiner Implementierung nicht 
öffentlich machen.

Soweit, so schlecht.
Doch, Leute, worum geht es hier? Erstmal um std::array<>. Dafür finden 
sich zahlreiche Implementierungen im Netz oder man schaut einfach in die 
libstdc++ des gcc.
Und so ist das mit den anderen Sachen auch. Da wäre meine 
Implementierung auch nicht mehr von Hilfe.

Allerdings lernt man doch generische Programmierung, Erstellen von 
templates und TMP nicht auf einem Arduino! Das macht man ganz normal auf 
dem PC.

Daher:
1
gcc (GCC) 11.0.0 20201009 (experimental)
2
Copyright (C) 2020 Free Software Foundation, Inc.
3
Dies ist freie Software; die Kopierbedingungen stehen in den Quellen. Es
4
gibt KEINE Garantie; auch nicht für MARKTGÄNGIGKEIT oder FÜR SPEZIELLE ZWECKE.

Und mit etwas Kreativität kann man das obige Beispiel einfach auf dem PC 
oder im Godbolt-CE laufen lassen:
1
#include <cstdint>
2
#include <array>
3
#include <algorithm>
4
#include <numeric>
5

6
namespace UC {
7
    volatile uint8_t portb;
8
}
9

10
#define PORTB UC::portb
11

12
template<size_t N>
13
using Iterations = std::integral_constant<size_t, N>;
14

15
template<typename> struct StaticFor;
16

17
template<size_t N>
18
struct StaticFor<std::integral_constant<size_t, N>> {
19
    static inline constexpr void call(const auto f) {
20
        call_impl(std::make_index_sequence<N>{}, f);
21
    }
22
private:
23
    template<size_t... II>
24
    static inline constexpr void call_impl(std::index_sequence<II...>, const auto f) {
25
        (f(II), ...);
26
    }
27
};
28

29
template<size_t N = 20>
30
class Setup {
31
    using MeinArray = std::array<uint16_t, N>;
32
    using MeinContainer = MeinArray;
33
    static inline constexpr auto a = []{
34
        MeinArray data;
35
        std::iota(std::begin(data), std::end(data), 0);
36
        return data;
37
    }();
38
    static inline constexpr auto b = []{
39
        MeinArray data;
40
        std::iota(std::begin(data), std::end(data), 0);
41
        return data;
42
    }();
43
    static inline constexpr auto c = []{
44
        MeinContainer data;
45
        std::transform(std::begin(a), std::end(a), std::begin(b), std::begin(data), 
46
                       [](const auto ai, const auto bi){return ai + bi;});
47
        return data;
48
    }();
49
public:
50
    static inline void init() {
51
        StaticFor<Iterations<20>>::call([](const auto i){
52
            PORTB = c[i];
53
        });
54
//        [&]<auto... II>(std::index_sequence<II...>) {
55
//            ((PORTB = c[II]), ...);
56
//        }(std::make_index_sequence<std::size(c)>{});
57
    }
58
};
59

60
int main() {
61
    Setup<>::init();
62
}
Beitrag #6437641 wurde von einem Moderator gelöscht.
Beitrag #6437643 wurde von einem Moderator gelöscht.
Beitrag #6437644 wurde von einem Moderator gelöscht.
Beitrag #6437646 wurde von einem Moderator gelöscht.
Beitrag #6437666 wurde von einem Moderator gelöscht.
#6437771
Lesenswert?

Wilhelm M. schrieb:
...
> Für etwa die AVRs mit:
> avr-gcc (GCC) 11.0.0 20200818 (experimental)
...
> Allerdings gehört da natürlich eine libstdc++ dazu.

Es macht nicht viel Sinn einen Compiler Version zu verwenden die 
"realer" kein AVR Entwickler benutzt.
...

> Allerdings lernt man doch generische Programmierung, Erstellen von
> templates und TMP nicht auf einem Arduino! Das macht man ganz normal auf
> dem PC.

Aber nicht den "embedded" Teil und auch nicht was du auf einem 
"schwachbrüstigen" MC gefälligst unterlassen solltest

...
> namespace UC {
>     volatile uint8_t portb;
> }
>
> #define PORTB UC::portb
...
>//            ((PORTB = c[II]), ...);

Das ist "embedded" an dem ganzen ...
Der Rest ist doch nur Verwirrspiel und du überzeugst keinen damit ;-)
Beitrag #6437795 wurde von einem Moderator gelöscht.
Gast #6437804
Lesenswert?

Wilhelm M. schrieb:
> Das ist doch keine Herabwürdigung von Dir. Es ist lediglich die Aussage,
> dass man das nicht auf einem Arduino richtig lernen kann. Abgesehen von
> der fehlenden libstdc++ ist es doch viel zu umständlich und völlig
> spaßbefreit.

Ohne diese Ansage wüsste ich nicht, wann, wo und wie ich Spass haben 
kann.
Auch dafür danke ich Euch, wie für jeden anderen Krumen, welcher von 
eurem hochgelobten Tische herab fällt.

Im Ernst:
Einen AVR-GCC 10.1 baue ich mir ja noch und integriere diesen in die 
Arduino IDE,  um deiner Brotkrumenspur zu folgen...
Aber "experimental"?
Das hat dann keine Praxisrelevanz mehr.
Hier endet es!

Wilhelm M. schrieb:
> Allerdings gehört da natürlich eine libstdc++ dazu. Diese existiert
> nicht, und ich kann die Sourcen zu meiner Implementierung nicht
> öffentlich machen.
Was ich davon halte, .... das sage ich lieber nicht.
#6437807
Lesenswert?

Arduino Fanboy D. schrieb:
> Einen AVR-GCC 10.1 baue ich mir ja noch und integriere diesen in die
> Arduino IDE,  um deiner Brotkrumenspur zu folgen...
> Aber "experimental"?
> Das hat dann keine Praxisrelevanz mehr.
> Hier endet es!

Du kannst dafür genauso gut einen 10.1 nehmen. Es war die Frage, was ich 
verwende, und nicht, was man mindestens nehmen muss. Ein Blick in die 
Feature-List von cppreference lohnt sich.
Beitrag #6437972 wurde von einem Moderator gelöscht.
Beitrag #6437983 wurde von einem Moderator gelöscht.
Beitrag #6438238 wurde von einem Moderator gelöscht.
Beitrag #6438432 wurde von einem Moderator gelöscht.
#6438437
Lesenswert?

Hans-Georg L. schrieb:
> Es macht nicht viel Sinn einen Compiler Version zu verwenden die
> "realer" kein AVR Entwickler benutzt.

Das ist ein Scheinargument, denn es geht ja auch mit älteren Versionen 
vom g++.

Hans-Georg L. schrieb:
> Aber nicht den "embedded" Teil und auch nicht was du auf einem
> "schwachbrüstigen" MC gefälligst unterlassen solltest

Auch das ist hier kein Argument, denn es geht um ein konkretes Beispiel. 
Und all das kann man am PC oder im GB-CE sehr schön nachvollziehen. 
Warum sollte das nur für einen AVR möglich sein?
#6438441
Lesenswert?

Das Buch ist m.E. gar nicht schlecht, weist es doch in die richtige 
Richtung: compile-computation, type-reflection, meta-functions, ...

Der Nachteil des Buches liegt m.E. darin, das es zu früh erschienen ist. 
Denn ein ganz wichtiger Baustein darin fehlt, und dass sind "concepts". 
Die sind als "concepts-ts" zwar schon eine ganze Weile im g++ enthalten, 
jedoch in einer Form, die vor der Einbringung in C++20 nochmal verändert 
wurde (keine function-style concepts mehr, einige Erweiterungen). Dies 
ist zwar nicht besonders kritisch, weil es zwar die Syntax und wenige 
features betrifft, aber nicht das Grundkonzept fallen lässt. Und 
concepts sind ein wesentlicher Bestandteil der statischen Polymorphie. 
M.E. hätte der Autor darauf hinweisen müssen, denn bekannt und verfügbar 
waren concepts schon lange vor Erscheinen des Buches. Vielleicht kommt 
ja eine neue Auflage ;-)
Moderator #6438567
Lesenswert?

Wilhelm M. schrieb:
> Der Nachteil des Buches liegt m.E. darin, das es zu früh erschienen ist.

Das haben Bücher auch dem Computerbereich und anderen ständig
voranschreitenden Wissensgebieten so an sich. Wenn der Autor mit der
Veröffentlichung des Buchs auf den absolut finalen C++-Standard warten
würde, könnte er davon nur wenige Exemplare verkaufen, da zu diesem
Zeitpunkt kaum noch jemand C++ nutzen wird.

Wilhelm M. schrieb:
> M.E. hätte der Autor darauf hinweisen müssen, denn bekannt und verfügbar
> waren concepts schon lange vor Erscheinen des Buches.

Warum sollte der Autor seine Leser mit neuen Features belästigen, die
noch weit von der Verabschiedung durch das Normungsgremium entfernt sind
und damit noch auf recht wackeligen Beinen stehen? Die Concepts wurden
erstmalig im Juli 2017 in den C++20-Draft aufgenommen, da hat Kormanyos
sein Buch, das im Mai 2018 veröffentlicht wurde, vermutlich schon zu 98%
fertiggestellt. Technisch finalisiert wurde der C++20-Standard Anfang
dieses Jahres (das wäre IMHO der früheste Zeitpunkt gewesen, seine
Inhalte in Lehrbücher aufzunehmen). Offiziell veröffentlicht wird er
voraussichtlich erst Ende dieses Jahres.

Natürlich gibt es immer Leute (wie bspw. du), denen das alles nicht
schnell genug geht. Diese kaufen aber keine solchen Bücher, sondern
informieren sich in den Vorabveröffentlichungen des ISO-Gremiums.
Kormanyos wäre somit ziemlich dumm, wenn er sein Buch auf diese Leute
zuschneiden würde.

> Vielleicht kommt ja eine neue Auflage ;-)

Vielleicht. Aber auch diese wird für dich viel zu spät erscheinen, da
das ISO-Gremium schon längst an an C++23 arbeitet ;-)
Beitrag #6439072 wurde von einem Moderator gelöscht.
Beitrag #6439118 wurde von einem Moderator gelöscht.
Beitrag #6439119 wurde von einem Moderator gelöscht.
Beitrag #6439120 wurde von einem Moderator gelöscht.
Beitrag #6439122 wurde von einem Moderator gelöscht.
Beitrag #6439123 wurde von einem Moderator gelöscht.
Beitrag #6439124 wurde von einem Moderator gelöscht.
Beitrag #6439125 wurde von einem Moderator gelöscht.
Beitrag #6439126 wurde von einem Moderator gelöscht.
Beitrag #6439127 wurde von einem Moderator gelöscht.
Beitrag #6439128 wurde von einem Moderator gelöscht.
Beitrag #6439129 wurde von einem Moderator gelöscht.
Beitrag #6439130 wurde von einem Moderator gelöscht.
Beitrag #6439198 wurde von einem Moderator gelöscht.
Beitrag #6439199 wurde von einem Moderator gelöscht.
Beitrag #6439200 wurde von einem Moderator gelöscht.
Beitrag #6439429 wurde von einem Moderator gelöscht.
Beitrag #6439717 wurde von einem Moderator gelöscht.
Beitrag #6439718 wurde von einem Moderator gelöscht.
Beitrag #6439719 wurde von einem Moderator gelöscht.
Beitrag #6439720 wurde von einem Moderator gelöscht.
Beitrag #6439722 wurde von einem Moderator gelöscht.
Beitrag #6439723 wurde von einem Moderator gelöscht.
Beitrag #6439724 wurde von einem Moderator gelöscht.
Beitrag #6439725 wurde von einem Moderator gelöscht.
Beitrag #6439726 wurde von einem Moderator gelöscht.
Beitrag #6439727 wurde von einem Moderator gelöscht.
Beitrag #6439728 wurde von einem Moderator gelöscht.
Beitrag #6439729 wurde von einem Moderator gelöscht.
Beitrag #6440962 wurde von einem Moderator gelöscht.
Beitrag #6440963 wurde von einem Moderator gelöscht.
Beitrag #6440964 wurde von einem Moderator gelöscht.
Beitrag #6440965 wurde von einem Moderator gelöscht.
Beitrag #6440967 wurde von einem Moderator gelöscht.
Beitrag #6440969 wurde von einem Moderator gelöscht.
Beitrag #6440971 wurde von einem Moderator gelöscht.
Beitrag #6440972 wurde von einem Moderator gelöscht.
Beitrag #6440974 wurde von einem Moderator gelöscht.
Beitrag #6440976 wurde von einem Moderator gelöscht.
Beitrag #6440977 wurde von einem Moderator gelöscht.
Beitrag #6440978 wurde von einem Moderator gelöscht.
Beitrag #6440981 wurde von einem Moderator gelöscht.
Beitrag #6440983 wurde von einem Moderator gelöscht.
Beitrag #6440985 wurde von einem Moderator gelöscht.
Beitrag #6440986 wurde von einem Moderator gelöscht.
Beitrag #6441041 wurde von einem Moderator gelöscht.
Beitrag #6441042 wurde von einem Moderator gelöscht.
Beitrag #6441087 wurde von einem Moderator gelöscht.
Beitrag #6441117 wurde von einem Moderator gelöscht.
Beitrag #6441118 wurde von einem Moderator gelöscht.
Beitrag #6441119 wurde von einem Moderator gelöscht.
Beitrag #6441120 wurde von einem Moderator gelöscht.
Beitrag #6441121 wurde von einem Moderator gelöscht.
Beitrag #6441122 wurde von einem Moderator gelöscht.
Beitrag #6441124 wurde von einem Moderator gelöscht.
Beitrag #6441125 wurde von einem Moderator gelöscht.
Beitrag #6441126 wurde von einem Moderator gelöscht.
Beitrag #6441128 wurde von einem Moderator gelöscht.
Beitrag #6441129 wurde von einem Moderator gelöscht.
Beitrag #6441130 wurde von einem Moderator gelöscht.
Beitrag #6441133 wurde von einem Moderator gelöscht.
Beitrag #6441134 wurde von einem Moderator gelöscht.
Beitrag #6441135 wurde von einem Moderator gelöscht.
Beitrag #6441137 wurde von einem Moderator gelöscht.
Beitrag #6441139 wurde von einem Moderator gelöscht.
Beitrag #6441140 wurde von einem Moderator gelöscht.
Beitrag #6441141 wurde von einem Moderator gelöscht.
Beitrag #6441142 wurde von einem Moderator gelöscht.
Beitrag #6441144 wurde von einem Moderator gelöscht.
Beitrag #6441145 wurde von einem Moderator gelöscht.
Beitrag #6441146 wurde von einem Moderator gelöscht.
Beitrag #6441147 wurde von einem Moderator gelöscht.
Beitrag #6441148 wurde von einem Moderator gelöscht.
Beitrag #6441149 wurde von einem Moderator gelöscht.
Beitrag #6441150 wurde von einem Moderator gelöscht.
Beitrag #6441151 wurde von einem Moderator gelöscht.
Beitrag #6441152 wurde von einem Moderator gelöscht.
Beitrag #6441153 wurde von einem Moderator gelöscht.
Beitrag #6441155 wurde von einem Moderator gelöscht.
Beitrag #6441156 wurde von einem Moderator gelöscht.
Beitrag #6441157 wurde von einem Moderator gelöscht.
Beitrag #6441158 wurde von einem Moderator gelöscht.
Beitrag #6441160 wurde von einem Moderator gelöscht.
Beitrag #6441163 wurde von einem Moderator gelöscht.
Beitrag #6441453 wurde von einem Moderator gelöscht.
Beitrag #6441455 wurde von einem Moderator gelöscht.
Beitrag #6441457 wurde von einem Moderator gelöscht.
Beitrag #6441933 wurde von einem Moderator gelöscht.
Beitrag #6441934 wurde von einem Moderator gelöscht.
Beitrag #6441937 wurde von einem Moderator gelöscht.
Beitrag #6441939 wurde von einem Moderator gelöscht.
Beitrag #6442446 wurde von einem Moderator gelöscht.
Beitrag #6442489 wurde von einem Moderator gelöscht.
Beitrag #6444267 wurde von einem Moderator gelöscht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren