Die kleinen Codeschnipsel, die im Rahmen einer Twitterdiskussion mit einer Feministin über Konsens entstanden sind, möchte ich nicht völlig in Vergessenheit geraten lassen.
Die feministische Forderung:
//Opt-In if (obj.Consent()){ Do(obj); }
Entspanntes Trial-and-Error:
//Opt-Out try { Do(obj); } catch(err) { exit(); }
Je nach Implementierung können außenrum noch Wiederholungsschleifen gesetzt sein.
Ein Test in einer if-Anweisung sollte keine Seiteneffekte haben, in einigermaßen verständlicher Software zumindest. Ich habe den starken Verdacht, daß Consent() diese Bedingung erfüllt und den Zustand von obj nachhaltig verändert. 😉
LikeGefällt 2 Personen
Man muss auch davon ausgehen, dass .Consent() noch Zufallselemente enthält, und kein reproduzierbares Ergebnis liefert.
LikeGefällt 1 Person
verflixt, gemeint war „diese Bedingung nicht erfüllt“ (ich sollte Kommentare vor dem Abschicken korrekturlesen….)
LikeGefällt 1 Person
Der Code ist auch nicht thread-safe. Selbst wenn wir schon ausgehen würden, dass #isConsent() seiteneffektfrei wäre, wissen wir immer noch nicht welche zustandsveränderden Operationen auf obj noch gelaufen sind, bis Do(Obj); tatsächlich zur Ausführung kommt.
LikeGefällt 1 Person
Erschwerend kommt hinzu, dass sich der Rückgabewert von isConsent() während der Ausführung von Do(Obj) unvorhersehbar ändern kann. Und das, abhängig von der konkreten Spezialisierung von Obj sogar rückwirkend,
Ich fürchte jeder Versuch das zu debuggen ist Zeitverschwendung. Wegwerfen und neu anfangen.
LikeGefällt 1 Person
Da fehlt noch was wichtiges:
if(obj.feminist){
return;
}
LikeGefällt 1 Person
ACK
LikeGefällt 1 Person
Man möchte doch feststellen, dass „Do(obj);“ eine Ausnahme erzeugen kann – z.B. durch eine Klasse, die das zumindest vorschreibt. Es gibt einige Objekte, die keine Ausnahme erzeugen und dann hinterher sich jemand über eine falsche Ausführung beschwert.
LikeGefällt 1 Person
Stimmt. obj kann sogar jederzeit eine Exception werfen. Im unteren Fall wird diese abgefangen. Was im oberen passiert, ist nicht spezifiziert.
LikeLike
Die Feministische Forderung ist nicht ganz umgesetzt. Hier wird nur vor Begin überprüft, ob die Ressourcen vorhanden sind, Do(Obj) kann aber beliebig lange dauern und eine Ressource kann ihren nicht verfügbar werden.
Bei SQL gab es ein Konstrukt, dass ein Befehl nur dann ausgeführt / geschrieben wird, wenn alle Unterpunkte erfolgreich abgearbeitet werden, sonst wird die Änderung verworfen.
So muss auch bei Do(Obj) eine ConsentException erwartet und abgefangen werden – bzw. ständig abgefragt werden, da man nicht davon ausgehen kann, dass das Obj selbst in der Lage ist eine ConsentException auszulösen, weil es u.U. überlastet ist.
LikeGefällt 1 Person
feminist.getConsent() liefert ein Consent-Objekt zurück, deallokiert es aber in einem parallel laufenden Thread, so dass der erste Thread dann bei einem consent.actUpon() einen Segmentation Fault verursacht.
LikeGefällt 1 Person