스킴 프로그래밍 언어의 이력

History of the Scheme programming language

프로그래밍 언어 계획의 역사는 20세기 후반 동안 리스프 어족의 초기 언어들의 발달로 시작된다.Scheme의 설계 및 개발 기간 동안 언어 디자이너 Guy L. Steel과 Gerald Jay Sussman람다 페이퍼(1975–1980)로 알려진 영향력 있는 MIT AI 메모 시리즈를 출시했습니다.이것은 언어의 인기의 증가와 1990년 이후 표준화 시대로 이어졌다.Scheme의 많은 역사가 개발자들에 의해 기록되었습니다.[1]

선사 시대

스킴의 개발은 서로 상당히 다른 두 가지 이전 버전에 의해 큰 영향을 받았다: 리스프는 그것의 일반적인 의미와 구문을 제공했고, ALGOL은 그것의 어휘 범위와 블록 구조를 제공하였다.스킴은 리스프의 방언이지만 리스프는 진화했다; 스킴이 진화한 리스프 방언은 당시 주류였지만 현대의 리스프와는 상당히 다르다.

리스프

리스프는 1958년 존 맥카시매사추세츠 공과대학에 있을 때 발명되었다.McCarthy는 1960년 Communications of the ACM의 "Recursive Functions of Symbolic Expressions and Thees Computation by Machine, Part I"[2]라는 제목의 논문에서 디자인을 발표했습니다(Part II는 출판되지 않았습니다).그는 몇 개의 간단한 연산자와 함수에 대한 표기법으로 알고리즘에 대한 튜링-완전 언어를 만들 수 있다는 것을 보여주었다.

리스프의 구문을 특징짓는 s-표현의 사용은 처음에 McCarthy가 "m-표현"이라고 부르는 것을 사용하는 언어가 개발될 때까지의 잠정적인 조치로서 의도되었다.예를 들어 m-식은car[cons[A,B]]s-변환에 상당합니다.(car (cons A B))그러나 S-표현식이 인기를 끌었고 m-표현식을 구현하려는 많은 시도는 인기를 끌지 못했다.

Lisp의 첫 번째 구현은 IBM 704에서 McCarthy의 논문을 읽고 그가 기계어로 설명한 평가 함수를 코드화한 Steve Russell에 의해 이루어졌다.리스트의 선두 요소와 그 꼬리를 설명하기 위해 Lisp에서 사용되는 CARCDR은 두 개의 IBM 704 어셈블리 언어 명령어인 Contents of Address Register와 Contents of Decrement Register에서 발전했습니다. 각 명령어는 36비트 IBM 704 세그먼트에 해당하는 15비트 레지스터의 내용을 반환했습니다.구조어

Lisp로 작성된 최초의 완전한 Lisp 컴파일러는 1962년 [3]MIT의 Tim Hart와 Mike Levin에 의해 구현되었습니다.이 컴파일러는 컴파일된 함수와 해석된 함수가 자유롭게 혼합될 수 있는 증분 컴파일의 리스프 모델을 도입했습니다.

스킴의 개발에서 가장 중요한 Lisp의 두 가지 변형은 모두 MIT에서 개발되었습니다. McCarthy와 기타에 의해 개발된 LISP[4] 1.5와 Multics[5] 시스템에서 실행되는 LISP 1.5의 직계 후손인 MIT의 Project MAC을 위해 개발된 Maclisp입니다.

설립 이래 리스프는 인공지능(AI) 연구 커뮤니티, 특히 PDP-10과 밀접하게 연결되어 있었다.PDP-6PDP-10의 36비트 워드사이즈는 1개의 [6]워드에2개의 Lisp 18비트포인터가 있는 것의 유용성에 영향을 받았습니다.

인식하다

ALGOL 58은 원래 "International Algorithmic Language(국제 알고리즘 언어)"의 IAL로 불리던 것으로 1958년 ETH Zurich에서 열린 회의에서 유럽과 미국의 컴퓨터 과학자들에 의해 공동 개발되었습니다.이후 파리에서 열린 ALGOL 60 회의에서 개발된 개정판인 ALGOL 60은 알고리즘의 출판 표준이 되었고, 언어의 상업적 성공과 한계에도 불구하고 미래의 언어 개발에 지대한 영향을 미쳤다.토니 호어는 다음과 같이 말했다. "여기서는 그 시대에 너무 앞선 언어가 있어서 이전 언어뿐만 아니라 거의 모든 [7]후속 언어들에 대한 개선이었다."

ALGOL은 블록 구조와 어휘적 범위의 사용을 도입했습니다.또한 프로시저 또는 함수 실행 시 형식 파라미터 대신 작업 파라미터를 나타내는 식을 텍스트로 대체하도록 정의되어 실행 시 참조될 때마다 재평가되도록 이름별 디폴트 파라미터 전달 메커니즘으로 악명이 높다.on. ALGOL 구현자는 thunk라고 불리는 메커니즘을 개발하여 작업 파라미터의 컨텍스트를 캡처하여 프로시저 또는 함수 실행 중에 평가할 수 있게 합니다.

배우 모델 칼 휴이트와 스킴의 탄생

1971년 서스먼, 드류 맥더못, 유진 차르니악은 칼 휴이트야심찬 플래너 프로젝트의 부분적이고 다소 불만족스러운 구현인 마이크로-플래너라는 시스템을 개발했다.Sussman과 Hewitt은 Muddle(나중에 MDL로 개명)에서 다른 사람들과 함께 일했습니다.Muddle은 Hewitt 프로젝트의 구성 요소를 구성하는 확장 리스프(Lisp입니다.Drew McDermott와 Sussman은 1972년에 리스프에 기반을 둔 언어 Conniver를 개발했는데, 이것은 그들이 비생산적이라고 생각했던 Planner의 자동 역추적 사용을 수정한 것입니다.Hewitt는 코니버의 "허리 컨트롤 구조"가 플래너의 문제에 대한 해결책이라고 의심했다.Pat Hayes는 다음과 같이 말했습니다.「하지만, Planner의 실장 원리에 유저가 액세스 할 수 있도록 하는, 그들의 [Sussman and McDermott]솔루션은 퇴보적인 단계입니다(Conniver의 의미론이란 무엇입니까?)"[8]

1972년 11월, Hewitt와 그의 학생들은 [9]Planner의 문제에 대한 해결책으로 Actor의 계산 모델을 발명했습니다.Actors의 부분적인 구현은 Planner-73 (나중에 PlASMA로 불림)로 개발되었습니다.당시 MIT 대학원생이었던 Steel은 이러한 개발을 따라왔고, 그와 Sussman은 모델을 더 잘 이해하기 위해 Maclisp에서 개발한 자체 "tiny Lisp"에 Actor 모델의 버전을 구현하기로 결정했습니다.그 후, 이러한 기초를 이용해, 그들은 배우를 만들고 [10]메시지를 보내기 위한 메커니즘을 개발하기 시작했다.

PLASMA의 어휘 범위 사용은 람다 미적분과 유사했다.서스만과 스틸은 람다 미적분학의 배우들을 모델로 삼기로 결심했다.이들은 모델링 시스템을 Schemer라고 불렀고, 결국 DEC PDP-10ITS 파일 시스템에 6자 제한을 맞추기 위해 Scheme로 변경했습니다.그들은 곧 Actors가 본질적으로 돌아오지 않고 대신 계속을 호출하는 폐쇄라고 결론지었고, 따라서 그들은 조사 목적상 폐쇄와 Actor가 본질적으로 동일한 개념이라고 결정했다.그들은 불필요한 코드를 제거했고, 그 시점에서 그들이 매우 작고 능력 있는 리스프 사투리를 썼다는 것을 알게 되었다.Hewitt는 Scheme의[11][12] "유아한 제어 구조"에 대해 비판적인 입장을 견지하고 있으며, 원초적인 것으로 간주하고 있습니다(예:START!PROCESS,STOP!PROCESS,그리고.EVALUATE!UNINTERRUPTIBLY)는, 스킴의 실장에서는, 역순서로 사용됩니다.

25년 후인 1998년, Sussman과 Steel은 Scheme의 미니멀리즘은 의식적인 설계 목표가 아니라 설계 과정의 의도하지 않은 결과라고 반성했습니다."우리는 실제로 복잡한 것을 만들려고 하다가 우연히 모든 목표를 달성했지만 의도했던 것보다 훨씬 단순한 것을 설계했다는 것을 알게 되었습니다.우리는 람다 미적분(작고 단순한 형식주의)이 강력하고 표현력 있는 프로그래밍 언어의 핵심 역할을 할 수 있다는 것을 깨달았다."[10]

한편, Hewitt는 계산 기사의 기초로서 람다 미적분에 대해 비판적인 입장을 견지했다. "실제 상황은 γ-calculus가 어떤 종류의 순차적 및 병렬 제어 구조를 표현할 수 있지만 일반적으로 Actor 모델에서 표현되는 동시성은 표현되지 않는 것이다.반면 액터 모델은 모든 것을 θ-calculus 등으로 표현할 수 있습니다.그는 또한 람다 미적분으로부터 파생된 지속 함수에 대한 의존과 [13]예외의 결여와 같은 스킴의 측면에 대해서도 비판적이었다.

람다 페이퍼즈

1975년과 1980년 사이에 서스먼과 스틸은 람다 미적분, 연속성 및 꼬리 재귀 최적화와 같은 다른 고급 프로그래밍 개념을 사용하는 아이디어를 개발했고, 그것들을 일련의 AI 메모에 발표했는데, 이 메모는 총칭으로 람다 [14]페이퍼라고 불리게 되었다.

논문 목록

  • 1975: 스킴:확장 람다 미적분 해석기
  • 1976: 람다:궁극의 임포메이션
  • 1976: 람다:궁극의 선언문
  • 1977년: '비싼 프로시저 호출' 신화 또는 절차 호출 구현이 유해하다고 간주됨 또는 람다:궁극의 GOTO
  • 1978: 통역자의 예술 또는 모듈러 콤플렉스 (제0부, 제1부, 제2부)
  • 1978년: RABBIT: SKEME용 컴파일러
  • 1979: LISP 기반 프로세서 설계(SKEME: LISP의 방언, 즉 유해하다고 간주되는 유한 메모리(LAMBDA): 궁극의 연산 코드
  • 1980: LAMBDA를 RENAME + GOTO로 표시한 컴파일러 최적화
  • 1980: 리스프 기반 프로세서 설계

영향을 주다

스킴은 어휘 범위를 선택한 리스프어의 첫 번째 방언이다.또한 레이놀드의 Definitional[15] Language 이후 최초의 프로그래밍 언어 중 하나이며, 1등급 연속지원합니다.그것은 Guy Steel이 [16]기여했던 자매 언어인 Common Lisp의 발전을 이끈 노력에 큰 영향을 미쳤다.

표준화

스킴 언어는 전기전자공학협회([17]IEEE)의 공식 표준과 알고리즘 언어 스킴(RnRS)에n 관한 개정 보고서라고 불리는 사실상의 표준으로 표준화되어 있습니다.가장 널리 구현된 표준은 R5RS(1998년)[18]이며,[20] 새로운 표준인 R6RS[19]2007년에 비준되었다.RnRS 표준 외에 체계 구현에 의해 추가될 수 있는 추가 라이브러리를 포함하는 체계 구현 요청 문서도 있습니다.

타임라인

1955 1960 1965 1970 1975 1980 1985 1990 1995 2000 2005 2010 2015 2020
LISP 1, 1.5, LISP 2(abandoned)
마클리스프
인터리스크
MDL
리스프 기계 리스프
스킴 R5RS R6RS R7RS 소형
없음
ZIL(Zork 구현 언어)
프란츠 리스프
일반적인 리스프
르 리스프
MIT 스킴
T
체즈 스킴
Emacs 리스프
자동 LISP
피코리스프
EuLisp
ISLISP
오픈리스프
PLT 방식 라켓
GNU Guile
비주얼 LISP
클로쥬르
LFE
하이

레퍼런스

  1. ^ Steele, Guy (2006). "History of Scheme" (PDF slideshow). Sun Microsystems Laboratories.
  2. ^ McCarthy, John. "Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I". Archived from the original on 2013-10-04. Retrieved 2006-10-13.
  3. ^ Hart, Tim; Levin, Mike. "AI Memo 39, The New Compiler" (PDF). Archived from the original (PDF) on 2020-12-13. Retrieved 2006-10-13.
  4. ^ McCarthy, John; Abrahams, Paul W.; Edwards, Daniel J.; Hart, Timothy P.; Levin, Michael I. (1985). LISP 1.5 Programmer's Manual. MIT Press. ISBN 978-0-262-13011-0.
  5. ^ "Maclisp Reference Manual". March 3, 1979. Archived from the original on 2007-12-14.
  6. ^ Hurley, Peter J. (18 October 1990). "The History of TOPS or Life in the Fast ACs". Newsgroup: alt.folklore.computers. Usenet: 84950@tut.cis.ohio-state.edu. The PDP-6 project started in early 1963, as a 24-bit machine. It grew to 36 bits for LISP, a design goal.
  7. ^ Hoare, Tony (December 1973). Hints on Programming Language Design (PDF). p. 27. (이 스테이트먼트는, 최초ALGOL 60 컴파일러의 실장에도 관여하고 있는 Edsger W. Dijkstra에 의해서 잘못 해석되는 경우가 있습니다).
  8. ^ Hayes, Pat (1974). "Some Problems and Non-Problems in Representation Theory". Society for the Study of Artificial Intelligence and the Simulation of Behaviour (AISB).
  9. ^ Hewitt, Carl; Bishop, Peter; Steiger, Richard (1973). "A Universal Modular Actor Formalism for Artificial Intelligence". IJCAI. {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  10. ^ a b Sussman, Gerald Jay; Steele Jr., Guy L. (December 1998). "The First Report on Scheme Revisited" (PDF). Higher-Order and Symbolic Computation. 11 (4): 399–404. doi:10.1023/A:1010079421970. ISSN 1388-3690. S2CID 7704398. Archived from the original (PDF) on 2006-06-15. Retrieved 2006-06-19.
  11. ^ Hewitt, Carl (December 1976). "Viewing Control Structures as Patterns of Passing Messages". AI Memo 410.
  12. ^ Hewitt, Carl (June 1977). "Viewing Control Structures as Patterns of Passing Messages". Journal of Artificial Intelligence. 8 (3): 323–364. doi:10.1016/0004-3702(77)90033-9. hdl:1721.1/6272.
  13. ^ Hewitt, Carl (2009). "ActorScript: Industrial strength integration of local and nonlocal concurrency for Client-cloud Computing". arXiv:0907.3330 [cs.PL].
  14. ^ "Online version of the Lambda Papers". Archived from the original (PDF) on 2018-06-25.
  15. ^ Reynolds, John (1972). "Definitional interpreters for higher order programming languages". ACM Conference Proceedings. Association for Computing Machinery.
  16. ^ "Common Lisp Hyperspec – 1.1.2 History". LispWorks. 2005. Retrieved 2018-12-02.
  17. ^ 1178-1990 (R1995) 스킴 프로그래밍 언어 IEEE 표준
  18. ^ Kelsey, Richard; Clinger, William; Rees, Jonathan; et al. (August 1998). "Revised5 Report on the Algorithmic Language Scheme". Higher-Order and Symbolic Computation. 11 (1): 7–105. doi:10.1023/A:1010051815785.
  19. ^ Sperber, Michael; Dybvig, R. Kent; Flatt, Matthew; Van Straaten, Anton; Findler, Robby; Matthews, Jacob (August 2009). "Revised6 Report on the Algorithmic Language Scheme". Journal of Functional Programming. 19 (S1): 1–301. CiteSeerX 10.1.1.154.5197. doi:10.1017/S0956796809990074. S2CID 62724224.
  20. ^ "R6RS ratification-voting results".