пятница, 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
Подписаться на:
Комментарии к сообщению (Atom)
6 комментариев:
а как же boost::program_options ?
Не подходит, причина простая - non-conventional синтаксис командной строки в нашей компании. Я конечно понимаю, что можно прикрутить к po свой парсер, но это больше подходит в тех случаях, когда синтаксис немного отличается и его нужно немного изменить.
в boost 1.41 обновился spirit, так что может быть ваши проблемы уже решены
там проблема не в spirit-e, проблема была в том, что я стал решать простую задачу очень сложными средствами
в boost 1.41 обновился spirit, так что может быть ваши проблемы уже решены
Отправить комментарий