메타서클 평가자

Meta-circular evaluator

컴퓨팅에서 MCE(meta-circular evaluator) 또는 MCI(meta-circular interpreter)는 인터프리터의 호스트 언어의 유사한 기능을 사용하여 인터프리터 언어의 각 특징을 정의하는 인터프리터입니다.예를 들어 람다 어플리케이션의 해석은 함수 [1]어플리케이션을 사용하여 구현될 수 있다.메타 순환 평가는 리스프의 맥락에서 가장 두드러진다.[1]자기 인터프리터는 해석된 언어가 호스트 언어와 거의 동일한 메타 순환 인터프리터입니다.두 용어는 종종 [2]동의어로 사용됩니다.

역사

Corrado Böhm[3] 논문은 자기 호스팅 컴파일러의 설계를 기술하고 있다.[4] 고차 함수를 컴파일하는 것이 어려웠기 때문에 대신 많은 언어가 통역사를 통해 정의되었으며, 특히 리스프가 가장 [1][5]두드러졌다. 용어 자체는 존 C에 의해 만들어졌다. 레이놀즈,[1] 그리고 [2][6]컴퓨터 프로그램의 구조와 해석이라는 에서의 사용을 통해 대중화되었습니다.

셀프 인터프리터

셀프 인터프리터는 [7]메타 서클인터프리터이며 호스트 언어도 통역 대상 언어입니다.자기통역은 해당 언어의 보편적인 기능을 나타내며 언어의 [8]특정 측면을 학습하는 데 도움이 될 수 있다.자기통역자는 대부분의 언어구조에 대한 순환적이고 공허한 정의를 제공하기 때문에 해석된 언어의 의미론(예: 평가 전략)에 대한 통찰력을 거의 제공하지 않습니다.이러한 문제를 해결함으로써 "정의적 해석자"[1]라는 보다 일반적인 개념을 도출할 수 있습니다.

전체 프로그래밍 언어로 자체 해석

강력하게 정규화되는 전체 기능 프로그래밍 언어는 튜링 완전할 수 없습니다. 그렇지 않으면 프로그램의 타입 체크 여부를 확인함으로써 정지 문제를 해결할 수 있습니다.이는 전체 언어로 [9]정의할 수 없는 계산 가능한 함수가 있다는 것을 의미합니다.특히 전체 프로그래밍 언어에서 자기 해석자를 정의하는 것은 불가능하다.예를 들어 단순 형식 람다 미적분, 장 이브 지라르의 시스템 F, 티에리 코캉구성 [10][11]미적분 등 어떤 형식 람다 계산에서도 마찬가지이다.여기서, 「셀프 인터프리터」라고 하는 것은, 소스 용어 표현을 몇개의 플레인 형식(문자열등)으로 취해, 대응하는 정규화된 용어의 표현을 반환하는 프로그램을 의미합니다.이 불가능한 결과는 "self-interpreter"의 다른 정의에는 적용되지 않습니다.예를 들어 일부 저자는 의 함수를자가 (\ \display})라고 언급하고 있습니다. 여기서 {\ \pi \,\display }는 {\ {\ {\ {\ {\ {\ {\ {\ {\ {\ {\ationsationsationsationsationsationsations forations for for forationsationsations for for forationsationsations ationsationsationsationsations for for →ations→혼란을 피하기 위해 이러한 기능을 자가 인식 기능이라고 합니다.Brown과 Palsberg는 자기 인식기를 시스템ω [12]F와 시스템 F를 포함한 몇 가지 강력한 정규화 언어로 정의할 수 있음을 보여주었다.이는 부호화된 용어의 유형이 해당 표현 유형에 반영되어 대각선 인수를 구성할 수 없기 때문에 가능한 것으로 판명되었습니다.브라운과 팔스버그는 논문에서 자기 해석이 불가능하다는 통념(그리고 그들은 통념의 한 예로서 위키피디아를 언급한다)을 반증한다고 주장하지만, 실제로 그들이 반증하는 것은 다른 개념인 자기 인식자의 불가능이다.후속 작업에서는 여기서 사용하는 보다 구체적인 "자기 인식자" 용어로 전환합니다. 특히 "자기 인식자"와 "자기 인식자"를 구분합니다. 은 → \ style \ \pi , \[13]그들은 또한 자기 평가를 시행하는 것이 자기 인식보다 어려워 보인다는 것을 인식하고, 강하게 정상화하는 언어로 전자의 시행을 미해결 문제로 남겨두었다.

사용하다

메타 순환 인터프리터는 기존 언어 구현과 조합하여 언어를 확장하기 위한 베이스라인 시스템을 제공합니다.더 많은 기능을 추가함으로써 위쪽으로 또는 [14]해석하기보다는 컴파일하여 아래쪽으로 언어를 확장합니다.또한 정교한 디버거와 [citation needed]같이 프로그래밍 언어와 긴밀하게 통합된 쓰기 도구에도 유용합니다.메타 [citation needed]서클 구현을 염두에 두고 설계된 언어는 호스트 언어와는 완전히 다른 언어라도 일반적으로 언어를 구축하는 데 더 적합합니다.

많은 언어에는 하나 이상의 메타 순환 구현이 있습니다.다음은 일부 목록입니다.

메타 순환 구현이 아래에서 위로 설계된 일부 언어는 시간 순서대로 그룹화됩니다.

일부 언어는 서드파티를 통해 메타 서클을 구현합니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b c d e Reynolds, John C. (August 1972). "Definitional Interpreters for Higher-Order Programming Languages" (PDF). Higher-Order and Symbolic Computation. 11 (4): 363–397. doi:10.1023/A:1010027404223. S2CID 43352033. Archived from the original (PDF) on 9 August 2017. Retrieved 14 April 2017.
  2. ^ a b "The Metacircular Evaluator". Structure and Interpretation of Computer Programs. MIT.
  3. ^ C. Böhm, Calcatrics 디지털.Du dechifrague des logico-mathématicques par la méme dans la conception du program, Ann. Mat. Pura Appl. (4) 37 (1954) 1-51
  4. ^ Knuth, Donald E.; Pardo, Luis Trabb (August 1976). The early development of programming languages. p. 36.
  5. ^ McCarthy, John (1961). "A Universal LISP Function" (PDF). Lisp 1.5 Programmer's Manual. p. 10.
  6. ^ Harvey, Brian. "Why Structure and Interpretation of Computer Programs matters". people.eecs.berkeley.edu. Retrieved 14 April 2017.
  7. ^ Braithwaite, Reginald (2006-11-22). "The significance of the meta-circular interpreter". Retrieved 2011-01-22.
  8. ^ Reynolds, John C. (1998). "Definitional Interpreters Revisited" (PDF). Higher-Order and Symbolic Computation. 11 (4): 356–7. doi:10.1023/A:1010075320153. S2CID 34126862. Retrieved 14 April 2017.
  9. ^ Riolo, Rick; Worzel, William P.; Kotanchek, Mark (4 June 2015). Genetic Programming Theory and Practice XII. Springer. p. 59. ISBN 978-3-319-16030-6. Retrieved 8 September 2021.
  10. ^ Conor McBride(2003년 5월), "종료 시" (Haskell-Cafe 메일링 리스트에 게시).
  11. ^ Andrej Bauer(2014년 6월), 답변: 튜링의 완전한 언어만이 해석할 수 있는 합계 언어(이론 컴퓨터 사이언스 스택 Exchange 사이트에 게시)
  12. ^ Brown, Matt; Palsberg, Jens (11 January 2016). "Breaking through the normalization barrier: a self-interpreter for f-omega" (PDF). Proceedings of the 43rd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages: 5–17. doi:10.1145/2837614.2837623. ISBN 9781450335492. S2CID 14781370.
  13. ^ Brown, Matt; Palsberg, Jens (January 2017). "Typed self-evaluation via intensional type functions". Proceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages: 415–428. doi:10.1145/3009837.3009853. ISBN 9781450346603.
  14. ^ Oriol, Manuel; Meyer, Bertrand (2009-06-29). Objects, Components, Models and Patterns: 47th International Conference, TOOLS EUROPE 2009, Zurich, Switzerland, June 29-July 3, 2009, Proceedings. Springer Science & Business Media. p. 330. ISBN 9783642025716. Retrieved 14 April 2017.
  15. ^ 피코 프로그래밍 언어의 메타 서클 구현

외부 링크