풀 BASIC

Full BAS

베이직(Standard BASIC) 또는 ANSI BASIC(ANSI BASIC)은 베이직 프로그래밍 언어의 사투리를 정의하는 국제 표준입니다.ANSI(American National Standards Institute) X3.60 그룹이 유럽 ECMA와 협력하여 개발했습니다.구조화된 프로그래밍, 매트릭스 연산, 파일 처리를 위한 입출력 등 다양한 기능을 갖춘 BASIC의 고급 버전에 대해 설명합니다.

ANSI의 BASIC 표준화는 2단계 프로세스였다.첫 번째는 1974년부터 Minimal BASIC으로 실행되었으며, 다른 플랫폼에서 올바르게 구현될 수 있도록 원래의 Dartmouth BASIC 언어를 명확하게 정의하고 표준화하려는 노력이었다.1977년 말 출시된 후, 관심은 Dartmouth College에서 개발되고 있는 보다 강력한 Structured BASIC에 기반을 둔 Full BASIC에 쏠렸다.시스템의 복잡성과 표준 위원회 위원들에 의해 추진된 많은 추가 사항으로 인해 노력이 좌절되었고, 최초의 표준 초안은 4년 늦은 1986년에야 준비되었습니다.

이 표준은 1986년 6월 26일에 ECMA-116으로[1], 1987년 1월에 ANSI X3.113-1987로 비준되었습니다.사양이 논의되는 동안 마이크로컴퓨터 혁명이 일어났고, 1980년대 초에는 수천만 대의 가정용 컴퓨터에서 실행되는 Microsoft BASIC이 이미 나타났다 사라졌습니다.이 과정이 오래 걸리는 것을 지켜보면서 다트머스 참가자들은 일부 표준을 기반으로 True BASIC을 생산하기 위해 떠났지만, 이것은 거의 소용이 없었다.마이크로소프트와 같은 사실상의 표준이 시장을 지배했고 마이크로소프트 비주얼 베이직과 같은 유사한 [citation needed]개념을 통합한 새로운 언어의 기초를 형성했다.

역사

최소 BASIC

1964년 Dartmouth BASIC의 도입으로 컴퓨터 분야에서 "대화 인터페이스"로 알려진 시분할 및 사용자와의 직접적인 상호작용을 포함한 많은 새로운 개념들이 결합되었습니다.GE 235 메인프레임 컴퓨터를 공급한 제너럴 일렉트릭은 Dartmouth의 시스템 수정 버전을 사용하여 서비스 사무국을 시작했고, 이는 결국 GENIE 온라인 서비스로 발전하게 되었습니다.TymshareCompuServe를 비롯한 많은 기업들이 Dartmouth [2][3]모델에 이어 호스팅된 BASIC 서비스를 빠르게 도입했습니다.

1968년 Hewlett-Packard(HP)는 HP 2000 시리즈 미니컴퓨터를 출시했습니다.이 미니컴퓨터는 랙마운트 시스템에서 이전 메인프레임 시스템과 동일한 기능을 제공하며 약 100,000달러(2021년 [4]779,234달러 상당)에 완전한 형태로 구성할 수 있습니다.HP Time-Shared BASIC은 Dartmouth와 [5]많은 차이점을 가지고 있으며, Data General과 같은 다른 미니 벤더가 이를 모방했습니다.DEC(Digital Equipment Corporation)는 1972년까지 자체 설계의 BASIC을 도입하지 않았습니다. 버전의 BASIC-PLUS는 HP나 Dartmouth의 방언과는 달랐습니다.1970년대 초까지 시장에는 세 개의 주요 방언과 수십 개의 작은 변형이 사용되었습니다.

1974년 1월 ANSI 산하에 단일 표준 [6]BASIC을 정의하기 위한 새로운 그룹이 결성되었다.다트머스 팀은 그룹의 핵심 부분을 형성했다.Dartmouth는 ANSI의 기반이 된 Structured BASIC(SBASIC)로 알려진 BASIC의 대폭 확장된 버전을 개발하고 있었습니다.그 당시, 많은 새로운 기능을 지원하는 다른 방언은 거의 없었다.이 그룹은 SBASIC에 기초한 완전한 표준이 합의하는 데 다소 시간이 걸릴 것이라고 결정하였고, 따라서 ANSI BASIC 노력은 두 가지 이정표로 분할되었다.번째 Minimal BASIC은 구현에 필요한 가장 기본적인 기능만을 포함하는 표준을 작성합니다.매트릭스 수학과 같이 다트마우스에서 오랫동안 지원해온 기능들도 생략될 것이다.Minimal BASIC의 초안기준은 1976년 1월, 최종안은 1977년 7월에 발표되어 그 해 12월에 비준되었다.BASIC의 지지자이자 ANSI 그룹의 일원이었던 다트머스 대학의 물리학자 Arthur Luehrmann은 나중에 다음과 같이 말했다.

X3J2의 첫 몇 년은 1964년 다트머스 베이직의 원본을 표준화하는 데 소비됐다.Minimal Basic은 실제 [7]언어라기보다는 장난감이었습니다.

풀 BASIC

그 후, 그 그룹은 Full Basic에 관심을 돌렸다.무렵에는 마이크로컴퓨터 혁명이 본격화되었고, 마이크로소프트 베이직이나 이와 유사한 베이직이 작동하는 수백만 대의 기계가 시장에 [a]진입하고 있었다.그럼에도 불구하고 참가자 중 마이크로컴퓨터 벤더나 공급업체는 없었다.대신 IBM, Control Data 및 General Electric과 같은 메인프레임 벤더, DEC(Digital Equipment Corporation), Data General 및 Wang Laboratories와 같은 미니 컴퓨터 벤더, 그리고 3M, American Express [9]Kodak과 같은 기타 매우 큰 회사가 참여했습니다.

모든 구성원들이 "필수" 기능의 목록을 추가하기 시작함에 따라 이러한 노력은 즉시번째 시스템 효과와 배치되었습니다.일부에서는 이 언어가 소규모 기계에서 실행되는 교육용 사용을 목표로 하는 전통을 이어가기를 원했고, 기본적인 파일 지원 및 유사한 기능을 갖춘 단순한 언어를 원했습니다.또 다른 사용자들은 나은 문자열 조작을 제공하면서 COBOL이나 FORTRAN과 같은 언어와 경쟁할 수 있는 로드 가능한 모듈러 프로그램 및 기타 확장 프로그래밍 기능을 지원하고자 했습니다.세 번째 그룹은 주로 비즈니스 애플리케이션, 특히 BASIC이 주요 비즈니스 언어가 된 유럽 사용자들에 관심을 가지고 있으며, 반올림 [10]문제를 겪지 않는 광범위한 파일 처리와 십진수 계산을 시스템에 포함시킬 것을 요구했습니다.

BASIC의 원조 디자이너이자 ANSI 그룹의 멤버인 John G. Kemeny와 Thomas E. Kurtz는 이 과정에 비판적이었다.1982년 기사에서 커츠는 겉으로 보기에는 사소한 문제들조차 어떻게 큰 논란으로 변모했는지에 대해 썼다.그는 의 예를 들었다.OPTION BASE진술.어레이가 BASIC에 처음 추가되었을 때 다음과 같이 인덱스 1부터 시작하였습니다.DIM A(3)는 1, 2, 3개의 슬롯을 가진 어레이를 만들었습니다.경우에 따라서는 지수 0이 더 자연스럽기 때문에OPTION BASE 0는 Dartmouth 코드의 최신 버전에 추가되어 같은 정의에 4개의 슬롯(0 ~3)이 있습니다.Minimal 기간 동안 기본 베이스에 대한 논쟁이 계속되었고, 최종적으로 0이 선택되었습니다.5년 후, Full efforts에서 어레이는 새로운 구문을 사용하여 하한을 정의할 수 있다고 결정되었습니다.DIM YEAR(1970 TO 1990)이것에 의해, 다음의 요구를 없앴다.OPTION BASE 0디폴트를 1로 다시 [11]변경하기로 했습니다.

당초 X3.60 그룹은 1982년 여름의 첫 번째 기술 검토 사본을 목표로 하고 있었으며, 이 사본은 가을에 ANSI X3 위원회에 제출될 예정이다.이 기간 동안 제안된 표준이 발송되고 일반인으로부터 코멘트가 받아들여질 것입니다.최종 초안은 그 [12]해 비준을 위해 1983년에 X3로 보내질 것이다.이것은 다소 낙관적인 것으로 판명되었다.초안은 1985년 1월[1], 최종 초안은 [13]1987년 1월에 비준을 위해 1986년에 공개되었다.이 기간 동안 이 표준은 매우 커져서 결국 코어 모듈과 5개의 옵션 애드온으로 분할되었습니다.이러한 애드온에는 복잡한 파일 처리, 실시간 컴퓨팅 지원, 고정 소수점 연산, 옵션 편집 명령 및 플랫폼에 의존하지 않는 그래픽 [14]모듈이 포함됩니다.

그 결과는 공개 논평 기간 동안 비판을 받았다.한 리뷰어는 "그 결과 언어는 복잡성 면에서 현재의 어떤 프로그래밍 언어와도 견줄 정도로 커졌다"며 "전체 표준에 부합하는 것은 지금까지 시도된 [15]것 중 가장 실질적인 컴파일러 프로젝트와 비교할 수 있을 것"이라고 언급했다.예를 들어 서브루틴을 기술하는 방법에는 5가지 이상, 문자열의 최대 길이를 정의하는 방법에는 3가지, [16]어레이를 정의하는 방법에는 2가지가 있습니다.배열 경계 문제를 언급하면서, 위원회는 채택된 해법이 "참을 수 없다"는 데 동의하고 "나중에"[17] 수정할 계획을 세웠다는 점에 주목한다.

참가자들 중 어느 누구도 표준 발표 후 실제로 적합한 버전을 구축했다는 증거는 없으며, 진행 중인 노력에 대한 언급은 즉시 사라진다.1987년부터 이 표준의 유일한 언급은 그것이 존재하고 True BASIC이 일부 기능을 포함했다는 것입니다.게다가 이 시점까지 수백만 개의 마이크로가 MS의 디팩토 표준의 일부 변형을 실행하고 있기 때문에, 새로운 ANSI 표준은 비표준 [18]솔루션으로 간주되었습니다.마이크로 플랫폼에서의 BASIC의 초기 성공은 인쇄된 소스 코드에서 프로그램을 입력할 수 있게 된 것이었지만 1980년대 중반까지 이것은 축소 포장 애플리케이션으로 대체되었고 배포 시스템으로서의 BASIC의 필요성은 [19]사라졌습니다.대규모 시스템 측에서는 인터랙티브나 온라인 편집과 같은 BASIC이 대처하고자 하는 외부 문제가 현재 [20]대부분의 시스템에서 사용 가능하기 때문에 원래 교육 언어로서의 사용이 Pascal로 점차 대체되고 있었습니다.

진정한 BASIC

표준 프로세스가 너무 느려서 Structured BASIC의 저자조차 결국 포기했습니다.Stephen Garland는 고등학생들을 위한 일련의 College Board 시험을 준비하라는 요청을 받았고 대신 파스칼로 그것을 작성했다.이것은 코모도어 64나 TRS-80과 같이 널리 사용되는 많은 컴퓨터들이 파스칼을 완전히 구현하지 않았다는 점을 고려할 때 다소 논란이 있었다.Luehrmann은 더 많은 [21]학생들에게 적용할 수 있는 보다 일반적인 과정을 제안하면서 이러한 노력에 비판적이었다.

ANSI 그룹의 Dartmouth 참가자들에게는 이 노력이 합리적인 기간 내에 완료될 희망이 없다는 것이 분명해졌다.그들은 그 노력을 버리고 새로운 회사를 설립하여 True Basic으로 자신들의 언어 버전을 시장에 내놓았습니다.True BASIC은 핵심 표준의 많은 기능을 결합했지만 자체적인 변경도 많이 했습니다.가장 주목할 만한 것은 회선번호 부여가 선택사항이 되었다는 것입니다.Full BASIC 표준에 대해 제기되었던 기능 팽창에 대해 많은 리뷰가 동일한 우려를 표명하는 등 이 언어는 좋은 평가를 받지 못했습니다.제리 푸어넬은 그것을 "미쳤다"[22]조롱했고, 드보락은 "슬프다"[23]며 "실패할 운명"이라고 일축했다.

묘사

프로그램 편집

이전 버전의 BASIC과 마찬가지로 Full BASIC은 회선 에디터 환경에서 동작하도록 설계되었기 때문에 편집 또는 삭제할 회선의 개별 또는 범위를 나타내기 위해 회선 번호를 사용합니다.행 번호의 범위는 1 ~50,000 이며, Minimal 은 0 ~9999 입니다.즉, 0 행을 사용하는 유효한 최소 프로그램이 전체로 유효하지 않음을 의미합니다.논리 행의 길이는 132자 이상입니다.논리 행은 "계속 문자"인 앰퍼샌드를 사용하여 여러 물리적 행에 걸쳐 확장할 수 있습니다.안타깝게도 앰퍼샌드는 문자열 연결 연산자로 선택되었으며, 이로 인해 파서가 [24]복잡해졌습니다.

추가 편집 명령어 포함RENUMBER그리고.DELETE이 시기에는 새로운 마이크로컴퓨터 사투리에서도 흔히 볼 수 있었다.새로운 컨셉은EXTRACT특정 범위의 행을 새 파일로 복사하고 원래 프로그램에서 삭제하여 하위 [25]프로그램으로 추출할 수 있도록 합니다.그런 다음 이 명령어를 사용하여CHAIN명령어를 입력합니다. CHAIN옵션도 포함할 수 있습니다.WITH이어서 파라미터 목록을 표시합니다.이 경우 프로그램과 이름이 같은 변수의 값을 반환해야 합니다(아래 [26]함수 참조).

기본 기능

Minimal 또는 기타 방언에서 일반적으로 사용되는 키워드의 대부분은 남아 있었습니다.PRINT,INPUT,DATA그리고.READ예를 들어.이들 명령어에는 수많은 사소한 변경이 있었습니다.예를 들어, 편집 시 키워드는 대문자 또는 소문자 또는 혼합체로 입력할 수 있습니다.이전과 마찬가지로 보통 대문자로 표시되지만, 새로운 표기법에서는 다중 문자 [27]변수 이름에 snake 대소문자를 사용합니다.

다트머스 베이직은REM인라인 코멘트를 위한 스테이트먼트.이것은 다른 사투리에서도 일반적으로 서포트되고 있습니다.많은 방언들은 또한 짧은 형식을 추가했는데, 가장 일반적으로 단일 따옴표를 사용한다.'(Microsoft BASIC 참조).전체는 느낌표를 선택했습니다.![28]역할에는 단일 따옴표를 사용하지 않을 이유가 없지만 문자열에서는 단일 문자 구분 기호를 사용할 수 없습니다.[29]좀 더 논란이 되는 변화는 그 변화가LET이제 모든 할당에 키워드가 필요하게 되었습니다.단, 다른 모든 방언에서는LET선택 사항입니다.여기에는 Minimal이 포함되어 있으므로 이 단축키를 사용하는 Minimal 코드는 [30]Full과 호환되지 않습니다.

Full은 23개의 키워드와 최소의 11개의 함수로 구성된 비교적 작은 세트 위에 수십 개의 자체 함수를 추가하여 총 176개의 키워드(1161개의 개별 개념 정의), 모든 확장자를 [31]포함하면 38개의 수학 함수, 14개의 문자열 함수를 추가했다.3열로 배열된 키워드 목록은 표준 [32]문서의 두 페이지를 채웁니다.

구조.

Full과 Minimal의 주요 차이점은 블록 지향 구조화된 프로그래밍 구조를 추가했다는 것입니다.Minimal 및 most BASIC 인터프리터에서는 프로그램은 논리적으로 독립된 코드 행으로 구성되며 다음과 같은 방법으로 언제든지 실행을 시작할 수 있습니다.GOTO임의의 회선 번호를 입력해 주세요.이 규칙의 유일한 예외는FOR...NEXT여기서 FOR에서 NEXT까지의 모든 행이 논리적으로 단일 코드 블록으로 간주됩니다.FOR 블록에 분기하거나 FOR 블록에서 분기하면 보통 구현에 의존하지만 일반적으로 "NEXT WITHOM FOR"[33]의 어떤 형태로든 이상한 동작이 발생합니다.ANSI/ISO Full BASIC 표준에서 FOR로 분기...다음 블록은 허용되지 않습니다.

Full에서는 블록 구조를 제공하기 위해 기존의 여러 키워드가 확장되고 다른 키워드가 추가되었습니다.주목할 만한 것은 멀티라인입니다.IF...THEN...ELSE...END IF조건이 충족되거나 장애가 발생한 경우 여러 줄의 코드를 실행할 수 있습니다. SELECT...CASE...CASE ELSE...END SELECT의사결정 [34]트리를 만들기 위해 추가되었다.이전에는 이 트리는 다음을 사용하여 구현되었을 것이다.ON...GOTO또는 복수IFs: 실행할 회선을 선택합니다. FOR...NEXT루프는 Minimal로 유지되지만 새로운 루프는DO...LOOP상위 테스트와 함께 추가됨DO WHILE...LOOP및 바닥 테스트 완료DO...LOOP UNTIL...다양합니다.이것으로 모든 루프를 안전하게 종료할 수 있게 되었습니다.EXIT FOR그리고.EXIT DO명령어를 지정합니다.[35]

블록으로 분기하거나 블록 밖으로 분기하는 동작으로서EXIT정의되어 있지 않습니다.실장에서는 이러한 액션을 확인하고 이를 허용하지 않도록 되어 있습니다.이것은 할 수 없다는 것을 의미했다.GOTO이러한 코드를 체크하는 것은 보통 프로그램을 한 줄씩 검사하는 인터프리터에서는 어렵습니다.프로그램 내의 다른 코드에서 블록으로의 브랜치를 체크하는 것은 보통 [16]컴파일러와 같은 전체 프로그램 파싱이 필요합니다.

블록 구조에 대한 이러한 변경 사항 외에도 Full은 프로시저, 함수 및 프로그램 블록을 정의하는 키워드도 추가했습니다.프로그램 전체가 옵션과 함께 열리게 되었습니다.PROGRAM키워드 뒤에 프로그램 이름을 붙이고, 이전과 같이 다음과 같이 종료합니다.END. 루틴은 다음과 같이 구성할 수 있습니다.SUB...END SUB를 사용하여 호출했습니다.CALL name.다행함수는FUNCTION...END FUNCTION문자열 함수 이름이 달러 기호로 끝나므로 반환 유형을 선언하지 않았습니다.반환값은 변수를 함수와 동일한 이름으로 설정함으로써 제공되었습니다. 예를 들어, "DOIT"라는 함수는 다음과 같은 행을 포함합니다.LET DOIT=1함수는 다른 함수와 그 자체를 호출할 수 있으며, 이는 언어가 자연스럽게 [36]재귀적이라는 것을 의미합니다.또한 Full은 이전 스타일의 한 줄 함수 정의를 유지하며DEF키워드를 지정했습니다만, 함수명이 「FN」으로 시작되는 요건은 삭제했습니다.예를 들어.DEF AVERAGE(X,Y)=(X+Y)/2를 클릭합니다.[37]

이전의 BASIC에서는 범위에 대한 개념이 없었고 모든 변수가 글로벌했습니다.이것은 큰 모듈러 프로그램의 구성에 적합하지 않습니다. 코드의 한 부분이 다음과 같은 공통 변수 이름을 사용하여 작성되었을 수 있습니다.I다른 코드의 변수 값을 변경할 수 있습니다.구조화 프로그래밍의 주요 개념은 로컬 변수이며, 복합 프로그램의 다른 위치에 동일한 이름의 다른 변수와 값을 별도로 유지합니다.BASIC에는 범위의 개념이 없었기 때문에 많은 프로그램들은 변수들이 글로벌하다는 것에 의존하여 서브루틴에서 정보를 주고받기 위해 그것들을 사용했다.새로운 언어로 두 가지 개념을 모두 허용하기 위해 Full BASIC은EXTERNAL키워드: 함수 또는 서브루틴에 추가되었을 때 내부 변수가 [38]로컬로 생성됩니다.BASIC 프로그램이 일반적으로 서브루틴을 마지막에 배치하기 때문에DECLARE키워드는 전송 [39]선언에 사용할 수 있습니다.

데이터 유형 및 변수

Full BASIC은 긴 변수 이름을 도입하여 과거의 단일 문자 또는 문자 숫자 이름에서 해방되었습니다.새로운 제한은 31자로 설정되었다.이 변경의 한 가지 작은 단점은 키워드 사이에 공백이 있어야 한다는 것입니다.대부분의 이전 버전에서는 공백은 생략할 수 있었습니다.왜냐하면 한 글자 이름으로는 다음과 같은 행이 있기 때문입니다.FORS=1TOA는, 「FORS」라고 해석할 수 있습니다.이것은 BASIC의 2글자 종류에서는 변수가 될 수 없습니다.전체로 입력해야 합니다.FOR S=1 TO A"FORS"는 유효한 변수 [40]이름이기 때문입니다.이전 BASIC의 경우와 마찬가지로 Full의 데이터 유형은 변수 이름에 접미사로 표시되었습니다.Minimal은 숫자 변수만 사용하여 이 문제를 회피했지만 Full은 예를 들어 달러 기호를 사용하여 문자열도 포함했습니다.A$를 클릭합니다.[27]

Full BASIC은 부동소수점 시스템의 기본 구현에 필요한 10진수 연산입니다.이는 하드웨어, 특히 미니 및 마이크로에서 일반적으로 지원되지 않기 때문에OPTION ARITHMETIC NATIVE즉, 시스템의 기본 부동 소수점 구현을 사용하여 연산을 수행해야 합니다.다음 명령어를 사용하여 BCD 모드로 돌아갈 수 있습니다.OPTION ARITHMETIC DECIMAL이것은, 고정 소수점 연산 옵션이 인스톨 되어 있는 경우, 추가되는 것입니다.숫자 변수와 문자열 변수는 다른 BASIC [41]변수와 동일하게 동작합니다.

새로운 추가 기능은 고정 소수점 산술 확장으로, 변수를 지정된 정확도로 만들 수 있습니다.이 설정은 다음 명령을 사용하여 설정되었습니다.OPTIONAL ARITHMETIC FIXED[b] 그 뒤에 아스타리스크와 포맷 지정자가 붙습니다.OPTION ARITHMETIC FIXED*8.2모든 숫자 변수를 8자리 정확도와 소수점 두 자리로 설정합니다.이러한 선언은 프로그램의 [43]나머지 부분에서 수학 코드 앞에 배치되어야 합니다.또한 다음과 같은 방법으로 단일 변수를 개별적으로 정의할 수 있습니다.DECLARE NUMERIC*8.2 A, B를 클릭합니다.[44]

대부분의 BASIC은 다음을 사용한 어레이 변수 구성을 지원했습니다.DIM예를 들어 키워드를 지정합니다.DIM A(5), B(2,2)는 단차원 A와 2차원(매트릭스) B의 2개의 어레이를 정의합니다.Full BASIC에서는 배열의 하한이 보통 1이므로 이 경우 변수 A에는 1~5의 번호가 매겨진 5개의 "슬롯"이 있습니다.사용.OPTION BASE 0위의 선언에서는 인덱스0에 [45]다른 슬롯이 추가됩니다.또한 Full은 새로운 시스템을 추가해 하한과 상한을 직접 지정합니다.TO예를 들어 키워드를 지정합니다.DIM A(100 TO 200)1차원 101인치 어레이를 [45]만듭니다.상황을 더 혼란스럽게 하기 위해DECLARE NUMERIC어레이 작성에도 사용할 수 있습니다.지난번 예시와 같은 치수를 작성할 수 있습니다.DECLARE NUMERIC A(100 TO 200)를 클릭합니다.[16]

수학, 논리, 행렬

지원되는 연산자 목록에는 Minimal의 연산자가 모두 포함되어 있습니다.+,-,*,/그리고.^새로운 [46]기능MOD함수는 정수 나눗셈의 나머지를 반환합니다.논리 연산자 목록이 확장되었습니다.AND,OR그리고.NOTMinimal에서 제거되었다가 다시 추가되었고, 비교 연산자의 대체 형식이 추가되었다.=<,=>그리고.><를 클릭합니다.[31]

기본 내장 기능의 목록은 다음과 같은 일반적인 예를 포함하여 이전 버전의 BASIC과 유사합니다.SQR또는ABS. Trig 함수는 다음을 포함하도록 확장되었습니다.ASIN,ACOS,ATN,COT,CSC그리고.SEC새로운 기능ANGLE함수는 원점과 주어진 X,Y 점 사이의 각도를 반환합니다.BASIC 보통 계산 각도(라디안 단위)는 다음과 같습니다.OPTION ANGLE DEGREES모든 파라미터와 출력을 각도로 변환하고 시스템이 노출시킵니다.PI이러한 변환 등에 [47]사용된 함수입니다.

Dartmouth BASIC은 비교적 초기에 매트릭스 연산을 도입했으며, 이는 Full의 일부였다.이것들은 기존의 산술 함수에 과부하가 걸리기 때문에 두 배열을 곱할 수 있습니다.MAT A=A*B또는 B 파라미터가 배열이 아닌 경우 배열의 내용을 스칼라로 곱합니다.또한 다음과 같은 어레이 전용 기능도 몇 가지 추가합니다.ZERo,INVert 및DET어민산염, 특히매트릭스 수학의 추가는 또한 다음과 같은 기존 키워드를 수정해야 합니다.PRINT그리고.INPUT어레이 [48]파라미터를 채우기 위해 필요에 따라 여러 요소를 출력 또는 입력합니다.

매트릭스는 다음 요소의 일부로 재확대될 수 있습니다.MAT INPUT예를 들어 새로운 경계를 지정함으로써MAT INPUT A(3.3)새 치수는 원래 치수보다 작거나 같은 요소의 총 수를 가져야 합니다.DIM따라서 이 예에서는 원래 정의가 다음과 같습니다.DIM A(2,2), 입력이 [49]에러의 원인이 됩니다.

줄들

Dartmouth BASIC의 초기 버전은 문자열 변수 또는 조작을 포함하지 않았습니다. 프로그램의 유일한 문자열은 다음과 같은 상수였습니다.PRINT "HELLO, WORLD!". 1968년 버전4에서는 문자열 변수와 그것들을 조작하는 단일 메서드가 추가되었습니다.CHANGE는, 문자의 ASCII 값을 포함한 배열과의 문자열을 변환합니다.예를 들어.CHANGE "HELLO, WORLD!" TO A는 A에 값의 배열을 생성합니다.여기서 A(0)는 72로 "H"의 10진수 ASCII 값입니다.이 때문에 문자열 조작이 상당히 어려워졌습니다.예를 들어 "HELLO, WORLD!"에서 "HELLO, WORLD!"를 추출하려면 다음과 같이 해야 합니다.

10 A$="안녕하세요, 월드!" 20 DIM A(25), B(5) 30 바꾸다 A$ 로. A 40 위해서 I=1 로. 5 50 B(I)=A(I) 60 다음 분. I 70 바꾸다 B 로. B$ 

BASIC의 많은 방언은 이러한 복잡성을 피하기 위해 보다 유용한 문자열 조작을 수행하는 그들만의 방법을 추가했습니다.Full BASIC은 HP가 도입한 개념의 변형인 "스트링 슬라이싱"을 선정하였다.이 개념은 문자열을 문자의 배열로 간주하고 "슬라이스"라고 하는 배열과 같은 규격을 사용하여 액세스할 수 있습니다."HELLO, WORLD"에서 "HELLO, WORLD"를 풀로 추출하려면B$=A$(1:5)컨셉이 비슷해요CHANGE단, 이 메서드는 그 자체가 숫자값이 아닌 문자열인 결과를 생성하기 때문에 다음과 같이 할 수 있습니다.PRINT B$'HELLO'를 제작할 수 있게 되었습니다.Full의 접근방식과 HP와 같은 이전 접근방식의 중요한 차이점 중 하나는 슬라이싱에 다른 구문을 사용한 반면 이전 시스템은 어레이 구문을 사용했다는 것입니다.예를 들어 HP에서는 동등한 행은 다음과 같습니다.B$=A$(1,5)이것은 어레이 액세스와 같은 구문이기 때문에 HP(및 이와 유사한 것)에서는 일반적으로 문자열 [50]어레이를 허용하지 않지만 [51]전체로 허용되었습니다.

이 접근방식은 DEC가 선택한 솔루션, 즉 새로운 문자열을 반환하는 함수의 사용과 대조되어야 합니다.LEFT$,MID$그리고.RIGHT$이 솔루션은 Microsoft가 PDP-10에 BASIC을 작성했을 때 채택한 것입니다.둘 사이의 변환은 오류가 발생하기 쉬우며 다음과 같은 작업을 수행할 수 있습니다.RIGHT$(n), Full이 사용됩니다.DEF Right$(A$, n) = A$(Len(A$)-n+l)를 클릭합니다.[37]

입력/출력

Full BASIC의 또 다른 초점은 입출력(I/O)이었습니다.미니멀 베이직의 I/O는INPUT그리고.PRINT명령어 및 데이터 하드코드 기능DATA스테이트먼트와READ거의 모든 실용 사투리가 추가되었다.OPEN그리고.CLOSE특정 파일 또는 디바이스를 참조하기 위해서 사용되는 「채널」을 작성합니다.

INPUT옵션 포함PROMPT예를 들어 문자열, 콜론, 입력 변수 순으로 표시됩니다.INPUT PROMPT "What is your age? " : A이 시점까지 거의 모든 BASIC에 동일한 기능이 포함되어 있었습니다.[52]PROMPT콜론 대신 기존 인쇄 구분자 세미콜론을 사용합니다.예를 들어 MS BASIC에서는 같은 행이 사용됩니다.INPUT "What is your age? "; A여기에 Full은 새로운 버전도 추가했습니다.TIMEOUT그리고.ELAPSED키워드:INPUT TIMEOUT 30, ELAPSED T, PROMPT "What is your age? ": A사용자가 아무것도 입력하지 않아도 30초 후에 실행이 계속되며 변수 T에 소요된 시간(아마도 30초)이 추가됩니다.클럭이 없는 시스템의 경우(그 당시에는 드물지 않았습니다), T는 항상 [53]-1을 반환합니다.

PRINTing은 옵션에서 마찬가지로 확장되었습니다.USING이미 많은 구현에 나타난 스테이트먼트입니다.USING에는 보통 숫자 기호, 별표 및 백분율 기호를 사용하여 소수 자릿수를 표시하는 형식 문자열이 뒤따릅니다.형식 문자열은 문자열 변수에 배치하여 참조할 수 있습니다.또, 임의의 개별 행에,IMAGE :는 회선번호로 [54][c]참조할 수 있습니다.Full은 또한 인쇄 영역을 설정하는 새로운 명령어를 추가했습니다.SET MARGIN그리고.SET ZONEWIDTH. 이러한 다양한 설정의 현재 값(및 기타)은 다음을 사용하여 반환할 수 있습니다.[55]ASK.예를 들어.SET MARGIN 10이어서ASK MARGIN JJ를 [56]30으로 설정합니다.

모든 파일 조작을 지원OPEN그리고.CLOSE예를 들어, 채널 번호 앞에 숫자 기호가 붙습니다.OPEN #3: NAME "afile"데이터를 쓸 수 있는 방법은 다음과 같습니다.INPUT그리고.PRINT또는READ및 새로운WRITE기타 파일 처리 명령어가 포함되어 있습니다.[57]ERASE그리고.REWRITE이 명령어에는 다양한 옵션과 모드가 있습니다.이 중 대부분은 1970년대 후반에도 여전히 일반적인 다양한 유형의 물리 디바이스에서 비롯되었으며, 를 들어 자기 테이프는 순차적으로만 액세스할 수 있었기 때문에 새로운 표준에서는 다음과 같은 옵션을 제공했습니다.SEQUENTIAL또는STREAM,[58] 등. 옵션의 리스트와 그 상호 작용 및 제한은 표준의 많은 페이지를 대상으로 하고 있습니다.예를 들어, 할 수 있다.PRINT일렬로DISPLAY입력은 하지만 입력은 하지 않음INTERNALtype(필요한WRITE를 클릭합니다.[59]

예외 처리 및 디버깅

이 시대의 많은 베이직과 마찬가지로 풀은TRACE ON명령어는 프로그램 실행 시 라인 번호를 출력합니다.또, 다음의 방법으로 회선 번호의 인쇄를 다른 디바이스 또는 파일로 리다이렉트 할 수도 있습니다.TRACE ON TO #3여기서 #3은 이전에 열린 채널입니다.또,DEBUG ON및 관련BREAK이 명령어는 디버깅이 이미 켜져 있는 경우 예외를 발생시킵니다.디버깅 상태는 특정 프로그램으로 제한되어 있기 때문에 예를 [60]들어 하나의 프로그램에서 켜고 끌 수 있습니다.

또한 Full은 다음을 기반으로 True 예외 핸들러를 추가했습니다.WHEN EXCEPTION...END WHEN블록. 두 가지 방법이 있었습니다. 만약 코드 블록이WHEN EXCEPTION IN다음 코드는 블록으로 실행되었으며 그 안에 있는 예외는 블록이 로 점프하는 원인이 됩니다.USEsection은 다음과 같이 동작합니다.ELSE를 사용하여 서브루틴과 같은 별도의 블록을 정의하여 사용할 수도 있습니다.HANDLER name그런 다음 이 이름을 사용하여WHEN EXCEPTION USE name코드는 메타 변수를 사용하여 어떤 예외가 발생했는지 테스트할 수 있습니다.[61]EXTYPE또는EXTEXT$둘 다 필요없었다.ASK.RETRY에러 핸들러를 종료하고, 에러 행으로 돌아옵니다.CONTINUE메인라인 코드 내에서 사용할 수 있기 때문에 에러를 무시할 수 있습니다.WHEN블록.[62]

그래픽스

풀(Full)을 설계하는 동시에 그래픽스 커널 시스템(GKS)을 정의하기 위한 병행 작업이 진행되었습니다.이는 Full 옵션모듈 중 하나로 제공되었습니다.이것은 다음과 같은 수십 개의 특별한 키워드를 추가했다.LINE STYLE그리고.WINDOW표준 내 다른 모듈의 구문과 일치하지 않는 구문을 사용합니다.예를 들어,CLIP현재 뷰포트에 대한 클리핑을 활성화하여 경계 밖에 그려진 항목이 표시되지 않도록 했습니다.이 경우 부울 대신 문자열 값이 사용되었습니다.CLIP "On".[63] 몇 가지 일반적인 이미지 수정 명령어가 추가되었습니다.SHIFT,SCALE,ROTATE그리고.SHEAR를 클릭합니다.[64]

이미지가 공통 요소에서 빌드되는 경우가 많기 때문에 Full은 새로운 요소를 추가했습니다.PICTURE블록 구조, 다른 점에서는SUB에 의해 호출됩니다.DRAW보다는CALL차이점은 픽처 블록의 출력은 다음 방법을 사용하여 수정할 수 있다는 것입니다.[65]WITH예를 들어, 예를 들어, 어떤 것이 정의되어 있는 경우,PICTURE CIRCLE반지름 1의 원을 만들고, 더 작은 원을 그리고 옆으로 이동할 수 있습니다.DRAW CIRCLE WITH SHIFT(2) * SCALE(.4)를 클릭합니다.[65]

실시간

Full의 실시간 모듈은 다음을 통해 "병렬 섹션" 개념을 추가했습니다.PARACT키워드를 지정합니다.서브루틴(및 그림)처럼 보이지만 호출을 제어하는 다수의 추가 키워드가 있습니다.예를 들어, 어떤 사용자는 이 코드에 응답하는 코드를 정의할 수 있습니다.EVENT다음 명령어를 발행하여 실행되도록 합니다.MESSAGE암호의 다른 곳에 있습니다.이 메시지는 다음 명령어를 사용하여 여러 핸들러를 호출할 수 있습니다.SHARED포트 [66]개념

또한 시스템은 이러한 블록과 개체를 이러한 메시지를 생성하는 외부 코드에 연결할 수 있도록 했습니다.예를 들어 정기적으로 텍스트 출력을 작성하는 디바이스에서 대기하는 코드를 가지고 있으면 새로운 텍스트를 사용할 수 있게 되면 적절한 핸들러가 자동으로 호출됩니다.이러한 디바이스로부터의 실제 데이터는 문자열이나 숫자와 같은 단순한 것이 아닌 여러 부분으로 구성되는 경향이 있기 때문에 실시간라이브러리는 정의 기능도 추가했습니다.STRUCTUREs는 [67]원자 단위로 읽거나 쓸 수 있습니다.그런 다음 이러한 내용을 읽고 씁니다.IN FROM그리고.OUT TO명령어,[68] 또는 데이터가SHARED기타 유사점GET FROM그리고.PUT TO를 클릭합니다.[69]

많은 실시간 프로그램을 단순히 외부 이벤트에 대응하는 시스템으로 모델링할 수 있지만, 프로그램 자체가 이러한 이벤트를 정기적으로 게시하는 것도 일반적입니다.이를 위해 Full은START명령어 및 관련지어져 있는WAIT특정 시간 동안 실행을 일시 중지합니다.DELAY(초수) 또는TIME(명시적인 시간) 또는 다음 시간까지EVENT보였다.[70]

ECMA와ANSI

이 표준은 매우 복잡하고 구현이 어려웠기 때문에 ECMA는 ECMA BASIC-1과 ECMA BASIC-2로 분할했습니다.BASIC-1은 파일 조작 시스템 중 일부를 포함하지만 예외 처리가 부족했습니다.BASIC-2는 파일 명령어, 고정 소수점 연산 및 예외 처리 시스템 전체를 추가했습니다.또한 BASIC-1에서는 다음과 같은 기본 키워드가 모두 포함되어 있습니다.PRINT는 파서를 단순화한 예약어이며 BASIC-2에서는 ANSI 패턴을 따르고 사용자가 작성한 서브루틴 및 [1]함수 내에서 사용할 수 있습니다.

메모들

  1. ^ 1984년의 기사에서, 루어만은 그러한 [8]기계가 1,000만 대 있다고 추정했다.
  2. ^ OPTIONAL키워드는 표준 문서의[42] 예에서는 표시되지 않지만 필수입니다.
  3. ^ IMAGE와 같은 방법으로 동작하다FORMATFORTRAN에서 합니다.

레퍼런스

인용문

  1. ^ a b c ECMA 1986 페이지
  2. ^ McCracken, Harry (29 April 2014). "Fifty Years of BASIC, the Programming Language That Made Computers Personal". Time.
  3. ^ "IBM VS the World: That's How It Is". Computerworld. 5 December 1973.
  4. ^ Leibson, Steve (2017). "HP: The Accidentally, On-Purpose Computer Company". HP9825.COM.
  5. ^ "Hewlett-Packard 2100 Processor Description, 1972" (PDF). Retrieved 2020-08-18.
  6. ^ ECMA 1978, 페이지 III
  7. ^ 루어만 1984, 페이지 173
  8. ^ 루어만 1984, 페이지 152
  9. ^ 표준 1987, 페이지 i, ii.
  10. ^ 커츠 1982, 페이지 182, 186
  11. ^ 커츠 1982 페이지 214
  12. ^ 커츠 1982, 188페이지
  13. ^ 1987년 기준, 페이지 1
  14. ^ 커츠 1982 페이지 190
  15. ^ 군테로스 1983, 페이지 51
  16. ^ a b c 군테로스 1983, 52페이지
  17. ^ 군테로스 1983, 53페이지
  18. ^ "Viewpoints". PC Mag. 29 September 1987. p. 15.
  19. ^ Bellis, Mary (26 January 2019). "The History of the BASIC Programming Language".
  20. ^ McGregor, J.J; Watt, A.H. (October 1981). "PASCAL Rules O.K.?: A Comparison of PASCAL and BASIC as Languages for Teaching Computer Programming to Novices". The Mathematical Gazette. 65 (433): 171–182. doi:10.2307/3617129. JSTOR 3617129. S2CID 64737920.
  21. ^ 메이스 1982, 페이지 29
  22. ^ 1985년 붓넬, 366쪽
  23. ^ 드보락 1984, 페이지 88
  24. ^ 군테로스 1983, 54페이지
  25. ^ 1987년 표준 페이지 272
  26. ^ 1987년 표준 페이지 106
  27. ^ a b 표준 1987, 페이지 31
  28. ^ 1987년 기준, 페이지 29
  29. ^ 표준 1987, 페이지 50
  30. ^ 커츠 1982, 196페이지 196
  31. ^ a b 군테로스 1983, 페이지 55
  32. ^ 표준 1987, 페이지 17-19.
  33. ^ "Next without For". Microsoft Build. 13 September 2021.
  34. ^ 표준 1987, 페이지 87
  35. ^ 1987년 표준 페이지 84
  36. ^ 1987년 표준 페이지 94, 95
  37. ^ a b 표준 1987, 페이지 94
  38. ^ 표준 1987, 페이지 94-100.
  39. ^ 1987년 표준 페이지 105
  40. ^ 커츠 1982, 192페이지 192
  41. ^ 1987년 기준, 페이지 49
  42. ^ 1987년 표준 페이지 263
  43. ^ 1987년 표준 페이지 262
  44. ^ 표준 1987, 페이지 265
  45. ^ a b 1987년 기준, 페이지 66
  46. ^ 표준 1987, 페이지 37
  47. ^ 군테로스 1983, 페이지 49
  48. ^ 군테로스 1983, 페이지 70
  49. ^ 군테로스 1983, 페이지 71
  50. ^ Brannon, Charles (April 1981). "String Arrays in Atari BASIC". Compute!. p. 103.
  51. ^ 표준 1987, 페이지 74
  52. ^ 표준 1987, 페이지 111
  53. ^ 1987년 표준 페이지 111, 112
  54. ^ 1987년 표준 페이지 123
  55. ^ 표준 1987, 페이지 164
  56. ^ 1987년 표준 페이지 151
  57. ^ 1987년 기준, 페이지 142
  58. ^ 표준 1987, 페이지 141-154.
  59. ^ 표준 1987, 페이지 144
  60. ^ 1987년 기준, 195페이지
  61. ^ 표준 1987, 페이지 187–188.
  62. ^ 1987년 표준 페이지 188
  63. ^ 1987년 기준, 199페이지 199
  64. ^ 1987년 표준 페이지 230
  65. ^ a b 1987년 표준 페이지 229
  66. ^ 1987년 표준 페이지 239
  67. ^ 표준 1987, 페이지 239–240.
  68. ^ 1987년 표준 페이지 248
  69. ^ 1987년 기준, 페이지 250
  70. ^ 1987년 표준 페이지 244

참고 문헌

추가 정보

외부 링크

  • Decimal BASIC - 풀 베이직과 그 그래픽 모듈의 비교적 완전한 구현