COMEFROM управления потоком - PullRequest
7 голосов
/ 11 мая 2011

Согласно википедии управление потоком COMEFROM считается шуткой, нечитаемым или совершенно вредным.Я полагаю, что такая функция была бы очень полезна в сценариях АОП (т.е. добавление регистратора в методы без добавления вызовов регистратора в методы).

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

Предлагается задать этот вопрос из-за this .

Ответы [ 2 ]

1 голос
/ 24 мая 2011

Для начинающих практически бесполезно на любом современном языке, потому что вам нужно либо:

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

Также:

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

Гораздо лучшая идея будет вместо:

  • Написать API для перехвата.
  • Вызов функции!
0 голосов
/ 24 мая 2011

Для упомянутой вами цели Аспектно-ориентированное программирование (Википедия) кажется более организованным решением, чем comefrom.См. В нижней части Мотивация и основные понятия (там же) пример того, как протоколирование может быть добавлено к методу в отдельной текстовой единице.

В достаточно динамичном языке это возможнодля обработки такого рода вещей с помощью модификаторов «обтекания» метода:

  def do_something
    ...
  end
  log :do_something, "Something got done"

В этом надуманном примере макрос log вызывает замену метода do_something новым методом, которыйсначала вызывает оригинальный метод do_something, а затем записывает что-то в журнал.

...