Odpovídáte na názor ke článku Clang, bloky a std::function.
@8 To nemusí být nutně uzávěry. Uzávěr znamená, že kód (lambda výraz/blok) lze použít i mimo lexikální kontext, kde byl definován. Pokud ho ale použiju v tomto lexikálním kontextu, zůstává na zásobníku (v C++11 i clangu) a ani proměnné použité uvnitř lambda výrazu se (při správné deklaraci) nekopírují/neretainují, takže nízkoúrovňovější to už být nemůže. Ostatně v libdispatch se to tak dělá všude bez negativního vlivu na rychlost.
Až když je nutné lambdu/blok uchovat pro pozdější použití, je časová náročnost vyšší, protože se kopíruje (na haldu a podle kontextu obsah uvnitř použitých proměnných). Pak to zhruba odpovídá uzávěrům například v Javascriptu. V nízkoúrovňovém kódu je takové použití netypický, spíše se používá u časově náročných operací, kde se čeká na callback. Stejné to je v Cocoa i WinRT (async).
Autor se zabývá vývojem kompilátorů a knihoven pro objektově-orientované programovací jazyky.
Přečteno 36 203×
Přečteno 25 362×
Přečteno 23 796×
Přečteno 20 178×
Přečteno 17 875×