Odpověď na názor

Odpovídáte na názor ke článku Clang, bloky a std::function.

  • 16. 4. 2012 12:15

    zboj (neregistrovaný)

    @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í/ne­retainují, 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).