LINUX.ORG.RU

История изменений

Исправление byko3y, (текущая версия) :

Итак, мой список, как и обещал:

1. Лямбды. В расширениях GNU C есть вложенные функции, но иметь возможность гонять туда-сюда по программе код с ассоциированными данными — это намного круче простых вложенных функций.

2. Модули. Уже и так, и сяк к ним подбираются, а никак не могут подобраться. Реализация раздельной компиляции в C/C++ — это пережиток прошлого, и индустрия не продвинется, пока не научится «компилировать заголовки» (не путать с предварительно отпарсенными заголовками, которые нынче принято называть «предварительно скомпилированными»).

3. Обобщенное программирование. Как бы я не катил бочку на шаблоны, но шаблоны хороши. Однако, они должны использоваться не для реализации STL, вместо этого...

4. Продвинутые типы-контейнеры должны быть частью компилятора. Как минимум массив, кортеж, алгебраические типы данных.

С этим списком вы получаете напорловину решенную проблему RAII, поскольку, реализация конструкторов-деструкторов и исключений в C++ откровенно хреновая. Эта модель обработки ошибок и высвобождения ресурсов произошла из лиспа, но у лиспа есть очевидное преимущество — сборщик мусора. Мое любимое жизненное правило по теме: не можешь срать — не мучай жопу. C++ не может обеспечить достаточно надежное RAII, потому нет смысла пытаться примастырить то, что никак не налазит.

RTTI и рефлексия могли бы быть пятым пунктом, но, к сожалению, я не могу придумать эффективную форму для этих штук. Они как бы подразумевают метапрограммирования и динамическую типизацию, но нынешний C++ настолько убог в этих нишах, что я не готов серьезно говорить про их завоевание.

Исходная версия byko3y, :

Итак, мой список, как и обещал:

1. Лямбды. В расширениях GNU C есть вложенные функции, но иметь возможность гонять туда-сюда по программе код с ассоциированными данными — это намного круче простых вложенных функций.

2. Модули. Уже и так, и сяк к ним подбираются, а никак не могут подобраться. Реализация раздельной компиляции в C/C++ — это пережиток прошлого, и индустрия не продвинется, пока не научится «компилировать заголовки» (не путать с предварительно отпарсенными заголовками, которые нынче принято называть «предварительно скомпилированными»).

3. Обобщенное программирование. Как бы я не катил бочку на шаблоны, но шаблоны хороши. Однако, они должны использоваться не для реализации STL, вместо этого...

4. Продвинутые типы-контейнеры должны быть частью компилятора. Как минимум массив, кортеж, алгебраические типы данных.

С этим списком вы получаете напорловину решенную проблему RAII, поскольку, реализация конструкторов-деструкторов и исключений в C++ откровенно хреновая. Эта модель произошла из лиспа, но у лиспа есть очевидное преимущество — сборщик мусора. Мое любимое жизненное правило по теме: не можешь срать — не мучай жопу. C++ не может обеспечить достаточно надежное RAII, потому нет смысла пытаться примастырить то, что никак не налазит.

RTTI и рефлексия могли бы быть пятым пунктом, но, к сожалению, я не могу придумать эффективную форму для этих штук. Они как бы подразумевают метапрограммирования и динамическую типизацию, но нынешний C++ настолько убог в этих нишах, что я не готов серьезно говорить про их завоевание.