..если кому интересно, можно взять тут.
Тут вот также пост Герба нашего Саттера, а так же видео (по ссылкам от aruslan ). Те, кто немного следит за процессом, вряд ли увидят там что-то новое — Саттер вот пишет про typedef templates и темплейты с произвольным количеством параметров. Для меня правда новостью было нечто под названием programmer-directed garbage collection.
В затихших нынче holy wars на тему C#(Java) vs C++ обычно рано или поздно всплывал тезис "да в C++ можно с полпинка сделать gc, тока кому это надо?" — поэтому почитать proposal на эту тему вдвойне интересно.
Авторы, в лучших традициях C++, подошли к вопросу аккуратно, чтобы никакой имеющийся код не поломать — и у них получилось, но, как обычно, те, кто будет этот самый GC все-таки использовать, получают дополнительный лес граблей.
В двух словах — сборщик мусора тупо сканит все объекты на наличие указателей (на уровне бинарного представления, независимо от типа). А чтобы он не надорвался, программист может ему поклясться в type safety для конкретного класса/структуры/модуля/переменной — то есть обещает с поинтерами никаким сексом не заниматься (прежде всего в int'ы, char[] и другие неподходящие места их не записывать). Тогда сборщик мусора будет обрабатывать только переменные, имеющие C++-тип указателя.
Естественно, заставить компилятор проверять типобезопасность самому означает сделать большую часть существующего кода некомпилируемым — на что комитет, естественно, не пойдет.
Плюс к этому, не совсем ясно будет ли gc двигать в памяти объекты — если не будет, то эффективность его под вопросом, если будет — всплывет изрядное количество всяких неочевидных проблем. Например, непонятно что будет с конструкциями типа std::map<Foo *, ...> в случае если объект может "плавать" в памяти.
В общем Саттеру с Мейерсом и Александреску материала для книжек "как обойти все подводные грабли C++" хватит еще надолго.
5 comments:
По-моему они фигней занимаются. Никак не пойму как можно встроить GC в такой низкоуровневый язык.
Лучше бы нормальную поддержку Unicode в стандартной библиотеке сделали.
Да что-то они там с юникодом сделали хорошего, я не вникал правда.
А GC у них тоже такой на ручной тяге получился, да :) Вообще, имхо, этот GC в C++ и новых пользователей не привлечет, и олдскульных вряд ли сильно заинтересует.
Скорее парни решили идти в ногу со временем -- в районе 2009 года как раз исполняется 50 лет с тех пор как GC изобрели ;)
Стандартную библиотеку юникодной они так и не сделали :( Я имею ввиду чтобы подобные вещи
basic_ifstream::basic_ifstream(const char* s ,...);
принимали wchar_t и wstring.
GC действительно никому не будет нужным. Я вот с нетерпением жду новый стандарт только ради `auto' keyword ;)
Такой GC уже есть в Boehm. Но в Boehm есть ещё возможность типизации данных, только типы нужно вручную для GC прописывать. Вот это на уровне стандарта решить можно было, я думаю.
Подход Microsoft: сделаем наполовину!
Nice bllog
Post a Comment