Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, Григорьев Вячеслав Владимирович, Вы писали:
ГВВ>>Статья:
ГВВ>>Реализация новых парадигм программирования в C++: плюсы и минусыАвтор(ы): Григорьев Вячеслав Владимирович
Дата: 29.12.2011
В статье кратко рассматриваются плюсы и минусы реализации на C++ библиотек / сред, предлагающих разработчику новые парадигмы программирования или новое подмножество языка (Domain Specific Language). В качестве примера обсуждаются реализации функционального программирования в библиотеках boost::lambda и boost::phoenix.
J>Что-то как-то ни о чем.
Каждый имеет право на своё мнение. Правда не совсем ясно, почему дальше следует такой набор эмоций, если статья ни о чём.
J>Насчет отдельно стоящего функтора и прыжков по разным файлам — если функтор попал в отдельный файл, значит, он используется в нескольких местах и с лямбдой по месту будет в результате гораздо больше писанины и copy-paste, чем с вызовом функтора. В моей практике больше 70% воткнутых по месту лямбд в результате преобразовывались в функторы, так как требуемая функциональность требовалась в нескольких местах и поддерживать единообразие гораздо проще, когда у тебя один функтор, а не 20 раз повторенная в разных местах лямбда.
Этот абзац текста — реакция на какое-то место в статье? Приведите, пожалуйста, ссылку на конкретный абзац статьи. В таком виде, к сожалению, понять Вашу мысль, и как она относится к статье, не удаётся.
J>Плюс написано о C++0x, но при этом ниже по тексту старое доброе
С чего Вы это решили? Прочитайте, пожалуйста, внимательно примечание во введении. На всякий случай подскажу — оно начинается со строчки: "Ниже речь пойдёт о версии языка, наиболее широко используемой мировым сообществом до сентября 2011 года — ISO/IEC 14882:1998 / ISO/IEC 14882:2003." Ваши дальнейшие комментарии исходя из этого имеют сомнительную информативность. Тем не менее попробую прокомментировать.
J>Насчет сообщений об ошибках — во-первых, в С++0x есть static_assert (BOOST_STATIC_ASSERT), который печатает текстовое сообщение об ошибке, так что можно не возиться с массивами.
J>Во-вторых, автор, видимо, забыл или не знает о макросах типа BOOST_MPL_ASSERT_MSG, которые печатают вполне читабельные сообщения с кучей звездочек вокруг, так что они замечательно видны в выводе компилятора (а с использованием постпроцессора сообщений компилятора об ошибках вообще все становится замечательно, см. пример ниже), и плюс в них можно запихать типы — крайне полезная вещь в метапрограммировании на типах.
Макросы такого вида предназначены для авторов метабиблиотек, если те озаботились информативностью возможных ошибок компиляции их библиотек. Однако, если Вам предлагается библиотека, в которой широко используется метапрограммирование, но не заложены BOOST_MPL_ASSERT_MSG на все случаи жизни, то очень скоро Вы получите малочитаемое сообщение компилятора. В целом, сравнивать XYZ_ASSERT и диагностику компилятора, на мой взгляд, не корректно.
J>Хотя, естественно, с сообщениями компилятора они не сравнятся, но это гораздо больше, чем "массив или комментарий".
J>Плюс есть специальные техники (функции-перехватчики), позволяющие сильно уменьшить "простыню", генерируемую компилятором в процессе компиляции некорректного кода.
Пример, пожалуйста, в студию. Чтобы не быть голословным.
J>Далее, автор слегка лукавит, когда говорит, что есть два способа — имена и комментарии, так как комментарий сам по себе никому не виден. Эти способы используются вместе, чтоб по сообщению об ошибке типа
J>J>************NON_INTEGRAL_TYPES_ARE_NOT_ALLOWED(void*)************
J>
J>можно было прямо в студии сразу же прыгнуть на то место, где она сгенерирована, и прочитать комментарий (в котором могут быть, например, инструкции, как исправить пользовательский код, если это распространенная ошибка).
Не согласен. Комментарий вполне может использоваться отдельно от специально сгенерированного имени. Важно только, чтобы ошибка компиляции вела на строчку, рядом с которой этот комментарий расположен.
J>Замечание
J>J>Примечание: кстати, выражение (g_a << _1)(“test”) успешно компилируется и выполняется с использованием тестового кода микро-библиотеки, описанной выше.
J>вообще выглядит издевательством — еще бы оно не работало, если там везде параметры передаются по неконстантной ссылке.
Пример вырван из контекста.
<skip>
Полагаю, остальные реплики в комментариях не нуждаются. Всего наилучшего.