LINUX.ORG.RU

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

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

У меня был вполне реальный рабочий проект на плюсах, где один файл не собирался на 32-битных системах, потому что 4G памяти не хватало. Спасибо Boost и такой-то матери. А сервисом пользовались десятки тысяч людей каждый день, так что реальнее просто некуда.

Но это же дичь. Ты так пишешь, как будто это нормально. То, что метаязык в С++ сделан максимально ужасно и вообще по сути появился в какой-то мере случайно - это же известный факт. Этого надо стыдиться, а не приводить в пример.

Вообще все эти средства метапрограммирования надо сравнивать с кодогенерацией. Вот представь себе кодогенератор, который бы генерировал примерно то же, что генерирует компилятор, разворачивая шаблоны в этом твоём файле. Только написанный не на метаязыке С++, а, для простоты. на обычном С++. Просто выплёвывает текст программы (с простой структурой), которую уже потом будет компилировать дальше компилятор. Вот - этот кодогенератор - он будет жрать 4G памяти? Или он будет жрать 100KB памяти? Я думаю, второе. По крайней мере в моей практике кодогенераторы были и ни один из них не был таким ресурсоёмким. Я вообще плохо представляю себе оптимально написанный кодогенератор, который бы сожрал 4 ГБ памяти, какую задачу он должен решать.

И вот если мы кладём на одну чашу весов кодогенератор, который работает микросекунду и жрёт 100KB памяти, а на другую - абуз шаблонов С++, который работает 10 секунд и жрёт 4GB памяти, при одинаковом конечном результате, то становится очевидно, что в метапрограммировании C++ что-то пошло не так.

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

У меня был вполне реальный рабочий проект на плюсах, где один файл не собирался на 32-битных системах, потому что 4G памяти не хватало. Спасибо Boost и такой-то матери. А сервисом пользовались десятки тысяч людей каждый день, так что реальнее просто некуда.

Но это же дичь. Ты так пишешь, как будто это нормально. То, что метаязык в С++ сделан максимально ужасно и вообще по сути появился в какой-то мере случайно - это же известный факт. Этого надо стыдиться, а не приводить в пример.

Вообще все эти средства метапрограммирования надо сравнивать с кодогенерацией. Вот представь себе кодогенератор, который бы генерировал примерно то же, что генерирует компилятор, разворачивая шаблоны в этом твоём файле. Только написанный не на метаязыке С++, а, для простоты. на обычном С++. Просто выплёвывает текст программы, которую уже потом будет компилировать дальше компилятор. Вот - этот кодогенератор - он будет жрать 4G памяти? Или он будет жрать 100KB памяти? Я думаю, второе. По крайней мере в моей практике кодогенераторы были и ни один из них не был таким ресурсоёмким. Я вообще плохо представляю себе оптимально написанный кодогенератор, который бы сожрал 4 ГБ памяти, какую задачу он должен решать.

И вот если мы кладём на одну чашу весов кодогенератор, который работает микросекунду и жрёт 100KB памяти, а на другую - абуз шаблонов С++, который работает 10 секунд и жрёт 4GB памяти, при одинаковом конечном результате, то становится очевидно, что в метапрограммировании C++ что-то пошло не так.