PL/M

PL/M
개발자게리 킬달(소속: Microcomputer Applications Associates)
발표일1973년 (1973)
영향을 받은 언어
PL/I, XPL
영향을 준 언어
CP/M, PLuS

PL/M은 Programming Language for Microcomputers(마이크로컴퓨터를 위한 프로그래밍 언어)의 약자로, 1973년 게리 킬달이 인텔의 행크 스미스를 위해 인텔 8008용으로 구상 및 개발한 고수준 프로그래밍 언어이다. 이후 최신 프로세서인 인텔 8080용으로 확장되었다.

8080은 PL/M 컴파일러를 실행할 수 있는 충분한 성능을 갖추었으나, 적절한 형태의 대용량 스토리지가 부족했다. 언어를 PDP-10에서 8080으로 이식하기 위한 노력의 일환으로, 킬달은 플로피 디스크를 사용할 수 있게 해주는 디스크 운영체제를 작성하기 위해 PL/M을 사용했다. 이것이 CP/M의 기반이 되었다.

역사

킬달은 1973년 캘리포니아주 몬터레이에 있는 미국 해군대학원에서 근무하면서 컴퓨터 실험실을 갖추기 위한 자금을 받았는데, 처음에는 MCS-4 기반의 SIM4를, 1년 뒤에는 인텔 8008 기반의 인텔 인텔렉 8을 도입했다. 고용 조건의 일부로 킬달은 일주일에 하루를 자신의 프로젝트에 사용할 수 있도록 허가받았으나, 곧 VW 마이크로버스에서 생활하며 산타클라라에 위치한 인텔 사무실 주차장에서 그보다 훨씬 많은 시간을 보내게 되었다.

어느 날 그는 인텔의 소형 마이크로컴퓨터 소프트웨어 부서 관리자인 행크 스미스를 찾아갔다. 킬달은 8008을 위한 고수준 언어를 만들겠다는 자신의 아이디어를 설명했다. 스미스가 그 개념을 이해하지 못하자 킬달은 프로그래머가 X = Y + Z와 같은 코드를 작성하면 프로그램이 이를 수행할 여러 줄의 어셈블리어 코드로 변환해 줄 것이라고 설명했다. 스미스는 즉시 인텔의 고객 중 한 곳에 전화해 이러한 제품에 관심이 있는지 물었고, 고객이 관심을 표하자 스미스는 킬달에게 즉시 작업을 수행하라고 지시했다.

킬달은 XPL 언어의 개념을 바탕으로 PL/M을 작성했으며, XPL은 다시 IBM의 PL/I 문법과 개념에 기반을 두고 있었다. XPL은 교육 목적으로 훨씬 간단한 소프트웨어 시스템에서 PL/I과 유사한 프로그램을 컴파일하기 위해 명시적으로 설계되었다. 킬달이 언어를 홍보하기 시작했을 때 어셈블리어와 거의 같은 크기와 성능을 가지면서도 시간은 10분의 1밖에 걸리지 않는 프로그램을 작성할 수 있다는 것을 보여주기 전까지는 관심을 보이는 프로그래머가 거의 없었다.

PL/M은 원래 PDP-10 메인프레임 컴퓨터에서 실행되었으며, 최종 기계어 코드를 천공 테이프로 출력하여 PROM 버너에 공급한 뒤 ROM을 대상 기기로 옮기는 방식을 취했다. 1974년 인텔렉 8이 출시되면서 그는 프로그래머들이 모든 작업을 해당 플랫폼에서 수행할 수 있도록 시스템을 "자가 호스팅(self hosting)"하기 위해 이식 작업을 시작했다. 불행히도 8008은 매우 작은 8개의 콜 스택을 가지고 있었는데, 이는 고수준 언어를 사용하기에는 너무 작았다.

이 문제는 1973년 말 첫 인텔 8080이 도입되면서 해결되었는데, 이는 메모리에서 임의 크기의 스택을 지원했다. 인텔은 인텔렉 8을 새로운 칩 기반의 인텔렉 8/80으로 업그레이드했다. 이 시스템은 PL/M을 실행할 처리 능력은 있었지만, 여전히 유용한 형태의 대용량 스토리지가 부족했고 유용한 수준의 메인 메모리를 추가하는 것은 비용이 너무 많이 들었다. 인텔에서 조금 떨어진 곳에 있던 Memorex가 최근 새로운 저비용 플로피 디스크 드라이브를 선보였고, 이는 결과적으로 앨런 슈거트가 슈거트 어소시에이츠를 설립하고 더 저렴한 드라이브를 출시하게 만들었다. 킬달은 당시 슈거트에 있던 피니스 코너를 설득하여 구형 테스트 드라이브 하나를 얻어낼 수 있었다.

불행히도 인텔 시스템용 디스크 컨트롤러는 없었으며, 설계는 되어 있었으나 실제로 구현되지는 않았다. 드라이브는 1년 동안 선반에 방치되다가 킬달이 PDP-10에서 실행되는 8080 에뮬레이터 환경의 PL/M으로 이를 사용하기 위한 소프트웨어를 직접 작성하기로 결심했다. 1974년 그는 워싱턴 대학교 친구인 존 토로드에게 전화해 8080용 컨트롤러를 제작하게 했다. 몇 달 후 시스템이 가동되었고, 킬달이 드라이버를 로드하자마자 즉시 작동하여 프롬프트가 표시되었다.

1975년 여름, 킬달은 시그네틱스의 컨설턴트로 일하면서 PL/M을 그들의 시그네틱스 2650으로 이식해 달라는 요청을 받았다. 그 결과 'PLuS'라는 언어가 탄생했다. 하지만 2650은 시장에서 실패했고 시그네틱스는 1년 안에 이를 포기했다. 그들은 대신 페어차일드 F8을 라이선스하기로 결정했다. 그곳에서 일하는 동안 킬달은 새로운 미니컴퓨터 잡지인 《닥터 돕스 저널》을 준비 중이던 또 다른 컨설턴트 짐 워렌을 만났다. 워렌은 킬달에게 잡지에 CP/M이라는 이름으로 광고를 내라고 제안했고, 이것이 해당 시스템을 시장에 출시하는 계기가 되었다.

개요

이 언어는 PL/I과 XPL의 아이디어를 통합했으며, 통합 매크로 프로세서를 갖추고 있었다. 워싱턴 대학교 졸업생인 킬달은 당시 버로스 B5500 컴퓨터를 사용한 경험이 있었으며, 이에 따라 시스템 프로그래밍을 위한 ESPOL과 같은 고수준 언어의 잠재력을 알고 있었다.

파스칼이나 베이직과 같은 다른 동시대 언어와 달리, PL/M은 표준 입출력 루틴이 없었다. PL/M은 대상 마이크로프로세서 특유의 저수준 하드웨어를 겨냥한 기능을 포함하고 있었으며, 메모리의 모든 위치, 입출력 포트, 프로세서 인터럽트 플래그에 매우 효율적으로 직접 접근할 수 있도록 지원했다. PL/M은 마이크로프로세서 기반 컴퓨터를 위한 최초의 고수준 프로그래밍 언어였으며, 어셈블리어로 작성되지 않은 CP/M 운영체제 부품의 원래 구현 언어였다. 1970년대와 1980년대에는 많은 인텔 및 자일로그 Z80 기반 임베디드 시스템이 PL/M으로 프로그래밍되었다. 예를 들어, CISC IBM AS/400의 서비스 프로세서 구성 요소 펌웨어는 PL/M으로 작성되었다.

원래 PL/M 컴파일러는 인텔 8008을 대상으로 했다. 업데이트된 버전(PL/M-80)은 8080 프로세서용 코드를 생성했으며, 이는 8080과 하위 호환성이 있는 자일로그 Z80 계열 및 최신 인텔 8085에서도 실행되었다. 이후 인텔 8048 및 인텔 8051 마이크로컨트롤러 제품군용 컴파일러(PL/M-51)와 8086 (8088)(PL/M-86), 80186 (80188) 및 고급 80286, 32비트 80386을 포함한 후속 8086 기반 프로세서용 컴파일러가 뒤를 이었다. 이후 마이크로컨트롤러를 위해 개발된 PL/M 컴파일러도 있었는데, 예를 들어 인텔 8061 및 8096 / MCS-96 아키텍처 계열용인 PL/M-96이 있다.

일부 PL/M 컴파일러는 인텔 ISIS 운영체제와 같이 동일한 마이크로프로세서를 사용하는 시스템에서 실행되는 "네이티브" 방식이었지만, CP/M, MS-DOS, VAX/VMS와 같은 다른 운영 환경에서 실행되는 크로스 컴파일러(예: PLMX)도 존재했다.

PL/M은 더 이상 인텔에서 지원하지 않지만, PL/M을 C로 변환하는 소스 코드 변환기와 같은 애프터마켓 도구들이 존재한다.

PL/M 샘플 코드

FIND: PROCEDURE(PA,PB) BYTE;
    DECLARE (PA,PB) BYTE;
    /* PA에서 시작하여 PB에서 끝나는 SCRATCH의 문자열을 찾음 */
    DECLARE J ADDRESS,
        (K, MATCH) BYTE;
    J = BACK ;
    MATCH = FALSE;
        DO WHILE NOT MATCH AND (MAXM > J);
        LAST,J = J + 1; /* J에서 스캔 시작 */
        K = PA ; /* K에서 문자열 일치 시도 */
            DO WHILE SCRATCH(K) = MEMORY(LAST) AND
                NOT (MATCH := K = PB);
            /* 한 문자 더 일치 */
            K = K + 1; LAST = LAST + 1;
            END;
        END;
    IF MATCH THEN /* 저장소 이동 */
        DO; LAST = LAST - 1; CALL MOVER;
        END;
    RETURN MATCH;
    END FIND;

각주

  1. ↑ Swaine, Michael (2001년 6월 22일). “Gary Kildall and Collegial Entrepreneurship”. 《닥터 돕스 저널》. 2019년 7월 26일에 원본 문서에서 보존된 문서. 2006년 11월 20일에 확인함.
  2. 1 2 3 Shustek, Len (2016년 8월 2일). “In His Own Words: Gary Kildall”. 《Remarkable People》. 컴퓨터 역사 박물관. 2019년 10월 3일에 원본 문서에서 보존된 문서. 2020년 2월 2일에 확인함.
  3. 1 2 3 Kildall, Gary Arlen (2016년 8월 2일). Kildall, Scott; Kildall, Kristin (편집). 《Computer Connections: People, Places, and Events in the Evolution of the Personal Computer Industry》 (Manuscript, part 1). Kildall Family. 2016년 11월 17일에 확인함.
  4. ↑ Kildall 1993, 48쪽.
  5. 1 2 3 Kildall 1993, 49쪽.
  6. ↑ Kildall 1993, 50쪽.
  7. ↑ Kildall 1993, 51쪽.
  8. ↑ Kildall 1993, 52쪽.
  9. ↑ Kildall 1993, 53쪽.
  10. ↑ Kildall 1993, 54쪽.
  11. ↑ Kildall 1993, 55쪽.
  12. ↑ Kildall 1993, 58쪽.
  13. ↑ Kildall_1970_UW.
  14. ↑ Kildall_1974.
  15. ↑ Intel_1983_SH.
  16. Kildall, Gary Arlen (September 1970). “APL\B5500 - The Language And Its Implementation” (PDF). 워싱턴 대학교, Computer Science Group. Technical Report 70-09-04. 2019년 12월 20일에 원본 문서 (PDF)에서 보존된 문서. 2020년 1월 29일에 확인함.
  17. 〈Translators And Utilities For Program Development〉. 《Software Handbook》 (PDF). 인텔. 1984. 3-1쪽. 230786-001. 2020년 1월 29일에 원본 문서 (PDF)에서 보존된 문서. 2020년 1월 29일에 확인함. […] A LANGUAGE FOR EVERY NEED […] PL/M is the most popular 8086 language for systems programming and provides the best of both optimal code and high level language capabilities. […] PL/M-51 was the first high level language ever to be introduced for a microcontroller. The 8096 is similarly supported with PL/M-96. […]
  18. Kildall, Gary Arlen (1974년 6월 27일). “High-level language simplifies microcomputer programming” (PDF). 《Electronics (magazine)》 (맥그로힐). 103–109쪽. 2021년 11월 14일에 원본 문서 (PDF)에서 보존된 문서. 2021년 11월 14일에 확인함.


더 읽어보기