Re[10]: Метапрограммисты надоели
От: Patalog Россия  
Дата: 09.10.14 07:29
Оценка: :)
Здравствуйте, Kernighan, Вы писали:

[]

K>Ну, это очередной контейнер данных.

K>Конечно, это помогает. Но вряд ли это составляет хотя бы 20% работы программиста.

У не любителей буста, и по совместительству любителей, велосипедов — наверное все 80%
А если учесть, что они эти лисапеды нифига не тестят, а потом тратят кучу времени на поиск и фикс в них багов — то собственно этим в основном они и занимаются. Я лично насмотрелся на все эти самописные стороки\списки\мютексы ...
Не, есть конечно команды, которые осознано отказываются от буста\стл и т. д. и у которых есть свои вменяемые аналоги нужных им кирпичиков.
Правда я таких в живую не встречал, только и инторнетах, по типу — "и вы говорите" (с).

ЗЫ Вместо "буста" здесь можно подставить тот же qt. Да даже и std, т. к. пересечение множества не любителей буста и не любителей STL нифига не пусто.
Почетный кавалер ордена Совка.
Re[11]: Метапрограммисты надоели
От: CreatorCray  
Дата: 09.10.14 07:41
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Так ты предложи внятную замену спириту. А то много кому не нравится буст и спирит в частности, но ничего внятного на замену предложить не могут.

Генераторов парсеров нафигачено более чем достаточно.
Проблема в метапрограммировании на шаблонах — стремительно растущее время компиляции при росте сложности парсера + отладка всей этой херни уж очень на любителя.
Чисто с менеджерской точки зрения — код на спирите банально высокорисковый и слишком завязан на автора.

I>И вот здесь, внезапно, оказывается так, что любой человек, который способен написать внятный парсер, становится незаменимым при поддержке кода.

Внятно написанный парсер проще поддерживать и развивать.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[12]: Метапрограммисты надоели
От: jazzer Россия Skype: enerjazzer
Дата: 09.10.14 08:07
Оценка: +1
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, Ikemefula, Вы писали:


I>>Так ты предложи внятную замену спириту. А то много кому не нравится буст и спирит в частности, но ничего внятного на замену предложить не могут.

CC>Генераторов парсеров нафигачено более чем достаточно.

И? Покажи класс, чтоб мы все увидели, что решения не на спирите низкорисковые, их отладка не на любителя, ничего не завязано на автора, код понятный и легко поддерживаемый?

CC>Проблема в метапрограммировании на шаблонах — стремительно растущее время компиляции при росте сложности парсера + отладка всей этой херни уж очень на любителя.

Компиляция — да (но это улучшается с приходом С++11), а вот с отладкой вообще никогда проблем не было.

CC>Чисто с менеджерской точки зрения — код на спирите банально высокорисковый и слишком завязан на автора.

Мой опыт противоречит этим утверждениям.

CC>Внятно написанный парсер проще поддерживать и развивать.


+1. А что невнятного в спирит-парсере?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[12]: Метапрограммисты надоели
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 09.10.14 08:21
Оценка:
Здравствуйте, CreatorCray, Вы писали:

I>>Так ты предложи внятную замену спириту. А то много кому не нравится буст и спирит в частности, но ничего внятного на замену предложить не могут.

CC>Генераторов парсеров нафигачено более чем достаточно.

Нет в мире простых генераторов парсеров. Для просто грамматики все просто, но, что характерно, не проще чем парсер комбинаторы (спирит). Для сложной — надо приседать и приседать.

CC>Проблема в метапрограммировании на шаблонах — стремительно растущее время компиляции при росте сложности парсера + отладка всей этой херни уж очень на любителя.

CC>Чисто с менеджерской точки зрения — код на спирите банально высокорисковый и слишком завязан на автора.

Отладкой спирита не надо заниматься, нужно думать над внятной грамматикой. А вот когда на выходе AST, там надо и повозиться с отладкой. Что характерно, работу с АСТ тебе ни один генератор парсеров не заменит.

I>>И вот здесь, внезапно, оказывается так, что любой человек, который способен написать внятный парсер, становится незаменимым при поддержке кода.

CC>Внятно написанный парсер проще поддерживать и развивать.

Спирит это, считай, в чистом виде БНФ. Идея простая до безобразия — комбинаторы парсеров.
Отредактировано 09.10.2014 8:26 Pauel . Предыдущая версия .
Re[11]: Метапрограммисты надоели
От: Хон Гиль Дон Россия  
Дата: 09.10.14 09:15
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Исправленный код:

J>
( *~bs::chset_p("\x1F\"") )[ bs::assign_a( attr.StrValue ) ]>> !bs::ch_p( 0x1F );

J>(вообще, для такого простого парсера достаточно коротенького регэкспа ([^\x1F"]*)\x1F?, так что я предполагаю, что это часть какого-то большого парсера)

CC>>На деле оказывается проще сразу расстрелять агитирующих за спирит и изначально писать на чёи либо другом.


J>Критикуя — предлагай! (с)


J>yacc? bison? scanf? istream?


Чисто врукопашную получается не сильно длиннее

template <class It, class Str> void foo(It& start, It e, Str& attr)
{
  It s = start;
  for (; s != e; ++s)
    if (*s == '0x1F' | *s == '\"')
      break;
  // можно добавить здесь условие if (s != start) чтобы было как со спиритом
  attr = Str(start, s);
  if (*s == '0x1F')
    ++s;
  start = s;
}


О том, какой вариант понятнее, можно спорить. Зато компилируется влет и когда вложишь штук 30 парсеров друг в друга — не придется по исходникам вылавливать наличие всяких там FUSION_MAX_VECTOR_SIZE. Я уж не говорю про BOOST_SPIRIT_THREADSAFE и прочие грабли, которых в либе такого размера наверняка пара штук припрятана.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[15]: Метапрограммисты надоели
От: slava_phirsov Россия  
Дата: 09.10.14 09:51
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Но в любом случае в современном C++ это уже всё давно не актуально. )


После std::initializer_list (2011г) — да. Вопрос, нужен ли бы был std::initializer_list, если бы в C++ были нормальные встроенные массивы —


Любители оптимизации, считающие, что неявная передача размера губит им производительность, могли бы использовать передачу указателя на первый элемент в явном виде (откуда бы вызываемая функция узнала размер массива, это уже другой вопрос, но, наверное, откуда-нибудь бы узнала, ну там ограничивающий элемент в конце, например).


Для совместимости с C можно было бы оставить "разложение" массива до указателя для случая функций со спецификатором extern "C".

И уж ни в C, ни в C++ нет оправдания вот такому:

void foo(int x[4]);

...

int z[3] = {};

foo(z); // ну вот тут-то компилятор мог бы возмутиться!!! Ну я так думаю...



Эээх, но это же было все не прикольно, WG21 прикольно было играться с шаблонами, исключениями, множественным наследованием, виртуальными базовыми классами, а вот довести до ума массивы — скучно.
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Отредактировано 09.10.2014 9:58 slava_phirsov . Предыдущая версия .
Re[15]: Метапрограммисты надоели
От: slava_phirsov Россия  
Дата: 09.10.14 09:51
Оценка:
Здравствуйте, kurchatov, Вы писали:

K>Все C API, принимающие массив, принимают также и его размер.


strlen

И подобных примеров C API, определяющих конец массива по некоему терминальному элементу (обычно — нуль, хотя "есть нюансы") я видел немало.
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Re[12]: Метапрограммисты надоели
От: jazzer Россия Skype: enerjazzer
Дата: 09.10.14 10:05
Оценка: +1 :)
Здравствуйте, Хон Гиль Дон, Вы писали:

J>>Исправленный код:

J>>
( *~bs::chset_p("\x1F\"") )[ bs::assign_a( attr.StrValue ) ]>> !bs::ch_p( 0x1F );

J>>(вообще, для такого простого парсера достаточно коротенького регэкспа ([^\x1F"]*)\x1F?, так что я предполагаю, что это часть какого-то большого парсера)

ХГД>Чисто врукопашную получается не сильно длиннее


ХГД>template <class It, class Str> void foo(It& start, It e, Str& attr)
ХГД>{
ХГД>  It s = start;
ХГД>  for (; s != e; ++s)
ХГД>    if (*s == '0x1F' | *s == '\"')
ХГД>      break;
ХГД>  // можно добавить здесь условие if (s != start) чтобы было как со спиритом
ХГД>  attr = Str(start, s);
ХГД>  if (*s == '0x1F') // вот здесь ты разыменовываешь е (если в строке не было 1F и кавычки)
ХГД>    ++s;            // а здесь ты вылетаешь за е
ХГД>  start = s;        // и возвращаешь этот веселый итератор обратно через start
ХГД>}


ХГД>О том, какой вариант понятнее, можно спорить. Зато компилируется влет и когда вложишь штук 30 парсеров друг в друга — не придется по исходникам вылавливать наличие всяких там FUSION_MAX_VECTOR_SIZE. Я уж не говорю про BOOST_SPIRIT_THREADSAFE и прочие грабли, которых в либе такого размера наверняка пара штук припрятана.


Да не о чем спорить, все в комментах к коду выше
Спасибо за иллюстрацию
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[13]: Метапрограммисты надоели
От: Хон Гиль Дон Россия  
Дата: 09.10.14 10:19
Оценка:
Здравствуйте, jazzer, Вы писали:


J>
ХГД>>template <class It, class Str> void foo(It& start, It e, Str& attr)
ХГД>>{
ХГД>>  It s = start;
ХГД>>  for (; s != e; ++s)
ХГД>>    if (*s == '0x1F' | *s == '\"')
ХГД>>      break;
ХГД>>  // можно добавить здесь условие if (s != start) чтобы было как со спиритом
ХГД>>  attr = Str(start, s);
J>ХГД>  if (*s == '0x1F') // вот здесь ты разыменовываешь е (если в строке не было 1F и кавычки)
ХГД>>    ++s;            // а здесь ты вылетаешь за е
ХГД>>  start = s;        // и возвращаешь этот веселый итератор обратно через start
ХГД>>}
J>


ХГД>>О том, какой вариант понятнее, можно спорить. Зато компилируется влет и когда вложишь штук 30 парсеров друг в друга — не придется по исходникам вылавливать наличие всяких там FUSION_MAX_VECTOR_SIZE. Я уж не говорю про BOOST_SPIRIT_THREADSAFE и прочие грабли, которых в либе такого размера наверняка пара штук припрятана.


J>Да не о чем спорить, все в комментах к коду выше

J>Спасибо за иллюстрацию

Ну да, косякнул, в низкоуровневом коде это бывает чаще. Зато найти это на порядок проще, чем последствия неприменения BOOST_SPIRIT_THREADSAFE, коих на прошлой неделе в коде коллег пришлось воткнуть три штуки.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[14]: Метапрограммисты надоели
От: niXman Ниоткуда https://github.com/niXman
Дата: 09.10.14 10:29
Оценка:
Здравствуйте, Хон Гиль Дон, Вы писали:

ХГД>Ну да, косякнул, в низкоуровневом коде это бывает чаще. Зато найти это на порядок проще, чем последствия неприменения BOOST_SPIRIT_THREADSAFE, коих на прошлой неделе в коде коллег пришлось воткнуть три штуки.

так забавно видеть оправдания последствий нечтения доки =)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[15]: Метапрограммисты надоели
От: Хон Гиль Дон Россия  
Дата: 09.10.14 10:48
Оценка:
Здравствуйте, niXman, Вы писали:


ХГД>>Ну да, косякнул, в низкоуровневом коде это бывает чаще. Зато найти это на порядок проще, чем последствия неприменения BOOST_SPIRIT_THREADSAFE, коих на прошлой неделе в коде коллег пришлось воткнуть три штуки.

X>так забавно видеть оправдания последствий нечтения доки =)

Я вообще не видел пользователей spirit, которые бы про этот дефайн из доки узнали. Я про него, например, узнал, когда разбирался чего у меня boost::serialization при работе с xml архивами падает. И если не ошибаюсь, то оно до сих пор в бусте по умолчанию так небезопасно и собирается.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[14]: Метапрограммисты надоели
От: jazzer Россия Skype: enerjazzer
Дата: 09.10.14 10:55
Оценка: +1
Здравствуйте, Хон Гиль Дон, Вы писали:

ХГД>Здравствуйте, jazzer, Вы писали:



ХГД>>>  if (*s == '0x1F') // вот здесь ты разыменовываешь е (если в строке не было 1F и кавычки)
ХГД>>>    ++s;            // а здесь ты вылетаешь за е
ХГД>>>  start = s;        // и возвращаешь этот веселый итератор обратно через start
ХГД>>>}


ХГД>>>О том, какой вариант понятнее, можно спорить.

J>>Да не о чем спорить, все в комментах к коду выше
J>>Спасибо за иллюстрацию

ХГД>Ну да, косякнул, в низкоуровневом коде это бывает чаще.

О чем и речь. Вместо простецкого полуоднострочного спирит-парсера (который еще короче записывается вообще регэкспом), есть полотенце низкоуровневого кода, в котором мало что понятно, зато легко напортачить и потом разгребать коредампы.

ХГД>Зато найти это на порядок проще, чем последствия неприменения BOOST_SPIRIT_THREADSAFE, коих на прошлой неделе в коде коллег пришлось воткнуть три штуки.

Ну это разве что если сравнивать с поиском многопоточных ошибок.
Потому что ошибки парсинга и обработки краевых случаев искать замучаешься.
А ведь ты там еще что-то про 30 вложенных парсеров писал...
Ну недаром же генераторы парсеров придумали, ой, недаром

А насчет многопоточности — не проще компилятору -DBOOST_SPIRIT_THREADSAFE скормить, раз уж у вас многопоточный парсинг, и забыть о проблеме раз и навсегда?

Не говоря уж о том, что это болезнь древнего спирита 1.х, в спирите-2 ее нет уже лет пять как:
http://boost-spirit.com/home/2010/11/07/multi-threaded-qi-6-hours-37-seconds/
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[11]: Метапрограммисты надоели
От: TimurSPB Интернет  
Дата: 09.10.14 10:56
Оценка:
TSP>>>И у спирита есть ещё одна фича(?) — тот кто написал вещи типа:
TSP>>>
( *( bs::anychar_p - bs::ch_p( 0x1F ) - bs::ch_p( '"' ) ) )[ bs::assign_a( attr.StrValue ) ]>> !bs::ch_p( 0x1F );


J>Исправленный код:

J>
( *~bs::chset_p("\x1F\"") )[ bs::assign_a( attr.StrValue ) ]>> !bs::ch_p( 0x1F );

J>(вообще, для такого простого парсера достаточно коротенького регэкспа ([^\x1F"]*)\x1F?, так что я предполагаю, что это часть какого-то большого парсера)
Да именно так — часть большого парсера. Сам написал четыре года назад, впервые решив использовать спирит.
Недавно возник вопрос по коду. SVN показывает, что это писал я. В комите ссылка на баг в трекере, в котором написанно про проблемы со старыми файлами. "Падает на символе 0x1F"
Make flame.politics Great Again!
Re[16]: Метапрограммисты надоели
От: niXman Ниоткуда https://github.com/niXman
Дата: 09.10.14 10:57
Оценка:
Здравствуйте, Хон Гиль Дон, Вы писали:

ХГД>Я вообще не видел пользователей spirit, которые бы про этот дефайн из доки узнали. Я про него, например, узнал, когда разбирался чего у меня boost::serialization при работе с xml архивами падает. И если не ошибаюсь, то оно до сих пор в бусте по умолчанию так небезопасно и собирается.


ну я про этот макрос узнал из тестов спирита, он там используется.
в доке не искал, да. но я хз, неужели этот макрос не упоминается в доке?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Отредактировано 09.10.2014 10:59 niXman . Предыдущая версия .
Re[12]: Метапрограммисты надоели
От: jazzer Россия Skype: enerjazzer
Дата: 09.10.14 11:01
Оценка:
Здравствуйте, TimurSPB, Вы писали:

TSP>Да именно так — часть большого парсера. Сам написал четыре года назад, впервые решив использовать спирит.


То есть ты здесь дал пример кода, написанного человеком, который "впервые решил использовать спирит", и предлагаешь нам сделать на его основе далеко идущие выводы о самом спирите?
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[13]: Метапрограммисты надоели
От: TimurSPB Интернет  
Дата: 09.10.14 11:07
Оценка:
TSP>>Да именно так — часть большого парсера. Сам написал четыре года назад, впервые решив использовать спирит.
J>То есть ты здесь дал пример кода, написанного человеком, который "впервые решил использовать спирит", и предлагаешь нам сделать на его основе далеко идущие выводы о самом спирите?
Выводы каждый сам сделает. Но если мне понадобится сделать парсер, то я всё таки буду использовать спирит. Но делать это надо осознанно.
Make flame.politics Great Again!
Re[17]: Метапрограммисты надоели
От: jazzer Россия Skype: enerjazzer
Дата: 09.10.14 11:10
Оценка:
Здравствуйте, niXman, Вы писали:
X>в доке не искал, да. но я хз, неужели этот макрос не упоминается в доке?
упоминается, конечно
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[15]: Метапрограммисты надоели
От: Хон Гиль Дон Россия  
Дата: 09.10.14 11:22
Оценка:
Здравствуйте, jazzer, Вы писали:

ХГД>>Ну да, косякнул, в низкоуровневом коде это бывает чаще.

J>О чем и речь. Вместо простецкого полуоднострочного спирит-парсера (который еще короче записывается вообще регэкспом), есть полотенце низкоуровневого кода, в котором мало что понятно, зато легко напортачить и потом разгребать коредампы.

Когда там спирита набегает не одна строка, а хотя бы десять, 200 строк низкоуровнего кода уже не выглядят столь ужасными. Лично для меня, естественно.

ХГД>>Зато найти это на порядок проще, чем последствия неприменения BOOST_SPIRIT_THREADSAFE, коих на прошлой неделе в коде коллег пришлось воткнуть три штуки.

J>Ну это разве что если сравнивать с поиском многопоточных ошибок.
J>Потому что ошибки парсинга и обработки краевых случаев искать замучаешься.

Это при применении спирита их искать замучаешься А уж если надо вычислять позицию, на которой случился синтакс еррор — вообще вешайся. А с низкоуровневым кодом пофиг, все прекрасно отлаживается, если чего-то не хватает — дописать можно без многочасовых копаний в доках или чужих исходниках.

J>А ведь ты там еще что-то про 30 вложенных парсеров писал...


Дебаг итераторам это без разницы

J>Ну недаром же генераторы парсеров придумали, ой, недаром


J>А насчет многопоточности — не проще компилятору -DBOOST_SPIRIT_THREADSAFE скормить, раз уж у вас многопоточный парсинг, и забыть о проблеме раз и навсегда?


Можно, конечно. Но кто вообще знал, что spirit через property_tree затянуло

J>Не говоря уж о том, что это болезнь древнего спирита 1.х, в спирите-2 ее нет уже лет пять как:

J>http://boost-spirit.com/home/2010/11/07/multi-threaded-qi-6-hours-37-seconds/

Ну так зачем было примеры на классике постить Ки, конечно, значительно лучше, но и там привязка семантических действий вся такая же неудобная и по-прежнему чертова уйма уровней вложенности.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[17]: Метапрограммисты надоели
От: Хон Гиль Дон Россия  
Дата: 09.10.14 11:27
Оценка:
Здравствуйте, niXman, Вы писали:

ХГД>>Я вообще не видел пользователей spirit, которые бы про этот дефайн из доки узнали. Я про него, например, узнал, когда разбирался чего у меня boost::serialization при работе с xml архивами падает. И если не ошибаюсь, то оно до сих пор в бусте по умолчанию так небезопасно и собирается.


X>ну я про этот макрос узнал из тестов спирита, он там используется.


Ну сам же видишь — дока в этом плане бесполезна

X>в доке не искал, да. но я хз, неужели этот макрос не упоминается в доке?


В доке к спириту упоминается. Но, например, в доке к serialization при него вроде бы ничего нет и автор сериализации, похоже, вообще про него не знал. Я его спрашивал когда-то, а как типа твою либу с таким дефайном собирать, а то не линкуется, thread требует — внятного ответа не получил.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[3]: Метапрограммисты надоели
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 09.10.14 12:45
Оценка:
Здравствуйте, NeoCode, Вы писали:

NC>Но считаю что врага надо знать в лицо У меня тоже есть хобби — разработка своего языка программирования, не менее (и даже гораздо более) мощного чем С++, но без всей этой головной боли.

Может стоит посмотреть на Ada?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.