User CPFAQMembers ListCalendarToday's PostsSearch




Go Back   Foonews.Net > Newsgroups de.* > de.comp.* > de.comp.lang.c

Prova Gratis 30gg l'hosting fooweb
Reply
 
LinkBack Thread Tools Display Modes
 
Old 14-10-08, 10:38 AM
Markus Raab
 
Posts: n/a
Default Re: enum API Kompatibilität

Alexander Bartolich wrote:

> a) eine binärkompatibel erweiterbare Schnittstelle
> b) zentrale Verwaltung der verwendeten Werte
> c) sprechende Namen im Quellcode
> d) eine Bestätigung von $TOOL, dass alles super ist
>
> Lösung:
>
> typedef int type_t;
> enum
> {
> KEY_TYPE_UNDEFINED = 0,
> KEY_TYPE_BINARY = 20,
> KEY_TYPE_BINARY01 = 21,
> KEY_TYPE_INT = 21,
> KEY_TYPE_STRING = 40,
> };


Nachdem man in C sowieso enums beliebig mixen kann und gar nicht typgecheckt
wird (was ich fälschlicherweise angenommen habe) werde ich diese Lösung
verwenden. Vielen Dank für den guten Vorschlag.

Auch vielen Dank an Rainer Weikusat für die ausführliche Erklärung.

mfg Markus
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
 
Old 14-10-08, 12:51 PM
Markus Schaber
 
Posts: n/a
Default Re: enum API Kompatibilität

Hi, Rainer,

Rainer Weikusat <rweikusat@mssgmbh.com> wrote:

> Alexander Bartolich <alexander.bartolich@gmx.at> writes:
> > Markus Raab schrieb:
> >> icheck (ein API checker) meldet mir wenn ich einen Enumerator hinzufüge dass
> >> das API nicht vorwärts-kompatibel ist[0].

> >
> > http://en.wikipedia.org/wiki/Forward_compatibility
> > # Forward compatibility (sometimes confused with extensibility) is
> > # the ability of a system to gracefully accept input intended for
> > # later versions of itself.

>
> 'icheck' ist ein Debian-Utility und die man page definiert 'forward
> compatibility' als 'things compiled against the old version will work
> with the new' und 'backward compatibility' als 'things compiled
> against the new version will work with the old', also genau umgekehrt.
>
> Das scheint mir auch etwas sinnvoller als der von Dir zitierte Text,
> denn ein solches 'vorwaertskompatibles System' kann es gar nicht
> geben, weil es schlicht unmoeglich ist, Eingabedaten in einem
> unbekannten Format als gueltige Eingaben zu akzeptieren. Bestenfalls
> kan man unbekannte Teile einer zusammengesetzten Nachricht ignorieren
> und hoffen, dass das, was sie an scheinbar bekanntem enthaelt, auch
> alleine noch einen Sinn ergibt.


Ich kann mich erinnern, früher mal in einem Projekt IDs gehabt zu haben,
in denen ein bestimmtes Bit festgelegt hat, ob man unbekannte IDs
ignorieren oder einen Fehler melden soll.

Ein weiteres Beispiel sind die Metadaten in jpegs oder MP3s -
unbekannte Chunks können ignoriert werden (z. B. GeoTagging oder
Plattencover als Bild), das Bild kann man trotzdem anzeigen, und den
Song trotzdem abspielen.



Regards,
Markus

--
Markus Schaber | Logical Tracking&Tracing International AG
Dipl. Inf. | Software Development GIS

Fight against software patents in Europe! www.ffii.org
www.nosoftwarepatents.org

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Try the foonews Toolbar!!!
 
Old 14-10-08, 07:01 PM
Rainer Weikusat
 
Posts: n/a
Default Re: enum API Kompatibilität

Markus Schaber <schabi@logix-tt.com> writes:
> Rainer Weikusat <rweikusat@mssgmbh.com> wrote:
>> Alexander Bartolich <alexander.bartolich@gmx.at> writes:
>> > Markus Raab schrieb:
>> >> icheck (ein API checker) meldet mir wenn ich einen Enumerator hinzufüge dass
>> >> das API nicht vorwärts-kompatibel ist[0].
>> >
>> > http://en.wikipedia.org/wiki/Forward_compatibility
>> > # Forward compatibility (sometimes confused with extensibility) is
>> > # the ability of a system to gracefully accept input intended for
>> > # later versions of itself.

>>
>> 'icheck' ist ein Debian-Utility und die man page definiert 'forward
>> compatibility' als 'things compiled against the old version will work
>> with the new' und 'backward compatibility' als 'things compiled
>> against the new version will work with the old', also genau umgekehrt.
>>
>> Das scheint mir auch etwas sinnvoller als der von Dir zitierte Text,
>> denn ein solches 'vorwaertskompatibles System' kann es gar nicht
>> geben, weil es schlicht unmoeglich ist, Eingabedaten in einem
>> unbekannten Format als gueltige Eingaben zu akzeptieren. Bestenfalls
>> kan man unbekannte Teile einer zusammengesetzten Nachricht ignorieren
>> und hoffen, dass das, was sie an scheinbar bekanntem enthaelt, auch
>> alleine noch einen Sinn ergibt.

>
> Ich kann mich erinnern, früher mal in einem Projekt IDs gehabt zu haben,
> in denen ein bestimmtes Bit festgelegt hat, ob man unbekannte IDs
> ignorieren oder einen Fehler melden soll.
>
> Ein weiteres Beispiel sind die Metadaten in jpegs oder MP3s -
> unbekannte Chunks können ignoriert werden (z. B. GeoTagging oder
> Plattencover als Bild), das Bild kann man trotzdem anzeigen, und den
> Song trotzdem abspielen.


Was soll das in dem gegebenen Kontext jetzt bedeuten? Es gibt
sogenannte 'erweiterbare' Datenformatdefinitionen, die aus einer
urspruenglich definierten Basismenge von Eigenschaften bestehen, sowie
einem Erweiterungsmechanismus, der es ermoeglicht, Informationen so zu
einer 'Nachricht' in diesem Format hinzuzufuegen, das
Implementierungen, denen lediglich das 'Basisformat' bekannt ist, den
'Basisformatsteil' einer solche Nachricht benutzen koennen, ohne sich
um ihnen unbekannte Erweiterungen des Formats kuemmern zu
muessen. Dafuer ist allerdings die 'zeitliche Reihenfolge' von
Erweiterungsdefinition und Implementierun uninteressant -- zB koennte
man heute ein TCP-Modul implementieren, dass die
die RFC793-Teile TCP versteht und alle spaeter definierten Optionen
bis auf SACK ignoriert. Dieses 'erweiterte Feature' koennte man jetzt
in einer von dem urspruenglichen Code abgleiteten 'anderen
Implementierung' auch noch entfernen und beide mit einem (viel
aelteren) Linux-2.4-TCP sprechen lassen, dass selective
acknowledgments benutzt. Was ist hier jetzt warum vorwaerts- oder
rueckwaertskompatibel wozu? Oder was genau bedeutet 'spaetere Version
von sich selbst?', ausser 'in der Zukunft entwickelte anderen
Software' (die mehr oder minder zufaellig einen Teil des Quellcodes
mit der aelteren gemein hat, was ein Implementierungsdetail waere).







Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
 
Old 20-10-08, 11:36 AM
Markus Schaber
 
Posts: n/a
Default Re: enum API Kompatibilität

Hi, Rainer,

Rainer Weikusat <rweikusat@mssgmbh.com> wrote:

> Markus Schaber <schabi@logix-tt.com> writes:
> > Rainer Weikusat <rweikusat@mssgmbh.com> wrote:


> >> denn ein solches 'vorwaertskompatibles System' kann es gar nicht
> >> geben, weil es schlicht unmoeglich ist, Eingabedaten in einem
> >> unbekannten Format als gueltige Eingaben zu akzeptieren. Bestenfalls
> >> kan man unbekannte Teile einer zusammengesetzten Nachricht ignorieren
> >> und hoffen, dass das, was sie an scheinbar bekanntem enthaelt, auch
> >> alleine noch einen Sinn ergibt.

> >
> > Ich kann mich erinnern, früher mal in einem Projekt IDs gehabt zu haben,
> > in denen ein bestimmtes Bit festgelegt hat, ob man unbekannte IDs
> > ignorieren oder einen Fehler melden soll.

>
> Was soll das in dem gegebenen Kontext jetzt bedeuten?


Ich bezog mich auf die oben nochmal zitierten Aussage von Dir. Es geht
mir dabei nicht darum, ob man es jetzt auf-, ab- oder querwärts-
kompatibel nennt.

Es geht mir darum, dass man ein Protokoll oder Datenformat durchaus so
designen kann, dass es kompatibel erweiterbar ist, und bei
entsprechendem Design auch eine mit dem entsprechenden Feature nicht
kompatible Software entscheiden kann, ob sie mit den restlichen Daten
noch was anfangen kann, oder nicht.

Auch das von Dir genannte TCP/IP entspricht dem, indem unbekannte Flags
und Extensions bei Paketeingang ignoriert, und bei Paketausgang auf 0
gesetzt bzw. weg gelassen werden. So kann ein Stack mit SACK und einer
ohne SACK mit einander sprechen.

Regards,
Markus

--
Markus Schaber | Logical Tracking&Tracing International AG
Dipl. Inf. | Software Development GIS

Fight against software patents in Europe! www.ffii.org
www.nosoftwarepatents.org

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
 
Old 20-10-08, 01:03 PM
Rainer Weikusat
 
Posts: n/a
Default Re: enum API Kompatibilität

Markus Schaber <schabi@logix-tt.com> writes:
> Rainer Weikusat <rweikusat@mssgmbh.com> wrote:
>> Markus Schaber <schabi@logix-tt.com> writes:
>> > Rainer Weikusat <rweikusat@mssgmbh.com> wrote:

>
>> >> denn ein solches 'vorwaertskompatibles System' kann es gar nicht
>> >> geben, weil es schlicht unmoeglich ist, Eingabedaten in einem
>> >> unbekannten Format als gueltige Eingaben zu akzeptieren. Bestenfalls
>> >> kan man unbekannte Teile einer zusammengesetzten Nachricht ignorieren
>> >> und hoffen, dass das, was sie an scheinbar bekanntem enthaelt, auch
>> >> alleine noch einen Sinn ergibt.
>> >
>> > Ich kann mich erinnern, früher mal in einem Projekt IDs gehabt zu haben,
>> > in denen ein bestimmtes Bit festgelegt hat, ob man unbekannte IDs
>> > ignorieren oder einen Fehler melden soll.

>>
>> Was soll das in dem gegebenen Kontext jetzt bedeuten?

>
> Ich bezog mich auf die oben nochmal zitierten Aussage von Dir.


Diese oben zitierte Aussage wiederum bezog sich auf eine aus Wikipedia
zitierte Definition von 'Vorwaertskompatibilitaet (welche haeufig mit
Erweiterbatkeit verwechselt wuerde)'. Ich halte die fuer verdreht: Man
kann sogenannte erweiterbare Datenformate/ Protokolle etc definieren,
in dem man genuegend Meta-Informationen ueber optionale Ergaenzungen
festlegt, dass eine Implementierung solche Ergaenzungen in einem
Datenstrom ueberspringen kann. Dazu gehoert auch, dass es eine
erweiterungsunabhaengige Basisfunktionalitaet ueberhaupt gibt.

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



 RSS Feeds - Archive - Top




All times are GMT +1. The time now is 10:17 PM. Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.1.0 Forum style by ForumMonkeys.com.