Строгая типизация?

Mar 03, 2008 14:59

Закончил недавно относительно большой проект по работе -- ~10k строк на несколько подзабытом мной C++.

Дабы не было совсем скучно, решил использовать исключительно статический полиморфизм -- вышло даже достаточно удобно, в итоге virtual даже не понадобился ни разу. Единственно, немного напрягли сначала длиннющие сообщения об ошибках, но я их ( Read more... )

code, bugs, typing, c++, daily

Leave a comment

Comments 18

potan March 3 2008, 13:45:22 UTC
"Длиннющие сообщения" о несерьезных ошибках? И есть уверенность, что одну такую ошибочку не пришлось бы потом пол дня искать, если бы не компилятор?

if наверняка без {} написал :-). В FreeBSD coding style требует отсутствия скобок, если оператор в ifе единственный. В результате даже очень хорошие программисты пытаются туду добавить второй, забыв добавить скобки.

Я такой аккуратностью похвастаться не могу. Мне типизация сильно в отладке помогает. На C++, правда, много ошибок связанных с "политикой владения" бывает (эх, надо на Cyclone переходить).

Reply

swizard March 3 2008, 14:02:50 UTC
> "Длиннющие сообщения" о несерьезных ошибках? И есть уверенность, что одну такую ошибочку не пришлось бы потом пол дня искать, если бы не компилятор?

В моем случае, это, в основном, были забытые manual template instantiation (хз как это перевести) -- я библиотеку делал. Так что без компилятора явные ошибки бы вылезли при первом же запуске программы :)

> if наверняка без {} написал :-) В FreeBSD coding style требует отсутствия скобок, если оператор в ifе единственный. В результате даже очень хорошие программисты пытаются туду добавить второй, забыв добавить скобки.

Странно. FreeBSD coding style заодно требует табуляцию в 8 пробелов, так что очень сложно не заметить, что оператор не попал в блок if :) Не, у меня там был {}, просто я уже в готовый код if добавлял, и потом часть операторов внес в блок, а один забыл (то ли промахнулся, то ли тупняк нашел какой-то).

> Я такой аккуратностью похвастаться не могу. Мне типизация сильно в отладке помогает.Ну я там указал "имхо" =) Вообще у меня и на динамических языках проблемы с типизацией ( ... )

Reply


thesz March 3 2008, 14:14:53 UTC
"Количество ошибок связанных с типизацией - 0"

1) Это потому, что тебе их все выловили,
2) C++ не проверяет хотя бы "достаточно хорошо."

Напиши проектик на 1K строк на Хаскеле или Камле. Все будет совсем по-другому.

Reply

swizard March 3 2008, 15:11:21 UTC
> 1) Это потому, что тебе их все выловили

Я их просто не совершил =)

> 2) C++ не проверяет хотя бы "достаточно хорошо."

Тоесть, ошибки у меня все-таки есть, но не обнаружены и всплывут потом? :)

> Напиши проектик на 1K строк на Хаскеле или Камле. Все будет совсем по-другому.

Я с радостью, только пока времени маловато. К тому же, это только докажет, что в сильная типизация хорошо помогает в хаскелле или камле :)

Reply

thesz March 3 2008, 16:51:04 UTC
Я имел в виду, что то, что обычно ловится проверкой типов, ты ловил с помощью отладчика (REPL). Потому, что плюсы проверяют плохо.

Во-во. Ты взял в качестве примера плохой вариант статической проверки типов и на основании этого делаешь далеко идущие выводы.

Reply

swizard March 3 2008, 20:41:35 UTC
Я не делаю далеко идущих выводов, я просто в очередной раз отметил, что конкретно я совсем не страдаю от слабой типизации :) И посему никак не могу понять, почему мощную типизацию считают оверкиллом.

Reply


ext_87317 March 3 2008, 14:41:41 UTC
Ну дело думаю не в динамическом или статическом полиморфизме, а пожалуй в твоей аккуратности :) Для себя я учёл, что главное избегать кучи зависимостей между компонентами во избежание побочных эффектов и огромных деревьев наследования. Но для написания библиотек статичный полиморфизм подходит определённо лучше, так можно играться ещё и с разными политиками-темплэйтами. Да и к слову про всякие сегфолты я вообще почти забыл, вылазят только когда косячу в обёртках к сишным либам.
П.С. Неужели не одного virtual? Даже CRTP не использовал?
П.П.С. Boost существенно облегчает жизнь, меньше _своих_ костылей - чище и читаймее код.

Reply

swizard March 3 2008, 15:08:26 UTC
> Для себя я учёл, что главное избегать кучи зависимостей между компонентами во избежание побочных эффектов и огромных деревьев наследования.

У меня имхо, что главное -- это максимально возможный code reuse, но только без фанатизма :)

> Неужели не одного virtual? Даже CRTP (http://en.wikipedia.org/wiki/Curiously_Recurring_Template_Pattern) не использовал?

Неа :) Из всей этой магии только mixin'ы пригодились, и даже очень в тему оказались.

> Boost существенно облегчает жизнь, меньше _своих_ костылей - чище и читаймее код.

Возможно, но у нас в компании его люто ненавидят =) Почему так, я сам особо не понял, но, видимо, были какие-то прецеденты :)

Reply


(The comment has been removed)

swizard March 3 2008, 20:38:52 UTC
А тебе в таком масштабе слабая типизация очень жизнь отравляет, или проблемы скорее другого плана? :)

Reply


makcnmka March 4 2008, 05:10:01 UTC
Уже год на работе с паттернами вожусь... Скоро на sourceforge выложися! До сих пор не понимаю - кому нужен такой сложный код?... =( Всё это уже давно прекрасно работает и просто пишется на других языках более высокого уровня.

Reply


Leave a comment

Up