Abstract
A
style of programming that uses higher-order functions has become common
in C++, following the introduction of the Standard Template Library
(STL) into the standard library. In addition to their utility as
arguments to STL algorithms, function parameters are useful as callbacks
on GUI events, defining tasks to be executed in a thread, and so forth.
C++’s mechanisms for defining functions or function objects are,
however, rather verbose, and they often force the function’s definition
to be placed far from its use. As a result, C++ frustrates programmers
in taking full advantage of its own standard libraries. The effective
use of modern C++ libraries calls for a concise mechanism for defining
small one-off functions in the language, a need that can be fulfilled
with lambda expressions.
This paper describes a design and implementation of language support for lambda expressions in C++. C++’s compilation model, where activation records are maintained in a stack, and the lack of automatic object lifetime management make safe lambda functions and closures challenging: if a closure outlives its scope of definition, references stored in a closure dangle. Our design is careful to balance between conciseness of syntax and explicit annotations to guarantee safety. The presented design is included in the draft specification of the forthcoming major revision of the ISO C++ standard, dubbed C++0x. In rewriting typical C++ programs to take advantage of lambda functions, we observed clear benefits, such as reduced code size and improved clarity.
This paper describes a design and implementation of language support for lambda expressions in C++. C++’s compilation model, where activation records are maintained in a stack, and the lack of automatic object lifetime management make safe lambda functions and closures challenging: if a closure outlives its scope of definition, references stored in a closure dangle. Our design is careful to balance between conciseness of syntax and explicit annotations to guarantee safety. The presented design is included in the draft specification of the forthcoming major revision of the ISO C++ standard, dubbed C++0x. In rewriting typical C++ programs to take advantage of lambda functions, we observed clear benefits, such as reduced code size and improved clarity.
No comments:
Post a Comment