[gelöst]Wann wurde ein bestimmtes Paket installiert?

Du suchst ein Programm für einen bestimmten Zweck?
tobo
Beiträge: 1990
Registriert: 10.12.2008 10:51:41

Re: Wann wurde ein bestimmtes Paket installiert?

Beitrag von tobo » 12.08.2016 15:13:12

Meillo hat geschrieben:Wieso sollte man POSIX nicht heranziehen duerfen? POSIX spezifiziert das Verhalten von Unix Tools.
Heranziehen kann man den sehr wohl, ob das sinnvoll ist, das ist eine andere Frage. Von wann ist POSIX-ERE, 1986? Spielt aber auch keine Rolle. Das ist ja nur ein Grundstock, der so implementiert werden soll/kann - wie es implementiert wird (Ist-Zustand), ist dann völlig losgelöst davon. POSIX kann umgesetzt sein, muss aber nicht. Kann erweitert sein, muss aber nicht. Wenn ich ein konkretes Problem habe, dann interessiert mich nicht der möglicherweise nicht erweiterte umzusetzende Standard, sondern die exakte Implementierung. Und insbesondere die Dokumentation dieser Implementierung!
Und im konkreten Fall ist POSIX doch sehr hilfreich mit seiner Aussage. Hier nochmal die Essenz:
Any of the following uses produce undefined results:

If these characters appear first in an ERE, or immediately following a <vertical-line> [...]
Bedeutet lediglich, dass es in der Vorgabe undefiniert ist. Das hat für die Implementierung genau gar nichts zu sagen. Genau genommen würde ich als Programmierer jedes undefinierte Verhalten erstmal abschaffen wollen. Das ist ja nichts anderes, als ein fehlender Case-Fall in der Umsetzung!? Sprich, ein Programmierfehler. Wenn ich irgendwas in ein Programm eingebe und das Teil fliegt mir dann möglicherweise um die Ohren, dann ist das kein undefiniertes Verhalten, sondern ein Programmierfehler. Und genau deswegen hat hier GNU (und da gebe ich dir Brief und Siegel, und zwar ohne das zu wissen) ein definiertes Verhalten eingeführt. Da GNU und Dokumentation sich aber oft wie gleiche Magnetpole verhalten, muss man das vermutlich wirklich im Quelltext nachschauen, damit man Sicherheit erlangt!?

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Wann wurde ein bestimmtes Paket installiert?

Beitrag von Meillo » 12.08.2016 15:56:07

tobo hat geschrieben: Von wann ist POSIX-ERE, 1986?
Das Zitat ist aus ``The Open Group Base Specifications Issue 7, IEEE Std 1003.1, 2013 Edition''.
POSIX kann umgesetzt sein, muss aber nicht. Kann erweitert sein, muss aber nicht. Wenn ich ein konkretes Problem habe, dann interessiert mich nicht der möglicherweise nicht erweiterte umzusetzende Standard, sondern die exakte Implementierung. Und insbesondere die Dokumentation dieser Implementierung!
Dem stimme ich zu. POSIX *kann* umgesetzt sein, muss aber nicht. Mich interessiert auch wie es tatsaechlich implementiert ist, aber der Aufwand das im Code herauszufinden ist viel zu gross, also schaue ich in die Dokumentation. Meiner Erfahrung nach ist POSIX eine sehr hilfreiche Dokumentation, die einen Detailgrad bietet, den fast keine Programmdoku hat und an der sich typischerweise die Entwickler solcher Software orientieren. Natuerlich ist mir bewusst, dass nicht jede Umsetzung standardkonform ist, aber fuer mich war der Ansatz in POSIX zu schauen meist hilfreich (gerade eben auch in Ermangelung von guter anderer Doku).

(Leider ist gnu.org schon den ganzen Tag down, so dass ich dort nicht nach bassender Doku suchen konnte.)
Any of the following uses produce undefined results:

If these characters appear first in an ERE, or immediately following a <vertical-line> [...]
Bedeutet lediglich, dass es in der Vorgabe undefiniert ist. Das hat für die Implementierung genau gar nichts zu sagen.
Genau. Aber ist schon mal eine wertvolle Information.
Genau genommen würde ich als Programmierer jedes undefinierte Verhalten erstmal abschaffen wollen. Das ist ja nichts anderes, als ein fehlender Case-Fall in der Umsetzung!? Sprich, ein Programmierfehler.
Ich denke, da hast du die Bedeutung des Wortes ``undefiniert'' im Standard falsch verstanden. Es bedeutet nicht, dass die jeweilige Implementierung hier segfaultet oder explodiert. Etwas das in einem Standard undefiniert ist, bedeutet, dass sich das Verhalten je nach Implementierung unterscheiden kann. Es kann (und wird vermutlich) durchaus definiert sein, was GNU egrep in dem Fall macht, aber z.B. FreeBSD egrep wird vielleicht etwas anderes machen.

(Ich fuer meinen Teil will ungerne Verhalten nutzen, das in POSIX undefiniert ist, weil das zwar oft mit den GNU Tools funktioniert aber auf anderen Unixen nicht tut.)
Wenn ich irgendwas in ein Programm eingebe und das Teil fliegt mir dann möglicherweise um die Ohren, dann ist das kein undefiniertes Verhalten, sondern ein Programmierfehler. Und genau deswegen hat hier GNU (und da gebe ich dir Brief und Siegel, und zwar ohne das zu wissen) ein definiertes Verhalten eingeführt.
Klar, definiert von GNU fuer seine eigene egrep-Implementierung, aber undefiniert in POSIX und damit moeglicherweise uneinheitlich ueber alle egrep-Implementierungen die es so gibt. (Relevant fuer alle die, die ab und an ueber den Horizont der GNU/Linux-Welt hinausschauen.)
Da GNU und Dokumentation sich aber oft wie gleiche Magnetpole verhalten, muss man das vermutlich wirklich im Quelltext nachschauen, damit man Sicherheit erlangt!?
Wie meinst du das mit den Magnetpolen? Das habe ich nicht verstanden.

Natuerlich erlangt man Sicherheit nur wenn man in den Code schaut, aber ich weiss nicht ob du dir bewusst bist wie eine Regexp-Engine im Code so aussieht, und von den theoretischen Grundlagen ganz zu schweigen. Viel Vergnuegen beim Einarbeiten! Wird vermutlich mehrere Monate dauern. ;-)


Edit: Aber vielleicht ist's ja auch gar nicht so schlimm. Ich lasse mich sehr gerne widerlegen!
Use ed once in a while!

tobo
Beiträge: 1990
Registriert: 10.12.2008 10:51:41

Re: Wann wurde ein bestimmtes Paket installiert?

Beitrag von tobo » 12.08.2016 17:26:42

Meillo hat geschrieben:Ich denke, da hast du die Bedeutung des Wortes ``undefiniert'' im Standard falsch verstanden. Es bedeutet nicht, dass die jeweilige Implementierung hier segfaultet oder explodiert. Etwas das in einem Standard undefiniert ist, bedeutet, dass sich das Verhalten je nach Implementierung unterscheiden kann. Es kann (und wird vermutlich) durchaus definiert sein, was GNU egrep in dem Fall macht, aber z.B. FreeBSD egrep wird vielleicht etwas anderes machen.
Ja, meine Deutung war gewesen: es gibt hier schlicht keine Vorgabe, jeder kann machen was er will. Für eine entsprechende Implementierung wäre es im Umkehrschluss genauso aussagekräftig, wenn man diesen Abschnitt in POSIX einfach weglassen würde. Mit Ausnahme des dezenten Hinweises, dass man da gefälligst ein definiertes Verhalten einführen soll. Mein Kriitikpunkt besteht eigentlich einzig darin, dass diese Einführung (sofern sie existiert) nicht dokumentiert ist.
Wie meinst du das mit den Magnetpolen? Das habe ich nicht verstanden.
War vielleicht ein bisschen krass formuliert!? Gemeint war, dass ich die Dokumentation (gerade im Bereich der manpages) nicht immer für sonderlich gut halte. Wenn ich das z.B. mit (Open)BSD in den Bereichen Vollständigkeit und Lesbarkeit/Ein­gän­gig­keit vergleiche, dann sehe ich hier schon qualitative Unterschiede.
Natuerlich erlangt man Sicherheit nur wenn man in den Code schaut, aber ich weiss nicht ob du dir bewusst bist wie eine Regexp-Engine im Code so aussieht, und von den theoretischen Grundlagen ganz zu schweigen. Viel Vergnuegen beim Einarbeiten! Wird vermutlich mehrere Monate dauern. ;-)
Ne, ich hatte da eigentlich nicht vor das genauer zu untersuchen. Insbesondere, da sich meine Erfahrung in dem Bereich auf simple Parser beschränkt. Da fehlt also, wie vorhergesagt, erheblich Hintergrundwissen.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Wann wurde ein bestimmtes Paket installiert?

Beitrag von Meillo » 12.08.2016 18:36:59

tobo hat geschrieben:
Meillo hat geschrieben:Ich denke, da hast du die Bedeutung des Wortes ``undefiniert'' im Standard falsch verstanden. Es bedeutet nicht, dass die jeweilige Implementierung hier segfaultet oder explodiert. Etwas das in einem Standard undefiniert ist, bedeutet, dass sich das Verhalten je nach Implementierung unterscheiden kann. Es kann (und wird vermutlich) durchaus definiert sein, was GNU egrep in dem Fall macht, aber z.B. FreeBSD egrep wird vielleicht etwas anderes machen.
Ja, meine Deutung war gewesen: es gibt hier schlicht keine Vorgabe, jeder kann machen was er will. Für eine entsprechende Implementierung wäre es im Umkehrschluss genauso aussagekräftig, wenn man diesen Abschnitt in POSIX einfach weglassen würde.
Ich finde es ziemlich wichtig, dass in einem Standard auch explizit drin steht, was nicht durch ihn definiert ist.
Mit Ausnahme des dezenten Hinweises, dass man da gefälligst ein definiertes Verhalten einführen soll.
Da musst du die Hintergruende und Ziele von POSIX beruecksichtigen. Es ging bei POSIX nicht darum neues Verhalten zu definieren -- POSIX ist also keine Soll-Spezifikation. POSIX definierte nur so etwas wie die Schnittmenge der verschiedenen Unix-Derivate, um dadurch die Scherben der Unix-Kriege aufzusammeln und die Grundlage einer moeglichst kompatiblen Zukunft zu bereiten, ohne erneut Konflikte loszutreten.
Gemeint war, dass ich die Dokumentation (gerade im Bereich der manpages) nicht immer für sonderlich gut halte.
Ja, sie schwankt zum Teil deutlich, teilweise ist sie aber auch sehr gut. (Bei GNU sind die Manpages halt nur nebensaechlich, weil die alles in Infopages haben (... die ich noch nie zu bedienen verstanden habe).)
Use ed once in a while!

Antworten