조언(프로그래밍)

Advice (programming)

측면기능 프로그래밍에서, 조언은 후자가 실행될 때 다른 기능을 수정하는 기능의 클래스를 설명한다; 그것은 프로그램의 주어진 결합 지점에 적용되어야 하는 특정한 기능, 방법 또는 절차다.

사용하다

조언 기능의 실질적인 사용은 일반적으로 쉽게 수정하거나 확장할 수 없는 기능의 행동을 수정하거나 확장하는 것이다.Emacspeak Emacs-addon은 수천 개의 기존 Emacs 모듈과 기능을 수정하여 시각적 표시에 해당하는 시각장애인을 위한 오디오 출력을 생성해야 하지만, 이 모듈들을 모두 복사하고 다시 정의하여 정상적인 출력 외에 오디오 출력을 생성하는 것은 불가능하다.Emacspeak 프로그래머는 전후에 실행되는 조언 기능을 정의한다.

또 다른 Emacs의 예: 한 사람이 이스펠을 통해 철자가 틀린 단어를 수정한 후 전체 버퍼를 다시 확인하려고 한다고 가정합시다. ispell-word스펠링 체크된 단어가 수천 번 사용되더라도 그러한 기능은 제공하지 않는다.의 정의를 추적할 수 있다.ispell-word, 그것을 자신의 Emacs에 복사하고, 추가적인 기능들을 쓰지만, 이것은 지루하고, 깨지기 쉬운 것이다. (Emacs 버전은 실제 Ispell Elisp 모듈과의 동기화에서 벗어나게 될 것이다, 만약 그것이 집에서 작동한다면.원하는 것은 간단하다. 단지 다음에 다른 명령을 실행하는 것ispell-word조언 기능을 사용하여 다음과 같이 간단히 수행할 수 있다.

 (충고하지 않다 섬광 (다음에 충고)    (말을 함부로 하다))  (광고의 'ispeell' t) 

구현

조언의 형태는 1970년대 후반과 1980년대 초반에 클래스와 함께 C의 일부였고, 다시 말해 기능이라고 불린다.call그리고return클래스에 정의되며, 클래스의 멤버 함수 이전에 호출되었다.그러나 이것들은 C++[1]에서 떨어졌다.

조언은 다음과 같이 CLOS(Common Lisp Object System)의 일부분이다.:before,:after그리고:around"표준 방법 조합"에 따라 1차 방법과 결합되는 방법.[2]

공통 Lisp 구현은 (CLOST에 대한 표준 방법 조합에 추가하여) 조언 기능을 확장 기능으로 제공한다.LispWorks는[3] 조언 기능, 매크로 및 CLOST 방법을 지원한다.

EmacsLisp은 1994년 버전 19.28에서 조언 관련 코드를 추가했다.

역사

다음은 메일링 리스트의 토론에서 가져온 것이다.파스칼 코스탄자는 다음과 같은 기여를 했다.

조언이라는 용어는 워런 티텔만이 1966년 박사학위 논문에서 소개한 조언이라는 용어로 거슬러 올라간다.다음은 그의 논문의 3장에서 인용한 것이다.

조언은 모델과 파일럿 시스템의 기본적인 혁신이다.조언은 특정 절차(또는 절차 종류)에 대한 진입점 또는 출구 지점의 일부 또는 전체에 새로운 절차를 삽입하는 것으로 구성된다.삽입된 절차를 "자문 절차" 또는 간단히 "자문"이라고 한다.
각각의 조언은 그 자체가 하나의 절차이기 때문에, 그것은 그것 자체의 입력과 출구를 가지고 있다.특히, 이는 조언의 실행이, 예를 들어, 원래 절차의 출구 중 하나의 조언으로부터의 출구로 명시함으로써, 수정하는 절차를 완전히 우회하게 할 수 있다는 것을 의미한다. 또는 조언은 필수적인 변수를 변경하고 원래 절차가 실행되도록 계산을 계속할 수 있다. 그러나 m악화된 변수마지막으로, 이 조언은 실행을 변경하거나 원래 절차에 전혀 영향을 미치지 않을 수 있다. 예를 들어, 메시지 인쇄나 기록 기록 기록과 같은 추가 계산을 수행할 수 있다.조언은 조건부일 수 있기 때문에, 무엇을 해야 하는지에 대한 결정은 그 시점까지의 계산 결과에 따라 달라질 수 있다.
조언의 주된 장점은 사용자가 자신의 프로그램의 실제 변경에 대한 세부사항이나 조언의 내부 표현에 대해 걱정할 필요가 없다는 것이다.그는 권고되는 절차를 하나의 단위인 하나의 블록으로 취급하고, 이 블록의 세부사항에 대해 걱정하지 않고 변경할 수 있다.이는 프로그래머가 절차의 내부 구조를 인식해야 하는 편집과 대조될 수 있다.

"Advising"은 BBN Lisp과 나중에 제록스 PARCInterlisp으로 발전했다.

MIT에서 개발한 최초객체지향 확장인 플라워즈(Freats)로 가는 길도 찾았다.그들은 방법 조합이라는 개념으로 요약되었다.[4][a]

방법 조합과 매크로가 밀접하게 연관되어 있기 때문에, 최초의 매크로 시스템이 워렌 테이텔만의 박사학위 논문보다 3년 전인 1963년에 기술되었다는 점도 흥미롭다.[5][b]

참고 항목

메모들

그레고르 키치잘레스는 다음과 같이 논평한다.

  1. ^ 조언은 Freats in MaclispLisp Machine과는 별개로 나타났다.그때 인터리스피에서처럼 어떤 기능도 조언할 수 있었다.전/후의 온톨로지(Ontology)는 향미법에서 별도로 등장했다.
  2. ^ 메서드 조합과 매크로는 훨씬 나중에 뉴 플레이스(New Freats)와 CLOST(CLOST)에서 사람들이 메크로와 같은 메커니즘을 제공함으로써 사람들이 메서드를 결합하기 위한 그들만의 규칙을 정의할 수 있게 될 때까지만 약간의 관련이 있었다.그 이전에는 전후 방법의 조합과 소위 whopper 방법(주변)을 관리하는 규칙이 고정되었고, 컴파일러는 그 코드를 생성했다.포장지라는 것도 있었는데, 매크로 같은 행동을 하고 있었는데, 그 행동들이 돌아오면 잊어버린다.맥리스크와 리스트pm 매뉴얼의 다양한 버전을 훑어보고 이 부분을 정확히 맞히는 것은 흥미로울 수 있다.아니면 하워드 캐넌이나 데이비드 문이나 누군가가 실제로 그 모든 것을 정확히 기억할 수 있는 것일 수도 있다.

참조

  1. ^ C++의 설계와 진화, 페이지 57
  2. ^ "A Brief Guide to CLOS". Archived from the original on 2015-05-06. Retrieved 2015-04-27.
  3. ^ LispWorks 7 사용자 가이드 및 참조 매뉴얼, 조언 기능
  4. ^ 예를 들어 AIM-602(https://web.archive.org/web/20060913001624/http://www.ai.mit.edu/research/publications/browse/0600browse.shtml를 참조하십시오.
  5. ^ AIM-57(https://web.archive.org/web/20060913001624/http://www.ai.mit.edu/research/publications/browse/0000browse.shtml을 참조하십시오.

외부 링크