7

wikipedia에 따르면 COMEFROM 흐름 제어는 농담으로 간주되어 읽을 수 없거나 완전히 해로운 것으로 간주됩니다. 이러한 기능은 AOP 시나리오 (즉, 로거 호출을 메소드에 추가하지 않고 메소드에 로거를 추가하는 것)에서 매우 유용하다고 생각합니다.COMEFROM 제어 흐름

이러한 제어 구조의 비 명백한 단점은 잠재적 유용성보다 중요합니까? 고려해야 할 다른 단점이 있습니까?

this 때문에이 질문을 묻습니다. 당신이 필요로하기 때문에 우선 들어

+0

제목에서 다음과 같이 생각할 수 있습니다. –

+1

이렇게 로깅을 추가하면 (사실상) 제어 흐름이 매우 어렵다는 사실은 중요하지 않습니다. 왜냐하면 " 로깅에 대해 "알 필요가 있습니다. 실제로 실을 짠 것은 일반화 된 COMEFROM 구문없이 구현됩니다. 만약 당신이 그것을 쉽게 지원하지 않는 언어에 AOP를 추가하고 싶다면 COMEFROM이 실제로 그렇게 많은 도움을 줄지 확신하지 못합니다. 예를 들어 C에서는 GOTO의 범위에 포함되지 않는 COMEFROM 장소가 필요합니다. 따라서 코드가 어지럽 혀지는 것을 막기위한 구문상의 설탕이 아니라 C가 아닌 직조에 필요한 모든 메커니즘이 있습니다. –

+0

@ 존 그것은 재미있는 아이디어가 내 잘못이 아니야 :) – Goran

답변

1

는 현대의 언어로 기본적으로 쓸모하려면 다음 중 하나를

  • 참조 라인 번호로에서 이동하는 위치, 이들은 휘발성이다.
  • 코드에서 점프 할 수있는 위치를 나타 내기 위해 마커 또는 레이블을 배치하여이를 수행하지 않아도되는 이점을 모두 없앱니다. 또한

:

  • 본질적으로 쓸모 검사 디버깅의 종류를 만든다.
  • 문제를 묻는 변수를 지속적으로 보관하지 않으면 점프 한 곳의 컨텍스트를 실제로 캡처 할 수 없습니다.

훨씬 더 좋은 생각 대신에 다음과 같습니다

  • 가 후킹 API를 작성합니다.
  • 함수를 호출하십시오!
0

Aspect Oriented Programming (위키 백과)은 comefrom보다 체계적인 솔루션으로 보입니다. 별도의 텍스트 단위로 메소드에 로깅을 추가하는 방법에 대한 예제는 Motiviation and Basic Concepts (ibid)의 하단을 참조하십시오.

충분히 동적 언어

,이 방법을 "랩 어라운드"수식어를 사용하여 이런 종류를 처리 할 수있다 :이 인위적인 예에서

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

상기 log 매크로에 do_something 방법 원인 먼저 원래의 do_something 메서드를 호출 한 새로운 메서드로 대체 한 다음 로그에 무엇인가를 씁니다.

관련 문제