Wiederverwendbare Software
 
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern

Veränderung (letzte Änderung) (Korrektur, Autor, Normalansicht)

Verändert: 41c41,45
Vielleicht findest du zum Thema Wiederverwendung so wenig, weil es dir hier mehr um das Thema Plattformunabhängigkeit geht?
Vielleicht findest du zum Thema Wiederverwendung so wenig, weil es dir hier mehr um das Thema Plattformunabhängigkeit geht?
:HartmutSchorrig: OK, beides hängt aber zusammen. Folgende Kurz-Statements:
:* OpenSource ist Wiederverwendung pur. Das ist OK und gut, wird aber von vielen Programmierern nicht so gesehen.
:* In Java gibts auch kaum Probleme mit Wiederverwendung. Auch das Theme Byte-Anordnungen, alignment usw. gibt es da nicht (außer auf Hardwarezugriffsebene usw.). Alles, was ich oben geschrieben habe ist ausschließlich auf C (C++) bezogen. Ich werden diesen Artikel also demnächst umräumen, Überschrift etwa 'portable Programmierung in C'.
:* Die Alignment-Problematik hat sehr wenig mit Geschwindigkeit zu tun, sondern sehr viel mehr damit, dass eine Datenstruktur (C struct) in einem beliebigen System ohne Änderung compiliert werden kann und die Daten gleichartig abbildet. Zu denken dabei ist beispielsweise an einen Datenabzug, aus einem embedded System, auf dem PC ausgewertet. Das embedded System ist vielleicht nur 16 bit breit, der PC ist zufällig auf 4-Byte-Alignment geschaltet, (weil das an anderen Stellen so vorgesehen ist), und die Suche nach falschen Daten oder die 'Anpassung' des Headerfiles beginnt. Mir ist schonmal ein Compiler über den Weg gelaufen, der hat zwar Bytestrukturen dicht gepackt (struct{ char a,b; short c;} belegte also 4 Bytes), aber Werte, die von Haus aus 4 Byte lang waren (long), auf durch 4 teilbare Adressen gepackt. Und das notwendigerweise, weil die CPU das nicht anders verarbeiten konnte (kein Intel-Prozessor mit byteorientierten Zugriffen). Das ganze war aber nicht so ganz gut dokumentiert und auch nicht so gut bekannt. ..... Daher von mir der Hinweis, Strukturen so zu schreiben dass alles gepackt ist aber jedes Element auf einer durch soviel teilbaren Adresse beginnt wie es seiner Länge entspricht. Das ist zwar etwas mehr Denkarbeit beim Programmieren, aber ist immer die optimale Variante bzgl Rechenzeit und funktioniert immer kompatibel. --2006-05-27-HartmutSchorrig.

Verändert: 44c48
KategorieWiederverwendung KategorieCee KategorieJava
KategorieWiederverwendung KategorieC KategorieCee KategorieJava

Wiederverwendbare Software ist offensichtlich kein Thema. Direkte Artikel dazu habe ich nicht gefunden, die Suche erbrachte 16 Treffer, irgendwo, nicht prägnant.

Meine Erfahrung:

 struct Beispiel
 { int16 a;
   int32 b;  //das ist nicht gut!!!
 }
statt dessen
 struct Beispiel
 { int16 a;
   int16 reserve;
   int32 b;
 }
Die definitionen für int16, int32 stehen übrigens in complctr.h, für die 32-bit-Systeme meist mit
 typedef short int16;  //short ist in diesem System 16 bit breit
 typedef int int32;    //int ist bei diesem System (nicht überall!!) 32 bit breit.
Das Arbeiten mit diesem Alignment schafft Kompatibilität zu allen Systemen (abgesehen von big/little endian). Die Zusatzarbeit ist nicht aufwändig.
...es gäbe noch viel zu schreiben, erstmal genug für heute. Ich schau mal, ob es hier Rückmeldungen gibt. HartmutSchorrig

ThreadAnlageWiederverwendbar

Also ich finde, "wiederverwendbare Software" ist sogar ein sehr großes Thema. Die entscheidenden Stichworte sind hier FreieSoftware und OpenSource. Siehe auch GnuSoftware. Oder geht es hier eher darum, wie man möglichst portabel programmiert?-- akf

Ein wichtiges Thema bei C/C++ ist das alignment-Thema. [...] Das Arbeiten mit diesem Alignment schafft Kompatibilität zu allen Systemen (abgesehen von big/little endian).

Warum? Aus Geschwindigkeitsgründen - das fällt ganz klar unter "Premature Optimization". Aus Zugriffsgründen - das weiß der jeweilige Compiler sehr viel besser als ich. Kompatibilitätsprobleme mit solchen Sachen bekommt man meistens dann, wenn man viel auf der Implementationsebene arbeitet, anstatt auf der abstrahierten Repräsentations-/Werteebene. Dasselbe bei der Endianness - da handelt man sich die meisten Probleme bei binären Streams ein, z.B. Netzwerkverkehr oder Dateiformate. Der Trick besteht darin, die Streams als das zu behandeln, was sie sind (Octet-Sequenzen), nicht als das was sie beinhalten (z.B. Integerwerte).

memcpy(&uint32, uint8arr, 4); Implementationsebene, erfordert systemspezifische Anpassungen und man landet bei signed-Werten schnell im Undefined Behaviour.

uint32 = (uint32_t)uint8arr[0] | (uint8arr[1] << 8) | (uint8arr[2] << 16) | (uint8arr[3] << 24); Repräsentations-/Werteebene, voll portabel ohne weitere Anpassungen.


Vielleicht findest du zum Thema Wiederverwendung so wenig, weil es dir hier mehr um das Thema Plattformunabhängigkeit geht?

HartmutSchorrig: OK, beides hängt aber zusammen. Folgende Kurz-Statements:
* OpenSource ist Wiederverwendung pur. Das ist OK und gut, wird aber von vielen Programmierern nicht so gesehen.
* In Java gibts auch kaum Probleme mit Wiederverwendung. Auch das Theme Byte-Anordnungen, alignment usw. gibt es da nicht (außer auf Hardwarezugriffsebene usw.). Alles, was ich oben geschrieben habe ist ausschließlich auf C (C++) bezogen. Ich werden diesen Artikel also demnächst umräumen, Überschrift etwa 'portable Programmierung in C'.
* Die Alignment-Problematik hat sehr wenig mit Geschwindigkeit zu tun, sondern sehr viel mehr damit, dass eine Datenstruktur (C struct) in einem beliebigen System ohne Änderung compiliert werden kann und die Daten gleichartig abbildet. Zu denken dabei ist beispielsweise an einen Datenabzug, aus einem embedded System, auf dem PC ausgewertet. Das embedded System ist vielleicht nur 16 bit breit, der PC ist zufällig auf 4-Byte-Alignment geschaltet, (weil das an anderen Stellen so vorgesehen ist), und die Suche nach falschen Daten oder die 'Anpassung' des Headerfiles beginnt. Mir ist schonmal ein Compiler über den Weg gelaufen, der hat zwar Bytestrukturen dicht gepackt (struct{ char a,b; short c;} belegte also 4 Bytes), aber Werte, die von Haus aus 4 Byte lang waren (long), auf durch 4 teilbare Adressen gepackt. Und das notwendigerweise, weil die CPU das nicht anders verarbeiten konnte (kein Intel-Prozessor mit byteorientierten Zugriffen). Das ganze war aber nicht so ganz gut dokumentiert und auch nicht so gut bekannt. ..... Daher von mir der Hinweis, Strukturen so zu schreiben dass alles gepackt ist aber jedes Element auf einer durch soviel teilbaren Adresse beginnt wie es seiner Länge entspricht. Das ist zwar etwas mehr Denkarbeit beim Programmieren, aber ist immer die optimale Variante bzgl Rechenzeit und funktioniert immer kompatibel. --2006-05-27-HartmutSchorrig.


KategorieWiederverwendung KategorieC KategorieCee KategorieJava
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 29. November 2007 8:48 (diff))
Suchbegriff: gesucht wird
im Titel
im Text