Tuesday, June 05, 2007

Новая серия Design & Evolution of C++

По сцылке с ltu можно найти статью-продолжение бестселлера известного датского писателя Б. Страуструпа "Дизайн и эволюция C++", охватывающее период с 2001 года по настоящее время.

Не сильно интересующиеся процессом люди (типа меня), могут узнать много нового. Например, я наконец увидел ту фичу, до которой Страуструп мог бы додуматься и 20 лет назад, которой так сильно начинает не хватать в C++ после знакомства с любым нормальным (особенно функциональным) языком программирования -- итак, в C++ будут наконец более-менее нормальные enum типы. *Аллилуйя*. Они не будут неявно конвертится в int, у которых будет определен физический размер, которые можно будет нормально использовать в качестве параметра шаблона и имена которых будут определены внутри пространства имен, задаваемого именем enum'а (т.е. enum E { A } будет доступен как E::A). Это пока только предложение, но отец всех C++ программеров считает, что наверное его примут.

Другой интересный документ, к которому он и сам приложил руку  -- это предложение включить лямбды с замыканиями в C++. Мысль неплохая, но без GC все это, естественно, будет еще одним месторождением тормозов и граблей (в виде, преимущественно, висячих ссылок).

Глючить будет так:

tr1::function<int(int)> foo() {
 A a;
 A *b = &a;
 return (<>(int) { *b = 3; return 0; });
}

tr1::function<int(int)> a = foo();
a(1); // локальная переменная а 
 // внутри foo() уже уничтожена, но
 // лямбда ее использует
Сравним это все с garbage-collected языками где все объекты на хипе, и убиваются когда надо.

А тормозить будет поскольку для локальных объектов которые использует замыкание, по дефолту создается копия. Сравним это с garbage-collected языками, где замыканию достаточно указателя на объект.

Ну и для тех кому не интересны технические подробности, в статье можно почитать про процесс принятия стандарта и включения в него STL, а также причитания по поводу java, особенно понравилось вот это

I see Java as a Sun commercial weapon aimed at Microsoft that missed and hit an innocent bystander: the C++ community.

Вообще яве там целых несколько страниц посвящено, видно, годы аггрессивной рекламы явы как убийцы С++ не прошли даром для бедняги Страуструпа.

Ну в общем и целом статья очень интересная и познавательная, рекомендую.

No comments: