пятница, 20 ноября 2009 г.

Overengineering

Здравствуй дорогой дневник. Дело в том, что в фирме, в которой я работаю, принят общий стандарт для параметров командной строки. Поэтому, у каждого разработчика есть своя маленькая библиотека для превращения argc и argv в осмысленный набор данных. Велосипедостроение - наше все, поэтому я решил не отставать от остальных и сделать свою библиотеку, с преферансом и блудницами :) Но просто взять и написать - не спортивно, поэтому я решил использовать Boost.Spirit. Сказано - сделано, есть видимость того, что все работает, но тут возникают проблемы... Сначала на тестовых серверах, мои приложения отказываются понимать параметры, содержащие символы кириллицы, в процессе исправления этого бага, оказалось, что spirit-у нельзя подсунуть произвольную локаль. Затем, выясняется, что одно мое приложение должно запускаться неким сторонним приложением, в которое намертво зашита командная строка для запуска, причем она самую малость не соответствует нашему внутреннему стандарту и изменить это стороннее приложение нет никакой возможности. Потом, оказалось, что библиотека должна поддерживать не только именованные, но и позиционные параметры, что-то вроде этого: "C:\> program_name.exe positional arguments /Named:parameter", и даже логические параметры: "C:\> program_name.exe /FlagName". В итоге, я посмотрел на плод трудов тяжких и понял, что разобраться в этом через месяц будет очень сложно, после чего взял и переписал все заново :) У меня ушло 20 минут, на то, что-бы написать самый скучный и неинтересный код в моей жизни, если в двух словах, то там есть один большой switch, в каждом case-e которого есть еще один switch :D И вот этот "быдло-код" ушел в production, прекрасно работает, с ним не было никаких проблем. Неисповедимы пути твои, Господи :D

7 комментариев:

Анонимный комментирует...

а как же boost::program_options ?

Андрей Булавинов комментирует...

Если используется boost, то можно воспользоваться boost::program_options.
Если нужно что-то полегче — libcfg+

Lazin комментирует...

Не подходит, причина простая - non-conventional синтаксис командной строки в нашей компании. Я конечно понимаю, что можно прикрутить к po свой парсер, но это больше подходит в тех случаях, когда синтаксис немного отличается и его нужно немного изменить.

Andreo комментирует...

в boost 1.41 обновился spirit, так что может быть ваши проблемы уже решены

Lazin комментирует...

там проблема не в spirit-e, проблема была в том, что я стал решать простую задачу очень сложными средствами

Анонимный комментирует...
Этот комментарий был удален администратором блога.
Andreo комментирует...

в boost 1.41 обновился spirit, так что может быть ваши проблемы уже решены