Wie funktionieren Clang-Blöcke?

7

Ссылка

Sieht wirklich cool aus.

Allerdings

  1. Ich verstehe es nicht.
  2. Ich sehe keine Beispiele dafür.
  3. Ich sehe keine Beispiele für Ideen, die in C ++ schwer zu beschreiben sind, aber in Blöcken einfach auszudrücken sind.

Kann mich jemand darüber aufklären?

    
anon 07.03.2010, 03:21
quelle

5 Antworten

13

Blöcke sind im Wesentlichen eine Möglichkeit, Code und Umfang als Daten zu übergeben. Sie sind in einigen anderen Sprachen als Schließungen und anonyme Funktionen bekannt.

Hier ist ein Artikel mit weiteren Details und Codebeispielen.

    
nanotech 07.03.2010, 03:49
quelle
10

NanoTech ist bereits mit einer Erklärung von Blöcken verbunden. Wie das mit C ++ zusammenhängt, lassen Sie mich meine persönliche Meinung sagen: Diese Erweiterung ist nicht in C ++ nützlich. Hier ist warum:

Bezüglich des Blockreferenztyps: Wir haben bereits "polymorphe Funktionen", die einen Zustand umhertragen können, siehe boost :: function , tr1 :: function . C ++ wird eine polierte Version davon in seiner nächsten Standardbibliothek enthalten. Der Vorteil gegenüber "C Blocks" ist, dass Sie sich nicht mit Dingen wie Block_copy und Block_release herumschlagen müssen. Diese polymorphen Funktionsobjekte sind intelligent genug, um ihr eigenes Speichermanagement durchzuführen.

Was die Block-Literal-Syntax betrifft: Es ist eine nette Syntax, die es Ihnen ermöglicht, den Code dorthin zu bringen, wo er "hingehört", ohne dass ein großer Vorabcode benötigt wird. Gleiches gilt für den C ++ - Gegenpart: C ++ 0x lambdas . Aber C ++ 0x Lambda-Feature ermöglicht es Ihnen auch, Lambda-Objekte in engen inneren Schleifen zu verwenden, ohne hohe Kosten für Funktionsaufrufe aufgrund möglicher Inlining.

Da C ++ 0x Lambdas auch in Situationen verwendet werden können, in denen Leistung ein Problem ist und std :: function einfacher zu handhaben ist w.r.t. Speicherverwaltung Das Hinzufügen von "C-Blöcken" zu C ++ scheint redundant zu sein. "C-Blöcke" scheinen mehr auf Sprachen zugeschnitten zu sein, die keine Vorlagen oder Destruktoren unterstützen.

    
sellibitze 07.03.2010 12:39
quelle
2

Sie sind im Grunde nur Apples Begriff für Schließungen / anonyme Funktionen. Wie Nikolai bemerkt, verwenden Sie Grand Central Dispatch, um mehrere Funktionen parallel auszuführen (also mehr als einen Kern zu verwenden), ohne sich um Threading und Sperren kümmern zu müssen.

    
Brock Batsell 07.03.2010 03:49
quelle
0

Soweit ich weiß, ist diese Erweiterung für Apples Grand Central Dispatch Framework. Blöcke sind winzige planbare / warteschlangenfähige Entitäten, die potenziell parallel ausgeführt werden können.

    
Nikolai Fetissov 07.03.2010 03:43
quelle