상위 질문
타임라인
채팅
관점

다트머스 베이직

위키백과, 무료 백과사전

Remove ads

다트머스 베이직(영어: Dartmouth BASIC)은 베이직 프로그래밍 언어의 원본 버전이다. 다트머스 대학교의 두 교수인 존 조지 케메니토마스 E. 커츠가 설계했다. 기본 다트머스 시분할 시스템(DTSS)과 함께 모든 학부생뿐만 아니라 더 넓은 대학 공동체에 대화형 프로그래밍 환경을 제공했다.

간략 정보 패러다임, 설계자 ...

다트머스에서 여러 버전이 생산되었는데, 학부생들이 구현했고 컴파일 앤 고 시스템으로 작동했다. 첫 번째 버전은 1964년 5월 1일에 실행되었고, 6월에 일반 사용자에게 공개되었다. 이후 업그레이드가 계속되어 1979년에 일곱 번째이자 최종 버전이 출시되었다. 다트머스는 1975년에 구조화된 베이직(영어: Structured BASIC, 또는 SBASIC)으로 알려진 크게 업데이트된 버전을 도입했는데, 여기에 다양한 구조적 프로그래밍 개념이 추가되었다. SBASIC은 1980년대 초 미국 국가표준 협회 표준 표준 베이직 노력의 기반이 되었다.

대부분의 베이직 방언은 4판(예: 대부분의 베이직 사용자가 당연하게 여기는 문자열 변수를 추가했지만, 원본은 문자열만 인쇄할 수 있었다)에 그 역사를 두고 있지만, 일반적으로 행렬 계산과 같은 더 난해한 기능은 제외한다. 다트머스 컴파일러와 달리 대부분의 다른 베이직은 인터프리터로 작성되었다. 이러한 결정 덕분에 초기 마이크로컴퓨터의 제한된 주 기억 장치에서 실행될 수 있었다. 마이크로소프트 베이직이 한 예로, 단 4KB의 메모리에서 실행되도록 설계되었다. 1980년대 후반에는 수천만 대의 가정용 컴퓨터가 MS 인터프리터의 변형 버전을 실행하고 있었다. 이것은 베이직의 사실상 표준이 되었고, ANSI SBASIC 노력의 중단으로 이어졌다. 케메니와 커츠는 나중에 SBASIC 버전인 트루 베이직을 개발하고 홍보하는 회사를 설립했다.

많은 초기의 메인프레임 게임이 다트머스 베이직과 DTSS 시스템에 그 역사를 두고 있다. 이들 중 일부는 HP 시분할 베이직 버전으로 피플스 컴퓨터 컴퍼니의 책 『What to Do After You Hit Return』에 수록되었다.[1] 베이직 컴퓨터 게임 및 관련 작품의 많은 원본 소스 목록 또한 다트머스 베이직에 그 역사를 두고 있다.

Remove ads

개발 역사

요약
관점

초기 작업

존 조지 케메니는 1953년 다트머스 대학교 수학과에 합류하여 나중에 학과장이 되었다. 1956년 그는 MIT뉴잉글랜드 지역 컴퓨터 센터 노력을 통해 IBM 704에 접근할 수 있게 되었다. 그 해에 그는 수학 연산 프로그래밍을 단순화한 어셈블러 버전인 DARSIMCO 언어를 작성했다. 그는 그 해에 학과에 합류한 토마스 E. 커츠의 도움을 받았다.[2]

DARSIMCO는 1957년에 첫 FORTRAN 컴파일러가 기계에 설치되면서 잊혀졌다. FORTRAN의 등장은 중요한 교훈을 주었다. FORTRAN이 느리다는 교육을 받았던 커츠는 704 어셈블러로 프로그램을 작성하는 데 몇 달을 보냈는데, CPU 시간 한 시간 정도가 디버깅에 소요되었지만 여전히 실행되지 않았다. 포기하고 그는 FORTRAN으로 다시 작성했고 5분 만에 실행시켰다. 이 교훈은 측정된 성능에 관계없이 고수준 언어가 시간을 절약할 수 있다는 것이었다.[2]

1959년, 학교는 첫 번째 컴퓨터인 자기 드럼 기반 LGP-30을 받았다. 한 학생이 이 기계를 위해 FORTRAN에서 영감을 받은 DART라는 언어를 작성했다. 이는 알골 58 컴파일러를 제작하려는 노력으로 이어졌고, 정의가 확정되자 알골 60으로 전환되었다. 매우 작은 메모리 크기(현대 용어로 32KB)와 드럼 속도 3600rpm으로 인해 컴파일러 작성이 어려웠고 매우 느렸다. 그럼에도 불구하고 그들은 ALGOL 30으로 알려진 기능적 축소 버전을 제작할 수 있었다.[3] 추가 개발로 "자체 포함 알골 프로세서"인 SCALP가 탄생했는데, 이는 천공 테이프가 소스를 읽는 즉시 컴파일된 프로그램을 실행할 준비가 된 원패스 컴파일러였다. 프로그램 결과 또는 오류 메시지는 즉시 나타났다. 이러한 컴파일-앤-고 방식의 작동은 나중에 베이직에 의해 사용되었다.[3][4]

1962년, 케메니와 고등학생 시드니 마샬[5]은 새로운 언어인 DOPE (Dartmouth Oversimplified Programming Experiment)를 실험하기 시작했다. 이것은 명령어를 나타내기 위해 번호가 매겨진 줄을 사용했는데, 예를 들어 두 숫자를 더하려면 DOPE는 다음과 같이 사용했다.

 5 + A B C

이는 "5번 줄에서 변수 A와 B의 값을 더하고 그 결과를 C에 넣으라"는 의미였다. 다소 암호 같은 배치였지만, 미래 베이직 언어의 기초를 엿볼 수 있다.[6] 기본 수학 연산 외에도 이 언어는 SQR, EXP, LOG, SIN 및 간단한 분기 구문을 포함했다.[7]

인문학 분야에서의 컴퓨팅

케메니와 커츠는 전통적인 STEM 분야 이외의 학생들 사이에서 프로그래밍 지식의 필요성에 동의했다. 다트머스 학생 중 25%만이 STEM 관련 과정을 수강했지만, 거의 모든 분야에서 어느 정도의 수학이 사용되었다. 더욱이, 컴퓨터가 사회에서 점점 더 중요해지면서 그들은 "컴퓨팅과 그 사용에 대한 합리적인 결정을 본질적으로 그것을 모르는 사람들이 어떻게 내릴 수 있을까?"라고 궁금해했다.[7]

케메니는 나중에 "우리의 비전은 캠퍼스의 모든 학생이 컴퓨터에 접근할 수 있어야 하고, 모든 교수진이 적절할 때마다 강의실에서 컴퓨터를 사용할 수 있어야 한다는 것이었다. 그렇게 간단했다."라고 언급했다.[8] 그러나 당시 그들이 가지고 있던 것으로는 그렇게 하는 것이 거의 불가능했을 것이다. 일반적인 SCALP 실행의 처리 시간은 약 15분이었고, 비STEM 사용자가 기본 작업을 위해 사용하기에는 언어가 너무 어려웠다.[7]

문제는 단순히 복잡성뿐만이 아니라 일괄 처리의 전체 개념이었다. 학생들은 천공 카드나 종이 테이프에 프로그램을 준비하고 컴퓨터 운영자에게 제출한 다음, 미래의 어느 시점에 출력을 받았다. 이것은 종종 전체 프로세스를 반복해야 하는 오류를 드러냈다. 그들이 나중에 말했듯이, "한 번 시도하는 데 약 하루가 걸린다면, 학생은 흥미를 잃거나 문제가 무엇이었는지 잊어버릴 것이다. 기껏해야 하루의 결과가 나올 때까지 기다리느라 시간을 낭비할 것이다."[9][a]

1959년, 주로 케메니의 수학 교육 혁신가로서의 명성 덕분에 학과는 앨프리드 P. 슬론 재단으로부터 50만 달러의 기부금을 받아 새 학과 건물을 지을 수 있었다.[10]

개념 개발

1961년 MIT를 방문하는 동안 그들은 PDP-1과 최근 완료된 실험적인 시분할 운영체제를 소개받았다. 존 매카시는 커츠에게 대중에게 컴퓨팅을 제공하려는 노력에 왜 시분할을 사용하지 않는지 물었다. 커츠는 다트머스로 돌아와 케메니에게 "시분할을 해야 합니다"라고 말했고, 케메니는 즉시 "알겠습니다"라고 답했다.[11]

개념이 작동 가능한지 테스트하기 위한 실험에서 학생들은 5명씩 그룹으로 나뉘어 SCALP를 사용하여 LGP-30을 번갈아 사용했다.[4] 컴퓨터 시간은 15분 세션으로 나뉘었고, 5명으로 구성된 각 그룹은 한 세션을 부여받은 다음 다음 그룹에게 넘겨주었다. 학생들은 일반적으로 단일 세션 동안 두세 번의 "턴어라운드"로 프로그램을 완료할 수 있다는 것을 발견했다. 이는 대화형 시스템이 수백 명의 사용자가 단일 기계를 성공적으로 사용할 수 있도록 할 것임을 분명히 시사했다.[12]

새로 도입된 ASCII를 전화선을 통해 사용하는 텔레타입 모델 33 전신타자기의 등장은 접근성 문제를 해결했다. 더 이상 프로그래머가 카드나 종이 테이프에 프로그램을 제출할 필요 없이 모델 33을 사용하여 컴퓨터에 직접 입력할 수 있게 되었다. 필요한 것은 시분할 시스템을 호스팅할 수 있을 만큼 빠른 새로운 기계와 프로그래머가 사용할 간단한 언어뿐이었다.[13]

간단한 언어에 대한 논의가 진지하게 고려되기 시작했을 때, 케메니는 즉시 새로운 언어를 작성할 것을 제안했다. 커츠는 FORTRAN이나 ALGOL의 축소 버전에 더 관심이 있었다.[14] 그러나 이 언어들은 너무 많은 특이성을 가지고 있어서 커츠는 케메니에게 동의하게 되었다.

FORTRAN의 추악한 기능을 수정했다면, 더 이상 FORTRAN이 아닐 것이다. 마지못해 존에게 동의해야 했다. 그래, 새로운 언어가 필요했다.[15]

시간이 지나면서 네 가지 핵심 요소가 부상했다. 시스템은 시분할을 사용할 것이고, 새로운 언어가 필요할 것이며, 사용자를 시스템에 참여시키기 위해 새로운 과정이 다른 과목의 보조적인 형태로 프로그래밍을 소개할 것이고, 마지막으로 터미널은 모든 사용자에게 개방될 것이다.[16]

초기 버전

이 프로젝트는 1963년 9월에 공식적으로 시작되었다. 목표는 상용 컴퓨터에서 언어와 운영 체제를 개발하는 것이었다.[17] 1964년 초, 그들은 미국 국립과학재단(NSF)에 자금 지원을 요청했다. NSF는 시분할 시스템에 대한 제안과 언어에 대한 제안을 동료 검토를 위해 보냈다. 검토자들은 그들이 시도하는 것의 어려움을 이해하지 못한다고 invariably 제안했다. 이러한 부정적인 의견에도 불구하고 NSF는 두 가지 보조금을 모두 진행했다. 제너럴 일렉트릭에서 제공하는 교육 할인으로 인해 GE-225 컴퓨터를 구매하게 되었는데, 이는 "IBM을 사용하지 않는" 것이 여전히 위험했던 시대였다.[18]

GE-225는 훨씬 더 간단한 DATANET-30(DN-30) 기계와 두 기계에 연결된 하드 드라이브와 짝을 이루어 프로그램을 공유했다.[19] DN-30은 당시 프로그래밍 설명서가 전혀 없었는데, 공장에서 프로그램이 미리 설치되지 않은 상태로 출하될 의도가 없었기 때문이다.[18] 여기에는 한 가지 핵심 기능인 더 큰 GE 기계에 대한 직접 메모리 접근(DMA) 접근이 포함되었다. 이는 작은 메시지를 기계들 사이에 빠르게 주고받을 수 있게 하여 사용자가 입력한 명령을 225가 즉시 수행할 수 있도록 했다.[20]

시스템은 DN-30이 터미널을 실행하고 사용자의 작업을 디스크에 저장하는 방식으로 작동했다. 사용자가 RUN을 입력하면 DN-30은 DMA를 사용하여 해당 명령을 GE-225로 보냈다. 225는 해당 파일을 읽고 컴파일하고 실행하며 결과를 DN-30으로 다시 전달하여 터미널에 출력을 인쇄한다.[21]

1963년 여름, 컴퓨터 구매를 기다리는 동안 GE는 GE-225 중 하나에 대한 접근을 제공했다. 케메니는 프로토타입 컴파일러 작업을 시작했다. 마이클 부시와 존 맥게치는 그해 가을에 운영 체제 설계를 시작했다. 이 기간 동안 언어와 OS는 광범위하게 수정되었지만, 기본적인 목표는 동일하게 유지되었고 그해 11월 초안 형태로 발표되었다.[19]

학교의 기계는 1964년 2월 마지막 주에 도착했고,[22] 3월 중순에 작동했으며,[23] 4월 1일에 공식적으로 인계되었다. 그 시점에는 운영 체제 설계가 이미 잘 개발되어 있었다. 운영 체제 작업을 하던 대부분의 학생 프로그래머들은 평소 수업 외에 주 50시간씩 일했다.[22] 언어는 다른 225 기계에서 빌린 시간으로 병렬로 개발되었다.[24] OS는 4월에 완성되었고, 3대의 모델 33 터미널에서 실행되는 전체 시스템은 월말까지 준비되었다. 존 케메니와 존 맥게치는 1964년 5월 1일 오전 4시 ET에 첫 번째 베이직 프로그램을 실행했다.[23]

첫 프로그램이 무엇이었는지는 완전히 명확하지 않다. 다트머스를 포함한 많은 출처는 이것이 간단한 프로그램이었다고 주장한다.[25]

PRINT 2 + 2

나중에 이 언어의 역사는 두 개의 프로그램이 동시에 입력되었는데, 하나는 케메니가, 다른 하나는 익명의 프로그래머가 입력했다고 말한다. 그들은 프로그램을 입력하고 동시에 RUN을 입력했으며 정확한 결과를 받았다.[26] 커츠는 일찍 일어나는 사람이어서 이미 집에 갔고 "모든 재미를 놓쳤다"고 한다.[27]

다음 한 달 동안 시스템은 수치 해석 수업에서 시스템에서 프로그램을 테스트하는 방식으로 테스트되었다. 이 기간 동안 기계는 평균 5분 동안 제대로 작동했다.[28] 문제는 빠르게 해결되었고, 6월에는 터미널 수를 11개로 늘리기로 결정했다. 이 시기에 더 빠른 GE-235가 225를 대체했다. 가을에는 20개의 터미널이 사용되었다.[19]

GE는 GE-235와 DN-30의 조합을 GE-265라고 부르기 시작했으며,[29] 모델 번호를 합쳤다. GE는 GE-265를 약 75대 더 만들었고,[30] 그 중 많은 수가 서비스 뷰로 사업용이었다. GE는 이들을 Mark I 시분할 시스템이라고 불렀다.[31]

새로운 시스템

프로그램의 원래 목표 중 하나는 다른 수업 과정에 프로그래밍을 통합하는 것이었다. 이것은 성공적이었지만, 시스템에 상당한 부담을 주었고 미래 성장을 위한 여지가 없다는 것이 분명해졌다.[32]

1965년, 팀은 GE에 지속적인 개발 지원을 요청했다. 9월에 루이스 레이더 부사장은 약 10배 더 빠르고 두 개의 CPU를 포함하는 새로운 GE-635를 제안했다. 또한, 두 번째 DN-30이 추가되어 더 많은 회선을 처리할 수 있게 되었으며, 동시에 150명의 사용자를 지원할 수 있게 되었다.[32] 이를 수용하기 위해서는 265가 실행되던 칼리지 홀 지하보다 더 큰 시설이 필요했다. 1922년 졸업생인 피터 키위트가 NSF의 추가 지원과 함께 키위트 컴퓨팅 센터 건설을 주도했으며, 이 센터는 1966년 12월에 문을 열었다.[32]

이 기계가 도착하기를 기다리는 동안, 1966년 여름과 가을에 로마 항공 개발 센터의 GE-635가 MOLDS, 즉 "다중 사용자 온라인 디버깅 시스템"을 개발하는 데 사용되었다. GE-635는 1967년 초에 작동되었고, MOLDS를 사용하여 새로운 운영 체제는 9월에 완전히 작동되었으며, 이때 GE-265는 매각되었다.[33]

GE는 다트머스가 새로운 베이직 버전을 개발하고 GE는 운영 체제 버전의 새로운 릴리스를 개발하는 더 넓은 계약의 일환으로 3년 동안 기계를 무상으로 제공했다.[33] 이 협력은 성공적임이 입증되었다. GE는 이 기계들을 Mark II 시분할 시스템으로 배포하기 시작했고,[34] 10년이 끝날 무렵에는 세계에서 가장 큰 시분할 공급업체 중 하나가 되었다.[32]

이 "1단계" 시스템이 작동된 후, 다트머스 팀은 "2단계", 즉 이상적인 운영 체제 개발을 시작했다. 이것은 1969년 3월에 설치되었고, 그 직후 다트머스 시분할 시스템으로 이름이 변경되었다. 3년 기간이 만료되자 GE는 이 기계를 대학에 기증했다. 두 팀은 계속 연락을 유지했고, 관계를 지속하기 위한 여러 성실한 시도가 있었지만, 추가 협력은 거의 이루어지지 않았고 파트너십은 1972년 9월 20일에 공식적으로 종료되었다.[33]

사용자층 확대

1968년 보고서에 따르면 학생의 80%, 교수진의 70%가 시스템을 어느 정도 사용하고 있었다. 병원에서 경영 대학원까지 캠퍼스 곳곳에 수백 대의 단말기가 설치되었다. CPU 시간의 57%는 수업 과정에, 16%는 연구에, 나머지 27%는 "여가 활동"에 사용되었다. 다트머스는 사용자들이 컴퓨터를 직접 사용하고 컴퓨터에 대한 두려움을 극복하는 방법으로 게임을 적극적으로 장려했다.[35]

또 다른 NSF 보조금을 시작으로, 1967년 다트머스는 지역 고등학교를 포함한 캠퍼스 밖 장소에도 단말기를 배치하기 시작했다. 사용자 수 면에서는 이 단말기들이 전체 사용자의 69%를 차지했지만, 컴퓨터 시간은 더 적게 사용했다.[35] 1971년까지 뉴저지주뱅고어 (메인주)만큼 멀리 떨어진 곳에도 79개의 원격 단말기가 있었다. 이들은 단일 음성 등급 전화선을 통해 최대 12개의 단말기를 지원할 수 있는 멀티플렉서 시스템의 지원을 받았다. 또한, 여러 회선은 모뎀을 사용하여 다이얼업으로 사용할 수 있었다.[36]

영향

시분할 시스템은 1960년대 주요 연구 분야였으며, 컴퓨터 산업의 많은 사람들이 컴퓨팅 파워가 저렴하고 광범위하게 보급될 것이라고 예측했다. 이는 존 매카시가 "언젠가 전화 시스템이 공공 서비스이듯이 컴퓨팅도 공공 서비스로 조직될 수 있다"고 가장 유명하게 말했다.[37]

DTSS에서는 다른 언어도 사용 가능했지만, 1972년 기준 DTSS 프로그램의 98%는 BASIC으로 작성되었다.[38] BASIC 덕분에, 작업을 코딩하는 데 너무 오래 걸려 컴퓨터로 해결하기 어려웠던 최종 사용자들에게 컴퓨터 서비스가 훨씬 더 접근하기 쉬워졌다. 이는 작은 또는 중간 규모의 작업을 해결하기를 원하고 성능 자체에는 크게 신경 쓰지 않는 사용자 시장을 위해 특별히 설계된 컴퓨터를 도입하는 많은 제조업체로 이어졌다. 특히, 이 시장을 직접 겨냥한 두 대의 기계는 "지금까지 개발된 가장 널리 사용되는 소규모 시분할 시스템"이 되었다.[34]

HP 2000HP 시분할 베이직을 실행했는데, 이는 DTSS 설정과 거의 동일한 BASIC과 시분할 운영 체제의 조합이었다. 이 시스템은 최대 32명의 동시 사용자를 지원했으며, 저가형 HP 2100 CPU를 사용하여 원래 GE-265 설정의 Datanet-30과 동일한 방식으로 터미널을 실행했고, 프로그램은 동일한 기계의 고급 모델에서 실행되었는데, 일반적으로 더 많은 코어 메모리를 가지고 있다는 점에서 차이가 있었다. HP의 BASIC은 프로그램을 저장하기 위해 반컴파일된 토큰화된 형식을 사용했는데, 이는 로딩 시간을 개선하고 "컴파일" 시간이 0초임을 의미했다.[39]

디지털 이큅먼트 코퍼레이션은 기존 PDP-11 라인에 새로운 RSTS/E 운영 체제와 BASIC-PLUS를 기반으로 한 단일 기계 제공이라는 다른 접근 방식을 취했다. BASIC-PLUS는 5판을 더 면밀히 따랐으며, MAT 명령을 포함했지만, 다트머스 컴파일러나 HP의 토큰화된 형식과 달리 순수한 인터프리터로 구현되었다. 또한 JOSS 모델을 따르는 여러 제어 구조를 포함했는데, 예를 들어 PRINT I IF I > 10과 같았다.[40] Tymshare SUPER BASIC도 JOSS 스타일 구조와 행렬 계산을 지원했지만, 원래의 컴파일-앤-고 작동을 유지했다.

이 시대의 거의 모든 공급업체가 이 동일한 문제에 대한 어떤 해결책을 제시했지만, 원래와 그렇게 밀접하게 유사하지는 않았을 수 있다. 1973년 커츠가 BASIC에 대한 ANSI 표준 제정을 고려하기 시작했을 때, BASIC을 사용할 수 있는 시분할 서비스 뷰로의 수가 다른 어떤 언어보다 많다는 것을 발견했다. 불행히도, 이 성공은 또한 문제이기도 했다. 그 시점에는 너무 많은 변형이 있어서 표준이 불가능해 보였다.[34]

BASIC의 게임

케메니는 DTSS 플랫폼에서 게임을 적극적으로 장려했으며, DTSS 시스템 성공의 주요 이유 중 하나로 간주했다.[38] 그는 초기의 메인프레임 게임의 저자였을 가능성이 높다. 케메니는 자신의 공로를 인정하지 않았지만, 나중에 FTBALL에 대해 "1965년 특정 다트머스-프린스턴 경기에서 다트머스가 램버트 트로피를 획득한 후 일요일에 작성된 것이다. 기념 프로그램의 일종이다"라고 언급했다. 이 게임은 강력한 우승 후보였던 프린스턴에 대한 이변이었다.[41][b]

시스템이 확장되면서, 특히 베이직에 문자열 처리 기능이 추가된 후, DTSS 시스템은 많은 텍스트 기반 게임 개발의 주요 플랫폼이 되었다. 1970년대 초, 피플스 컴퓨터 컴퍼니는 이들을 잡지에 게시하기 시작했으며, 일반적으로 더 널리 사용되는 HP 베이직으로 변환되었다. 이 목록 중 다수는 1975년 저서 『What to do after you hit return』에 수록되었다. 비록 이들은 HP 베이직 형태로 출판되었지만, 대부분은 DTSS 또는 캘리포니아의 로렌스 과학관에 설치된 유사한 기계인 DECISION에 그 역사를 두고 있다.[43]

더 유명한 컬렉션은 1978년의 베이직 컴퓨터 게임으로, 책에 있는 프로그램의 절반가량은 다트머스에서 작성되었거나(케메니의 또 다른 프로그램인 Batnum 포함), 1968년 이후 연결된 많은 고등학교 중 하나에서 작성되었다. 특히 다작한 고등학교는 렉싱턴 고등학교였지만, 다른 많은 학교들도 나타난다. 많은 프로그램은 원본 위치를 나열하지 않지만, 학교나 프로젝트 SOLO와 같은 공공 프로젝트를 통해 시스템에 연결되었을 가능성이 있는 저자들의 것이다.[44]

스티븐 J. 갈랜드와 존 맥게치가 DTSS용 MOTIF 다중 온라인 터미널 인터페이스를 개발했을 때 다인용 비디오 게임이 BASIC에서 가능해졌다. 게임을 시작하려면 사용자는 RUN 대신 LINK와 세션 이름을 입력했고, 다른 사용자는 JOIN과 세션 이름을 입력하여 게임에 연결할 수 있었다. 그런 다음 MOTIF는 BASIC 프로그램의 입력 및 출력을 다중화하여 각 입력 및 출력 줄의 시작 부분에 문자열 식별자를 추가했다. 이 인터페이스로 개발된 첫 번째 프로그램은 2인용 FTBALL 버전과 5인용 포커 게임이었다. 더 진지한 것은 아모스 턱 경영대학원 학생들이 단일 제품의 생산 및 마케팅에서 경쟁할 수 있도록 한 경영 게임이었다.[45]

Remove ads

버전

요약
관점

1판

소급하여 버전 1로 알려진 원래 버전은 LET, PRINT, END, FOR...NEXT, GOTO, GOSUB...RETURN, IF...THEN, DEF, READ, DATA, DIM, REM 명령을 지원했다. 기본 수학 명령인 +, -, *, /와 함께 지수를 위한 위쪽 화살표도 포함했다("...전신타자기에서 위첨자를 인쇄하는 것이 불가능했기 때문").[46] 현대 버전에서는 위쪽 화살표가 일반적으로 "모자" 문자 ^로 대체된다. 지수는 계산 전에 숫자의 절대값을 취했으므로, -X^3을 계산하려면 X*X*X를 사용해야 했다. 지수 함수에 또 다른 문제가 있었는데, -X^2를 올바른 연산의 우선순위-(X^2)와 달리 (-X)^2로 처리했으며, 이는 세 번째 릴리스까지 수정되지 않았다.[46] INT() 함수는 항상 0으로 잘랐다.[47]

이 언어는 자체적인 몇 가지 특이점을 가지고 있었다. 나중 버전과 달리, LET 명령은 다른 명령이 없는 모든 문장에 필수였으므로 10 A=5*5는 이 버전에서 유효하지 않았다.[47] PRINT 문은 여러 변수를 인쇄할 때 쉼표를 사용하여 다섯 개의 "영역" 중 다음 영역으로 이동했다. 프롬프트와 단일 값을 인쇄하는 경우에는 쉼표가 필요하지 않았으므로 PRINT "value of A is "A는 유효했다. 다소 숨겨진 기능은 모든 변수가 DIM을 사용하여 그렇게 선언하지 않아도 최대 10개의 요소(1부터 10까지의 첨자, 2판에서는 0부터 9까지로 변경됨)의 배열(벡터)을 나타낼 수 있었다는 것이다. DIM은 다른 벡터 크기가 필요한 경우에만 필요했다.[48][c]

변수 이름은 단일 문자 또는 숫자 뒤에 문자가 오는 형태로 제한되었다(286개의 가능한 변수 이름). 사용자 함수는 단일 문자만 가질 수 있었으므로 FNA부터 FNZ까지였다. 모든 연산은 부동소수점으로 수행되었다. GE-225 및 GE-235에서는 약 30비트(대략 10자리)의 정밀도를 생성했으며, 밑 2의 지수 범위는 -256에서 +255였다.[49]

또한, GE-235의 워드 크기가 20비트이고 6비트 문자 코드를 사용했기 때문에, 언어는 3글자 함수 이름 사용을 고수했는데, 이는 20비트 워드에 3개의 6비트 문자를 저장할 수 있었기 때문이었다(18비트 사용). 이것이 BASIC 함수가 INT 또는 SQR와 같이 3글자인 이유이며, 이는 GE-235를 떠난 후에도 오랫동안 여러 BASIC 언어에서 유지되었다.[47]

2판, CARDBASIC

BASIC의 2판(당시에는 그렇게 불리지 않았지만)은 최소한의 변경만 이루어졌다. 1964년 10월에 출시되었으며, 배열을 1이 아닌 0에서 시작할 수 있었고(다항식을 나타내는 데 유용함), PRINT 문에 세미콜론(;)을 추가했다.[50] 항목 사이에 공백을 두는 나중 구현과 달리, 세미콜론은 인쇄를 다음 세 문자 배수로 이동시켰는데, 이는 기존 쉼표 구분자보다 한 줄에 더 많은 숫자를 "압축"하는 데 유용했다.[51] 세 문자 크기는 GE-235의 20비트 워드 크기의 부작용으로, 세 개의 6비트 문자를 저장했다. 다음 세 문자 열로 건너뛰는 것은 단순히 메모리의 다음 워드로 이동함으로써 이루어졌다.[52]

10월 버전에는 CARDBASIC에 대한 별도의 정의도 포함되어 있었는데, 이는 단순히 카드 기반 워크플로에서 사용하기 위한 BASIC 버전이었다. CARDBASIC은 대화형 버전과 거의 동일했지만, 0 기반 배열을 포함하지 않는다는 점이 예외였다. 언어의 미래에 더 중요한 것은 CARDBASIC이 숫자 행렬과 함께 작동하는 MAT 명령을 추가했다는 것이다. CARDBASIC은 더 이상 개발되지 않았는데, BASIC의 전체 아이디어가 대화형이었기 때문이었다.[50]

3판

1966년에 출시된 3판은 "판(edition)" 명칭을 처음 사용했으며, 곧 출시될 새로운 GE-635 컴퓨터에서 실행될 목적으로 특별히 설계되었다. 이 버전에는 CARDBASIC의 MAT 함수가 포함되어 있으며, 이제 0을 첨자로 사용할 수 있다.[53]

새로운 SGN 함수는 인수의 부호(양수?0, 음수?1)를 제공했으며, RESTOREREAD/DATA의 위치를 "되감기"하기 위해 추가되었다. 지수화 문제가 해결되어 -X^2-(X^2)로 해석되었다.[53] 또한, INT 함수는 0으로 잘라내는 것과 달리 진정한 바닥 함수로 변경되어 INT(X+0.5)로 반올림을 구현할 수 있게 되었다.[47]

이 버전의 주요 변경 사항은 새로운 INPUT 문이었다. 이 문은 숫자 값을 구문 분석하여 처음으로 실행 중에 언어를 진정으로 대화식으로 만들었다. 이전에는 실행 중에 제어할 수 있는 유일한 방법은 모니터에서 STOP을 입력하는 것이었다. 또한, 시스템은 이제 루프 들여쓰기를 허용하고 장려했는데, 이 기능은 다른 대부분의 BASIC 버전에서는 볼 수 없었다.[54]

4판

3판은 GE-235의 수명 동안 1967년 가을까지 사용되었다. 그러나 GE-635를 받을 계획이 세워지면서 1967년 봄에 635에서 실험적인 버전이 만들어졌다. 이 버전은 GE와 다트머스의 파트너십으로, GE는 자체 Mark 1 BASIC 노력에서 새로운 운영 체제와 BASIC의 여러 기능을 기여했다.[54]

이 버전은 처음에는 3판의 보충 자료로 출판되었으며, RND 함수를 "시드"하는 RANDOMIZE 명령과 FORTRAN의 유사한 기능과 밀접하게 일치하는 ON...GOTO "계산된 goto"를 추가했다. 이 버전은 또한 ON...THEN을 허용했는데, IF...THENGOTO를 요구하지 않는다면 여기에서도 요구되지 않을 것이라고 주장했다. 새로운 TAB 함수는 인쇄를 0에서 74까지 주어진 열로 이동시켰다.[54] 또 다른 내부 변경 사항은 MAT를 다시 1 기반으로 변경하는 것이었다. 0번째 인덱스를 사용할 수는 있었지만, 일반적으로 다양한 명령에 의해 무시되었다.[55]

이 버전의 주요 추가 기능은 문자열 변수였으며, 문자열을 저장할 수 있는 READ/DATA 문 변경과 대화식으로 문자열을 읽을 수 있는 INPUT 문 변경이 있었다. 문자열 시스템의 한 가지 특징은 비교에서 후행 공백이 의도적으로 무시되어 "YES"와 "YES "가 동일하게 간주되었다는 것이다.[56] 이는 나중에 심각한 오류로 인식되었다.[55] 문자열 변수는 달러 기호, 예: A$로 표시되었는데, 이는 단순히 대부분의 키보드에서 찾을 수 있는 문자가 부족했기 때문이다. 누군가 $가 "String"의 S처럼 보인다고 지적했고, 그것으로 결정되었다.[57]

문자열 조작은 새로운 CHANGE 명령을 통해 처리되었다. 이 명령은 변수 내의 문자열 값을 해당 ASCII 값 세트로 변환했다. 그런 다음 숫자 배열을 조작하고 문자열로 다시 변환할 수 있었다. 예를 들어, 이 코드는 콘솔에 "is"를 출력한다.

100 LET S$ ="Now is the time"
110 CHANGE S$ TO S
120 LET T(1) = S(5)
130 LET T(2) = S(6)
140 LET T(0) = 2
150 CHANGE T TO T$
160 PRINT T$

140번 줄은 문자열 길이를 2로 설정하는데, 이는 사용자가 관리해야 한다. 첫 번째 문자는 T(1)에 있다. 이 시스템은 유연하지만, 사용하기에 결코 편리하지 않았다. 나중 버전에서는 새로운 기능으로 이를 해결했다.[58]

이 버전의 사소한 변경 사항은 PRINT 문에서 세미콜론을 공백 없이 출력을 "밀착 포장"하도록 변경했고,[52][59] 아포스트로피를 짧은 형식의 REM으로 사용했다.[60][d]

공식 4판은 1968년이 되어서야 나왔는데, 이전 추가 기능 외에 몇 가지 새로운 기능을 추가했다. 여기에는 DEF 명령으로 여러 줄 함수를 정의하는 기능과 ASCII와 유사한 코드를 배열로 취급하여 전체 문자열을 반복하지 않고 개별 문자를 조작할 수 있는 강력한 CHANGE 문이 포함되었다.[55] 이것은 또한 유일한 문자열 조작 함수였다. 단일 문자나 부분 문자열을 추출하려면 CHANGE를 사용하여 숫자 배열로 변환하고, 해당 배열을 조작한 다음 다시 변환해야 했다. 이것이 MAT가 다시 1 기반이 된 이유였다. 문자열의 길이는 0 위치에 배치되었고, 일반적으로 무시되어야 했다.[61]

5판

1970년 후반의 5판은 1969년 2월과 4월의 4판에 대한 두 가지 보충 자료로 다시 시작되었다.[55]

주요 변경 사항은 파일 처리 기능의 도입이었다. 이전에는 프로그램에서 사용해야 하는 사전 정의된 모든 데이터는 DATA 줄에 배치된 다음 READ 명령을 사용하여 한 번에 하나씩 읽어야 했다. 이 기능은 유사한 방식으로 파일을 읽는 데 사용될 수 있었다. INPUT 명령은 이제 파일에서 단일 항목을 읽을 수 있었고 PRINT는 하나를 쓸 수 있었다.[62]

파일은 새로운 FILES 키워드를 통해 열렸으며, 그 뒤에 파일 이름을 설명하는 문자열 상수의 목록이 이어졌다. 이들은 상수였으므로 파일 이름을 변경하려면 코드도 변경해야 했다. 이름에는 숫자가 할당되었고, 첫 번째 이름이 파일 #1이 되는 식이었다. 두 가지 파일 형식(임의 접근 및 선형)이 지원되었다. 선형 파일은 오늘날 텍스트 파일과 동일하게 취급되었으며, LINPUT #1: A$를 사용하여 텍스트 한 줄을 문자열 변수로 읽은 다음 PRINT A$를 사용하여 터미널에 출력할 수 있었다.[62] 나중 버전에서는 FILE $1,name$을 추가하여 문자열로 파일을 지정할 수 있었지만, 한동안 이 형식으로 사용하고 있음을 나타내기 위해 프로그램 상단에 FILES *가 필요했다.[63]

랜덤 액세스 파일의 경우, 이름은 내부 데이터 유형을 지정해야 했다. %는 이진 데이터를 포함함을 나타내고, $num은 최대 길이가 num인 문자열로 읽어야 함을 나타냈다.[62] READWRITERESET 명령으로 랜덤 액세스 파일의 어느 위치에서나 위치를 지정할 수 있었고, 현재 위치는 LOC 함수로, 파일 길이는 LOF로 반환되었다. 순차 읽기 중에는 IF END THEN...을 사용하여 파일 끝에 도달했는지 여부를 테스트할 수도 있었다.[64]

또 다른 주요 변경 사항은 하나의 BASIC 프로그램이 CHAIN 명령을 사용하여 다른 프로그램을 호출하고, COMMON 목록을 사용하여 변수를 전달할 수 있게 된 것이었다. 나중에 이 기본 개념에 여러 문제가 있다는 것이 밝혀졌지만, 그럼에도 불구하고 일부 큰 프로그램을 작성하는 데 사용되었다.[64]

문자열 처리 기능이 크게 업데이트되었다. 새로운 SEG$ 명령은 다른 문자열에서 잘라낸 새로운 문자열을 반환했다. 위 예시에서 "is" 문자열은 더 큰 문자열에서 추출된다. 새로운 명령을 사용하면 이를 LET T$ = SEG$(S$,5,6)으로 줄일 수 있는데, 이는 대부분의 방언에서 볼 수 있는 MID$ 함수(MID$(S$,5,2))와 유사하게 작동한다. SEG$는 첫 번째 및 마지막 인덱스를 사용하고, MID$는 첫 번째 인덱스와 길이를 사용한다. LEN은 문자열의 길이를 반환했는데, 이는 이제 내부적으로 처리되었고 대부분의 경우 계산이 필요하지 않았으며, POS는 다른 문자열 내에서 한 문자열의 위치를 반환했는데, 이는 대부분의 방언에서 SUBSTR로 처리되었다. 문자열 연결을 위해 앰퍼샌드(&)가 도입되었다.[58]

그 외에도 사소한 변경 사항이 많이 추가되었다. 이 중에는 이전 버전의 1차원 배열과 달리 2차원 문자열 배열, 그리고 DEF를 사용하여 수학 함수뿐만 아니라 문자열 기반 함수도 정의할 수 있는 기능이 있었다. 새로운 시스템 지향 함수로는 시간 및 날짜를 다루는 CLK$, DAT$, 경과 시간을 반환하는 TIM, 오늘날의 사용자 이름에 해당하는 사용자 번호를 반환하는 USR$가 포함되었다. 새로운 문자열 함수로는 STR$, VAL, ASC가 포함되었는데, 이는 현대 BASIC 방언에서 흔히 볼 수 있다. REM의 줄임말로 '도 이 버전에 나타났다.[64]

6판

6판 작업은 5판이 확정되기 전인 1969년 가을에 시작되었다. 새로운 버전에 대한 완전한 사양이 미리 작성되었다. 이는 사양 문서가 컴파일러의 변경 사항을 기반으로 했던 이전 버전과 대조된다. 이 버전은 케메니와 커츠뿐만 아니라 교수진으로 돌아온 전 학생들인 스티븐 갈랜드, 존 맥게치, 로버트 하그레이브스 등 여러 명이 작업했다. 충분한 시간을 들여 성숙되었으며, 1971년 여름에 3개월 동안 베타 버전이 실행된 후 마침내 1971년 9월 21일에 출시되었다. 이러한 성숙의 결과로 커츠는 이를 "다트머스가 작성한 가장 잘 설계되고 가장 안정적인 소프트웨어 시스템일 것"이라고 묘사했다.[65]

가장 큰 변화 중 하나는 이전의 CHAIN 개념이 훨씬 더 잘 정의된 CALL로 대체된 것이었다. 이는 GOSUB와 유사하게 작동했지만, 줄 번호 대신 함수 이름을 참조했다. 함수는 SUB...SUBEND를 사용하여 정의되었으며, COMMON 선언을 통해 전역 변수를 사용하는 대신 호출에서 임의의 매개변수를 받았다. 또 다른 주요 변경 사항은 대부분의 현대 BASIC에 있는 OPEN과 유사한 FILE 명령으로 생성된 파일 핸들(숫자)을 사용하는 것이었다. PRINT USING은 FORTRAN과 다소 유사한 방식으로 서식 있는 출력을 제공했으며,[66] LINPUT은 해석 없이 입력을 받아 쉼표, 세미콜론, 심지어 BASIC 코드까지 입력할 수 있게 했다.[67]

6판은 본질적으로 원래 BASIC 개념의 마지막 버전이었다. 그것은 오랫동안 변하지 않았다. 이후 버전은 상당히 다른 언어였다.[65]

SBASIC

1976년, 스티븐 갈랜드는 구조적 프로그래밍에 대한 여러 추가 기능을 모아 다트머스 구조적 베이직(Dartmouth Structured BASIC), 즉 SBASIC을 만들었다.[68] 주요 목표는 IF...THENGOTO 기반의 제어 구조를 다양한 블록 지향 구조로 대체하는 것이었다. 이는 SBASIC 소스 코드를 가져와 6판 베이직으로 변환한 다음, 정상적으로 컴파일하고 실행하는 전처리기를 사용하여 이루어졌다. SBASIC은 또한 다른 프로그래머들이 추가했던 PLOT 명령을 기반으로 한 여러 그래픽 기능을 추가했다.[69]

블록 구조는 알골 68의 경우처럼 일치하는 문장으로 종료되었는데, 이는 파스칼이나 C와 같은 언어에서 발견되는 일반적인 블록 구조와는 대조적이었다. 예를 들어, DO WHILE...LOOP로 끝날 때까지 여러 줄에 걸쳐 있었다.[70] DO 루프는 WHILE 또는 UNTIL을 제거하고 조건문을 LOOP의 하단에 배치하여 하단에서 종료할 수도 있었다. 무한 루프는 DO FOREVER 또는 LOOP FOREVER를 사용하여 지원되었다.[71]

"원본" 다트머스 베이직은 THEN 뒤에 문장을 허용하지 않고, 오직 분기할 줄 번호만 허용했다. SBASIC은 어떤 문장이든 허용했으므로, 예를 들어 IF X < 5 THEN X=X+1과 같았다.[72]IF...THEN에 대한 기본적인 확장(1972년 BASIC-PLUS에서 개척됨)[73]은 이 시점에는 이미 대부분의 베이직 종류, 심지어 당시 출시되던 마이크로컴퓨터 버전에서도 널리 지원되고 있었다. 이 외에도 SBASIC은 THEN을 별도의 줄에 배치하고 블록을 CONTINUE로 끝냄으로써 블록 지향 IF를 추가했다.[74] 이 외에도 SBASIC은 비주얼 베이직 닷넷에 오늘날까지 남아있는 SELECT CASE 메커니즘을 추가했다.[75]

SBASIC은 또한 플로터와 함께 사용하기 위한 여러 그래픽 명령을 추가했다. 이를 위해서는 PLOTTER "plottername"을 사용하여 후속 명령을 선택된 장치로 보내고, WINDOW...를 사용하여 매개변수를 설정해야 했다. 그 후 PLOT X,Y는 선택된 플로터에 점을 생성하고, PRINT에서 사용되는 것처럼 문장 끝에 세미콜론을 추가하면 펜이 종이에 남아 선을 생성했다(예: PLOT 10,10;20,20).[76][77]

SBASIC은 결국 1987년 ANSI X3.113-1987 Standard for Full Basic의 기반이 되었으며, 이는 이전 1978년 ANSI X3.60-1978 Standard for Minimal Basic을 확장한 것이었다. 이 표준을 만드는 데 오랜 지연과 컴퓨터 과학자들 사이에서 비구조화된 BASIC에 대한 무관심으로 인해, 갈랜드가 의장을 맡았던 고급 배치 컴퓨터 과학 과정을 개발하는 College Board 위원회는 파스칼을 요구하고 BASIC을 이 과정의 언어로 허용하지 않기로 결정했다.[78][79]

갈랜드는 다트머스에서 컴퓨터 과학 입문 과정을 가르치는 데 SBASIC을 사용했지만,[80][81] AP 과정을 가르치는 데 사용할 수 있도록 이 과정의 교과서를 파스칼로 다시 작성했다.[82]

7판

갈랜드의 SBASIC은 SBASIC 소스 코드 자체로 작성된 전처리기였다. 이 시스템은 SBASIC 소스를 읽고, 해당 6판 코드를 작성한 다음, 해당 출력을 컴파일했다. 1980년에 출시된 7판은 SBASIC의 독립형 컴파일러 버전이었다. 자체적으로 여러 추가 기능을 추가했다. 대부분의 변경 사항은 외부 프로그램 호출 및 프로그램을 여러 부분으로 나눌 수 있는 "오버레이" 시스템에 대한 추가적인 정교화였다. 이 버전에서는 단일 파일을 공유하는 SUB가 효과적으로 데이터를 공유했다. 이는 루틴 그룹 내에서 약간의 데이터 은닉을 제공했다. 이러한 분리는 오늘날 모듈로 알려져 있다.[83]

또한 이 버전은 구조화된 오류 처리와 LET 문에서 임의의 행렬 계산을 추가하여, M이 행렬 변수일 때 LET A = M*4를 사용할 수 있었고, 이 문장은 M의 모든 요소가 4로 스케일링된 또 다른 행렬을 A로 출력했다. 마지막으로, 또 다른 주요 업데이트는 재귀를 가능하게 한 서브루틴을 위한 활성화 레코드의 사용이었다.[83]

ANSI BASIC, 8판

1970년대 초까지 BASIC 구현은 수십 개로 늘어났으며, 이들 모두는 원래 버전에서 도입된 기본 개념에 자체적인 변경 사항을 적용했다. 이들 대부분은 5판을 기반으로 했지만, 종종 MAT 명령어와 코드 들여쓰기 기능이 부족했다. GE도 이들 회사 중 하나였다. 그들은 몇 달 후 6판이 나올 때까지 기다리지 않고 5판으로 Mark II 시스템을 출시했다.[84] DEC 플랫폼의 BASIC-PLUS는 MAT 명령을 포함하는 등 아마도 가장 유사한 구현이었지만, 역호환되지 않는 여러 변경 사항을 추가했다.[40]

6판 출시 후, 커츠는 표준 베이직 정의 노력에 참여했다. 미국 국가표준 협회(ANSI) 실무 그룹 X3J2는 1974년 1월에, 해당 유럽 컴퓨터 제조업체 협회(ECMA) 그룹 TC21은 그해 9월에 결성되었다. 당시 목표는 두 가지 관련 표준을 만드는 것이었다. 최소 베이직은 2판과 유사하되 문자열을 추가하는 것으로, 거의 모든 베이직이 이미 따를 수 있는 표준이었다. 표준 베이직은 시장에서 볼 수 있는 실제 베이직 종류와 더 일치하는 것을 만들기 위해 더 많은 기능을 추가할 것이었다.[84]

이 과정은 느렸고, 최소 베이직의 첫 번째 초안은 1976년 1월이 되어서야 발표되었으며, 그 결과 1977년 12월 ECMA에서, 1979년 ANSI에서 X3.60-1978로 공식 채택되었다. 최소 베이직은 문자열 변수를 포함하는 3판과 유사했지만, MAT 및 기타 고급 기능은 없었다.[85] 대조적으로, 표준 베이직은 다른 베이직에는 없는 많은 새로운 기능을 가지고 있었고, 이들 중 다수는 제대로 고려되지 않아 비판의 대상이 되었다. 예를 들어, 이 표준은 줄 연속 문자를 포함했지만, 문자열 연결에도 사용되는 앰퍼샌드(&)를 선택했다. 한 줄에 이들을 함께 사용하면 매우 혼란스러운 코드가 될 수 있었다.[86]

이때, 1975년 첫 마이크로컴퓨터 시스템 출시로 인해 알테어 베이직이 빠르게 도입되었으며, 이는 곧 마이크로소프트 베이직으로 알려지게 될 첫 번째 버전이었다. MS BASIC은 BASIC-PLUS를 본떴으므로 궁극적으로는 5판을 본떴지만, 들여쓰기, MAT 및 기타 기능이 부족했다. 또한 LEFT$RIGHT$ 함수를 추가하여 세 글자 관례를 깼다. 마이크로컴퓨터 수가 증가하고 1970년대 후반에 가정용 컴퓨터 시장으로 전환되면서 MS BASIC은 사실상 표준이 되었다.[84]

이러한 시장의 급격한 변화로 표준 베이직 노력은 더욱 둔화되었고 1987년이 되어서야 X3.113-1987로 공식적으로 비준되었다. 이 시점에는 표준의 실제 목적이 없었다. MS BASIC이 도처에 있었을 뿐만 아니라, 1980년대 중반에는 BASIC 사용이 축소 포장 소프트웨어가 입력형 프로그램을 대체하면서 감소하고 있었다. 두 표준은 결국 철회되었다.[84]

ANSI 노력의 궁극적인 실패에도 불구하고, 표준 BASIC의 초안은 1982년 다트머스에서 8판으로 구현되었다.[83]

Remove ads

DTSS 인터페이스

요약
관점

DTSS는 초기 통합 개발 환경(IDE)인 대화형 명령줄 인터페이스를 구현했다. 이는 여러 사용자 및 작업 제어 명령을 제공했다. 예를 들어, 유휴 터미널은 HELLO를 입력하여 사용자 계정에 연결될 수 있었고, BYE로 다시 로그아웃될 수 있었다.[e]

사용자가 입력하고 줄 번호로 시작하는 모든 줄은 프로그램에 추가되었고, 같은 번호의 이전에 저장된 줄을 대체했다. 그 외의 모든 것은 DTSS 명령으로 간주되어 즉시 실행되었다. 줄 번호만으로 구성된 줄은 저장되지 않았지만, 같은 번호의 이전에 저장된 줄을 제거했다. 이 편집 방식은 전신타자기를 터미널 장치로 사용했기 때문에 필요했다.

각 사용자 계정은 오프라인으로 저장된 BASIC 프로그램을 여러 개 가질 수 있었고, 관리자 계정은 영구 저장소에 프로그램을 남겨둘 수도 있었다. 특정 사용자 계정에서는 이들 중 하나만 활성 상태였고, 로드된 프로그램이 없으면 새 프로그램으로 간주되었다. 저장된 프로그램은 오늘날 BASIC 언어 자체의 일부로 더 잘 알려진 명령을 사용하여 접근되었다. 예를 들어, LIST 명령은 DTSS에게 현재 활성 프로그램을 인쇄하도록 지시했다.

명령어 목록

HELLO
DTSS에 로그인
BYE
DTSS에서 로그아웃
BASIC
BASIC 모드 시작
NEW
프로그램 이름을 지정하고 작성 시작
OLD
이전에 이름이 지정된 프로그램을 영구 저장소에서 검색
LIST
현재 프로그램 표시
RUN
현재 프로그램 실행
STOP
현재 실행 중인 프로그램 중단
TEST
강사가 제공한 프로그램을 사용하여 현재 프로그램 테스트
LINK
다중 터미널 모드에서 현재 프로그램 실행
JOIN
다중 터미널 모드에서 실행 중인 프로그램에 참여
SAVE
현재 프로그램을 영구 저장소에 저장
UNSAVE
현재 프로그램을 영구 저장소에서 지움
REPLACE
이미 다른 파일에 사용 중인 이름으로 현재 프로그램 저장
CATALOG
영구 저장소에 있는 프로그램 이름 표시
SCRATCH
현재 프로그램의 이름을 지우지 않고 지움
RENAME
현재 프로그램의 이름을 지우지 않고 변경
FRI
기계식 줄 바꿈이 있는 전신타자기를 위한 프리덴 모드 활성화
NFR
프리덴 모드 비활성화
EXP
EXP EXP를 설명할 수 있는 명령 목록에 대한 설명(도움말)

이 명령들은 종종 사용자들이 BASIC 언어의 일부라고 생각했지만, 실제로는 시분할 시스템의 일부였으며 DTSS 터미널을 통해 ALGOL 또는 FORTRAN 프로그램을 준비할 때도 사용되었다.

TEACH/Test 시스템

1960년대 후반 다트머스 학생들의 약 80%가 두 가지 수학 과정을 수강했고, 두 번째 과정인 미적분학 또는 유한 수학에서 베이직을 배웠다. 이들은 이 과정 시작 무렵 베이직에 대한 1시간짜리 강의 두 번을 들은 후, 파이를 근사하거나 5차 다항식의 근을 찾는 프로그램부터 미분 방정식을 풀거나 마르코프 연쇄에서 극한 확률을 시뮬레이션으로 찾는 프로그램에 이르기까지 베이직으로 4개의 프로그램을 작성해야 했다. TEACH/Test 시스템은 학생들이 이러한 과제를 완료하는 데 도움을 주었다. 학생들이 작동하는 프로그램을 만들었다고 생각할 때, TEST 명령을 입력하면 강사가 작성한 프로그램이 그들이 작성한 것을 승인하거나, 어디에서 잘못되었는지에 대한 힌트를 제공했다. 학생들은 각 프로그램의 목록, 샘플 RUN, 그리고 TEACH/Test 시스템의 승인을 제출해야 했다. 이 시스템은 과제를 채점하거나 학생이 TEST를 몇 번 입력했는지 기록하지 않았다. 단지 학생과 강사를 도왔을 뿐이다.[87][88]

BASIC 언어

요약
관점

첫 번째 릴리스는 FORTRAN II에서 일부 연산자와 키워드를, ALGOL 60에서 일부를 가져와 다음과 같은 문장 유형을 구현했다. 전반적으로 이 언어는 FORTRAN 모델을 더 밀접하게 따르는데,[46] 일반적으로 코드 한 줄당 하나의 문장을 가지고 있고, 코드 그룹화를 위한 ALGOL의 "블록"이 없으며(이러한 구조적 프로그래밍 구조는 ALGOL 개발의 주요 이유였다), 프로그램 흐름을 제어하기 위해 GOTO를 사용한다.

ALGOL에서 FORTRAN의 다루기 힘든 DO...CONTINUE 문을 대체하는 FOR...TO...STEP 스타일 루프를 가져왔다.[47] BASIC은 또한 IF...THEN 구문을 단순화하여 FORTRAN의 IF (X-5) 20,20,30과 달리 IF X>5 THEN GOTO 20과 같은 간단한 비교를 허용했다.[47] FORTRAN 스타일의 "계산된 IF"는 나중 버전에서 ON...GOTO 명령으로 다시 도입되었다.

변수 이름은 A부터 Z, A0부터 A9, B0부터 B9, ..., Z0부터 Z9까지로 제한되어 최대 286개의 서로 다른 변수 이름을 사용할 수 있었다. I부터 N까지의 변수를 정수로, 나머지를 부동소수점으로 설정하는 FORTRAN의 이상한 시스템은 제거되었고, 모든 변수는 부동소수점으로 가정되었으며 최대 10개의 요소를 가진 배열로 차원화되었다. DIM 명령은 배열이 10개 이상의 요소를 가질 경우에만 필요했다.[47] 배열 이름은 A부터 Z까지만 허용되었다.

BASIC 명령문 목록

DEF
한 줄 함수 정의
DIM
(dimension의 약어) 배열의 크기 정의
END
프로그램의 끝 정의
STOP
텍스트 끝 전에 프로그램 중지
FOR / TO / STEP
루프 정의
NEXT
루프의 끝 표시
GOSUB
간단한 서브루틴으로 제어권 이전
RETURN
간단한 서브루틴에서 제어권 반환
GOTO
다른 명령문으로 제어권 이전
IF / THEN
의사 결정
LET / =
공식 결과를 변수에 할당
PRINT
결과 출력
DATA
프로그램 내에 정적 데이터 저장
READ
DATA 명령문에 저장된 데이터 입력
REM
주석 ("REMark")

또한 부동 소수점 숫자 변수와 산술 연산을 구현했다.

연산자 목록

자세한 정보 산술 연산자, 관계/논리 연산자 ...

함수 목록

ABS
절댓값
ATN
역탄젠트 값 (결과는 라디안)
COS
코사인 값 (인수는 라디안)
EXP
지수 값
INT
정수 값
LOG
자연 로그 값
RND
난수 값
SIN
사인 값 (인수는 라디안)
SQR
제곱근 값
TAN
탄젠트 값 (인수는 라디안)
Remove ads

예시

초기 버전의 BASIC은 외부 파일을 읽고 쓰는 기능이 없었다. 일반적으로 파일에서 읽어올 데이터 목록을 나타내기 위해 BASIC은 DATA 키워드를 포함했는데, 이는 줄 길이 제한까지 임의로 긴 요소 목록을 따를 수 있었다. DATA는 실행 불가능했으며, 만나면 건너뛰어졌다. READ 명령은 내부 포인터로 DATA 요소의 전체 컬렉션 내에서 위치를 추적하며 데이터를 하나씩 사용했다. 버전 3에서는 프로그램의 첫 번째 DATA 명령으로 포인터를 재설정하는 RESTORE 명령이 추가되었다.

이 예시에서 "첫 세 데이터 값은 각각 X, Y, Z로 읽어 들인다. -1 값은 N으로 읽어 들인다. 다음 11개의 값, .1부터 .3까지는 배열 B의 11개 요소로 읽어 들인다."[89]

15 READ X, Y, Z
20 READ N
24 FOR I=0 TO 10
25 READ B(I)
26 NEXT I
40 DATA 4.2, 7.5, 25.1, -1, .1, .01, .001, .0001
45 DATA .2, .02, .002, .0002, .015, .025, .3, .03, .003

대부분의 후속 BASIC과 달리 다트머스 BASIC은 3판부터 MAT라는 행렬 키워드를 가지고 있었는데, 이는 다른 여러 명령 앞에 붙어 단일 명령으로 전체 데이터 배열에 대해 작동할 수 있었다. 이 예시는 1968년 매뉴얼에서 가져온 것으로,[90] MAT INPUT V는 일련의 변수를 입력하는 데 사용된다. 사용자가 한 줄에 아무것도 입력하지 않으면 이 프로세스는 종료되고, 총 요소 수는 NUM 의사 변수로 접근된다.[f] 그런 다음 코드는 행렬의 모든 개별 요소를 합산하고 평균을 계산한다. 3판은 또한 들여쓰기를 추가했는데, 여기서는 루프 구조를 명확히 하는 데 사용된다.

5 LET S = 0
10 MAT INPUT V
20 LET N = NUM
30 IF N = 0 THEN 99
40 FOR I = 1 TO N
45   LET S = S + V(I)
50 NEXT I
60 PRINT S/N
70 GO TO 5
99 END
Remove ads

내용주

  1. 이 경우 "he"라는 용어의 사용은 당시 다트머스가 여학생을 받지 않았기 때문에 유일한 가능성이었다는 점에 유의하라.
  2. 데이비드 알은 BASIC 컴퓨터 게임에서 이 게임을 설명하면서 케메니가 작성했다고 말했다.[42]
  3. 이 기능은 다트머스를 기반으로 한 대부분의 BASIC에서 발견되었지만, 독립적으로 생성된 BASIC에서는 드물었다.
  4. 아포스트로피가 이전 버전에서 사용되었는지는 명확하지 않으며, 4판 매뉴얼에서 처음으로 명시적으로 언급되었다.
  5. 로그아웃할 필요는 없었다. 사용자가 응답하지 않으면 짧은 지연 후 로그아웃되었다.
  6. NUMLEN()처럼 함수로 구현되지 않은 이유는 미스터리이다.

각주

외부 링크

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads