Отслеживание «иерархии отправителей» в актерах Scala - PullRequest
3 голосов
/ 19 января 2012

В настоящее время я поддерживаю несколько приложений Scala на основе актеров, и один вопрос, который я постоянно задаю себе, - Кто отправляет это сообщение?

Например, я нахожу фрагмент кода, который печатает страшное сообщение, которое я нашел в журналах:

case ReportFailedUpdates(stuff) =>
  log("The horror! The horror! " + stuff)
  dieHorribly()

и я хочу выяснить, в чем может быть причина. Если бы я не использовал актеров, я мог бы нажать Ctrl+Alt+H (по крайней мере, в Eclipse) и выяснить, кто «вызвал» этот «метод» (и кто назвал это, а кто назвал тот ). С актерами я нахожу себя в поиске ! ReportFailedUpdates(, чтобы найти, какие актеры отправляют это сообщение, а затем в поиске отправителей сообщения , на которое реагировал актер, и т. Д. (и обычно рисование результат на бумаге). Это имеет два недостатка:

  • Это медленнее, так как Eclipse выполняет текстовый поиск по (потенциально многим) проектам, и мне приходится записывать вещи вниз
  • Не обязательно найти все вхождения, поскольку, возможно, это было отправлено с !?, или, может быть, кто-то поставил два пробела между ! и ReportFailedUpdates, или, или, или ....

Что бы я любил - это некоторая инструментальная поддержка, которая позволяет мне выяснить, откуда могло прийти сообщение - примерно эквивалент иерархии вызовов для кода, не основанного на акторе.

Есть ли инструменты, которые это делают? Это особенность ScalaIDE для Eclipse, которую я просто не обнаружил? Если я буду использовать IntelliJ, станет ли моя жизнь лучше?

Обновление

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

1 Ответ

0 голосов
/ 19 января 2012

Ну, это довольно здоровенное желание, и я был бы очень впечатлен, если бы кто-то написал это, но я пока не видел ничего подобного.

Отслеживать это будет очень сложнотак как нет «стека» для отслеживания.Мне любопытно, почему вы не делаете этого, хотя:

case ReportFailedUpdates(stuff) =>
    log("The horror! The horror! %s (sent by %s)".format(stuff, sender))
    dieHorribly()

Это, по крайней мере, даст вам текущую ссылку в цепочке.

Также - я Vimпарень, извините за мое невежество - разве у вашей IDE нет лучшего механизма поиска, такого как Regexes?

...