PL/I

PL/I
PL/I
패러다임절차, 필수, 구조화
설계자IBM 및 SHARE 언어 개발 위원회
개발자IBM
처음 등장한1964년; 58년 전 (연방)
안정된 릴리스
IBM Enterprise PL/I for z/OS 5[1].3 / 2019년 9월
웹 사이트www.ibm.com/products/pli-compiler-zos
사투리
'사투리' 참조
영향을 받다
COBOL, Fortran, ALGOL 60
영향받은
제어언어, PL/M, PL/S, PL-6, PL/8, REXX

PL/I(Programming Language One, /piː l l wʌn/로 발음되며 때로는 PL/[2]1로 표기됨)는 IBM에서 개발 및 게시한 절차상 필수 컴퓨터 프로그래밍 언어입니다.과학, 엔지니어링, 비즈니스 및 시스템 프로그래밍용으로 설계되었습니다.1960년대 도입된 이래 학계, 상업계, 산업계 등에서 사용되고 있으며 지금도 [3]사용되고 있다.

PL/I의 주요 영역은 데이터 처리, 수치 계산, 과학 컴퓨팅시스템 프로그래밍입니다.재귀, 구조화 프로그래밍, 링크드 데이터 구조 처리, 고정 소수점, 부동 소수점, 복합, 문자열 처리 및 비트 문자열 처리를 지원합니다.언어 구문은 영어와 비슷하며 검증 및 조작에 사용할 수 있는 광범위한 함수를 사용하여 복잡한 데이터 형식을 기술하는 데 적합합니다.

초기 역사

1950년대와 1960년대 초에 비즈니스 사용자와 과학 사용자는 서로 다른 프로그래밍 언어를 사용하여 서로 다른 컴퓨터 하드웨어에 대해 프로그래밍했습니다.비즈니스 사용자는 COMTRAN을 통해 오토코더에서 COBOL로 이동했으며, 과학 사용자는 Fortran, ALGOL, GORGE 등에서 프로그래밍했습니다.IBM System/360[4](1964년 발표, 1966년 제공)은 기존의 모든 IBM 아키텍처를 대체하여 두 사용자 그룹을 위한 공통 기계 아키텍처로 설계되었습니다.마찬가지로, IBM은 모든 사용자를 위한 단일 프로그래밍 언어를 원했습니다.이 회사는 Fortran이 상용 프로그래머가 필요로 하는 기능을 포함하도록 확장될 수 있기를 희망했다.1963년 10월 원래 위원회는 뉴욕에서 온 3명의 IBM사와 IBM의 과학 사용자 그룹인 SHARE의 3명으로 구성되어[5] Fortran에 이러한 확장을 제안했습니다.Fortran의 제약조건으로 인해, 그들은 이것을 할 수 없었고 NPL이라는 라벨이 붙은 ALGOL에 근거하는 새로운 프로그래밍 언어의 설계에 착수했다.이 약어는 영국 국립물리연구소의 약어와 모순되어 MPPL(다목적 프로그래밍 언어)로 잠시 대체되었고[6] 1965년에는 PL/I(로마 숫자 "I")로[7] 대체되었다.최초의 정의는 1964년 [8][9]4월에 나타났다.

IBM은 NPL을 출발점으로 삼아 최초의 컴파일러를 작성할 수 있는 수준까지 설계를 완료했습니다. 즉, NPL 정의는 범위와 [10]세부에서 불완전했습니다.PL/I[11] 언어에 대한 제어는 처음에는 뉴욕 프로그래밍 센터에서, 나중에는 허슬리의 IBM UK Laboratory에서 이루어졌습니다.SHARE GUIDE 사용자 그룹은 언어 확장에 관여했으며 PL/I 프로젝트를 통해 언어를 제어하는 IBM의 프로세스에서 역할을 수행했습니다.그러한 큰 언어를 정의하는 경험은 PL/I의 공식적인 정의의 필요성을 보여주었다.1967년 IBM Laboratory Vienna에서 명확하고 완전한 [12]사양을 만들기 위한 프로젝트가 시작되었습니다.그 결과 최초의 대규모 정식 개발 방법 중 하나인 VDM이 도입되었습니다.

Fred Brooks는 PL/I가 CARTER 데이터 [13]유형을 가지고 있는지 확인한 공로를 인정받고 있습니다.

이 언어는 처음에 매뉴얼 "PL/I 언어 사양"에서 자세히 지정되었습니다.C28-6571"은 1965년 뉴욕에서 작성되었으며 "PL/I 언어 사양"으로 대체되었습니다.GY33-6003", 1967년 허슬리에 의해 쓰여졌다.IBM은 60년대 후반과 70년대 초반에 PL/I를 계속 개발하여 GY33-6003 설명서에 게시했습니다. 매뉴얼은 Multics 그룹과 기타 초기 구현자에 의해 사용되었습니다.

최초의 컴파일러는 1966년에 납품되었다.PL/I 표준은 1976년에 승인되었습니다.

목표와 원칙

PL/I에 대한 목표는 언어 개발 초기에 진화했습니다.COBOL의 기록 처리 및 보고서 작성에 대한 경쟁력이 요구되었습니다.이 언어의 유용한 범위는 시스템 프로그래밍이벤트 구동 프로그래밍포함하도록 확장되었습니다.PL/I의 추가 목표는 다음과 같습니다.[4]

  • Fortran에 비해 경쟁력 있는 컴파일된 코드의 성능(단,[citation needed] 달성되지 않음)
  • 새로운 하드웨어 및 새로운 애플리케이션 영역에 대한 확장성
  • 프로그래밍 프로세스의 생산성 향상, 프로그래머에서 컴파일러로의 작업 이행
  • 메인 컴퓨터 하드웨어 및 운영 체제에서 효과적으로 작동하기 위한 기계 독립성

이러한 목표를 달성하기 위해 PL/I는 현대 언어에서 아이디어를 차용하면서 실질적으로 새로운 기능을 추가하여 특유의 간결하고 읽기 쉬운 구문을 도입했습니다.언어의 특성을 부여하기 위해 많은 원칙과 기능이 결합되어 언어의 목표를 달성하는 데 중요했습니다.

  • Algol 60과 유사한 기본 의미론(재귀 포함)을 가진 블록 구조입니다.인수는 참조에 의한 콜을 사용하여 전달되며 필요에 따라 값(값별 콜)에 대한 더미 변수를 사용합니다.
  • 광범위한 계산 데이터 유형, 프로그램 제어 데이터 유형 및 데이터 구조 형식(강력한 타이핑)입니다.
  • 프로시저 파라미터에 의한 익스텐트의 상속을 수반하는 배열 및 문자열의 동적 익스텐트.
  • 표현식, 선언 및 문장의 간결한 구문(허용 약어 포함)60개의 글리프로 구성된 문자 세트에 적합하며 48개로 하위 설정 가능합니다.
  • 문, 옵션 및 선언의 광범위한 기본값 구조를 통해 일부 복잡성을 숨기고 키 입력을 최소화하면서 언어를 쉽게 확장할 수 있습니다.
  • 구조화된 프로그래밍을 효과적으로 지원하는 강력한 반복 처리.
  • 예약된 단어는 없어야 합니다(기능 이름에도 불구하고).DATE그리고.TIME당초는 이 목표를 달성할[citation needed] 수 없는 것으로 판명되었습니다).기존 프로그램을 무효화하지 않고 새로운 속성, 스테이트먼트 및 스테이트먼트 옵션을 PL/I에 추가할 수 있습니다.전혀 아니다IF, THEN, ELSE,그리고.DO예약되어 있습니다.[14]
  • 직교성: 각 기능은 다른 기능과 독립적이며 의미 있는 경우 다른 기능과 자유롭게 결합할 수 있습니다.각 기능은 의미 있는 경우 모든 컨텍스트에서 사용할 수 있으며, 가능한 한 폭넓게 활용하고 "임의 제한"을 피할 수 있습니다.직교성은 언어를 "크게"[clarification needed] 만드는 데 도움이 됩니다.
  • 런타임에 예외 조건을 제어 및 가로채는 예외 처리 기능.
  • 소스 코드의 섹션을 커스터마이즈하여 완전한 프로그램으로 결합하기 위한 광범위한 컴파일 시간 기능(를 들어 매크로)을 갖춘 개별적으로 컴파일 가능한 섹션으로 분할된 프로그램.개별적으로 컴파일된 프로시저를 단일 프로그램으로 바인드하기 위한 외부 이름.
  • 언어에 통합된 디버깅 기능

언어 요약

그 언어는 모든 [15]프로그래머에게 모든 것이 될 수 있도록 고안되었다.요약은 ANSI PL/I[16] 표준과 ANSI PL/I 범용 서브셋 [17]표준에서 발췌한 것이다.

PL/I 프로그램은 일련의 절차로 구성되며, 각 절차는 일련의 문장으로 작성됩니다.%INCLUDEconstruct는 프로그램 번역 중에 다른 소스로부터의 텍스트를 포함하기 위해 사용됩니다.모든 문장의 유형은 언어에 대한 개요를 제공하는 그룹으로 요약된다(이 기준서는 이 조직을 사용한다).

카테고리 진술
구조 PROCEDURE(또는PROC)
ENTRY
BEGIN
DO
END
선언적 DECLARE(또는DCL)
DEFAULT(또는DFT)
FORMAT
통제의 흐름 CALL
IF
SELECT
GO TO
RETURN
STOP
Null 스테이트먼트
카테고리 진술
인터럽트 처리 ON
SIGNAL
REVERT
보관소 ALLOCATE(또는ALLOC)
FREE
할당명세서
입력/출력 OPEN
CLOSE
스트림 입출력 GET
PUT
입력/출력 기록 READ
WRITE
REWRITE
LOCATE
DELETE

(멀티태스킹 및 PL/I 프리프로세서 등의 기능은 표준에는 없지만 PL/I F 컴파일러 및 기타 구현에 대해서는 언어 진화 섹션에서 설명합니다.)

이름은 다음 유형의 데이터를 단일 값 또는 배열 형식으로 나타내며 치수별 하한 및 상한 또는 구조(네스트된 구조, 배열 및 스칼라 변수 포함)를 사용하여 선언할 수 있습니다.

  • Arithmetic(아래 참조)
  • CHARACTER
  • PICTURE for Arithmetic data
  • PICTURE for Character data
  • AREA
  • BIT
  • ENTRY
  • FILE
  • FORMAT
  • LABEL
  • OFFSET
  • POINTER

arithmetictype은 다음 아트리뷰트로 구성됩니다.

  • 베이스BINARY또는DECIMAL, 및
  • 저울(FIXED또는FLOAT, 및
  • 모드(REAL또는COMPLEX, 및
  • a PRECISION(number of digits고정점 번호의 경우,scale factor)

베이스, 스케일, 정밀도 및 스케일 팩터Picture-for-arithmetictype은 encoded 입니다.picture-specification모드는 별도로 지정되어 있습니다.picture specification실제 부분과 가상의 부분 모두에 적용됩니다.

값은 특정 연산 세트 및 빌트인 함수를 사용하여 작성된 식에 의해 계산됩니다.이 식들의 대부분은 단일 값뿐만 아니라 집계에도 적용될 수 있습니다.또한 마찬가지로 단일 값뿐만 아니라 집계 및 반환할 수 있는 사용자 정의 절차에도 적용될 수 있습니다.assignment 문은 값을 하나 이상의 변수에 할당합니다.

PL/I에는 예약어가 없습니다.문은 세미콜론으로 끝납니다.스테이트먼트의 최대 길이는 구현으로 정의됩니다.코멘트는, 공백이 허가되고, 선두에 슬래시, 아스타리스크, 아스타리스크, 슬래시(즉, 아스타리스크)가 붙어 있는 프로그램내의 임의의 장소에 표시할 수 있습니다./* This is a comment. */스테이트먼트에는 엔트리 이름을 삽입하는 라벨 프리픽스를 사용할 수 있습니다.ENTRY그리고.PROCEDURE문) 또는 라벨 이름 및 계산 조건을 활성화 또는 비활성화하는 조건 접두사(예:(NOSIZE)엔트리와 라벨명은 단일 식별자 또는 식별자 뒤에 상수의 첨자 목록을 붙일 수 있습니다( 참조).L(12,2):A=0;).

일련의 스테이트먼트는 다음 명령어를 앞에 붙이면 그룹이 됩니다.DO스테이트먼트와 그 뒤에 이어지는END진술.그룹에는 중첩된 그룹과 시작 블록을 포함할 수 있습니다.IF스테이트먼트는 그룹 또는 단일 스테이트먼트를THEN부분과ELSEpart(샘플 프로그램 참조).그룹은 반복 단위입니다.시작 블록(BEGIN; stmt-list END;)에는 블록에 로컬한 이름 및 내부 절차에 대한 선언이 포함될 수 있습니다.순서는, 「」로 시작합니다.PROCEDURE스테이트먼트와 구문적으로 종료됩니다.END진술.프로시저의 본문은 블록, 그룹 및 스테이트먼트의 시퀀스로, 프로시저 또는 프로시저의 로컬 이름과 프로시저에 대한 선언을 포함합니다.EXTERNAL절차를 따릅니다.

ON 유닛은 다음 조건 중 하나 이상이 발생했을 때 실행되도록 작성된 단일 스테이트먼트 또는 스테이트먼트 블록입니다.

계산 조건,

  • CONVERSION (CONV)
  • FIXEDOVERFLOW (FOFL)
  • OVERFLOW (OFL)
  • SIZE
  • STRINGRANGE (STRG)
  • STRINGSIZE (STRZ)
  • SUBSCRIPTRANGE (SUBRG)
  • UNDERFLOW (UFL)
  • ZERODIVIDE (ZDIV)

또는 입력/출력 상태,

  • ENDFILE(file)
  • ENDPAGE(file)
  • KEY(file)
  • NAME(file)
  • RECORD(file)
  • TRANSMIT(file)
  • UNDEFINEDFILE(file) (UNDF)

또는 다음 중 하나의 조건:

  • AREA,CONDITION (identifier),ERROR,FINISH

식별자 선언에는 다음 속성 중 하나 이상을 포함할 수 있습니다(단, 서로 일치해야 합니다).

데이터 속성 입력/출력 속성 기타 속성
ALIGNED DIRECT AUTOMATIC or AUTO
AREA[(area-size)] ENVIRONMENT(options) or ENV... BASED[(reference)]
BINARY [(precision)] or BIN... INPUT BUILTIN
BIT [(maximum-length)] KEYED CONDITION or COND
CHARACTER[(maximum-length)] or CHAR... OUTPUT CONSTANT
COMPLEX [(precision)] or CPLX... PRINT CONTROLLED or CTL
DECIMAL [(precision)] or DEC... SEQUENTIAL or SEQL DEFINED[(reference)] or DEF...
(dimension-attribute) STREAM EXTERNAL or EXT
ENTRY[(parameter descriptor list] UPDATE GENERIC(criteria list)
FILE RECORD INITIAL(value-list) or INIT...
FIXED [(precision)] INTERNAL or INT
FLOAT [(number of digits)] LIKE unsubscripted reference
FORMAT LOCAL
LABEL OPTIONS(options)
MEMBER PARAMETER or PARM
NONVARYING or NONVAR POSITION [(expression)] or POS...
OFFSET[(reference)] STATIC
PICTURE picture-specification or PIC... VARIABLE
POINTER or PTR
STRUCTURE
UNALIGNED or UNAL
VARYING or VAR

Micro Focus의 현재 컴파일러, 특히 IBM의 컴파일러는 표준화된 버전의 언어에 대해 많은 확장을 구현합니다.IBM 확장 기능은 나중에 컴파일러의 구현 하위 섹션에 요약되어 있습니다.이러한 컴파일러에는 일반적인 확장기능이 몇 가지 있지만, 현행 표준이 없기 때문에 호환성이 보장되지 않습니다.

표준화

언어 표준화는 1966년 4월 유럽에서 ECMA TC10과 함께 시작되었습니다.1969년 ANSI는 "복합 언어 개발 위원회"를 설립하여 "크러지"라는 별명을 얻었으며, 나중에 X3J1 PL/[18]I로 개명하였다.표준화는 ECMA TC/10과 ANSI X3J1의 공동 작업이 되었습니다.GY33-6003[19] 문서의 서브셋은 IBM에 의해 공동 작업에 제공되었으며 표준화를 위한 기본 문서가 되었습니다.기본 문서에서 누락된 주요 기능은 멀티태스킹프로그램 최적화 속성(예:NORMAL그리고.ABNORMAL).

기본 문서를 변경하자는 제안은 두 위원회의 표결에 부쳐졌다.위원회가 동의하지 않을 경우, 처음에는 제너럴 모터스의 Michael MarcottyICL의 C.A.R. Hoare 대표가 의견 불일치를 해결해야 했다.IBM, Honeywell, CDC, Data General, Digital Equipment Corporation, Prime Computer, Burroughs, RCA 및 Univac은 주요 사용자 Eastman Kodak, MITRE, Union Carbide, Bell Laboratoratories 및 다양한 정부 및 대학 담당자와 함께 X3J1에서 서비스를 제공했습니다.언어의 추가적인 발전은 표준 기구에서 이루어졌으며, 구조화된 프로그래밍과 내부 일관성이 지속적으로 개선되었으며, 더 모호하거나 논쟁적인 특징들이 누락되었다.

언어 발달이 거의 끝나갈 무렵, X3J1/TC10은 영문 텍스트로 작성된 문서에 많은 문제가 있음을 깨달았습니다.단일 항목에 대한 토론이 여러 위치에 나타날 수 있으며, 이 경우 의견이 일치하거나 일치하지 않을 수 있습니다.불일치뿐만 아니라 누락 여부도 판단하기 어려웠다.그 결과, David Beech(IBM), Robert Freiburghouse(Honeywell), Milton Barber(CDC), M. Donald McLaren(Argonne National Laboratory), Craig Franklin(Data General), Lois Frampton(Digital Equipment Corporation Corporation) 및 DJ 앤드류스(D)가 IBM에 개서를 맡았습니다.이 표준은 "PL/I [20]Machine"을 사용하여 의미를 지정하는 공식 정의로[16] 사용됩니다.이것은 준정식 정의로 작성된 최초이자 아마도 유일한 프로그래밍 언어 표준이었다.

1981년에[17] ANSI에 의해 "PL/I 범용 서브셋"("Subset-G") 표준이 발표되었고 1987년에 [21]개정판이 발표되었다.범용 서브셋은 PL/I 구현을 위한 커널로 널리 채택되었습니다.

실장

IBM PL/I F 및 D 컴파일러

PL/I는 IBM이 System/360 개발의 일환으로 영국의 Hursley Laboratories에서 처음 구현했습니다.첫 번째 프로덕션 PL/I 컴파일러는 영국 허슬리의 John Nash 팀에 의해 구축된 OS/360 운영체제용 PL/I 컴파일러입니다. 런타임 라이브러리 팀은 I.M.(Nobby) Clarke에 의해 관리되었습니다.PL/I F 컴파일러는 완전히 System/360 어셈블리 [22]언어로 작성되었습니다.Release 1은 1966년에 출하되었습니다.OS/360은 실제 메모리 환경이며 컴파일러는 64킬로바이트 미만의 실제 스토리지를 가진 시스템용으로 설계되었습니다.즉, F는 S/360으로 환산하면 64kB입니다.64킬로바이트 머신에서 사용 가능한 44킬로바이트의 메모리에 대형 컴파일러를 장착하기 위해 컴파일러는 제어 단계와 다수의 컴파일러 단계(접근 100)로 구성됩니다.이러한 단계는 디스크에서 한 번에 하나씩 메모리로 가져와 특정 언어 기능과 컴파일 측면을 처리합니다.각 위상은 보통 메모리에 [23]보관되어 있는 부분적으로 컴파일된 프로그램을 1회 통과시킵니다.

언어의 측면은 PL/I F가 구현될 때까지 여전히 설계 중이었기 때문에 일부는 이후 릴리스까지 생략되었습니다.PL/I RECORD I/O는 PL/I F Release 2와 함께 출고되었습니다.리스트 처리[24] 기능(Based Variables, Pointers, Area and Offsets, LOCATE-mode I/O)은 릴리즈 4에서 처음 출고되었습니다.PL/I 코드 속도를 높여 Fortran 객체 코드와 경쟁하기 위한 주요 시도로, PL/I F 릴리스 5는 절차에서 READER 옵션에 의해 촉진되는 DO-루프의 상당한 프로그램 최적화를 수행합니다.

PL/I F 버전은 IBM Mohanic Lab에서 채택된 System/360 Model 67용 TSS/360 타임셰어링 운영 체제에 출시되었습니다.프랑스의 IBM La Gaude Lab은 Fortran, Cobol 및 Algol 프로그램을 PL/I F 수준으로 변환하기 위한 "언어 변환 프로그램"[25]을 개발했습니다.

16킬로바이트의 메모리를 사용하는 PL/I D 컴파일러는 IBM 독일에서 DOS/360 로우엔드 운영 체제용으로 개발되었습니다.또한 모든 문자열과 어레이가 고정 익스텐트를 가져야 하는 PL/I 언어의 서브셋을 구현하여 런타임 환경을 단순화합니다.기본 운영 체제를 반영하듯 동적 스토리지 할당 및 제어된 스토리지 [26]클래스가 없습니다.PL/I F로부터 1년 이내에 출하되었습니다.

멀티픽스 PL/I 및 파생 모델

컴파일러는 1960년대 초에 여러 그룹에 의해 구현되었습니다.높은 수준의 언어로 운영 체제를 개발한 최초의 프로젝트 중 하나인 MIT의 Multics 프로젝트는 1964년에 구현 언어로 PL/I의 하위 집합 방언인 EPL(Early PL/I)을 사용했습니다.EPL은 Bell Labs와 MIT에서 Douglas McIlroy, Robert Morris 등에 의해 개발되었습니다.영향력 있는 Multics PL/I[27] 컴파일러는 많은 제조업체와 소프트웨어 그룹에서 사용되는 컴파일러 기술의 원천이었습니다.EPL은 원래 PL/I에는 일부 기능이 없었던 시스템 프로그래밍 언어이자 PL/I의 방언이었습니다.

Honeywell PL/I 컴파일러(시리즈 60용)는 완전한 ANSI X3J1 [28]표준을 구현한 것입니다.

IBM PL/I 최적화 및 컴파일러 체크 아웃

Hursley에서 생산된 PL/I Optimizer 및 Checkout 컴파일러는 공통 수준의 PL/I[29] 언어를 지원하며 PL/I F 컴파일러를 대체하는 것을 목표로 합니다.체크아웃 컴파일러는 IBM의 PL/I와 유사한 독점 구현 언어(나중에 PL/S)[22]인 BSL로 PL/I F를 다시 쓴 것입니다.컴파일러의 퍼포먼스 목표는 BCS에 [22]대한 IBM 프레젠테이션에 나타나 있습니다.컴파일러는 동일한 결과를 생성해야 했습니다. Checkout Compiler는 Optimizer에 제출되는 프로그램을 디버깅하기 위해 사용됩니다.컴파일러는 완전히 다른 설계로 완전한 PL/I 언어를 다루고 있었기 때문에 이 목표는 달성되었습니다.

IBM은 BUILTIN, 사례문(SELECT/WHENE/OTHERY), 루프 제어(ITATE Leave) 및 null 인수 목록(예: DATE)포함한 새로운 속성 및 구문을 도입했습니다.

PL/I 최적화 컴파일러는 PL/I F 컴파일러를 이어받아 1970년대부터 1990년대까지 IBM의 핵심 컴파일러였습니다.PL/I F와 마찬가지로 44킬로바이트의 설계점을 가진 멀티패스 컴파일러이지만 완전히 새로운 설계입니다.F 컴파일러와는 달리 런타임 라이브러리를 사용하여 상수 표현식의 컴파일 시간을 평가하여 컴파일러 단계의 최대 메모리를 28킬로바이트로 줄여야 합니다.두 번째 설계에서는 계단식 [30]진단과 같은 PL/I F의 번거로움을 없애는 데 성공했습니다.이것은 Tony Burbridge가 이끄는 팀에 의해 S/360 매크로 어셈블러에서 작성되었습니다.매크로는 공통 컴파일러 서비스를 자동화하고 리얼 모드 스토리지를 관리하는 태스크로부터 컴파일러 라이터를 보호하기 위해 정의되어 컴파일러를 다른 메모리 모델로 쉽게 이동할 수 있습니다.현대의 IBM Fortran H 컴파일러를 위해 개발된 프로그램 최적화 기법의 대부분이 배치되었습니다. Optimizer는 우수한 프로그래머의 손에 의해 Fortran 실행 속도를 동등하게 했습니다.IBMS/370과 1970년에 발표한 반응부터 DOS/360 운영 체제를 8월 1971년 직 후 OS[31일]을 응원하고 첫번째 가상 메모리 IBM운영 체제 OS/VS1, MVS, VM/CMS. 개발자들 그들은 28kb를 코드 shoehorning이 IBMHudson강에 면한 도시 마침내 선적할 준비를 할 때 전혀 알지 못 했다. 남편OS/360)의 Tual Memory를 지원합니다.배치 프로그래밍 환경을 지원했으며 TSO 및 CMS에서 대화식으로 실행할 수 있었습니다.이 컴파일러는 일본 PCM(플러그 호환 머신)의 운영 체제를 포함한 모든 메인프레임 운영 체제를 망라하는 많은 버전을 거쳤습니다.

컴파일러는 아래의 "IBM PL/I for OS/2, AIX, Linux, z/OS"로 대체되었습니다.

1970년 8월에 발표된 PL/I 체크 아웃 컴파일러([32][33]이하 "The Checker")는 PL/I 프로그램의 디버깅 속도를 높이고 개선하도록 설계되었습니다.그 팀은 브라이언 마크스가 이끌었다.3패스 설계에 의해 프로그램 컴파일 시간이 F 컴파일러의 25%로 단축되었습니다.PL/I 프로그램을 내부 형식인 "H-text"로 변환하여 인터랙티브 터미널에서 실행할 수 있습니다.이 형식은 런타임에 Checkout 컴파일러에 의해 해석되어 거의 모든 유형의 오류를 검출합니다.포인터는 16바이트로 표시되며, 대상 주소와 참조된 항목의 설명을 포함하므로 "잘못된" 포인터 사용을 진단할 수 있습니다.대화 환경에서는 에러가 검출되었을 때, 임의의 변수를 검사하고, 디버깅 스테이트먼트를 도입해, 소스 프로그램을 편집할 수 있는 유저에게 제어가 건네진다.시간이 지남에 따라 메인프레임 프로그래밍 환경의 디버깅 기능이 이 컴파일러가 제공하는 대부분의 기능을 개발했으며 1990년대에 폐지되었습니다.

DEC PL/I

아마도 IBM을 제외하고 가장 성공적인 구현은 DEC PL/I로 알려진 Digital Equipment Corporation의 VAX PL/I일 것입니다.실장은 "ANSI X3.4-1981 PL/I 범용 서브셋의 엄밀한 슈퍼셋"이며, 새로운 ANSI X3.74-1987 PL/I 범용 서브셋의 대부분의 기능을 제공하며,[34] 1988년에 처음 출시되었습니다.원래는 Dave Cutler[35]이끄는 팀이 만든 VCG(VAX Code Generator)라는 컴파일러 백엔드를 사용했습니다.프런트 엔드는 Robert Freiburghouse에 의해 설계되었으며, Multics에서 [36]VAX/VMS로 이식되었습니다.VAXAlpha의 VMS 및 Tru64에서 실행됩니다.1990년대에 Digital은 UniPrise Systems에 컴파일러를 팔았고, UniPrise Systems는 나중에 Kednos라는 회사에 [37]컴파일러를 팔았다.Kednos는 2016년 10월까지 [38]컴파일러를 Kednos PL/I로 판매하였다.

서브셋 컴파일러 티칭

1960년대 후반과 1970년대 초반에는 많은 미국과 캐나다의 대학들이 캠퍼스에 시분할 서비스를 구축하고 있었고 과학, 수학, 공학 및 컴퓨터 과학 교육에 사용할 대화 컴파일러/인터프리터가 필요했습니다.Dartmouth는 BASIC을 개발 중이었지만 PL/I는 간결하고 가르치기 쉬웠기 때문에 인기 있는 선택이었습니다.IBM의 서비스가 [39]적합하지 않았기 때문에, 많은 학교가 자체 PL/I 서브셋과 자체 대화형 지원을 구축했습니다.예를 들면 다음과 같습니다.

1960년대와 1970년대 초에 Allen-Babcock커스텀 마이크로코드로 IBM System/360 Model 50을 위한 RUSH(공유 하드웨어 원격 사용자) 시분할 시스템을 구현했고, 이후 컴퓨터 과학의 기초를 가르치는 것을 목적으로 하는 OS/360을 위한 인터랙티브 시분할 시스템인 IBM의 CPS를 PL/i 언어로 구현했습니다.BASIC 및 원격 작업 입력 기능 추가.

교육용 방언인 PL/C는 코넬 대학에서 개발된 컴파일러로, 많은 구문 오류의 광범위한 자동 수정 사용 및 나머지 구문 오류를 출력문으로 변환함으로써 어떤 프로그램도 반드시 컴파일할 수 있는 특별한 능력을 가지고 있었다.[40]언어는 IBM이 구현한 PL/I의 거의 모든 언어였습니다.PL/C는 매우 빠른 컴파일러입니다.

SL/1(Student Language/1, Student Language/One 또는 Subset Language/[41][42]1)은 IBM 1130에서 해석적으로 실행되는 1960년대 후반의 PL/I 하위 집합이었습니다. 교육적 사용이 강점이었습니다.

Brooklyn의 Polytechnical Institute에서 만들어진 PLAGO는 PL/I[43] 언어의 단순화된 하위 집합을 사용하여 양호한 진단 오류 메시지와 빠른 컴파일 시간에 초점을 맞췄습니다.

토론토 대학의 컴퓨터 시스템 연구 그룹은 프로그래밍 교육을 위해 SP/1, SP/2, SP/3, ..., SP/8이라고 하는 일련의 PL/I 서브셋을 지원하는 SP/k 컴파일러를 제작했습니다.SP/k 컴파일러에서 오류 없이 실행된 프로그램은 IBM의 PL/I 컴파일러, IBM의 체크아웃 컴파일러 또는 코넬 대학의 PL/C [44]컴파일러와 같은 다른 현대의 PL/I 컴파일러에서도 동일한 결과를 얻었습니다.

다른 예로는 뉴사우스웨일스 대학의 P. Groouse, 메릴랜드 대학의 Marvin Victor Zelkowitz의 PLUM, 토론토 대학의 PLUTO 등이 있습니다.[45]

OS/2, AIX, Linux, z/OS용 IBM PL/I

1992년 캘리포니아의 IBM Santa Teresa는 PL/I의 대대적인 개편으로 완전히 새로운 컴파일러를 출시했습니다.초기 출하에는 OS/2 용으로, 대부분의 ANSI-G 기능과 많은 새로운 PL/I [46]기능이 포함되어 있습니다.후속 릴리스에서는 추가 플랫폼(MVS, VM, OS/390, AIXWindows)을 제공했지만 2021년 현재 지원되는 플랫폼은 z/OS[47]AIX뿐입니다.IBM은 PL/I가 추월당한 영역에서 다른 언어(특히 C 및 C++)와 완전히 경쟁할 수 있도록 계속해서 기능을 추가했습니다.대응하는 「IBM Language Environment」는, PL/I 프로그램과 데이타베이스·트랜잭션·시스템과의 상호 운용을 서포트하고 있습니다.또, C, C++, 및 COBOL 로 기술된 프로그램을 서포트해, 이러한 언어와의 상호 통신에 필요한 모든 데이터 타입을 서포트합니다.

PL/I 설계 원칙은 유지되었고 몇 가지 새로운 데이터 유형, 새로운 문장과 문장의 옵션, 새로운 예외 조건 및 프로그램 소스의 새로운 조직으로 구성된 이 주요 확장을 견지했다.결과적으로 PL/I 표준과 이전 IBM 컴파일러의 호환 가능한 슈퍼셋이 됩니다.PL/I에 추가된 주요 주제는 다음과 같습니다.

  • 사용자 정의 데이터 유형을 보다 효율적으로 지원하기 위한 새로운 특성:DEFINE ALIAS,ORDINAL,그리고.DEFINE STRUCTURE사용자 정의 타입을 도입하기 위한 스테이트먼트입니다.HANDLE로케이터 데이터 유형,TYPE데이터 유형 자체,UNION데이터 유형 및 새로운 유형을 조작하기 위한 내장 함수입니다.
  • 일반적인 PC 데이터 유형에 대응하는 추가 데이터 유형 및 속성(예:UNSIGNED,VARYINGZ).
  • 프로그램의 가독성 향상– 종종 암묵적인 사용법을 명시합니다(예:BYVALUE파라미터 속성)
  • 추가 구조화된 프로그래밍 구성.
  • 추가 처리를 중단합니다.
  • 컴파일 시간을 연장하여 거의 모든 PL/I 문자열 처리 기능을 제공하고 애플리케이션 개발 환경과의 인터페이스를 제공합니다.

z/OS용 엔터프라이즈 PL/I라고 불리는 최신 시리즈 z/OS용 PL/I 컴파일러는 최신 z/Architecture 프로세서(z14, z13, zEC12, zBC12, z196, z114)의 코드 생성을 활용하며, 2차 언어에서 지원되었습니다.e가 첫 번째, Enterprise COBOL v5가 마지막입니다.)

데이터형

ORDINAL는 새로운 계산 데이터 유형입니다.서수적 설비는 파스칼의 설비와 같다.DEFINE ORDINAL Colour (red, yellow, green, blue, violet);이름 및 내부 값은 내장 기능을 통해 액세스할 수 있습니다.내장된 함수는 서수 값의 이전 및 후속 값에 대한 액세스를 제공합니다.

DEFINE-statement(아래 참조)에서 추가 가능TYPE는, PL/I 의 짜넣기 어트리뷰트로 구성됩니다.

HANDLE(data structure)로케이터 데이터 타입은POINTER데이터 유형이지만 특정 데이터 구조에만 바인드하기 위한 강력한 유형입니다.=>연산자는 핸들을 사용하여 데이터 구조를 선택하는 데 사용됩니다.

UNION속성(등가)CELL초기 PL/I 사양에서)를 사용하면 여러 스칼라 변수, 어레이 또는 구조가 가장 큰 대안으로 필요한 스토리지 용량을 차지하는 단위에서 동일한 스토리지를 공유할 수 있습니다.

PC 및 C와의 경쟁력

다음 속성이 추가되었습니다.

  • 문자열 속성VARYINGZ(제로 종단 문자열의 경우),HEXADEC,WIDECHAR,그리고.GRAPHIC.
  • 옵션 산술 속성UNSIGNED그리고.SIGNED,BIGENDIAN그리고.LITTLEENDIAN.UNSIGNED필요한 것은UPTHRU그리고.DOWNTHRU카운터 제어 루프를 제한값을 초과하지 않고 실행할 수 있는 반복 그룹 옵션(또한 필수)ORDINAL루프를 문서화하는 데 적합합니다).
  • DATE(pattern)날짜 표현 및 추가를 제어하여 시간과 날짜를 현재 모범 사례로 가져오는 속성입니다.날짜를 조작하는 새로운 기능은 다음과 같습니다.DAYS그리고.DAYSTODATE날짜 및 일수를 변환하기 위해, 그리고 일반DATETIME날짜 형식을 변경하는 함수입니다.

중앙 텍스트, 그림 형식을 사용하여 편집하고 텍스트의 머리나 끝에서 공백 또는 선택된 문자를 잘라내는 새로운 문자열 처리 기능이 추가되었습니다.VERIFYR로.VERIFY오른쪽부터.SEARCH그리고.TALLY기능들.

복합 할당 연산자(예: C)+=,&=,-=, =가 추가되었습니다. A+=1와 동등하다A=A+1.

생략된 인수 및 가변 길이 인수 목록에 대해 파라미터 기술자 및 속성이 추가되었습니다.

프로그램의 가독성– 의도를 명확히 함

VALUEattribute는 ID를 상수(특정 리터럴 값 또는 제한된 식에서 파생됨)로 선언합니다.

파라미터에는BYADDR(주소로 통과) 또는BYVALUE(pass by value) 아트리뷰트

ASSIGNABLE그리고.NONASSIGNABLE속성을 지정하면 의도하지 않은 할당을 방지할 수 있습니다.

DO FOREVER;계획된 구성의 필요성을 없애다.DO WHILE ( '1'B );.

DEFINE-statement에 사용자 지정 이름을 나타냅니다(예:INTEGER삽입 Atribute의 조합(예:FIXED BINARY(31,0))이렇게 해서DEFINE ALIAS INTEGER FIXED BINARY(31.0)작성하다TYPE이름.INTEGERFIXED BINARY(31.0) 속성 세트의 별칭으로 사용됩니다. DEFINE STRUCTURE구조물 및 그 구성원에 적용되며, 이는TYPE구조 선언에서 사용하기 위한 구조 속성 집합 및 대응하는 하위 구조 멤버 선언의 이름(의 일반화)LIKE속성)을 참조해 주세요.

구조화된 프로그래밍 추가

A LEAVE루프를 종료하는 스테이트먼트와ITERATE루프의 다음 반복을 계속합니다.

UPTHRU그리고.DOWNTHRU옵션을 선택합니다.

하나의 단위로 사용하기 위한 일련의 절차 및 선언으로 구성된 패키지 구성입니다.절차 외에서 선언된 변수는 패키지에 로컬이며 다음을 사용할 수 있습니다.STATIC,BASED또는CONTROLLED보관소.패키지에 사용되는 프로시저명도 로컬이지만,EXPORTS의 옵션PACKAGE-statement.

인터럽트 처리

RESIGNAL-statementON 유닛에서 실행된 는 ON 유닛의 실행을 종료하고 현재 유닛을 호출한 절차(따라서 해당 절차에 대응하는 ON 유닛에 제어 전달)로 조건을 다시 올립니다.

INVALIDOP조건은 PC 프로세서에 의해 검출된 무효 연산 코드와 2개의 무한값 감산 등의 부정 연산 처리를 처리합니다.

ANYCONDITION현재 절차에서 특정 ON 장치가 제공되지 않은 조건을 차단하기 위한 조건이 제공됩니다.

STORAGE상태가 발생하는 것은,ALLOCATE문에 충분한 저장 공간을 가져올 수 없습니다.

기타 메인프레임 컴파일러 및 미니컴퓨터 컴파일러

1970년대 메인프레임 및 미니컴퓨터에서 IBM PL/I F 또는 Optimizing 컴파일러와 경쟁하기 위해 많은 공급업체가 컴파일러를 생산했습니다.1980년대에 타깃은 일반적으로 새롭게 등장한 ANSI-G 서브셋이었습니다.

  • 1974년 Burroughs Corporation은 B6700 및 B7700의 [48]PL/I를 발표했습니다.
  • UNIVAC은 UNIVAC PL/I를 [49]출시했으며 1970년대에는 시스템 프로그래밍에 PL/I PLUS라는 변형된 PL/I를 사용하기도 했습니다.
  • 1978년부터 Data General은 AOS, AOS/VSAOS/VS II 운영 [50]체제를 실행하는 Eclipse 및 Eclipse MV 플랫폼에서 PL/I를 제공했습니다.다수의 운영체제 유틸리티 프로그램이 언어로 작성되었습니다.
  • 뉴욕대 수학과학연구소의 Paul Abrahams는 1972년에 CIMS PL/I를 PL/I로 작성했으며 PL/I F를 통해 부트스트랩을 작성했습니다.CDC 6600에[51] 대한 PL/I 컴파일의 약 70%를 지원했습니다.
  • CDC는 Cyber 70,[52] 170 및 6000 시리즈용으로 최적화된 서브셋 PL/I 컴파일러를 제공했습니다.
  • 후지쯔는 PL/I 옵티마이저와 동등한 PL/I 컴파일러를 제공했습니다.
  • Stratus Technologies PL/I는 VOS [53]운영체제용 ANSI G 구현입니다.
  • IBM Series/1 PL/I는[54][55] IBM Series/1 실시간 프로그래밍 시스템을 위한 ANSI 프로그래밍 언어 PL/I(ANSI X3.53-1976)의 확장 하위 집합입니다.

Microsoft용 PL/I 컴파일러.그물

  • 2011년에 Raincode는 Microsoft용 완전한 레거시 컴파일러를 설계했습니다.NET.Raincode PL/I 컴파일러라는 이름의 NET Core 플랫폼.

퍼스널 컴퓨터 및 Unix용 PL/I 컴파일러

PL/I 방언

  • PL/I의 방언인 PL/S는 처음에 BSL로 불리며 1960년대 후반에 개발되어 IBM 메인프레임의 시스템 프로그래밍 언어가 되었습니다.1970년대와 1980년대의 거의 모든 IBM 메인프레임 시스템 소프트웨어는 PL/S로 작성되었습니다.PL/I와 달리 데이터 유형 변환, 런타임 환경, 구조가 다르게 매핑되고 할당이 바이트 단위 복사본이라는 점이 다릅니다.모든 문자열 및 어레이에 고정 익스텐트가 있거나REFER선택.PL/S는 PL/AS에 이어 현재 운영 체제인 OS/390현재 z/OS에서 내부 작업에 사용되는 언어인 PL/X에 의해 계승되었습니다.또한 일부 z/VSEz/VM 구성 요소에도 사용됩니다.IBM DB2 for z/OS도 PL/X로 작성됩니다.
  • PL/C는 1970년대에 코넬 대학에서 개발된 PL/I 컴퓨터 프로그래밍 언어의 교육용 방언입니다.
  • IBM은 System/38 [61][62]AS/400 플랫폼의 시스템 소프트웨어에서 PL/MP(기계 제품)와 PL/MI(기계 인터페이스)라는 두 가지 PL/I 사투리를 사용했습니다.PL/MP는 이러한 플랫폼의 이른바 수직 마이크로코드를 구현하기 위해 사용되었으며 IMPI 명령 세트를 대상으로 했습니다.PL/MI는 이러한 플랫폼의 머신 인터페이스를 대상으로 하며 OS/[63]400의 제어 프로그램 퍼실리티 및 XPF 레이어에서 사용됩니다.PL/MP 코드는 OS/400을 IBM RS64 프로세서 제품군으로 이식할 때 대부분 C++로 대체되었지만 일부는 PowerPC/Power ISA [64]아키텍처용으로 유지 및 재설정되었습니다.PL/MI 코드는 교체되지 않았으며 IBM [65]i에서 계속 사용되고 있습니다.
  • PL/8([66]또는 PL.8)은 PL/I의 약 80%이기 때문에 IBM 801 아키텍처를 [67]위해 IBM Research에 의해 1970년대에 개발되었습니다.이후 Motorola 68000 [68]System/370 아키텍처를 지원하게 되었습니다.여러 IBM 내부 시스템 개발 작업(예: z/Architecture 시스템용 밀리코드펌웨어)에 계속 사용되며 64비트 gcc 기반 [67][69]백엔드를 사용하도록 다시 설계되었습니다.
  • Honeywell, Inc.는 CP-6 운영체제를 만들기 위해 PL-6를 개발했습니다.
  • Prime ComputerPRIMOS 운영 체제의 시스템 프로그래밍 언어로서 두 가지 다른 PL/I 방언(버전 18부터 PL/P, 버전 19부터 SPL)을 사용했습니다.
  • XPL은 XPL 컴파일러 기술을 사용하여 다른 컴파일러를 쓰는 데 사용되는 PL/I의 방언입니다.XPL은 PL/I의 작은 서브셋에 힙 문자열 데이터 유형을 추가했습니다.
  • HAL/S는 실시간 항공우주 프로그래밍 언어로, 우주왕복선 프로그램에서 사용되는 것으로 가장 잘 알려져 있습니다.그것은 1970년대에 NASA를 위해 Intermetrics에 의해 설계되었다.HAL/S는 XPL로 구현되었습니다.
  • IBM과 다양한 하청업체들은 또한 1970년대 초에 SPL/I라고 불리는 해군용 신호 처리를 지원하기 위해 또 다른 PL/I 변형을 개발했습니다.
  • SabreTalkSabre 항공사 예약 시스템을 프로그래밍하기 위해 PL/I의 실시간 방언입니다.

사용.

PL/I 구현은 1960년대 후반 메인프레임, 1970년대 미니 컴퓨터 및 1980년대와 1990년대 개인용[56] 컴퓨터를 위해 개발되었습니다.메인프레임에서 주로 사용되었지만 DOS, Microsoft Windows, OS/2, AIX, OpenVMSUnix용 PL/I 버전이 있습니다.

비즈니스 데이터 처리[70] 및 특정 플랫폼의 운영 체제 작성에 사용되는 시스템 용도로 널리 사용되고 있습니다.매우 복잡하고 강력한 시스템이 PL/I로 구축되었습니다.

  • SAS 시스템은 처음에 PL/I로 작성되었지만 SAS 데이터 단계는 여전히 PL/I 구문을 기반으로 모델링됩니다.
  • 선도적인 온라인 항공사 예약 시스템 Sabre는 원래 조립업체에서 IBM 7090용으로 작성되었습니다.S/360 버전은 주로 전용 제어 프로그램을 위한 전용 빌드 서브셋 PL/I 컴파일러인 SabreTalk를 사용하여 작성되었습니다.
  • Multics 운영체제는 대부분 PL/I로 작성되었습니다.
  • PL/I는 IBM의 System Network Architecture를 해석하기 위한 실행 가능한 정식 정의를[71] 작성하는 데 사용되었습니다.

PL/I는 그것이 Fortran과 COBOL을 대체하고 메인프레임의 주요 플레이어가 될 것이라는 지지자들의 희망을 충족시키지 못했다.그것은 소수였지만 중요한 선수였다.이에 대해 명확한 설명은 할 수 없지만, 1970년대와 1980년대의 일부 경향은 PL/I가 경쟁 우위를 누리는 영역을 점차 축소함으로써 그것의 성공을 방해했다.

첫째, 메인프레임 소프트웨어 환경의 특성이 바뀌었습니다.데이터베이스 및 트랜잭션 처리위한 애플리케이션 서브시스템(CICS, IMS시스템 370의 Oracle)과 애플리케이션 생성기는 메인프레임 사용자의 애플리케이션 개발의 초점이 되었습니다.서브시스템에 대응하는 네이티브 기능(태스킹 및 입출력 상당 부분)을 사용할 필요가 있기 때문에 언어의 상당 부분은 무관하게 되었습니다.그러나 PC가 프로그램 개발의 지배적인 환경이 되면서 Fortran, COBOL 그리고 PL/I는 모두 C++, Java 에 추월당한 소수 언어가 되었다.

둘째, PL/I는 시스템 프로그래밍 분야에서 추월당했다.IBM 시스템 프로그래밍 커뮤니티는 PL/I를 사용할 준비가 되어 있지 않았습니다. 대신 IBM은 시스템 프로그래밍을 위해 PL/I의 독점 사투리를 개발하고 채택했습니다. – PL/[72]SIBM 내부에서는 PL/S가, IBM 외부에서는 C가 성공을 거두면서 시스템 프로그래밍에 대한 고유한 PL/I 강점은 가치가 떨어졌습니다.

셋째, 개발 환경은 인터랙티브 소프트웨어 개발을 위한 능력을 증가시켰기 때문에 고유한 PL/I 인터랙티브 및 디버깅 강점의 가치가 떨어졌습니다.

넷째, 구조화된 프로그래밍, 문자열 연산, 객체 방향과 같은 기능이 COBOL과 Fortran에 추가되어 PL/I의 상대적 이점이 더욱 감소하였습니다.

메인프레임에서도 중요한 비즈니스 문제가 있었습니다.IBM의 하드웨어 경쟁업체들은 PL/I의 성공으로 얻을 수 있는 것과 잃을 것이 거의 없었습니다.컴파일러 개발은 비용이 많이 들었고 IBM 컴파일러 그룹은 경쟁 우위를 점하고 있었습니다.많은 IBM 사용자들은 독점적인 솔루션에 얽매이는 것을 피하고 싶어 했습니다.다른 벤더가 PL/I를 조기에 지원하지 않기 때문에 PL/I를 피하는 것이 가장 좋습니다.

PL/I 언어의 진화

이 문서에서는 언어 기능의 참조 포인트로 PL/I 표준을 사용합니다.그러나 초기 구현에서 중요한 많은 기능들은 이 표준에 포함되지 않았으며, 일부는 비 IBM 컴파일러에 의해 제공되었다.그리고 사실상의 언어는 표준 이후에도 계속 성장했고, 궁극적으로는 퍼스널 컴퓨터의 발전에 의해 추진되었습니다.

표준에서 제외된 주요 기능

멀티스레딩

멀티태스킹(multitasking)이라는 이름으로 멀티스레딩을 구현한 [73]것은 PL/I F, PL/I Checkout and Optimizing 컴파일러,[74] 새로운 AIX 및 Z/OS 컴파일러입니다.데이터 유형으로 구성되었습니다.EVENT그리고.TASK,그TASK-option에서CALL-statement(포크),WAIT-statement(조인),DELAY(delay-time),EVENT-option레코드 I/O 스테이트먼트 및UNLOCK잠긴 레코드를 잠금 해제하는 문EXCLUSIVE파일. 이벤트 데이터는 특정 이벤트를 식별하고 완료 여부를 나타냅니다('1'B'). 태스크 데이터 항목은 특정 태스크(또는 프로세스)를 식별하고 다른 태스크에 대한 우선순위를 나타냅니다.

프리프로세서

최초의 IBM 컴파일 시간 프리프로세서는 매사추세츠주 캠브리지에 위치한 IBM Boston Advanced Programming Center에 의해 구축되었으며 PL/I F 컴파일러와 함께 출고되었습니다.%INCLUDE문구는 이 기준서에 있었지만 나머지 특징은 그렇지 않았다.DEC 컴파일러와[38] Kednos PL/I 컴파일러는 IBM과 거의 동일한 기능을 구현했으며 자체 기능을 일부 추가했습니다.IBM은 컴파일러에 프리프로세서 기능을 계속 추가해 왔습니다.프리프로세서는 기입된 소스 프로그램을 일련의 토큰으로 처리하여 출력 소스 파일에 복사하거나 토큰에 대해 작업을 수행합니다.% 토큰이 검출되면 다음 컴파일 시간 문이 실행됩니다.ID 토큰이 검출되어 ID가 검출된 경우DECLAREd,ACTIVATEd 및 컴파일 시간 값을 할당하면 ID는 이 값으로 대체됩니다.토큰은 액션이 필요하지 않은 경우(예: 토큰) 출력 스트림에 추가됩니다.+ACTIVEd 컴파일 시간식 값도 마찬가지입니다.따라서 컴파일 시간 변수는PI를 사용하여 선언, 활성화 및 할당할 수 있습니다.%PI='3.14159265'의 후속 발생PI로 대체될 것이다.3.14159265.

지원되는 데이터 유형은 다음과 같습니다.FIXED DECIMAL정수 및CHARACTER길이가 다른 문자열로 최대 길이는 없습니다.구조문은 다음과 같습니다.

  • %[label-list:]DO iteration: statements; %[label-list:]END;
  • %procedure-name: PROCEDURE (parameter list) RETURNS (type); statements...;
  • %[label-list:]END;
  • %[label-list:]IF...%THEN...%ELSE..

및 간단한 문장으로 [label-list:]를 사용할 수도 있습니다.

  • %ACTIVATE(identifier-list) and %DEACTIVATE
  • assignment진술
  • %DECLARE identifier-attribute-list
  • %GO TO label
  • %INCLUDE
  • null진술

이 기능을 통해 프로그래머는 제품 부품 번호나 수학적 상수 등의 상수에 대한 식별자를 사용할 수 있게 되었고, 표준에서는 계산 데이터에 대해 명명된 상수로 대체되었습니다.컴파일 시간 기능을 통해 가능한 조건부 컴파일 및 반복 소스 코드 생성은 표준에서 지원되지 않았습니다.몇몇 제조업체가 이러한 설비를 구현했습니다.

구조화된 프로그래밍 추가

표준화 중에 PL/I에 구조화된 프로그래밍이 추가되었지만 표준으로 받아들여지지 않았습니다.이러한 기능은LEAVE-statement반복에서 벗어나다DO,그UNTIL-option그리고.REPEAT-option에 추가된DO, 및 일반적인 형식의 케이스 스테이트먼트:SELECT (expression) {WHEN (expression) group}... OTHERWISE group
이러한 기능은 모두 IBM의 PL/I Checkout and Optimizing 컴파일러와[29] DEC PL/[75]I에 포함되어 있습니다.

디버깅 기능

PL/I F는 표준에는 제시되지 않았지만 다른 기능에 의해 구현된 디버깅 기능(특히 CHECK(변수 목록) 조건 프레픽스)을 제공했습니다.CHECK온컨디션과SNAP선택.IBM Optimizing and Checkout 컴파일러는 대화식 메인프레임 프로그래밍 환경에 적합한 추가 기능(예:ATTENTION상태)를 참조해 주세요.

표준 이후 개발된 주요 기능

여러 데이터 유형 중 하나를 가질 수 있는 구조 부재 유형을 설계하기 위해 여러 시도가 이루어졌습니다.CELL(IBM 초기)프로그래밍 이론 수업이 증가함에 따라 PL/I 기반에서 이에 대한 접근법이 가능해졌습니다.UNION,TYPE등이 여러 컴파일러에 의해 추가되었습니다.

PL/I는 단일 바이트의 문자 세계에서 구상되었습니다.일본어 및 중국어 지원이 필수화되고 국제 코드 페이지가 발전함에 따라 문자열 개념이 확대되어 ASCII/EBCDIC 이외의 폭넓은 문자열에 대응하게 되었습니다.

시간과 날짜 처리는 밀레니엄 문제에 대처하기 위해 약 35개의 다른 형식 중 하나로 날짜와 시간을 반환하는 DATETIME 함수의 도입으로 정비되었습니다.다른 몇 가지 날짜 함수는 일 및 초 간의 변환을 처리합니다.

비판

구현 문제

언어는 배우기 쉽고 사용하기 쉽지만 PL/I 컴파일러를 구현하는 것은 어렵고 시간이 많이 걸립니다.PL/I와 같은 크기의 언어에는 대부분의 벤더가 제작할 수 있는 서브셋과 대부분의 사용자가 마스터할 수 있는 서브셋이 필요했습니다.이것은 「ANSI G」가 출판될 때까지 해결되지 않았다.PL/I에 고유한 컴파일 시간 기능은 추가 구현 작업이 필요했고 추가 컴파일러가 통과했습니다.PL/I 컴파일러는 동등한 Fortran 컴파일러나 COBOL 컴파일러보다 2배에서 4배 더 컸으며 프로그래머의 생산성 향상에 의해 상쇄된 것으로 추정됩니다.이것은 최초의 컴파일러가 [10]작성되기 전에 IBM에서 예견된 것입니다.

어떤 사람들은 PL/[76]I가 이례적으로 해석하기 어렵다고 주장한다.PL/I 키워드는 예약되어 있지 않으므로 프로그래머는 프로그램에서 변수 또는 프로시저 이름으로 사용할 수 있습니다.원래 PL/I(F) 컴파일러는 잘못된 컨텍스트에서 사용되는 키워드를 발견하면 자동 수정을 시도하기 때문에 종종 변수 이름으로 간주합니다.이로 인해 나중에 컴파일러에 의해 해결된 "진단 캐스케이드"[30]가 발생합니다.

좋은 오브젝트 코드를 작성하기 위해 필요한 노력은 언어의 초기 설계 시 과소평가되었을 수 있습니다.프로그램 최적화(사용 가능한 Fortran 컴파일러에 의해 수행된 우수한 프로그램 최적화와 경쟁하기 위해 필요)는 부작용과 변수의 앨리어싱에 대한 광범위한 문제로 인해 비정상적으로 복잡합니다.예외 핸들러에서는 예기치 않은 변경이 비동기적으로 발생할 수 있습니다.이는 (보이지 않는) 발신자의 "ON" 스테이트먼트에 의해 제공될 수 있습니다.이러한 요소들은 프로그램 변수가 런타임에 언제 수정될지 신뢰성 있게 예측하는 것을 어렵게 만든다.다만, 통상은, 유저에 의한 에러 핸들러(ON-unit)는 변수에 할당하지 않는 경우가 많습니다.앞서 언급한 어려움에도 불구하고 IBM은 1971년에 [31]PL/I Optimizing 컴파일러를 생산했습니다.

PL/I에는 컴파일러의 비용과 복잡성을 가중시키는 멀티태스킹 지원(IBM의 언어 확장)과 같이 거의 사용되지 않는 많은 기능이 포함되어 있으며, 공동 처리 기능에는 운영 체제에서 여러 스레드를 차단하지 않는 멀티프로그래밍 환경이 필요합니다.컴파일러 라이터는, 이러한 기능을 실장할지를 자유롭게 선택할 수 있었습니다.

선언되지 않은 변수는 기본적으로 첫 번째 오카렌스에 의해 선언됩니다.따라서 철자를 잘못 입력하면 예기치 않은 결과가 발생할 수 있습니다.이 "암시적 선언"은 FORTRAN 프로그램과 다르지 않습니다.그러나 PL/I(F)의 경우 속성 목록을 통해 프로그래머는 철자가 잘못되었거나 선언되지 않은 변수를 탐지할 수 있습니다.

프로그래머 문제

많은 프로그래머들이 언어의 복잡성과 PL/I F 컴파일러의 미성숙함으로 인해 COBOL 또는 Fortran에서 이동하는 데 느렸다.프로그래머는 과학 프로그래머(Fortran을 사용)와 비즈니스 프로그래머(COBOL을 사용)로 크게 나뉘었고, 그룹 간에 상당한 긴장감과 심지어 혐오감을 가지고 있었다.PL/I 구문은 COBOL 구문과 Fortran 구문 모두에서 차용되었습니다.따라서 작업을 쉽게 할 수 있는 기능을 알아채는 대신, 당시의 Fortran 프로그래머들은 COBOL 구문을 알아채고 그것이 비즈니스 언어라는 의견을 가진 반면, COBOL 프로그래머들은 Fortran 구문을 알아채고 그것을 과학 언어로 간주했다.

COBOL과 Fortran 프로그래머 모두 그것을 그들 자신의 언어의 "더 큰" 버전으로 보았고, 둘 다 그 언어에 다소 겁을 먹고 그것을 채택하고 싶어하지 않았다.또 다른 요인은 COBOL, Fortran 및 ALGOL과의 유사성입니다.이것들은, 이러한 언어 중 하나와 비슷해 보이지만, PL/I에서는 다르게 기능하는 PL/I 요소입니다.이러한 좌절로 인해 많은 숙련된 프로그래머들은 PL/I에 대한 편견을 갖게 되었고, 종종 PL/I에 대한 적극적인 혐오감을 갖게 되었다.초기 UNIX fortune 파일에는 다음과 같은 언어 설명이 포함되어 있습니다.

PL/I의 복잡함을 파고든 사람으로서, 나는 오직 진짜 인간만이 기계를 갖고, 사이클을 잡고, 모든 것을 아우르는 괴물을 쓸 수 있었다고 확신한다.어레이를 할당하고 가운데 세 번째 어레이를 해제하시겠습니까?그럼요! 왜요?문자열에 비트 문자열을 곱한 후 결과를 부동 소수점에 할당하시겠습니까?어서요!제어된 가변 프로시저 파라미터를 해제하고 다시 할당한 후 전달하시겠습니까?동일한 메모리 위치에 세 가지 다른 유형의 변수를 겹쳐서 표시하시겠습니까?아무 말이나 해!재귀 매크로를 작성하시겠습니까?아뇨, 하지만 진짜 남자는 다시 스캔을 하죠어떻게 그렇게 명백히 진짜 사람이 설계하고 쓴 언어가 진짜 사람을 위한 것이 아닐 수 있지?

긍정적인 측면에서는 모든 데이터 유형(구조 포인터 포함), 재귀, 멀티태스킹, 문자열 처리 및 광범위한 내장 함수에 대한 포인터가 완전히 지원된다는 것은 PL/I가 당시의 프로그래밍 언어에 비해 상당히 발전했다는 것을 의미합니다.그러나 프로그래머나 상점 대다수가 PL/I로 전환하도록 설득하기에는 역부족이었습니다.

PL/I F 컴파일러의 컴파일 타임 프리프로세서는 타깃 언어의 구문[77] 의미론(예를 들어 C 프리프로세서의 "#" 명령어와 비교)을 사용하는 데 있어서 특이했습니다.

PL/I에 관한 특집 토픽

저장소 클래스

PL/I는 변수의 라이프 타임 관리 방법을 나타내는 몇 가지 '스토리지 클래스'를 제공합니다.STATIC, AUTOMATIC, CONTROLLED그리고.BASED가장 간단하게 구현할 수 있는 것은STATIC는 COBOL "working-storage" 및 초기 Fortran에서와 같이 메모리가 로드 시 할당 및 초기화됨을 나타냅니다.이것은 의 디폴트입니다.EXTERNAL변수입니다.PL/I의 기본 스토리지 클래스:INTERNAL변수는AUTOMATICC 언어의 "자동" 스토리지 클래스, Pascal의 기본 스토리지 할당 및 IBM COBOL의 "로컬 스토리지"와 같은 ALGOL의 영향을 받는 다른 블록 구조 언어와 유사합니다.AUTOMATIC변수는 에 입력 시 할당됩니다.BEGIN-block, 프로시저 또는 ON 유닛이 선언되어 있습니다.컴파일러와 런타임시스템은 스택프레임에 메모리를 할당하여 스택프레임 및 기타 하우스키핑 정보를 저장합니다.변수가 다음과 같이 선언된 경우INITIAL-attribute이 때 초기값으로 설정하기 위한 코드가 실행됩니다.초기화 사용을 적절하게 관리하려면 주의가 필요합니다.특히 변수가 배열 또는 구조인 경우 스코프가 입력될 때마다 많은 양의 코드를 실행하여 변수를 초기화할 수 있습니다.저장소:AUTOMATIC변수는 블록 종료 시 해방됩니다.STATIC, CONTROLLED또는BASED변수는 프로시저 또는 블록 호출 사이에 변수의 내용을 유지하는 데 사용됩니다. CONTROLLED스토리지는 스택을 사용하여 관리되지만 스택에서의 할당 푸시 및 팝핑은 프로그래머에 의해 관리됩니다.ALLOCATE그리고.FREE진술들.저장소:BASED변수는 다음 방법으로 관리됩니다.ALLOCATE/FREE단, 스택 대신 이러한 할당은 독립된 수명을 가지며 다음 방법을 통해 해결됩니다.OFFSET또는POINTER변수입니다.

AREAattribute는 프로그래머 정의 힙을 선언하기 위해 사용됩니다.특정 영역 내에서 데이터를 할당 및 해방할 수 있으며 영역을 [78]: pp.235–274 단위로 삭제, 읽기 및 쓸 수 있습니다.

저장소 유형 공유

서로 다른 데이터 선언을 통해 할당된 스토리지에 액세스하는 방법은 여러 가지가 있습니다.이들 중 일부는 잘 정의되고 안전하며, 일부는 세심한 프로그래밍으로 안전하게 사용할 수 있으며, 일부는 본질적으로 안전하지 않거나 기계에 [78]: pp.262–267, 178–180 의존합니다.

변수를 인수로 참조에 의해 매개 변수에 전달하면 매개 변수를 사용하여 인수의 할당된 저장소를 참조할 수 있습니다.DEFINED속성(예:DCL A(10,10), B(2:9,2:9) DEFINED A)를 사용하면 변수 저장소의 일부 또는 전부를 다른 일관된 선언과 함께 사용할 수 있습니다.언어 정의에는 다음이 포함됩니다.CELLattribute(나중에 이름 변경)UNION)를 사용하여 동일한 스토리지를 공유할 수 있습니다.이것은 많은 초기 IBM 컴파일러에서 지원되지 않았습니다.이러한 사용법은 안전하고 기계에 의존하지 않습니다.

레코드 I/O 및 리스트 처리는 프로그래머가 어떤 유형의 데이터 구조를 가지고 있는지 알기 전에 선언을 다음 레코드 또는 항목의 스토리지에 적합시킬 필요가 있는 상황을 생성합니다.기반 변수와 포인터가 이러한 프로그램의 핵심입니다.데이터 구조는 적절하게 설계되어야 하며, 일반적으로 데이터 구조의 필드를 사용하여 유형 및 크기에 대한 정보를 인코딩해야 합니다.필드는 이전 구조 또는 일부 제약 조건이 있는 현재 구조에서 유지할 수 있습니다.인코딩이 이전 구조인 경우 프로그램은 현재 항목과 일치하는 선언을 사용하여 기반 변수를 할당해야 합니다(필요한 경우 익스텐트에 대한 식을 사용).유형 및 크기 정보를 현재 구조("자기 정의 구조")에 보관해야 하는 경우 유형 정의 필드는 모든 데이터 구조 버전에서 유형 종속 항목보다 앞서고 같은 위치에 있어야 합니다.REFER- option은 자기 변환 익스텐트에 사용됩니다(예: 에서와 같이 문자열 길이).DCL 1 A BASED, 2 N BINARY, 2 B CHAR(LENGTH REFER A.N.), etc – 장소LENGTH는 데이터 구조의 인스턴스를 할당하는 데 사용됩니다.자기 정의 구조의 경우, 모든 입력 및REFERed필드는 "실제" 데이터 앞에 배치됩니다.데이터 세트의 기록이나 데이터 구조 목록의 항목이 이러한 방식으로 구성되면 기계 독립적인 방식으로 안전하게 처리될 수 있다.

PL/I 구현(PL/I Checkout 컴파일러 제외)은 스토리지를 처음 할당할 때 사용된 데이터 구조를 추적하지 않습니다.조금도BASED선언은 스토리지에 대한 포인터와 함께 스토리지에 액세스하기 위해 사용할 수 있습니다. 본질적으로 안전하지 않고 머신에 의존합니다.그러나, 이 사용법은, 「포인트 산술」(통상은, 특정의 양을 기존의 주소에 추가하는 것)에 있어서 중요해지고 있습니다.이것은 컴퓨터 과학에서 논쟁의 여지가 있는 주제였다.와일드 레퍼런스나 버퍼 오버런의 문제 외에 특정 머신이나 컴파일러에서 사용되는 데이터 타입의 정렬과 길이 때문에 문제가 발생합니다.포인터 산술이 필요할 수 있는 많은 경우 더 큰 데이터 구조 내의 요소에 대한 포인터를 찾아야 합니다.ADDR함수는 이러한 포인터를 안전하고 독립적으로 계산합니다.

포인터 산술은 에서와 같이 바이너리 변수를 포인터로 에일리어스함으로써 실행할 수 있습니다.
DCL P POINTER, N FIXED BINARY(31) BASED(ADDR(P)); N=N+255;
이것은 포인터의 길이가 다음과 같은 것에 의존합니다.FIXED BINARY(31)동일한 경계에 정렬된 정수입니다.

C의 보급과 포인터 산술에 대한 자유롭고 쉬운 태도로, 최근의 IBM PL/I 컴파일러는 포인터를 더하기 및 빼기 연산자와 함께 사용하여 가장 간단한 구문을 제공할 수 있습니다(그러나 컴파일러 옵션은 안전성과 기계 독립성이 가장 중요한 경우 이러한 관행을 허용하지 않습니다).

ON 유닛 및 예외 처리

PL/I가 설계되었을 때 프로그램은 배치 모드에서만 실행되었으며 터미널에서 프로그래머의 개입은 발생하지 않았습니다.0으로 나눗셈과 같은 예외적인 조건은 프로그램을 중단하고 16진수 코어 덤프만 생성합니다.PL/I 예외 처리는 ON-Unit을 통해 하드웨어 또는 운영 체제의 예외에도 불구하고 프로그램이 제어 상태를 유지하고 보다 적절하게 종료하기 전에 디버깅 정보를 복구할 수 있도록 했습니다.프로그램이 적절히 디버깅되면 예외처리의 대부분이 삭제되거나 비활성화됩니다.대화형 실행이 일상화되면서 이 수준의 제어는 중요도가 낮아졌습니다.

계산 예외 처리는 문, 블록(ON-Unit 포함) 및 프로시저의 조건 프레픽스에 의해 활성화 및 비활성화됩니다.– 예:(SIZE, NOSUBSCRIPTRANGE): A(I)=B(I)*C; 입출력 및 스토리지 관리에 대한 운영체제 예외는 항상 유효합니다.

ON 유닛은 단일 스테이트먼트 또는BEGIN- 에 의해 도입된 블록ON-statementON 스테이트먼트를 실행하면, 다음과 같이 지정된 조건이 유효하게 됩니다.ON ZERODIVIDE ON-unit이 조건에 대한 예외가 발생하고 조건이 활성화되면 해당 조건에 대한 ON 장치가 실행됩니다.ON-Unit은 콜체인을 통해 상속됩니다.블록, 프로시저 또는 ON 유닛이 활성화되면 호출 활성화에 의해 확립된 ON 유닛이 새로운 활성화에 의해 상속됩니다.다른 사람에 의해 오버라이드 될 수 있습니다.ON-statement에 의해 재정립할 수 있습니다.REVERT-statement이 예외는 를 사용하여 시뮬레이트할 수 있습니다.SIGNAL-statement– 예를 들어 예외 핸들러의 디버깅에 도움이 됩니다.ON-Unit의 동적 상속 원칙을 사용하면 루틴이 사용하는 서브루틴 내에서 발생하는 예외를 처리할 수 있습니다.

조건이 발생할 때 ON 장치가 작동하지 않는 경우 표준 시스템 작업이 수행됩니다(종종 이는 다음을 올리기 위한 것입니다).ERROR상태)를 참조해 주세요.시스템 액션은 다음 명령을 사용하여 재정립할 수 있습니다.SYSTEM의 옵션ON-statement일부 조건에서는 ON 장치의 실행을 완료하고 인터럽트 지점(예:STRINGRANGE, UNDERFLOW, CONVERSION, OVERFLOW, AREA and FILE정상 실행을 재개합니다.다음과 같은 다른 조건과 함께(SUBSCRIPTRANGE),그ERROR이 조작을 시도하면 조건이 발생합니다.ON 유닛은 다음과 같이 종단할 수 있습니다.GO TO인터럽트 포인트로의 복귀를 방지하지만, 프로그래머가 결정한 대로 프로그램이 다른 곳에서 실행을 계속할 수 있도록 합니다.

ON 장치는 ON 장치 자체에서 발생하는 예외를 처리할 수 있도록 설계되어야 합니다.ON ERROR SYSTEM;스테이트먼트에서는 네스트된 에러 트랩을 사용할 수 있습니다.ON 유닛 내에서 에러가 발생했을 경우 제어가 시스템 덤프가 생성되는 운영체제로 넘어오거나 계산 조건에 따라서는 (위에서 설명한 바와 같이) 실행을 계속할 수 있습니다.

PL/IRECORDI/O 문은 파일 끝에서부터 레코드의 읽기 또는 쓰기 시 발생할 수 있는 전송 오류 기록까지 다양한 상황에 대한 옵션을 제공하지 않기 때문에 비교적 단순한 구문을 가지고 있습니다.대신 이러한 복잡성은 다양한 파일 조건에 대해 ON 단위로 처리됩니다.같은 접근방식이 채택되었다.AREA서브 정보 및AREA조건.

ON 단위로 변수를 검사하거나 변경할 수 있기 때문에 예외 처리 ON-유닛의 존재는 최적화에 영향을 미칠 수 있습니다.그렇지 않으면 문 사이의 레지스터에 저장될 수 있는 변수 값은 문 사이의 저장소로 반환되어야 할 수 있습니다.이에 대해서는 [78]: pp.249–376 위의 구현 문제에 관한 섹션에서 설명합니다.섹션에서 설명합니다.

고정되지 않은 타깃으로 이동

PL/I에는 COBOL 및 FORTRAN의 특수한 GO TO 문장이 있습니다.

COBOL과 FORTRAN의 구문은 각각이 항상 동일하지는 않은 대상을 갖는 두 가지 특별한 두 가지 유형의 GO TO를 코딩하기 위해 존재합니다.

  • ALTER(COBOL), Assign(포트란):
    • para_name_zzz로 진행하려면 para_name_xx para_name_zz로 [79]이동합니다.
      특히 "프로그램에서..."와 같은 기타/유효한 제약이 있습니다.메서드의 재귀 특성 또는 ..스레드 옵션"[79]
    • IGOTAGO에[80] 1860 할당
      IGOTAGOTAGO
      빌트인 매뉴얼을 추가하는 기능 중 하나는 다음과 같습니다.
      가고타고(1860년, 1914년, 1939년)
      (이것은 변수의 값을 "목록의 라벨 중 하나"로 제한합니다."[80] )
  • 변수의 첨자 모양 값을 기준으로 ...로 이동합니다.
    • 이동[81](1914, 1939, 2140), MYChoice
    • para_1 para_2 para로 이동합니다.IDECIDE에 [82]따라 3개.

PL/I에는 (LABEL 속성이 있는) 스테이트먼트라벨 변수가 있습니다.이 변수는 스테이트먼트라벨 값을 저장하고 나중에 GOTO [83][29]: 54 [29]: 23 스테이트먼트에서 사용할 수 있습니다.

LABL1: ........LABL2:......MY_DEST = LABL1;...MY_DEST로 이동; 여기로 이동(LUKY_NUMBER); /* - 1, 0 또는...*/여기(-1) : PUT LIST ('I O U'), 복권 ('현금 없음'), PUT LIST ('Dollow'), 복권 ('Dollow Bill'), 복권 ('Dollow List'), 복권 ('Dollow Bill'), 복권 ('2: PUT LORT LIST');

스테이트먼트 라벨 변수는 착신 프로시저에 전달되어 콜 루틴에서 다른 스테이트먼트로 돌아가기 위해 사용할 수 있습니다.

샘플 프로그램

헬로월드 프로그램

Hello2: proc 옵션(메인), put list('Hello, World!'), end Hello2;

문자열 검색

/* 문자열이 포함된 /* 행읽은해당 문자열이 포함된 모든 행인쇄합니다.*/ find_strings:절차 옵션(주요);패턴 문자(100)다양한;라인 성격(100)다양한 선언하다;line_no 고정 2진을 선언하다;endfile(sysin)그만 하고 편집(패턴)(L)을 선언하다;line_no=1;영원히, 편집(라인)(L) 수 있다. 만약 index(라인, 패턴)>0다음 도약 목록(line_no, 선)을 칠한다거나, line_no)line_no+1;.  끝.; end find_find; 종료

「 」를 참조해 주세요.

메모들

  1. ^ "IBM Enterprise PL/I for z/OS, V5.3 delivers additional functional and modernization features to PL/I". Announcement letters. IBM. September 3, 2019. LP19-0482. Retrieved October 1, 2019.
  2. ^ "Changes at I.B.M." The New York Times. June 20, 1984.
  3. ^ Sturm, Eberhard (2009). The New PL/I. Vieweg+Teubner. ISBN 978-3-8348-0726-7.
  4. ^ a b Pugh, Emerson W.; Johnson, Lyle R.; Palmer, John H. (1991). IBM's 360 and early 370 systems. Cambridge, Mass.: MIT Press. ISBN 9780262161237.
  5. ^ 보고서가 발표될 당시 위원회에는 8명의 위원이 있었다.이하와 같습니다.[citation needed]
  6. ^ "Datamation in Business & Science MPPL IN FOR NPL" (PDF). Datamation. Vol. 11, no. 4. FRANK D. THOMPSON. April 1965. p. 17.
  7. ^ "Datamation in Business & Science ANOTHER NEW NAME, MORE COMPILERS FOR NPL" (PDF). Datamation. Vol. 11, no. 6. FRANK D. THOMPSON. June 1965. p. 17.
  8. ^ SHARE 고급 언어 개발 위원회 보고서 II, 1964년 6월 25일
  9. ^ Radin, G.; H. Paul Rogoway (January 1965). "Highlights of a New Programming Language". Communications of the ACM. 8 (1): 9–17. doi:10.1145/363707.363708. S2CID 17133703.
  10. ^ a b Radin, G. (August 1978). "The Early History and Characteristics of PL/I". ACM SIGPLAN Notices. 13 (8): 227–241. doi:10.1145/960118.808389. S2CID 13925251.
  11. ^ 언어의 제어는 전용 Language Control 그룹과 Language Control Board에 맡겨졌습니다.Language Control Board에는 3개국의 컴파일러 그룹 대표자(1973년까지 6명)가 포함되어 있습니다.매일의 통신은 텔렉스로 이루어졌다.변경과 확장은 언어 로그를 통해 이루어졌으며 수천 개의 세부 포인트에 도달했습니다.관리자급 언어 리뷰 위원회는 제어 보드에 의해 에스컬레이션된 문제를 해결했습니다.
  12. ^ 유니버설 언어 문서(Universal Language Document, ULD).기술 보고서 TR25.081, TR25.082, TR25.083, TR25.0S4, TR25.085, TR25.086 및 TR25.087, IBM Corporation Vienna Austria 1968년 6월
  13. ^ "Frederick P. Brooks Jr. - IEEE Computer Society". IEEE Computer Society. 1989.
  14. ^ 일부 컴파일러는 이러한 식별자를 예약하거나 식별자로 사용되는 것을 발견하면 경고를 발행하도록 선택했습니다.그러나 사례 진술서의 후속 도입은 원칙의 가치를 보여준다.
  15. ^ Vowels, Robin (2001). Introduction to PL/I. pp. x. ISBN 978-0-9596384-9-3. "PL/I is the first language to provide adequate facilities for scientific computations, business data processing and systems programming in a single language" - Jean Sammet, Some Approaches to, and Illustrations of, Programming Language History
  16. ^ a b ANS 프로그래밍 언어 PL/I. X3.53-1976
  17. ^ a b ANSI X3.74-1981 (R1998) 정보시스템 - 프로그래밍 언어 - PL/I 범용 서브셋
  18. ^ IBM의 개입에 대응하여, 많은 제조업체들은 기준서에 대한 노력을 지지하기를 꺼려했다.CLDG/X3J1의 최초 소관은 PL/I가 표준화에 적합한지 여부를 조사하는 것이었다.공동 노력에서는 언어 또는 텍스트 변경에 대한 3500개 이상의 제안을 처리했습니다.
  19. ^ 「PL/I 언어 사양.GY33-6003인치
  20. ^ 표준에 정의된 PL/I 기계는 표준 PL/I대한 정의 메커니즘에 설명되어 있습니다.마이클 마코티, 프레데릭 G 세이워드입니다
  21. ^ 1987 PL/I 범용 서브셋(ANSI X3.74-1987)
  22. ^ a b c Krasun, Andy. "The first 35+ years of Hursley software 1958-1993 with some hardware asides, a personal account" (PDF). Retrieved May 5, 2020.
  23. ^ IBM System/360 Operating System PL/I (F) Compiler Program Logic Manual (PDF). IBM. December 1966. SECTION 2: COMPILER PHASES. Y28-6800-1.
  24. ^ 이들은 1966년에 PL/I로 작성된 초기 Optimizing 컴파일러용으로 설계되었으며 PL/I F 컴파일러부터 부트스트랩됩니다.
  25. ^ 이것들을 배송하는 데 많은 지연이 있었기 때문에, 그 당시 흔한 PL/I 농담은 Gen de Golle콩코드가 첫 비행을 할 때까지 La Gaude가 그것들을 운송하는 것을 금지했다는 것이었다.
  26. ^ IBM System/360 PL/I Subset Reference Manual (PDF). IBM. 1967. C28-8202-0.
  27. ^ R. A. Frieburghouse. "The Multics PL/1 Compiler". Multicians.org.
  28. ^ Series 60 (Level 66)/6000 PL/I Reference Manual. Honeywell. 1976. Order No. DE05.
  29. ^ a b c d OS PL/I Checkout and Optimizing Compilers: Language Reference Manual (PDF). IBM. October 1976. GC33-0009-04.
  30. ^ a b "Microsoft.CodeAnalysis.CSharp A Binder converts names".[영구 데드링크]
  31. ^ a b A. Endres (2013). "Early Language and Compiler Developments at IBM Europe".
  32. ^ R. N. Cuff (May 1972). "A Conversational Compiler for Full PL/I". The Computer Journal. 15 (2): 99–104. doi:10.1093/comjnl/15.2.99.
  33. ^ B. L. Marks (1973). "The design of a checkout compiler". IBM Systems Journal. 12 (3): 315–327. doi:10.1147/sj.123.0315.
  34. ^ Uniprise PL/I for UNIX Reference Manual, Uniprise Systems, Inc., 캘리포니아 어바인, 1995, 페이지 xxi.
  35. ^ Tom Linden (2004-05-21). "RE: Dave Cutler and VMS #2". Newsgroup: comp.os.vms. Archived from the original on June 14, 2021. Retrieved 2021-02-26.
  36. ^ Cutler, Dave (2016-02-25). "Dave Cutler Oral History". youtube.com (Interview). Interviewed by Grant Saviers. Computer History Museum. Archived from the original on 2021-12-11. Retrieved 2021-02-26.
  37. ^ Robin Vowels (2010-04-01). "PL/I Frequently Asked Questions (FAQ)". Newsgroup: comp.answers.
  38. ^ a b "Kednos PL/I for OpenVMS and Tru64". kednos.com. 2016-11-02. Archived from the original on 2021-03-14. Retrieved 2021-03-30.
  39. ^ Richard C. Holt (November 5, 1972). "Teaching the Fatal Disease (or) Introductory Computer Programming Using PL/I". Archived from the original on April 15, 2011. Retrieved May 30, 2010.
  40. ^ 컴퓨터 과학부, PL/C 사용자 가이드 - 코넬 컴파일러 PL/I, 코넬 대학교, 이타카, 1977년.
  41. ^ "SL/1 (Student Language/One)".
  42. ^ "The IBM 1130". BobsPixels.com.
  43. ^ PLAGO/360 사용자 매뉴얼, 브루클린 폴리테크닉 인스티튜트.
  44. ^ J. N.Hume 및 R. C. Holt, PL/ISP/k를 사용한 구조화 프로그래밍, Reston, Reston, 1975.
  45. ^ Marvin Victor Zelkowitz, PLUM 프로그래밍, 2차 Ed., 제네바, 팔라딘 하우스(Ill.) 1978년
  46. ^ a b Robin A. Vowels (March 1996). "PL/I for OS/2". ACM SIGPLAN Notices. Association for Computing Machinery. 31 (3): 22–27. doi:10.1145/227717.227724. S2CID 24441291.
  47. ^ "IBM PL/I Compiler Family". IBM. Retrieved 5 July 2021.
  48. ^ Burroughs Corporation, B6700/B 7700: PL/I 언어 참조 매뉴얼, 레퍼런스 5001530, 디트로이트, 1977.
  49. ^ Sperry-Univac Computer Systems, SPERRY UNIVAC 1100 시리즈 PL/I 프로그래머 레퍼런스, 레퍼런스 UP-8277, 1976.
  50. ^ Data General Corporation, AOS PL/I 참조 매뉴얼, 주문 번호 093-000204, c. 1978.
  51. ^ Paul W. Abrahams. The CIMS PL/I compiler. 1979 SIGPLAN symposium on Compiler construction. pp. 107–116. doi:10.1145/800229.806960. ISBN 0-89791-002-8.
  52. ^ Control Data Corporation, PL/I 참조 매뉴얼, 1978, 간행물 번호 60388100A.
  53. ^ OpenVOS PL/I Language Manual (R009). Marlboro, Massachusetts: Stratus Computer, Inc. 1995. OpenVOS PL/I.
  54. ^ IBM Series/1 PL/I Introduction Program Numbers 5719-PL1 5719-PL3 (PDF) (First ed.). IBM. February 1977. GC34-0084-0.
  55. ^ IBM Series/1 PL/I: Language Reference Manual. IBM. GC34-0085-0.
  56. ^ a b c Peter Norton (May 15, 1984). "The Norton chronicles". PC Magazine. Archived from the original on July 6, 2011. Retrieved January 25, 2010.
  57. ^ "What's New in Studio and Server Enterprise Edition 6.0 Service Pack 2 - Wrap Pack 1" (PDF). Micro Focus. p. 1.
  58. ^ "Enterprise > Micro Focus Studio Enterprise Edition for UNIX > Welcome > Product Information > Installing Studio Enterprise Edition for UNIX > System Requirements". Micro Focus. Archived from the original on 2017-11-07. Retrieved 2017-11-05.
  59. ^ "IBM PL/I Set for AIX Version 1". 19 September 1995. Retrieved 13 May 2019.
  60. ^ "Iron Spring PL/I Compiler - Programming Guide". ironspring.com. 2020-09-15. Retrieved 2021-02-26.
  61. ^ Frank G. Soltis (1997). Inside the AS/400, Second Edition. Duke Press. ISBN 978-1882419661.
  62. ^ Pigott, Diarmuid. "PL/MP". Online Historical Encyclopaedia of Programming Languages. Archived from the original on August 2, 2020. Retrieved Feb 24, 2021.
  63. ^ Leif Svalgaard (2003-10-08). "Re: Re: MI emulator". MI400 (Mailing list). Retrieved 2021-02-26.
  64. ^ Dave McKenzie (2004-09-01). "RE: Dave McKenzie's UNDELete utility - a LifeSaver!". Midrange Archive MI400. Retrieved 2021-05-24.
  65. ^ Dan Hicks (1998-08-21). "UNIX vs AS/400?". Newsgroup: comp.sys.ibm.as400.misc.
  66. ^ Cocke, John; Markstein, Victoria (January 1990). "The evolution of RISC technology at IBM" (PDF). IBM Journal of Research and Development. 34 (1): 4–11. doi:10.1147/rd.341.0004. Archived from the original (PDF) on 2017-08-27. Retrieved 2021-03-11. The result was the PL.8 language, the ".8" implying that it had about 80 percent of the richness of PL/I.
  67. ^ a b W. Gellerich; T. Hendel; R. Land; H. Lehmann; M. Mueller; P. H. Oden; H. Penner (May 2004). "The GNU 64-bit PL8 compiler: Toward an open standard environment for firmware development" (PDF). IBM Journal of Research and Development. IBM. 48 (3.4): 543–556. doi:10.1147/rd.483.0543. S2CID 19020943. Archived from the original (PDF) on 2021-01-24. Retrieved 2021-02-26.
  68. ^ Marc Auslander; Martin Hopkins (June 1982). An overview of the PL.8 compiler (PDF). SIGPLAN '82 Proceedings of the 1982 SIGPLAN symposium on Compiler construction. ACM. pp. 22–31. doi:10.1145/872726.806977. Retrieved 2021-02-26.
  69. ^ J. von Buttlar; H. Bohm; R. Ernst; A. Horsch; A. Kohler; H. Schein; M. Stetter; K. Theurich (July 2002). "z/CECSIM: An efficient and comprehensive microcode simulator for the IBM eServer z900" (PDF). IBM Journal of Research and Development. IBM. 46 (4.5): 607–615. doi:10.1147/rd.464.0607. S2CID 12745372. Archived from the original (PDF) on 2020-02-11. Retrieved 2021-02-26.
  70. ^ Pearkins, Jon E. (December 1, 1995). "Open PL/I: Liant addresses PL/I legacy applications". Enterprise Systems Journal. Archived from the original on November 3, 2012. Open PL/I estimated that in 1995 20% of mainframe legacy applications were in PL/I, with 60% in COBOL: there were 300,000 PL/I programmers worldwide
  71. ^ Schultz, G.; D.Rose; C.West; J.Gray (April 1980). "Executable description and validation of SNA". IEEE Transactions on Communications. 28 (4): 661–677. doi:10.1109/TCOM.1980.1094695.
  72. ^ Fred Brooks는 IBM 운영 체제/360대한 슬라이드에서 OS/360을 PL/S 및 어셈블러가 아닌 PL/I로 작성했어야 한다고 말합니다.이 문서는 OS/360 프로그램의 개요를 정리한 것입니다."/360 아키텍처와 그 운영 체제"웨이백 머신, 2001년에 2020-07-28년에 아카이브되었습니다.
  73. ^ IBM System/360 Operating System PL/I (F) Language Reference Manual (PDF) (Fifth ed.). December 1972. Chapter 15: Multitasking. GC28-8201-4.
  74. ^ OS PL/I Checkout and Optimizing Compilers: Language Reference Manual (PDF) (Fifth ed.). October 1976. Chapter 17: Multitasking. GC33-0009-4.
  75. ^ "Chapter 8: Program Control". Kednos PL/I for OpenVMS Systems Reference Manual. January 2007. Archived from the original on 2016-08-18. Retrieved 2017-11-05.
  76. ^ 컴파일러는 할당의 "=" 또는 DECLARE의 ";" (몇 줄 뒤에 있을 수 있음)를 만나기 전까지는 문이 선언문인지 다중 할당문인지 구분할 수 없습니다.이 예에서는 DECLY/DCL이 예약되어 있지 않은 것이 가장 큰 원인입니다.프래그먼트를 생각해 주세요.DECLARE(I,J,K),L= DECLARE(I,J,K),L;.
  77. ^ Hart, Timothy P. (October 1963). "MACRO Definitions for LISP". hdl:1721.1/6111. {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  78. ^ a b c IBM Corporation (September 2012). Enterprise PL/I for z/OS PL/I for AIX Rational Developer for System z PL/I for Windows: Language Reference (PDF). Retrieved June 2, 2019.
  79. ^ a b "ALTER statement". IBM.
  80. ^ a b "GO TO (Assigned)".
  81. ^ "GO TO (Computed)".
  82. ^ "GO TO Statement in COBOL".
  83. ^ Digital Research PL/I Language Programmer's Guide}. p. 103.

레퍼런스

교재

  • Neuhold, E.J. & Lawson, H.W. (1971). The PL/I Machine: An Introduction to Programming. Addison-wesley. ISBN 978-0-2010-5275-6.
  • Barnes, R.A. (1979). PL/I for Programmers. North-Holland.
  • Hughes, Joan K. (1973). PL/I Programming (1st ed.). Wiley. ISBN 0-471-42032-8.
  • Hughes, Joan K. (1986). PL/I Structured Programming (3rd ed.). Wiley. ISBN 0-471-83746-6.
  • Groner, G.F. (1971). PL/I Programming in Technological Applications. Books on Demand, Ann Arbor, MI.
  • Anderson, M.E. (1973). PL/I for Programmers. Prentice-Hall.
  • Stoutemyer, D.R. (1971). PL/I Programming for Engineering & Science. Prentice-Hall.
  • Ziegler, R.R. & C. (1986). PL/I: Structured Programming and Problem Solving (1st ed.). West. ISBN 978-0-314-93915-9.
  • Sturm, E. (2009). The New PL/I ... for PC, Workstation and Mainframe. Vieweg-Teubner, Wiesbaden, Germany. ISBN 978-3-8348-0726-7.
  • Vowels, R.A. (1997). Introduction to PL/I, Algorithms, and Structured Programming (3rd ed.). ISBN 978-0-9596384-9-3.
  • Abrahams, Paul (1979). The PL/I Programming Language (PDF). Courant Mathematics and Computing Laboratory, New York University.

표준

  • ANSI ANSI X3.53-1976 정보시스템 - 프로그래밍 언어 - PL/I
  • ANSI ANSI X3.74-1981 (R1998) 정보시스템 - 프로그래밍 언어 - PL/I 범용 서브셋
  • ANSI ANSI X3.74-1987 - 프로그래밍 언어 - PL/I 범용 서브셋
  • ECMA 50 프로그래밍 언어 PL/I, 초판, 1976년 12월
  • ISO 6160: 1979 프로그래밍 언어 -PL/I
  • ISO/IEC 6522:1992 정보기술—프로그래밍 언어PL/I 범용 서브셋

레퍼런스 매뉴얼

  • Burroughs Corporation, "B 6700 / B 7700 PL/I Language Reference", 5001530.디트로이트, 1977년
  • CDC. R. A. 모음, "CDC 사이버용 PL/I"CDC Cyber 70 시리즈용 컴파일러 최적화
  • Digital Equipment Corporation, "decsystem10 Conversational Programming Language User's Manual", DEC-10-LCPUA-A-D.메이나드, 1975년
  • 후지쯔 주식회사, "Facom OS IV PL/I 레퍼런스 매뉴얼", 70SP5402E-1,974.579 페이지.PL/I F 서브셋
  • Honeywell, Inc., "Multics PL/I Language Specification", AG94-02. 1981.
  • IBM, IBM 운영 체제/360 PL/I: 언어 사양, C28-6571.1655.
  • IBM, OS PL/I Checkout and Optimizing Compiler: Language Reference Manual, GC33-0009.176.
  • IBM, IBM, "NPL 기술 보고서", 1964년 12월
  • IBM, z/OS 버전 4용 엔터프라이즈 PL/I 릴리스 1 언어 참조 설명서, SC14-7285-00. 2010.
  • IBM, OS/2 PL/I 버전 2: Programming: Language Reference, 제3판, 양식 SC26-4308, San Jose.1994.
  • OpenVMS 시스템용 Kednos PL/I. 참조 매뉴얼, AA-H952E-TM.2003년 11월
  • Liant Software Corporation(1994년), Plamingham(매스주), Open PL/I Language Reference Manual(PL/I 언어 참조 매뉴얼), Rev. Ed.
  • Nixdorf Computer, "Terminalsystem 8820 Systemtechnischer Teil PL/I-Subset", 05001.17.8.93-01, 1976.
  • ING. C. 올리베티, "Mini PL/I 참조 매뉴얼", 1975, No. 3970530 V
  • Q1 Corporation, "Q1/LMC 시스템 소프트웨어 매뉴얼", Farmingdale, 1978.

외부 링크