如果说函数式程序设计语言的复兴还未成为主流的话,那么函数式程序设计的重要特征Lambda函数与闭包已经真正成为主流了。
据图灵出版的《Exceptional C++ Style中文版》作者Herb Sutter的报道,C++标准委员会已经投票通过,将Lambda函数与闭包加入C++0x。同时批准的新特性有:
- N2535 Namespace associations (inline namespace)
- N2540 Inheriting constructors
- N2541 New function declarator syntax
- N2543 STL singly linked lists (forward_list)
- N2544 Unrestricted unions
- N2546 Removal of auto as a storage-class specifier
- N2551 Variadic template versions of std::min, std::max, and std::minmax
- N2554 Scoped allocator model
- N2525 Allocator-specific swap and move behavior
- N2547 Allow lock-free atomic<T> in signal handlers
- N2555 Extended variadic template template parameters
- N2559 Nesting exceptions (aka wrapped exceptions)
加上已经率先拥抱Lambda的C#和其他许多CLR语言(比如VB2008),以及Java 7,还有本就出身“正派”的一堆动态语言……函数式编程的春天已经来了。
当然,对于语言不断增加特性的这种赶集扎堆现象,批评之声也一直不绝于耳。图灵出版的《修改代码的艺术》一书作者Michael Feathers就发出疑问了:“Will Java 7 Be Beautiful?” 一种新的特性,有其利,也必然有其弊。而且各种语言本来就各有擅长,何必勉强地改得越来越像?从另一角度来说,混合使用多语言,在虚拟机一层为多语言的集成更多地努力,也许是更正确的做法?
|