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.
Weitere Informationen zu Blöcken und deren Funktionsweise finden Sie unter:
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.
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.
Tags und Links objective-c c++ clang objective-c-blocks clang-extensions