Forum: PC-Programmierung C++-Bibliothek für OpenCL/generell


von Rüdiger K. (sleipnir)


Lesenswert?

Ich habe angefangen, einige früher geschriebene Klassen zusammen mit 
neuen OpenCL-Hilfsklassen in einer kleinen Bibliothek zu sammeln. Diese 
Hilfsklassen sollen die Arbeit mit C++ in objektorientierter Art und 
Weise angenehmer machen. Enthalten ist z.B. eine Java-ähnliche 
String-Klasse, eine Java-ähnliche Klasse für reguläre Ausdrücke usw.
Die Bibliothek kommt mit Beispielen und hoffentlich ausführlichen 
API-Dokumentation.

http://sourceforge.net/projects/rudiscpplib/

von Rolf Magnus (Gast)


Lesenswert?

Hier ein paar Dinge, die mir beim Überfliegen aufgefallen sind:

- CMakeCache.txt weglassen, sonst gibt's Fehler beim cmake-Aufruf
- Es kommt nicht mit srcdir!=builddir klar.
- In Headern bitte kein "using namespace std;"!
- Dein toUpperCase() funktioniert nicht mit z.B. scharfem s.
- Die Exceptions, die du wirfst, haben keine saubere Klassenhierarchie

von Dr. Sommer (Gast)


Lesenswert?

Rüdiger Knörig schrieb:
> Enthalten ist z.B. eine Java-ähnliche
> String-Klasse, eine Java-ähnliche Klasse für reguläre Ausdrücke usw.
So wie die bereits in C++ enthaltenen Klassen für Strings ( 
http://en.cppreference.com/w/cpp/string ) und für reguläre Ausdrücke ( 
http://en.cppreference.com/w/cpp/regex )?

von Olga (Gast)


Lesenswert?

Wie sein letzter Artikel in der IX:

http://www.heise.de/ix/inhalt/2013/07/138/

Man beachte die Kommentare:
http://www.heise.de/ix/foren/S-Seite-an-Seite/forum-258839/list/


Vielleicht kommt das von den Experimenten, die die CIA damals mit ihm 
gemacht hat, und von was für komischen Verschwörungen er sonst so 
berichtete...

von Rüdiger K. (sleipnir)


Lesenswert?

Ah Danke - daß mit der CMakeCache.txt war ein heißer Tip! Auch die 
Einbindung des std-Namensbereichs in die Header habe ich bisher nicht 
bedacht.

Hinsichtlich der toUpper-Funktionalität: gibt es in der 
C-Standardbibliothek noch eine Funktion ähnlich wie toupper, welche mit 
Sonderzeichen besser klar kommt?

Was würden Sie sich hinsichtlich der Ausnahmen wünschen? Ich wollte nach 
Möglichkeit keine eigenen Ausnahmen hinzufügen und eher im Rahmen von 
stdexcept bleiben.

Vielen Dank für die Rückmeldungen!

von Rüdiger K. (sleipnir)


Lesenswert?

Dr. Sommer schrieb:
> Rüdiger Knörig schrieb:
>> Enthalten ist z.B. eine Java-ähnliche
>> String-Klasse, eine Java-ähnliche Klasse für reguläre Ausdrücke usw.
> So wie die bereits in C++ enthaltenen Klassen für Strings (
> http://en.cppreference.com/w/cpp/string ) und für reguläre Ausdrücke (
> http://en.cppreference.com/w/cpp/regex )?

Die std::string-Klasse ist gerade im Vergleich mit der 
Java-String-Klasse sehr unkomfortabel - deshalb habe ich String ja 
gerade als Erweiterung von string geschrieben, um ständig wiederkehrende 
Aufgaben wie Typumwandlungen mit konkreter Fehlerbenachrichtigung durch 
Ausnahmen (also nicht wie durch ios::exception) abzudecken. Mit solchen 
Sachen vertut man zuviel Zeit.

Was die regulären Klassen angeht - bis dato funktionierten die regulären 
Ausdrucksklassen von C++11 beim g++-Compiler schlichtweg kaum, und ich 
persönlich fand die Umsetzung in der boost-Bibliothek schlichtweg 
zumindest äußerst unsauber dokumentiert. Die Beispiele dort sind nicht 
gerade einstiegsfreundlich.
Da ich aber für die geplanten Erweiterungen auf reguläre Ausdrücke 
angewiesen bin, habe ich eine eigene, von der Funktionalität dafür 
ausreichende Klasse geschrieben.

@Olga: Na, na, nicht so neidisch! :-)
In den eMail-Zusendungen habe ich viel Zustimmung erfahren.
Und wenn ich mir die Kritiken so anschaue, dann kann ich ganz gut damit 
leben. Ein paar Qt-Hasser waren zu erwarten, die künstlich 
hochdramatisierte Unterscheidung zwischen Prozeß und 
Leichtgewichtsprozeß verweise ich auf die Usenet-Flamewars, als der 
Linux-ps-Befehl erstmals auch Threads mit anzeigte und daß man vorher 
unter C++ mit Threads arbeiten konnte stimmt auch nicht ganz. Die 
Posix-Schnittstelle war eine klassische C-Schnittstelle, und wie der 
Re­zen­sent auch richtig bemerkte, ist eine wirklich objektorientierte 
Programmierung nun erst mit dem C++11-Standard ermöglicht worden.
Die breite Verwendung von prozeduralen Schnittstellen wie Posix-Threads 
haben den Ruf von C++ meines Erachtens auch nicht ganz zu Unrecht 
geschadet, denn in vielen Fällen wurde auf eine objektorientierte 
Kapselung verzichtet.
Hinzu kommt, daß man mit der POSIX-Schnittstelle nur äußerst neidisch 
auf die Möglichkeiten der Multithread-Programmierung unter Java blicken 
konnte.

von Rolf Magnus (Gast)


Lesenswert?

Rüdiger Knörig schrieb:
> Hinsichtlich der toUpper-Funktionalität: gibt es in der
> C-Standardbibliothek noch eine Funktion ähnlich wie toupper, welche mit
> Sonderzeichen besser klar kommt?

Nein. Es gibt nur die toupper-Funktion, die aber nur mit einzelne 
Zeichen arbeitet. Für komplette Strings reicht es leider nicht, diese 
Funktion einfach für jedes Zeichen einmal aufzurufen. Es gibt (nicht nur 
in der deutschen Sprache) Sonderfälle, die so nicht behandelt werden 
können. Ein Klassiker ist da ß -> SS.
Übrigens: Umgekehrt ist es sogar noch schwierieger bzw. für den Rechner 
kaum noch möglich, es immer richtig zu machen. Was ist das 
kleinbuchstabige Äquivalent zu "MASSE"? "masse" oder "maße"?

> Was würden Sie sich hinsichtlich der Ausnahmen wünschen? Ich wollte nach
> Möglichkeit keine eigenen Ausnahmen hinzufügen und eher im Rahmen von
> stdexcept bleiben.

Die Idee bei Exceptions ist (zumindest meiner Meinung nach) ja gerade, 
eine Hierarchie mit einer eigenen Klasse für jeden Fehlertyp zu haben, 
damit man in der Software leicht über entsprechende catch()-Handler 
zwischen verschiedenen Arten von Fehlern unterscheiden kann, wenn man 
das möchte.
Wenn aber immer nur std::runtime_error geworfen und man nur aus dem 
übergebenen Fehlertext ermitteln kann, was genau schief gegangen ist, 
geht das nicht.

von Rüdiger K. (sleipnir)


Lesenswert?

Das mit den Ausnahmen sehe ich ein. Bei den nächsten Änderungen werde 
ich dies umsetzen - der berechtigte Einwand hinsichtlich des 
std-Namensbereichs habe ich zumindestens in der Versionsverwaltung schon 
geändert.

Bei der toUpper-Funktionalität muß ich mal sehen, wie sich das anpacken 
läßt - wahrscheinlich durch eine gesonderte Methode.

Haben Sie vielen Dank für Ihre Anregungen!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.