Pull to refresh

Comments 43

Помог. буст — вообще очень интересная тема
Да, в бусте очень много «вкусностей».
Может Вы начнете писать и о других возможностях Boost? А то статей по этой библиотеке на русском очень мало, а на Хабре — так и вообще не сыскать.
Хорошо. Я уже думал об этом. А о чём бы вам хотелось услышать?
По просторам рунета гуляет единственная книга на русском про Boost (а вернее про Boost Graph Library). Поэтому о библиотеке графов, думаю, писать не нужно.

А вот о тех фичах, которые войдут в новый стандарт С++, очень хотелось бы услышать. Я не силен в Boost, но слышал, что там есть несколько видов смарт-поинтеров, очень удобные биндеры и т.д. и т.п.

Возможно, логичнее всего будет писать о тех вещах, которые наиболее применимы в повседневном программировании, если таковые там есть.
Ок. Про поинтеры у меня где-то валялся набросок. Может ещё про что-нибудь напишу.
Про смарт-поинтеры вроде у Мэйерса написано. Или в BGL — точно не помню.
Есть у Мейрса, у Саттера, у Александреску, и у Саттера и Александреску =).
Всё никак не дойду до книг Мэйерса :(
«Эффективное использование C++» — must have!
must have не достаточно! must read!
Уboost наредкость толковый мануал, 99% того что мне было нужно я находил именно там. Вообще штука просто супер, даже не знаю как без неё можно прогать. И что самое главное, постоянно выходят новые версии, с новыми возможностями!
Вроде boost должны в следующий стандарт С++ включить.
Далеко не весь и это правильно.
Спасибо. Радует, что на Хабре не только веб-дев.
Пожалуйста. Хотя это можно и к веб-деву прикрутить. Вроде «Создаём парсер XHTML на Boost Spirit».
В этом и соль, что языки разные, а подход очень похожий.
Идею понял. Возможно, тогда стоит эти две статьи как-то связать ссылками, чтобы оценить единство подходов — они же в разных блогах и со временем будет не понять, что они одно целое.
Ага, спасибо. Сейчас поправлю.
Почитал блог, понял. ок.
У неподготовленного читателя может возникнуть ощущение, что для решения задачи на C++ (по сравнению с Hackell) необходимо выполнить значительно большее количество приготовлений, хотя это не совсем так.

Во-первых нет необходимости писать акторы для занесения значений: можно воспользоваться предопределенными спиритом, например push_back_a (с промежуточным сохранением в переменных класса грамматики ссылки на последнюю секцию и Entry). Или можно воспользовавшись boost::phoenix описать эти действия прямо в грамматике в виде лямбда-функций.

А во-вторых, если в качестве контейнера воспользоваться boost::multiindex с композитным ключем, то поиск мы тоже получим out of box. (Правда при этом секции будут храниться при каждом ключе, но для ini файлов это скорее всего несущественно).

Ну и наконец — некоторая критика, относящаяся скорее к постановке задачи. Игнорирование комментариев проще и нагляднее описывать в самой грамматике — это добавит к ней всего пару строчек. Ну и парсить наверное удобнее прямо из файла, благо по крайней мере в спирите для этого есть все средства. Не то чтобы это было очень важно, но в учебной задаче, на мой взгляд, лишние действия маскируют суть.
Спасибо за критику. Идея удалять комментарии «ручками» связана с упрощением грамматики. Хотя, вероятно, это не особо изменилобы общую картину.
а нафига буст, не я понимаю если он используется во всем остальном проекте, но когда он нигде не используется то лучше обойтись стлом… если кому интересно немного недописанный (руки не доходят никак сделать нормальную шаблонность по значениям, на данный момент значения только строковые) парсер (и писальщик конфигов) на чистом стл, то пишите в личку
Можно и на ассемблерре написать, что уж там :) boost он чтобы не изобретать велосипеды.
и только ради каких-то там конфигов подключать доп либы? смысл?
да и потом стл это далеко не ассемблер
Статья просто показывает как при помощи boost spirit на основе некоторой грамматики написать парсер. Это не обязательно парсер конфигов — ini файлы просто достаточно простой пример.
ну значит я неправильно понял статью;) тогда уж лучше приводить пример на ПЛ/0 каком-нить, который тоже имеет достаточно простой синтаксис, но тем не менее является полной абстракцией от всего и сразу видно что чисто академический пример
А вы знаете аналог Boost Spirit на ПЛ/0 (хотя, честно говоря, я слышал только про ПЛ/1)?

Это не чисто академический пример. На его основе этой статьи можно, к примеру, написать парсер для текстовых запросов к своей информационной системе. Или свой DSL. Или ещё что-то.

Да, кстати, пресловутые конфиги таким образом тоже можно парсить (не обязательно ini файлы) =)
я имел в виду в качестве грамматики взять язык ПЛ/0, упаси боже на нем что-нибудь писать;)
Ну там и грамматика, вероятно, сложнее. И пример намного сильно оторванный от жизни. Вероятно из языков в качестве примера больше бы подошло какое-нибудь подмножество SQL.
ну это… как бе сказать… примеры они и должны быть оторваны от жизни… на то они и примеры
а грамматика не сильно сложнее, это язык, придуманный Виртом специально для написания примера лексического и синтаксического разборов
У меня вопрос ко всей достопочтенной публике. Откуда эта вездесущая боязнь использовать библиотеки для решения пускай даже и маленьких задач? Внесение зависимостей — это плохо? Чем? Боитесь, что сторонние библиотеки изменятся, и что-то перестанет работать? Так если перестало — не используйте новые версии, оставайтесь на старых. Библиотеки для того и существуют, чтобы с меньшими временными затратами решать поставленные задачи, используя совершенно точно лучше протестированные решения, чем собственный велосипед.
Спасибо за статью.
Как пример работы с бустом — интересно. Но для решения конкретной задачи конфигов, я бы порекомендовал посмотреть на libconfig (http://www.hyperrealm.com/libconfig/), либа маленькая с хорошими возможностями. Когда писал один проект, мы именно её решили использовать, и не пожалели. Хотя в последствии и перешли на хранение конфига в базе, но для cfg-like конфигов в виде файлов данная либа самое то.
Забавно, что буст используется для каких-то отдельных строковых операций, в то время как полный парсер ini-файла пишется за 10 минут с использованием boost.tokenizer или boost.spirit, если нужно что-то более навороченное.
Буст очень разнообразный: есть сложные вещи вроде spirit и bgl, а есть совсем простые вроде optional и scoped_ptr.
Хорошая статья.
Офтопик. Если задача не учебная, то, на мой взгляд, лучше выбрать какую-нибудь распространённую нотацию конфигурационных файлов и её импрелементацию для вашего языка программирования, а не тратить своё рабочее время на реализацию велосипедов. Сейчас я использую libconfig.
Зачем здесь boost:spirit, если есть boost:ptree? Он парсит xml, json, ini, info(собственный формат). И гораздо понятней. Я описал работу здесь.
Так статья-то не про ini файлы, а про boost::spirit. ini файлы — это всего лишь простой всем понятный пример.
Sign up to leave a comment.

Articles