Closures

Algorithmen, Sprachunabhängige Diskussionen zu Konzepten, Programmiersprachen-Design
Antworten
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Closures

Beitrag von Xin » Do Feb 25, 2010 9:53 am

Da ich jetzt seit 25 Jahren Software entwickle, gab es zu meiner Anfangszeit noch keine Closures.

Closures wird häufig als tolles Feature beschrieben, aber irgendwo bleibt mir der tiefere Sinn des Closures verborgen. Ich vermute, dass das vorrangig daran liegt, dass ich eine Erwartung an Closures habe, die ich nicht finde, weil ein Closure nur ein anderer Name für etwas ist, was ich kenne. Somit finde ich also nichts Neues.

Ist zufällig jemand da, der Closures kennt und verwendet und mir das etwas beschreiben kann?


(Im C++ Tutorial hantiere ich derzeit an den Operatoren und so komme ich wieder zu dieser Frage.
Gehe ich recht in der Annahme, dass ein Closure einem Functor entspricht, der als Singleton implementiert ist?)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Closures

Beitrag von Dirty Oerti » Do Feb 25, 2010 6:24 pm

Laut Wiki ist das vergleichbar mit statischen Variablen in C ...
Also einfach "lokale Variablen", die nicht durch verlassen ihres Kontextes gelöscht werden...?
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Closures

Beitrag von Xin » Do Feb 25, 2010 6:26 pm

Dirty Oerti hat geschrieben:Laut Wiki ist das vergleichbar mit statischen Variablen in C ...
Also einfach "lokale Variablen", die nicht durch verlassen ihres Kontextes gelöscht werden...?
Was einem Functor-Singleton entspräche, sofern hierfür die Parameter in die Member kopiert werden.

Ich weiß, was ich mit einem Functor-Singleton machen kann... aber ich finde das jetzt nicht so spannend, um dafür einen Begriff wie Closure zu hypen?
Was übersehe ich?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Closures

Beitrag von cloidnerux » Do Feb 25, 2010 8:40 pm

Was übersehe ich?
Soweit wie ich das gesehen habe, versucht man mit Closures die Nutzung von Variablen außerhalb ihres Scopes, also der versuch locale auf Halb-Globale Variablen Hochzupushen, eben Vergleich mit Statischen Variablen in C, eben nicht mit C++-Klassen.
Mit deinem Functor-Singleton aber versuchst du Klassen und Funktionen bestimte Möglichkeiten einzuräumen, zumindest verstehe ich das so.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Closures

Beitrag von Xin » Do Feb 25, 2010 10:20 pm

cloidnerux hat geschrieben:
Was übersehe ich?
Soweit wie ich das gesehen habe, versucht man mit Closures die Nutzung von Variablen außerhalb ihres Scopes, also der versuch locale auf Halb-Globale Variablen Hochzupushen, eben Vergleich mit Statischen Variablen in C, eben nicht mit C++-Klassen.
Mit deinem Functor-Singleton aber versuchst du Klassen und Funktionen bestimte Möglichkeiten einzuräumen, zumindest verstehe ich das so.
Beim Functor komme ich doch auch an die Variablen heran, die diese Instanz liefert.

Wozu ist es sinnvoll, lokale Variablen von außen zu erreichen?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Closures

Beitrag von Kerli » Fr Feb 26, 2010 12:15 am

Xin hat geschrieben:Wozu ist es sinnvoll, lokale Variablen von außen zu erreichen?
Auf den ersten Blick hat mich das irgendwie auch gewundert, aber nach ein paar Nachforschungen erscheint mir das eigentlich gar nicht so schlecht - zumindest so wie es im kommenden C++ Standard sein wird. Dabei werden als Closure jene Variablen bezeichnet die sich im Scope der Definition einer Lambda-Funktion befinden. Damit kann man dann zum Beispiel sehr leicht und übersichtlich Operationen auf einem Container durchführen:

Code: Alles auswählen

std::vector<int> someList;
int total = 0;
std::for_each(someList.begin(), someList.end(), [&total](int x) {
  total += x;
});
std::cout << total;
In diesem Beispiel wird aus der Lambda-Funktion beim Kompilieren ein Closure in dem sie Zugriff auch auf 'total' hat. Dabei ist es aber wichtig, dass davor '[&total] steht, da man dadurch auch wirklich auf die Referenz von 'total' Zugriff hat und nicht so wie ohne dem nur der Wert in der Closure gespeichert wird. Übrigens wird das vom g++-4.5 bzw. VS 10 bereits unterstützt.

Ich weiß nicht ob meine Erklärungen ganz klar und verständlich waren, aber es lohnt sich sicher in den Standard und auf Wikipedia das ganze noch einmal nachzulesen:

http://www.open-std.org/jtc1/sc22/wg21/ ... /n1968.pdf
http://www.open-std.org/jtc1/sc22/wg21/ ... /n2550.pdf
http://en.wikipedia.org/wiki/C%2B%2B0x# ... xpressions
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Antworten