기본 플러스
BASIC-PLUS| 패러다임 | 필수적 |
|---|---|
| 처음 등장한 | 전( |
| OS | RSTS/E |
| 영향을 받다 | |
| 다트머스 베이직, Tymshare SUPER BASIC | |
| 영향받은 | |
| Microsoft BASIC | |
BASIC-PLUS는 DEC(Digital Equipment Corporation)가 1970년대 초부터 1980년대까지 16비트 미니컴퓨터의 PDP-11 시리즈용 RST/E 시분할 운영 체제에서 사용하기 위해 개발한 BASIC 프로그래밍 언어의 확장 언어입니다.
BASIC-PLUS는 원래 Dartmouth BASIC에 매우 가까운 TSS/[1]8용 BASIC-8을 기반으로 하고 있습니다.BASIC-PLUS는 조건문 및 포맷에 관한 JOSS의 기능을 다수 추가했습니다.BASIC-PLUS는 원래의 Microsoft BASIC이 패턴화된 [2]버전입니다.
BASIC-PLUS에 추가된 특징 중 하나는 다음과 같은 문자열 함수의 도입이었습니다.MID$ 및 LEFT$ 및 Dartmouth의 원래 범용 CHANGE 명령어.향후 버전, 특히 Microsoft 버전에서는 CHANGE가 삭제되고 BASIC-PLUS의 문자열 함수가 이러한 종류의 작업을 수행할 수 있는 유일한 방법이 되었습니다.오늘날까지 대부분의 베이직은 이 규칙을 따르고 있습니다.
이 언어는 나중에 진정한 컴파일러로 BASIC-Plus-2로 고쳐졌고, 이 머신의 네이티브 BASIC 구현으로 VAX-11 플랫폼에 이식되었습니다.이 버전은 몇 가지 플랫폼 변경 후에도 유지되었으며 현재는 VSI BASIC for OpenVMS로 알려져 있습니다.
작동
사용자들은 단말기에 앉아서 프로그래밍 언어문을 타이핑할 것이다.명령문은 시스템의 명령어인터프리터에 직접 입력하거나 텍스트에디터에 입력하여 파일에 저장한 후 파일에서 명령어인터프리터에 로드할 수 있습니다.행 입력 직후, 소스코드의 에러가 유저에게 보고되었습니다.
BASIC-PLUS는 커서 제어 기능이 있는 스마트 단말기를 보장할 수 없기 때문에 모든 소스코드에 회선 번호를 붙이는 공통 시스템을 사용했습니다.번호를 입력하고 다음 코드의 내용을 변경하여 코드를 편집했습니다.코드 행은 행 번호만 입력하고 빈 행으로 설정하면 삭제할 수 있습니다.
RSTS/E 사용자의 가상 주소 공간은 64KB보다 조금 적은 공간으로 제한되었습니다.BASIC-PLUS를 사용하면 이 가상 주소 공간의 약 절반이 명령어 인터프리터와 런타임 라이브러리(RSTS/E에서 런타임 시스템이라고 함)에 의해 사용되었습니다.이로 인해 사용자 프로그램은 약 32kB의 메모리로 제한됩니다.
대규모 프로그램은 여러 조각으로 분할되어 있습니다.CHAIN스테이트먼트, 및 프로그램은, 세컨더리 프로그램의 특정의 행 번호에 체인 접속해, 프로그램이 첫 번째 행과 다른 포인트에서 실행을 개시할 필요가 있는 것을 나타낼 수 있습니다.이 특정 회선 번호에의 체인 기능에 의해서, 프로그램은 다른 프로그램에서 호출되고 있는 것을 서로 신호로 전달할 수 있습니다.core common이라고 불리는 공유 메모리 섹션을 사용하면 프로그램 간에 필요에 따라 데이터를 전달할 수 있습니다.디스크 파일도 사용할 수 있지만 속도가 느렸습니다.
메모리 절약을 위해 가비지 수집 메모리 매니저가 포함되어 문자열 데이터와 바이트 코드 모두에 사용되었습니다.
실행 중인 프로그램을 중단하고 변수를 검사 및 수정한 다음 다시 시작할 수 있습니다.
구문 및 기능
BASIC-PLUS는 Dartmouth BASIC의 최신 버전에 밀접하게 적용되어 있으며, 강력한 기능을 갖추고 있습니다.MAT명령어를 지정합니다.게다가 DEC는 독자적인 흐름 제어 구조를 다수 추가했습니다.
편집
행 번호는 1 ~32767의 [3]양의 정수입니다.코드의 논리행은,[4] 통상의 캐리지 리턴 문자 대신에 행의 끝에 있는 행 피드를 사용하는 것으로, 복수의 물리 회선상에서 계속할 수 있습니다.소스 파일의 외부 편집을 용이하게 하기 위해 BASIC-PLUS의 최신 버전에서는&줄 바꿈 문자입니다.
다음과 같이 한 줄에 여러 문장을 배치할 수 있습니다.:문 [4]구분 기호로 지정합니다.시스템에서는 탭을 인라인 공백으로 사용할 수 있으며, 현대 [5]언어에서처럼 루프를 보다 명확하게 하기 위해 사용되었습니다.다음 중 하나를 사용한 코멘트REM키워드 또는!를 사용한 MS BASIC과는 [6]대조적으로REM그리고.'.
표준문
그PRINT명령어는 화면을 14칸의 영역으로 분할하고 콤마를 사용하여 이들 위치를 이동했습니다.PRINT 1,2,31, 2, 3을 공백으로 [7]출력합니다.PRINT 1;2;3공백이 하나 남으면 '1 2 3'[8][a]이 생성됩니다. INPUT프롬프트 문자열을 지정할 수 있지만 콤마가 아닌 세미콜론을 사용하여 구분했습니다.[9]
문자열은 단일 따옴표 또는 이중 [10]따옴표로 구분될 수 있습니다.에 덧붙여CHR그리고.ASCII단일 문자를 문자열 [11]형식으로 변환하는 함수는 BASIC-PLUS도 Dartmouth의 강력한 기능을 지원합니다.CHANGE명령어를 입력합니다. CHANGE는 문자열을 반복하고 각 문자의 ASCII 값을 숫자 배열의 슬롯으로 반환합니다.예를 들어.CHANGE 'HELLO' TO X5가지 요소의 [12]배열을 반환합니다.작전을 되돌릴 수도 있고CHANGE X TO A$는 X 배열의 개별 번호를 읽고 [13]문자열로 변환합니다.
문의 수식자
BASIC-PLUS는 모든 스테이트먼트에 적용할 수 있는 JOSS와 같은 조건인 "스테이트먼트 수식자" 개념을 추가했습니다.예를 들어.PRINT I IF I <> 10와 동등하다IF I <> 10 THEN PRINT I[14] 그 반대도 제공되었다.PRINT I UNLESS I = 10와 동등했다.IF I <> 10 THEN PRINT I를 클릭합니다.[15]
FOR루프는 다른 버전의 BASIC과 동일하게 동작하며NEXT명령어를 식에서 사용하여 [16]조기 종료할 수 없습니다.대신,UNTIL그리고.WHILE키워드를 사용하여 조기 종료를 제어할 수 있습니다.예를 들어.FOR I=1 UNTIL I=10I=10까지 루프를 계속합니다. 다음 코드는 [17]I의 값을 설정합니다. 즉, 10회 반복 후에는 종료되지 않고 I가 [18]10으로 설정되는 즉시 종료될 수 있습니다.수식자는 예를 들어 콤팩트한 한 줄의 루프를 구축하기 위해서도 사용할 수 있습니다.X=X+1 WHILE X<100X가 [19]100이 될 때까지 루프합니다.
변수, 식 및 행렬
BASIC-PLUS의 초기 버전에서는 변수 이름은 단일 문자 또는 단일 문자 뒤에 단일 [5]숫자를 사용할 수 있습니다.이후 버전에서 "확장 모드"를 포함하면 변수 이름은 최대 29자까지 사용할 수 있으며 닷(.)이 허용 문자로 추가되었습니다.모든 변수 이름은 여전히 [b]문자로 시작해야 했습니다.BASIC의 대부분의 버전과 마찬가지로LET변수 할당의 경우 키워드는 옵션입니다.여러 변수를 하나의 값으로 설정할 수 있습니다.LET A,B,C=10를 클릭합니다.[20]
언어에서는 부동소수점 수, 정수 및 문자열의 3가지 데이터 유형을 지원했습니다.접미사가 없는 변수는 부동 소수점(8바이트, 0.29×10−38 ~ 1.7×1038, 최대 16자리 정밀도)이었습니다.정수 변수(16비트, 범위 -32768 ~+32767)는 다음과 같이 표시됩니다.%접미사,[21] 문자열 변수(예: 길이)는 다음 기호로 표시되었습니다.$서픽스[10]
수학 연산자 및 논리 연산자 목록은 일부 확장자를 가진 대부분의 BASIC에서 일반적인 것이었다.수학은+,-,*,/그리고.^와 함께 지원되었습니다.**대체 형태로서^해당 문자가 없을 수 있는 컴퓨터 단말기용입니다.표준 논리 비교는=,<,>,<=,>=,그리고.<>한 가지 흥미로운 추가 사항은==연산자, "근접 동일"을 나타냅니다.두 숫자가 동일하게 인쇄될 경우, 즉 최상위 6자리 숫자가 [22]같을 경우 이 값은 참으로 반환됩니다.논리 연산자에는 표준이 포함되어 있습니다.NOT A,A AND B그리고.A OR B, 와 함께A XOR B,A EQV BA와 B가 모두 true이거나 둘 다 false일 경우 true가 반환됩니다.A IMP BA가 true이고 B가 false이면 false이고 그렇지 않으면 항상 [23]true입니다.
그DIM스테이트먼트는 3가지 데이터 유형 중 임의의 1차원 및 2차원 어레이를 할당할 수 있습니다.첨자의 범위는 항상 0으로 시작합니다(단,MAT행 0 또는 열 0)[24][25]에 요소가 설정되지 않았습니다.
그 언어에는 또한 많은 언어들이 포함되어 있었다.MAT전체 어레이(또는 MATrix)에서 작동하는 명령어.그MAT READ명령어는 매트릭스를 값들로 채웁니다.DATA스테이트먼트,[26] MAT INPUT어레이에 사용자 정의 값을 채웁니다.MAT PRINT요소를 1D [27]또는 2D 형식으로 인쇄합니다. MAT는, 관련 키워드를 사용해 매트릭스내의 디폴트치를 설정하기 위해서도 사용할 수 있습니다.예를 들어 다음과 같습니다.MAT A=ZERA 배열을 [28]0으로 채웁니다. TRN전체 행렬을 전치하고INV뒤집을 수도 있어요.[29]또한.+,-,그리고.*행렬에 사용할 수 있으며 관련 행렬 [30]연산을 수행할 수 있습니다.
파일 처리
그DIM#"virtual DIM" 문은 "virtual data array(s)" 또는 "virtual array(s)"를 디스크 파일에 매핑할 수 있습니다.이것에 의해, 컴퓨터의 사용 가능한 메모리(또는 주소 공간)보다 큰 어레이를 사용할 수 있게 되어, 어레이 요소를 사용해 디스크 파일(영구 스토리지)의 읽기, 쓰기, 확장이 가능하게 됩니다.그들은 이 배치를 "가상 데이터 스토리지" 및 "가상 코어"라고 불렀지만, 어레이와 메모리 매핑된 파일을 할당하는 현대적인 접근 방식은 사용하지 않았습니다.대신 한 번에 512바이트의 데이터를 저장하기 위해 단일 버퍼가 사용되었으며, 가상 어레이의 엔트리에 액세스하면 필요에 따라 해당 데이터를 읽고 오래된 데이터를 씁니다.그CLOSE문을 지정하면 파일을 닫기 전에 버퍼가 (필요에 따라) 다시 쓰이게 됩니다.추가 섹터가 캐시되지 않았기 때문에 "잘못된" 순서로 데이터에 액세스하면 디스크 액세스 수가 증가할 수 있습니다.가상 어레이에 추가 규칙이 적용되어 1개의 데이터가 레코드 경계를 넘어설 수 없게 되었습니다.각 데이터 유형은 그 크기의 배수로 정렬되었습니다.가상 문자열은 크기가 2, 4, 8, 16, 32, 64, 128, 256 또는 512 바이트로 제한된 고정 길이의 ASCIIZ 데이터로 저장되며 액세스하려면 다음 명령을 사용합니다.LSET그리고.RSET를 클릭합니다.[31]
가상 머신
BASIC-PLUS는 인터프리터가 아니라 컴파일 및 실행 시스템이었습니다.BASIC의 각 행은 입력 시 "PPCODE"(푸시팝 코드)로 변환되어 가상 머신에서 그 후 신속하게 실행되었습니다.이러한 변환에서는 BASIC 행이 토큰화되지 않고 스택머신에서 사용하기 위해 다시 씁니다.이러한 표현을 BASIC 문장으로 변환할 수 없습니다.이를 통해 키워드를 문자열로 반복 디코딩할 필요가 없어졌습니다.PPCODE로 변환된 키워드는 해당 기능을 실행하기 위한 루틴을 가리키는 숫자였습니다.BASIC-PLUS에는COMPILE이 명령어는 진정한 컴파일러가 아닙니다.이 명령어는 프로그램의 PPCODE 표현을 저장했을 뿐이기 때문에 BASIC 프로그램이 메모리에 로드되었을 때 다시 컴파일할 필요가 없습니다.시스템은 사용자의 프로그램을 두 가지 형식으로 저장합니다.하나는 텍스트 형식의 편집 가능한 소스 코드입니다.SAVE명령어로 보통 에 배치됩니다.BAS 파일다른 하나는 PCODE 버전의 프로그램입니다.COMPILE명령어를 에 저장합니다.BAC 파일;BAC 파일은 더 작고 로드 및 실행 속도가 더 빨랐지만 [32]편집할 수 없었습니다.
베이직 플러스 2
Basic Plus 2(BP2 또는 BASIC-Plus-2)라는 관련 제품은 나중에 DEC에 의해 추가 기능과 성능 향상을 위해 개발되었습니다.
스레드 코드로 진정한 컴파일을 사용하여 어셈블러 및 기타 언어 시스템에서 생성된 머신 코드 객체 파일과 호환되는 객체 파일에 출력을 기록했습니다.이러한 오브젝트 파일은 라이브러리에 보관할 수 있습니다.그런 다음 링커(TKB 태스크빌더)는 객체 파일 및 라이브러리에서 실행 파일을 생성합니다.TKB는 오버레이도 지원했습니다.이를 통해 필요에 따라 개별 루틴을 가상 주소 공간으로 스왑하여 현재 사용되지 않는 오버레이 루틴을 사용할 수 있습니다.또한.
BP2 프로그램은 RSX 런타임 시스템 하에서 실행되었습니다.이 RTS는 [33]사용자의 가상 주소 공간의 8KB만을 차지하여 사용자의 프로그램에 56KB를 남겼습니다.(RST/E 버전9에서는 별도의 명령 및 데이터 공간이 도입되어 각 명령의 최대 64KB가 허용됩니다.)이러한 두 가지 요인에 의해 개별 BP2 프로그램이 BASIC-PLUS 프로그램보다 훨씬 더 커질 수 있게 되어 많은 경우 여러 프로그램 간의 체인 접속이 필요 없게 되었습니다.
BASIC-PLUS(RSTS/E에서만 사용 가능)와는 달리 BP2는 RSX-11 운영 체제에서도 사용 가능했습니다.또한 BP2 프로그램은 최신 VAX BASIC과의 호환성도 향상되었습니다.
MS BASIC과의 비교
Microsoft BASIC은 BASIC-PLUS에 [2]매우 밀접하게 패턴화되어 있습니다.MS BASIC의 이전 버전인 1.x 시리즈에는 정수 변수가 없었지만, 이러한 변수는 코모도어 PET 및 코모도어 64의 최신 모델을 포함한 많은 머신에서 볼 수 있는 2.x 시리즈에 추가되었습니다.논리 명령 및 루프 명령어를 인라인으로 배치하는 기능:I = I + 1 UNTIL I = 10복사되지 않았으며 일반적인 버전의 마이크로컴퓨터 베이직에도 표시되지 않습니다.MS BASIC에도 매트릭스 명령어가 없었습니다.
「 」를 참조해 주세요.
메모들
레퍼런스
인용문
- ^ C. Gordon Bell; J. Craig Mudge; John N. McNamara (1978). Computer Engineering: A DEC View of Hardware Systems Design (PDF). Digital Press. ISBN 0-932376-00-2.
- ^ a b Manes, Stephen (1993). Gates. Doubleday. p. 61. ISBN 9780385420754.
- ^ 1972년, 2-1페이지
- ^ a b 1972년, 페이지 2-3
- ^ a b 1972년, 페이지 2-6
- ^ 1972년, 3-1페이지
- ^ 1972년, 페이지 3-7
- ^ 1972년, 페이지 3-8
- ^ 1972년, 페이지 3-10
- ^ a b 1972년, 5-2페이지
- ^ 1972년, 페이지 5-12
- ^ 1972년, 페이지 5-5
- ^ 1972년, 페이지 5-7
- ^ 1972년, 페이지 8-17
- ^ 1972년, 페이지 8-18
- ^ 1972년, 페이지 3-19
- ^ 1972년, 페이지 8-14
- ^ 1972년, 페이지 8-15
- ^ 1972년, 페이지 8-20
- ^ 1972년, 페이지 3-3
- ^ 1972년, 페이지 6-1, 6-2
- ^ 1972년, 페이지 2-9
- ^ 1972년, 페이지 2-10
- ^ 1972년, 페이지 3-21
- ^ 1972년, 5-3페이지
- ^ 1972년, 페이지 7-2
- ^ 1972년, 페이지 7-3
- ^ 1972년, 페이지 7-5
- ^ 1972년, 페이지 7-7
- ^ 1972년, 페이지 A-1
- ^ 1972년, 페이지 9-17
- ^ "BASIC-PLUS inline operators, do they actually make sense?". Retrieved 2020-08-05.
- ^ BASIC V2 Reference Manual (PDF). Maynard, Massachusetts: Digital Equipment Corporation. 1991.
참고 문헌
- BASIC-PLUS Language Manual (PDF). Maynard, Massachusetts: Digital Equipment Corporation. 1972.