Ruby & Python vs grep

luna89

Есть некая хрень с состоянием. В ООП стиле код будет такой:

var hren = new Hren;
hren.open;
hren.work;
hren.close;

В неООП стиле - такой:

var hren = hren_create;
hren_open(hren);
hren_work(hren);
hren_close(hren);

Во втором случае мы можем легко найти грепом все вызовы метода hren_work, а в первом случае греп уже не работает. В случае если язык компилируемый, то можно закомментировать объявление метода work в классе Hren и посмотреть где ругнется компилятор. Но в языках типа Ruby или Python это не работает.
Вопрос к программистам на этих языках - как вы с этим справляетесь?

asvsergey

Правильным именованием экземпляров класса.
В том же питоне ты можешь передать функцию как параметр и ничего не найдешь потом грепом.

tinych1

Интересно, то есть ты предлагаешь ради этого дописывать в имя каждого экземпляра класса имя его типа?
Мне это всегда казалось излишним, да и в случае полиморфной работы это невозможно.

yroslavasako

как вы с этим справляетесь?
не писать больших проектов на скриптовых языках?

karkar

Или хотя бы искать не грепом. Для руби NetBeans довольно много всего умеет, например. Для петона тоже какие-то IDE были (pycharm?).

Alena_08_11

pycharm или rubymine + find usage ?

soroka000

Вообще я если честно не понимаю, как вы с такими проблемами сталкиваетесь вообще?
У меня Питон отлично пишет логи ексепшенов с полным стектрейсом.
По ним почти всегда понятно, что и почему пошло не так.

Commandor

Топикстартер видимо ищет способ найти грабли, не наступая на них. "Выкатить" код, а потом искать где упало по стектрейсам это как-то не профессионально.

6yrop

Правильным именованием экземпляров класса.
надежнее к именам классов и функций добавлять GUID

karkar

А в имена переменных добавлять GUID'ы всех типов и функций, которые могут в ней оказаться.

pilot

Топикстартер видимо ищет способ найти грабли, не наступая на них. "Выкатить" код, а потом искать где упало по стектрейсам это как-то не профессионально.
Вшмышле он не умеет тестировать? :o

6yrop

Вшмышле он не умеет тестировать?
Есть много разных видов тестирования. Компиляцию тоже можно рассматривать как определенный вид тестирования. Да, динамические языки не умеют выполнять такое тестирование.

pilot

Есть много разных видов тестирования.
ТС осилил только один? :o

6yrop

ТС осилил только один?
В треде обсуждаем не ТС, а вопрос, как найти вызовы метода в коде на Ruby & Python.

pilot

В треде обсуждаем не ТС, а вопрос, как найти вызовы метода в коде на Ruby & Python.
А если он (не дай боже) найдет в Питоне context managerы, то вообще же беда будет, hren.open никаким регекспом не найдешь. :o
Такшто надо грамотность ТС обсуждать — полезнее будет.

6yrop

А если он (не дай боже) найдет в Питоне context managerы, то вообще же беда будет, hren.open никаким регекспом не найдешь.
Хорошо, ты привел еще более сложный пример. Собственно, топикстартер и сам пишет, что регэкспы не работают. Т.е. теперь мы знаем способ, как задача НЕ решается. А что насчет решения? Как в коде на Питоне ищут вызовы методов? Посредством тестирования, но как? Можешь кратко описать?

val63

Ты так спрашиваешь, как будто не знаешь, что но тебе ответит "ботай азбуку, презренный червяк" и ничего больше

pilot

Посредством тестирования, но как?
Ботай азбуку, презренный червяк. :D

pitrik2

если статика то нормальные ИДЕ сильно облегчают жизнь
если динамика, то тут без дебаггера не обойдешься в любом языке
в том же Си указатель на функцию можно передать
а в Си++ можно передать смещение на член класса в какой-нибудь шаблон

soroka000

Спасибо кэп

6yrop

Посредством тестирования, но как?
Ботай азбуку, презренный червяк.
Еще важно время поиска (вызовов метода). При чтении кода, если у вас есть мгновенный поиск (в результате полный список на экране) это одно дело, и совершенно другое, если процесс типа: переименовали — посмотрели, где упало, посмотрели стектрейс. Мгновенный поиск — это "бесплатно", и не паришься об оценки временных затрат, не ищешь что-то другое.

6yrop

Вообще я если честно не понимаю, как вы с такими проблемами сталкиваетесь вообще?
У меня Питон отлично пишет логи ексепшенов с полным стектрейсом.
Кстати, сорци библиотек (из open source) вы тоже так читаете, через стектрейс? На питоне библиотеки всегда поставляются с тестами, которые гарантированно дают 100% результат для поиска вызовов метода?

bleyman

Я не уверен что я отвечаю на то, что ты хотел спросить, но я сурцы библиотек читаю в eclipse+pydev при помощи кнопки F3 (go to source). Как ни странно, она всегда работает — наверное, несмотря на то, что питон _позволяет_ делать страшные вещи, нормальные люди их делают только когда реально нужно, то есть редко и спрятав от прикладного разработчика.

6yrop

не, я немного о другом. Выше по треду писали, что типа в динамических языках для Finding Usages используется тестирование, типа удалил метод и смотришь, где упало. Но если продолжить эту мысль, то должны существовать инструменты наподобие dotCover/NCrunch, в которых граф вызовов строится на основе запуска тестов. Такие инструменты могли бы выдавать Finding Usages на основе этого динамического графа. Осталось дело за малым, кто-то должен обеспечивать полноту тестов. Поскольку ничего такого не нагугливается, есть предположение, что товарищи гонят на счет того, что Finding Usages делается через тестирование.
Оставить комментарий
Имя или ник:
Комментарий: