POP-2

POP-2

POP-2(POP-2라고도 함)는 에든버러 대학의 로빈 포플스톤과 로드 버스타올이 1970년경 개발한 초기 언어 POP-1(Robin Popplstone이 1968년에 개발, 원래 COWSEL로 명명함)에서 개발한 프로그래밍 언어다.그것은 LISP와 ALGOL 60 언어, 그리고 Peter J. Landin의 이론적 생각 등 많은 출처에서 뿌리를 뽑았다.그것은 증분 컴파일러를 사용했는데, 여기에는 프로그램을 실행하는 동안(둘 다 동적 컴파일의 특징인) 해석 언어의 오버헤드 없이 새로운 기능 정의를 허용하고 기능 정의를 수정하는 등 해석 언어의 유연성이 어느 정도 발휘되었다.[1]

설명

쌓다

POP-2의 구문은 알골과 비슷했다. 단, 과제는 글쓰기 대신 다른 방향이었다.

a := 3;

한 사람이 썼다.

3 -> a;

그 이유는 언어가 피연산자 스택에 대한 명시적 개념을 가지고 있기 때문에 이전 과제는 다음과 같은 두 개의 별도 문장으로 작성할 수 있었다.

3;

값 3을 평가하여 스택에 남겨두고

-> a;

스택에서 상위 값을 튀어나와 변수 'a'에 할당하는 경우.마찬가지로, 함수 호출

f(x, y, z);

라고 쓸 수 있다.

x, y, z; f();

(콤마와 세미콜론은 대부분 교환이 가능함) 또는 심지어

x, y, z.f;

또는

(x, y, z)f;

스택 기반 패러다임 때문에, 문장과 표현을 구별할 필요가 없었기 때문에, 두 가지 구조는

a > b인 경우 c -> e 다른 d -> e 닫힘;

그리고

a > b인 경우, 다른 c는 -> e;

등가였다(참고: 의 사용close, 로서endif아직 일반적인 종말형 표기법이 되지 않았다.)

배열 및 더블트 함수

일반적으로 이해되는 배열이나 기록 구조를 만들기 위한 특별한 언어 구조는 없었다. 대신, 그것들은 특별한 내장 기능(예: 어떤 종류의 항목도 포함할 수 있는 배열의 경우)과 제한된 유형의 항목을 만들기 위한 새로운 배열의 도움으로 만들어졌다.

따라서 배열 요소와 레코드 필드 접근자는 단순히 더블트 함수의 특수한 경우일 뿐인데, 이것은 다른 함수를 그것의 업데이터로 첨부한 함수였고, 이것은 과제 수신측에서 호출되었다.따라서 변수가a그리고 나서 배열을 포함했다.

3 -> a(4);

와 동등했다

업데이터(a)(3, 4);

내장 함수updater더블트 업데이터를 반환한다.물론이야.updater그 자체로 더블트였고 더블트의 업데이터 구성요소를 바꾸는 데 사용될 수 있었다.

기능들

변수는 기능을 포함한 모든 유형의 값을 포함할 수 있으며, 이는 1등급 객체였다.그러므로 다음과 같은 구성들이 있다.

함수 max x y, x > y인 경우 다른 x y 끝;

그리고

vars max; lambda x y; x > y인 경우 x y는 end -> max;

등가물이었다.

기능에 대한 흥미로운 조작은 부분 적용이었다. (때로는 "커싱"이라고도 한다.)부분적용에서 함수의 가장 오른쪽 수(함수가 관련되기 전에 스택에 마지막으로 배치되는)를 주어진 값으로 동결하여, 더 적은 수의 인수의 새로운 함수를 생성했는데, 이것은 원래 함수의 폐쇄다.예를 들어 일반 2급 다항식을 계산하는 함수를 고려하십시오.

함수 poly2 x a b c; * x x + b * x + c 끝;

예를 들어, 이것은 다음과 같이 구속될 수 있다.

vars lars1squared, poly2(% 1, -2, 1%) -> lars1squared;

그렇게 말하면

less1제곱(3)

3개의 주장이 동결된 상태에서 poly2의 폐쇄를 인수 3에 적용하여 (3 - 1)의 제곱을 4로 되돌린다.부분적으로 적용된 함수의 적용으로 인해 고정 값(이 경우 1, -2, 1)이 스택에 이미 있는 모든 것(이 경우 3)에 추가되고, 이후 원래의 함수 poly2가 호출된다.그런 다음 스택의 상위 4개 항목을 사용하여 동일한 결과를 산출한다.

poly2(3, 1, -2, 1)

즉

1*3*3 + (-2)*3 + 1

연산자 정의

POP-2에서는 새로운 운용(현대적 용어로 운용자)을 정의할 수 있었다.[2]

vars 연산 3 +*; 람다 x y; x * x + y * y 끝 -> nonop +*

첫 번째 줄은 우선순위(우선순위) 3으로 새로운 연산 +*를 선언한다.두 번째 라인은 함수 f(x,y)=x*x+y*y*y를 생성하여 새로 선언된 연산 +*에 할당한다.

역사

POP-2의 원본은 에든버러 대학교의 엘리엇 4130 컴퓨터에 구현되었다(64KB RAM만 가지고, 1972년에 128KB로 두 배 증가).

1970년대 중반 POP-2는 BESM-6(POPLAN System)에 포팅되었다.

이후 버전은 CTL Modular One, PDP-10, ICL 1900 시리즈(George 운영 체제 실행)에 대해 구현되었다.에든버러에 사는 줄리안 데이비스는 TOPS-10을 실행하는 PDP-10 컴퓨터에 POP-10이라고 하는 확장형 POP-2를 구현했다.이것은 식별자 이름에서 대소문자를 유의미하게 취급하고, 대부분의 시스템 식별자에 대해 소문자를 사용하며, 8자 이상의 긴 식별자를 지원하는 POP-2의 첫 번째 방언이었다.

그 직후, 에든버러에서 로버트 래와 앨런 램지에 의해 WPOP(WonderPop을 위한 WonderPop)으로 알려진 새로운 구현이 연구 협의회 자금 지원 프로젝트에 의해 실시되었다.이 버전은 다양한 데이터 구조와 함께 사용하기 위한 패턴 매칭 구조뿐만 아니라, 일부 컴파일 시간 구문 타이핑(예: 정수 및 실재)을 도입하였다.

서섹스 대학의 스티브 하디와 병행하여 POP-2의 서브셋을 구현했는데, 그는 이를 DEC PDP-11/40 컴퓨터로 실행한 POP-11이라고 불렀다.원래는 Teaching을 위한 시간 공유 모드로 DEC 운영체제 RSX-11D에서 실행되도록 설계되었지만, 그것은 너무 많은 문제를 야기하여 초기 버전의 Unix가 설치되고 대신 사용되었다.그 버전의 Pop-11은 Unix assembler로 작성되었고, 코드는 해석된 중간 바이트 코드로 증분 컴파일되었다.그 항구는 1976년경에 완공되었고 그 결과 Pop-11은 여러 곳에서 교편을 잡는데 사용되었다.그것의 교수 기능을 지원하기 위해 POP-2의 많은 통사적 특징들을 수정했다. 예를 들어, 기능 교체... ...을 정의하다. POP-2에서 모든 루프의 경우 클로즈 대신 클로즈 브라켓에 맞게 클로징 브래킷을 사용하여 보다 다양한 루프 구조를 정의하고 추가한다. Pop-11은 목록 구조를 위한 패턴 매처도 도입하여 AI 프로그래밍을 훨씬 쉽게 가르칠 수 있도록 하였다.

1980년경, Pop-11은 스티브 하디와 존 깁슨에 의해 VAX-11/780 컴퓨터에 포팅되었고, 곧이어 완전한 증분 컴파일러(해석된 중간 코드 대신 기계 코드를 생산함)로 대체되었다.컴파일러와 그 모든 서브루틴이 런타임에 존재함에 따라 매크로스에서 가능한 것보다 훨씬 풍부한 언어 확장을 지원할 수 있게 되었고, 그 결과 팝-11(Steve Hardy, Chris Mellish, John Gibson에 의해)을 사용하여 프롤로그의 표준 구문을 사용하여 프롤로그의 구현을 생산하게 되었고, 결합 시스템이 알게 되었다.나중에 Common Lisp 및 Standard ML이 추가된 Poplog로 n.이 버전은 나중에 다양한 기계와 운영체제에 포팅되었고 그 결과 POP-11은 POP-2의 지배적인 사투리가 되었고, 여전히 Poplog 시스템에서 사용할 수 있게 되었다.

1986년경, 새로운 AI 회사인 Cognition Applications Ltd.는 Sussex 대학교의 회원들과 협력하여 Apple Mac 컴퓨터에서 실행되는 알파팝이라고 불리는 팝-11의 변종을 통합 그래픽으로 제작했다.이것은 여러 대학에서 AI 프로그래밍을 가르치는 데 사용되었을 뿐만 아니라 많은 상업적 프로젝트에 사용되었다.독특한 컴파일러를 사용하여 C의 초기 사투리로 구현되었다는 사실은 맥 운영 체제의 새로운 버전을 유지하고 업그레이드 하는 것을 매우 어렵게 만들었다.여기에 더해 알파팝은 개체 유형을 나타내기 위해 하이 어드레스 비트를 '태그 비트'로 사용했기 때문에 '32비트 클린'이 되지 않아 이후 Macintosh에서 8Mb 이상의 메모리를 사용하는 것과 양립할 수 없었다.

참고 항목

참조

  • Burstall, R.; Collins, J.; Popplestone, R. (1968). Programming in Pop-2. Edinburgh: Edinburgh University Press.
  • Davies, D.J.M. (1976). "POP-10 Users' Manual". Computer Science Report (25).
  • Smith, R.; Sloman, A.; Gibson, J. (1992). "POPLOG's two-level virtual machine support for interactive languages". In D. Sleeman and N. Bernsen (ed.). Research Directions in Cognitive Science. Vol. 5: Artificial Intelligence. Lawrence Erlbaum Associates. pp. 203–231.
  • POP 참조 자료

외부 링크

참조

  1. ^ Burstall, R.M.; Collins, J.S.; Popplestone, R.J (1968). POP-2 Papers (PDF). London: The Round Table.
  2. ^ POP-2 참조 매뉴얼, 217페이지 및 프로그래밍 언어 연구의 소개, David William Barron, 75페이지