c++ im Jahr 2019: lambda und diskette

Was ich neulich im Job sah, warf mich förmlich um. Zum ersten Mal sah ich C++ lambda Ausdrücke in einem in die Jahre gekommen Softwarestapel. Es war sogar eine richtig praktische Anwendung, an die die Erfinder dieser neuen Sprachfeatures nicht gedacht hatten:


auto const fDoEvents = [&]()
     ProcessMessagesForCurrentProcessMainWindow();
     ProcessAfxMessagePump();
};
fDoEvents();

// vollen Refresh auslösen
xy->AddChanges(CTRL_NAV_RESULT);
z->Refresh(CTRL_NAV_CURR, true);
fDoEvents();

Das lambda fasste Statements zusammen, die in einem Spaghetticode immer wieder zu wiederholen sind. Hier war es immer mal wieder Messages zu bearbeiten. In der guten(?), alten Zeit hätten #define macros herhalten müssen.

In unmittelbarer Nähe, ein paar Zeilen unter dem zweiten Aufruf von fDoEvent()  befand sich ein Kommentar mit der Diskette:

// TODO: OFL aktualisieren (Dirtyflag / Diskette zurücksetzen)

Nach dem ersten Lachen stellte sich die Frage, wie dieser Kommentar in den Source kam.

Die Datei wurde laut tfs um 2015 geschrieben.

Die zweite Frage, war die, wie lambda Ausdrücke in den neuen C++ Standards funktioneren?

Das lud mich dann ein hierzu etwas zu schreiben.

„c++ im Jahr 2019: lambda und diskette“ weiterlesen

const char * und CString — täglich grüßt das Murmeltier

Ich fühlte mich wie in besagtem Film. Es ging um die Frage, warum die Software so lange braucht, obwohl nur wenig Daten zu verarbeiten waren. Zwar hatten sich die Kunden bestimmt schon an die Zwangspause gewöhnt, aber trotzdem sollte das doch mal schneller gehen. Wir könnten einen guten Eindruck machen, wenn es ein wenig schneller ginge mit der Erstellung einer Ausgabedatei.

Es gab eine ältere Fehlermeldung die etwas von einer ganz langen Erstellung einer solchen Ausgabe beschrieb. Die Datenbank lief auf einem eigenen Server. Die Anwendungssoftware auf einem Clientrechner.  Für mich deutete das auf ein Problem im Netz hin. Vermutlich war der merkwürdige Datenzugriff schuld. Die Anwendung war auf C-Isam zugeschnitten und nutzte SQL nur zum atomaren Zugriff auf Datensätze.

Das wollte ich zeigen. Es sollte einfach sein. War aber dann ganz anders.

„const char * und CString — täglich grüßt das Murmeltier“ weiterlesen