c't

c't-Projekte - Mailinglisten


[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

Re: [ct-bot] main vereinfacht

Absender: Timo Sandmann
Datum: Do, 12.05.2011 20:44:34
In-reply-to: <1305219757.10999.44.camel@wbam-laptop>
References: <1305219757.10999.44.camel@wbam-laptop>


Hi,

Am 12.05.2011 um 19:02 schrieb Simon Siemens:
> Hallo Timo,
> 
> ich schlage in den folgenden drei Emails jeweils drei Patches vor (sogar
> mit Changelog-Eintrag :-)). Alle drei hängen irgendwo zusammen, können
> aber auch getrennt betrachtet werden. Die zwei Ersten sind die
> Änderungen, die wir schon seit Langem verwenden. Wir dachten uns nun,
> sie wären vielleicht auch von allgemeinem Interesse.
> 
> Der Patch in dieser Email vereinfacht das Schreiben einer main-Funktion
> auf das typische generische Grundgerüst
> 
> int main(int argc, char * argv[]) {
>        ctbot_init(argc, argv);
> 
>        for (;;) {
>                pre_behaviour();
> 
>                // Hier kommt der Verhaltenscode
> 
>                post_behaviour();
>        }
> }

> 
> Dieses Grundgerüst passt zu Robotersoftware ebenso wie zu GUI-Software.
> Es hat drei wesentliche Vorteile
> 
>      * Updates an der ct-Bot-Infrastruktur haben keine Auswirkungen auf
>        die main-Funktion. Wenn also jemand sein eigenes Verhalten mit
>        seiner eigene main-Funktion geschrieben hat (also komplett
>        eigene ct-Bot.c), dann funktioniert das mit Release 20 ebenso
>        wie mit Release 30 des ct-Bot-Codes – solange beide Releases die
>        drei Funktionen ctbot_init, pre_behaviour und post_behaviour
>        verwenden. Einfach ein neuer make-Aufruf und fertig.
>      * Es ist sehr einfach, selbst eine main-Funktion / ct-Bot.c zu
>        schreiben. Fehler können einem dabei kaum unterlaufen.
>      * Auch Anfänger verstehen diesen Aufbau und damit das Konzept
>        (nicht die Details) hinter dem ct-Bot-Code.
>      * Ein vierter Vorteil erschließt sich, wenn man meinen Vorschlag
>        einer Bibliothek der Hardware-Abstraktionsschicht denkt. (Wir
>        liefern eine solche Bibliothek an unsere Studenten aus.)
>        Bibliotheken enthalten üblicherweise keine main-Funktion,
>        sollten es dem Nutzer aber einfach machen, eine zu schreiben.
>        Das klappt mit diesem Patch ganz gut.
> 
> Was hältst du davon?

das ist sehr gut! :-) Aus einer ähnlichen Motivation heraus ist ja inzwischen auch das ganzen Init-Zeug aus ct-Bot.c in init.c usw. ausgelagert. 
Kann aber ein wenig dauern, bis ich mir den Patch (und die beiden weiteren) genauer anschaue - nicht weil es keine gute oder wichtige Sache ist, sondern aus Zeitmangel.

> PS: Die main in ct-Bot.c ist übrigens etwas komplizierter, weil dort ja
> bereits ein Verhalten (das Testprogramm) implementiert ist.

Ja leider... Das sollte vielleicht auch mal überarbeitet werden.

Grüße,
Timo