Ruby & Python vs grep
В том же питоне ты можешь передать функцию как параметр и ничего не найдешь потом грепом.
Мне это всегда казалось излишним, да и в случае полиморфной работы это невозможно.
как вы с этим справляетесь?не писать больших проектов на скриптовых языках?
Или хотя бы искать не грепом. Для руби NetBeans довольно много всего умеет, например. Для петона тоже какие-то IDE были (pycharm?).
pycharm или rubymine + find usage ?
У меня Питон отлично пишет логи ексепшенов с полным стектрейсом.
По ним почти всегда понятно, что и почему пошло не так.
Топикстартер видимо ищет способ найти грабли, не наступая на них. "Выкатить" код, а потом искать где упало по стектрейсам это как-то не профессионально.
Правильным именованием экземпляров класса.надежнее к именам классов и функций добавлять GUID
А в имена переменных добавлять GUID'ы всех типов и функций, которые могут в ней оказаться.
Топикстартер видимо ищет способ найти грабли, не наступая на них. "Выкатить" код, а потом искать где упало по стектрейсам это как-то не профессионально.Вшмышле он не умеет тестировать?
Вшмышле он не умеет тестировать?Есть много разных видов тестирования. Компиляцию тоже можно рассматривать как определенный вид тестирования. Да, динамические языки не умеют выполнять такое тестирование.
Есть много разных видов тестирования.ТС осилил только один?
ТС осилил только один?В треде обсуждаем не ТС, а вопрос, как найти вызовы метода в коде на Ruby & Python.
В треде обсуждаем не ТС, а вопрос, как найти вызовы метода в коде на Ruby & Python.А если он (не дай боже) найдет в Питоне context managerы, то вообще же беда будет, hren.open никаким регекспом не найдешь.
Такшто надо грамотность ТС обсуждать — полезнее будет.
А если он (не дай боже) найдет в Питоне context managerы, то вообще же беда будет, hren.open никаким регекспом не найдешь.Хорошо, ты привел еще более сложный пример. Собственно, топикстартер и сам пишет, что регэкспы не работают. Т.е. теперь мы знаем способ, как задача НЕ решается. А что насчет решения? Как в коде на Питоне ищут вызовы методов? Посредством тестирования, но как? Можешь кратко описать?
Ты так спрашиваешь, как будто не знаешь, что но тебе ответит "ботай азбуку, презренный червяк" и ничего больше
Посредством тестирования, но как?Ботай азбуку, презренный червяк.
если динамика, то тут без дебаггера не обойдешься в любом языке
в том же Си указатель на функцию можно передать
а в Си++ можно передать смещение на член класса в какой-нибудь шаблон
Спасибо кэп
Посредством тестирования, но как?Еще важно время поиска (вызовов метода). При чтении кода, если у вас есть мгновенный поиск (в результате полный список на экране) это одно дело, и совершенно другое, если процесс типа: переименовали — посмотрели, где упало, посмотрели стектрейс. Мгновенный поиск — это "бесплатно", и не паришься об оценки временных затрат, не ищешь что-то другое.
Ботай азбуку, презренный червяк.
Вообще я если честно не понимаю, как вы с такими проблемами сталкиваетесь вообще?Кстати, сорци библиотек (из open source) вы тоже так читаете, через стектрейс? На питоне библиотеки всегда поставляются с тестами, которые гарантированно дают 100% результат для поиска вызовов метода?
У меня Питон отлично пишет логи ексепшенов с полным стектрейсом.
Я не уверен что я отвечаю на то, что ты хотел спросить, но я сурцы библиотек читаю в eclipse+pydev при помощи кнопки F3 (go to source). Как ни странно, она всегда работает — наверное, несмотря на то, что питон _позволяет_ делать страшные вещи, нормальные люди их делают только когда реально нужно, то есть редко и спрятав от прикладного разработчика.
Finding Usages используется тестирование, типа удалил метод и смотришь, где упало. Но если продолжить эту мысль, то должны существовать инструменты наподобие dotCover/NCrunch, в которых граф вызовов строится на основе запуска тестов. Такие инструменты могли бы выдавать Finding Usages на основе этого динамического графа. Осталось дело за малым, кто-то должен обеспечивать полноту тестов. Поскольку ничего такого не нагугливается, есть предположение, что товарищи гонят на счет того, что Finding Usages делается через тестирование.
не, я немного о другом. Выше по треду писали, что типа в динамических языках для Оставить комментарий
luna89
Есть некая хрень с состоянием. В ООП стиле код будет такой:В неООП стиле - такой:
Во втором случае мы можем легко найти грепом все вызовы метода hren_work, а в первом случае греп уже не работает. В случае если язык компилируемый, то можно закомментировать объявление метода work в классе Hren и посмотреть где ругнется компилятор. Но в языках типа Ruby или Python это не работает.
Вопрос к программистам на этих языках - как вы с этим справляетесь?