суббота, 4 февраля 2012 г.

[prog.flame] Все-таки я сторонник статической типизации…

…да еще и с обязательной аннотацией типов!

Для выполнения срочного заказа копаюсь в исходниках старого проекта, части которого надеюсь переиспользовать. И приятно, когда видишь объявление вроде:

/*!
* Выполнение подписки на сообщения msg_raw_package
* всех транспортных агентов.
 */
void
subscribe_to_msg_raw_package(
   const std::string & agent_name,
   const direction_state_ptr_vector_t & direction_states );

Сразу понимаешь какие типы у аргументов и что возвращается. А то, помнится, приходилось дорабатывать одну маленькую программку на Ruby. Заглянешь в код через год-полтора после последнего изменения и… Куришь потом бамбук :) Какой тип у аргументов, возвращает ли что-нибудь метод? Благо комментарии были.

Справедливости ради, нужно сказать, что с динамически типизированным Ruby была такая особенность – много времени приходилось тратить на восстановление в памяти деталей работы. Зато потом все очень легко было в уме держать. А вот с плюсами ситуация чуть иная – детали довольно быстро восстанавливаются за счет синтаксиса языка. Но потом с ними сложнее – может больше их, может еще чего (проекты на плюсах все-таки посерьезнее рубиновых были).

Тем не менее, лично я спокойнее берусь за доработку старого плюсового кода, чем Ruby-нового. Все-таки подробные аннотации в коде – это очень полезная штука.

Ну и на последок еще одна банальность – пишите комментарии. Чем больше напишите, тем проще будет затем разбираться с кодом. Проверено на себе ;)

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

PPS. И еще одно. Доходят до меня слухи, что одним из самых популярных языков программирования сейчас является динамически-типизированный JavaScript. На котором пишут все больше и больше, и даже есть какие-то проекты объемом в сотни тысяч строк (не знаю правда это или нет). Исходя из вышесказанного сочувствую тем, кто лет через надцать будет эту прорву JS-кода сопровождать. С другой стороны, возможно, это будет настоящее золотое дно. Похлеще знаменитой Y2K Problem ;)

1 комментарий:

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

в то время как языки со статической типизацией жестко сковывают творчество программиста временем компиляции, языки с динамической типизацией, напротив, позволяют совершать ошибки динамично, во время исполнения программы

это предлагаемое мной продолжение известной байки "многозадачные операционные системы позволяют исполнять несколько ошибок одновременно"