기본 인터프리터
BASIC interpreterBASIC 인터프리터는 사용자가 BASIC 언어로 프로그램을 입력하고 실행할 수 있도록 하는 인터프리터이며, 마이크로컴퓨터 시대의 첫 부분에는 컴퓨터가 실행하는 기본 어플리케이션이었습니다.사용자는 베이직 인터프리터를 사용하여 프로그램을 입력하거나 스토리지에서 프로그램을 로드해야 했습니다(처음에는 카세트 테이프와 플로피 디스크).
BASIC 통역사는 역사적으로 중요하다.마이크로소프트의 첫 판매 제품은 베이직 인터프리터(Altair BASIC)로, 회사의 성공을 위한 길을 닦았다.Altair BASIC 이전에 마이크로컴퓨터는 기계어로 프로그래밍해야 하는 키트(예: Apple I)로 판매되었습니다.알테어 기간 동안 베이직 인터프리터는 별도로 판매되어 조직이 아닌 개인에게 판매된 최초의 소프트웨어가 되었습니다.애플 베이직은 애플의 첫 번째 소프트웨어 제품이었습니다.MITS Altair 8800 이후 마이크로컴퓨터는 자체 BASIC 인터프리터(예를 들어 BASIC의 여러 구현이 있었던 Apple II)와 함께 번들될 것으로 예상되었습니다.마이크로소프트의 Altair BASIC의 가격에 대한 반발은 Tiny BASIC의 일반적인 구현과 Palo Alto Tiny BASIC의 초기 협업 소프트웨어 개발로 이어졌습니다.
BASIC 인터프리터는 컴퓨터의 파워가 높아지고 관련 프로그램이 너무 길어지면서 사용이 중단되어 적절한 배포 형식이 되지 않게 되었습니다.소프트웨어는 플로피 디스크, 온라인 또는 게시판 시스템으로 사전 컴파일되어 전송되기 때문에 표준화된 기본 언어에 대한 필요성은 낮아졌습니다.또한 MS-DOS나 Apple Macintosh GUI와 같은 점점 더 정교한 명령어 셸이 주요 사용자 인터페이스가 되면서 셸 역할을 할 BASIC의 필요성이 사라졌습니다.BASIC 인터프리터의 주요 언어 및 시스템 인터페이스 사용은 1980년대 중반까지 거의 사라졌다.
역사
BASIC은 시분할 시대의 시작을 도왔으며, 마이크로컴퓨터 시대에 주류가 되었다가 DOS 및 GUI 시대에 또 하나의 응용 프로그램으로 변모하여 현재는 게임 개발, 레트로 컴퓨팅, 교육에 관련된 몇 가지 틈새에서 살아남았습니다.
시분할 시대
통역사가 아닌 컴파일 앤 고 시스템으로 처음 구현된 BASIC은 시분할 시스템을 향한 광범위한 움직임의 일부로 등장했습니다.General Electric은 Dartmouth Time Sharing System과 그 관련 Dartmouth BASIC에서 작업한 경험이 있으며, 기본 운영체제를 작성하고 Mark I로 알려진 온라인 시간 공유 시스템을 출시하여 BASIC 컴파일러(인터프리터가 아님)를 주요 판매 포인트 중 하나로 내세웠습니다.신흥 분야의 다른 기업들도 빠르게 그 뒤를 따랐다.1970년대 초까지 BASIC은 범용 메인프레임 [1]컴퓨터에서 널리 보급되었습니다.
BASIC은 통합된 라인 편집을 염두에 두고 설계된 능률적인 언어로서 시분할 서비스와 동시에 부상하고 있는 미니 컴퓨터 시장에의 이식에도 자연스럽게 적합했습니다.이 기계들은 현대 용어로는 4KB에 불과한 매우 작은 메인 메모리를 가지고 있었고 컴파일러를 실용적으로 만드는 하드 드라이브와 같은 고성능 스토리지가 부족했습니다.반면 인터프리터는 퍼포먼스를 희생하면서 컴퓨팅 자원을 적게 사용합니다.1968년 Hewlett Packard는 HP Time-Shared BASIC [2]인터프리터를 기반으로 한 시스템인 HP 2000을 발표했습니다.1969년 Dan Paymar와 Ira Baxter는 Data General [3]Nova의 또 다른 초기 BASIC 통역사를 작성했습니다.
그 중 하나는 대형 미니 컴퓨터 벤더인 DEC(Digital Equipment Corporation)였습니다.그들은 1960년대 초 스탠포드 연구소의 DEC 기계에서 개발된 초기 JOSS에 기초한 FOCAL이라고 알려진 새로운 언어를 출시했다.JOSS는 많은 면에서 BASIC과 비슷했고, FOCAL은 매우 작은 메모리 시스템, 특히 4KB의 메인 메모리를 탑재한 PDP-8에서 실행되도록 설계된 버전이었다.1960년대 후반, 특히 교육 판매 부문의 DEC 세일즈맨은 잠재 고객이 FOCAL에 관심이 없고 다른 곳에서 시스템을 찾고 있다는 것을 알게 되었습니다.이것이 David H를 자극했다. PDP-8 및 기타 DEC 기계용 BASIC을 제작할 프로그래머를 고용합니다.올해 안에 JOSS나 FOCAL과 같은 대체 제품에 대한 관심은 모두 사라졌다.[4]
마이크로컴퓨터 시대
1970년대 중반 최초의 마이크로컴퓨터의 도입은 BASIC의 폭발적인 성장을 이어갔습니다.그것은 마이크로컴퓨터에 관심을 가진 젊은 디자이너와 컴퓨터 취미 생활가들에게 매우 잘 알려져 있다는 장점이 있었습니다.그들 중 대부분은 미니 또는 메인프레임에서 BASIC을 보았습니다.BASIC은 훈련을 받지 않은 사용자가 사용할 수 있을 정도로 수준 높고 당시의 마이크로컴퓨터에 적합할 정도로 작은 언어 중 하나였습니다.1972년 HP는 읽기 전용 메모리(ROM)[5]에 BASIC Plus 인터프리터를 탑재한 HP 9830A 프로그램 가능한 데스크톱 계산기를 출시했습니다.
1974년 6월 Urbana-Shampaign 일리노이 대학의 Alfred Weaver, Michael Tindall 및 Ronald Danielson은 IBM 360 및 [6]1675용 8008 시뮬레이터에 응용 프로그램을 도입했지만 "인텔 8008 마이크로프로세서의 기본 언어 인터프리터"를 제작할 수 있음을 증명했습니다.
1975년 1월, Altair 8800이 발표되어 마이크로컴퓨터 혁명에 불을 붙였다.베이직의 첫 번째 마이크로컴퓨터 버전 중 하나는 게이츠, 앨런, 몬테 다비도프에 의해 새롭게 설립된 마이크로 소프트를 위해 공동 집필되었습니다.이것은 기계 자체 직후에 [7]MITS에 의해 Altair 8800용 펀치 테이프 형식으로 출시되었으며 초기 마이크로컴퓨터의 주요 언어로 BASIC을 선보였습니다.
1975년 3월, Steve Wozniak은 Homebrew Computer Club의 첫 회의에 참석하여 자신의 컴퓨터 디자인을 공식화하기 시작했습니다.클럽 회원들은 알테어 [8]베이직으로 흥분했다.Wozniak은 자신의 기계가 베이직이 있어야 한다고 결론지었다.당시 그는 Hewlett Packard에서 근무하고 있었으며, HP Time-Shared BASIC이라는 미니 컴퓨터 사투리를 자신의 버전의 기반으로 사용했습니다.Integer BASIC은 Apple I용 카세트로 출시되었으며 1977년 [9]여름 Apple II가 출하되었을 때 ROM으로 공급되었습니다.
홈브루 컴퓨터 클럽의 다른 회원들은 알테어 베이직의 복사본을 종이 테이프로 돌리기 시작했고, 게이츠는 이 소프트웨어 불법복제의 초기 사례에 대해 불평하면서 애호가들에게 공개 서한을 쓰게 되었다.Bob Albrecht는 부분적으로 Gate의 편지에 응답하고 일부는 4KB [a]머신에서 유용하게 동작할 수 있는 더 작은 BASIC을 만들기 위해 Dennis Albrecht에게 그들만의 언어 변형을 쓰라고 촉구했습니다.BASIC 언어용 인터프리터의 분해된 버전을 설계 및 구현하는 방법은 1975년에 발행된 People's Company 뉴스레터 제1 3 4분기호 앨리슨 기사와 Dobb 박사의 Tiny BASIC Calistenics & Calistia 저널에 소스 코드를 사용한 구현에서 다루었습니다. 오버바이트 없이 라이트 실행.이로 인해 홈브루 컴퓨터 [10]클럽의 멤버인 Tom Pittman과 Li-Chen Wang의 잘 알려진 버전이 추가되거나 개선된 다양한 Tiny BASIC이 탄생했습니다.Tiny BASIC은 공개적으로 출판되었고 Wang은 다른 사람들이 그의 소스 코드를 복사하도록 장려하기 위해 "copyleft"라는 용어를 만들었습니다.Tiny BASIC은 자유 소프트웨어 운동 이전에 존재했던 무료 소프트웨어 프로젝트의 한 예로 취미 생활자와 전문가들이 직접 구현한 것입니다.
많은 회사들이 기본 통역기를 개발했습니다.1976년 SCELBI는 8008에[11] SCELBAL을 도입했으며 아이다호 대학과 로렌스 리버모어 연구소는 부동소수점 [12]지원을 포함한 퍼블릭 도메인 LLL BASIC에 게시할 것이라고 발표했습니다.1977년, Apple II와 TRS-80 Model I은 각각 2개의 BASIC 버전을 가지고 있었습니다.이것은, 머신의 초기 릴리스에 도입된 소형 버전과 플랫폼에 대한 관심이 높아짐에 따라 나중에 도입된 라이센스 Microsoft 버전입니다.
마이크로소프트는 인터프리터를 MOS 6502로 이식했는데, MOS 6502는 8비트 시대의 가장 인기 있는 마이크로프로세서 중 하나가 되었다.Commodore PET와 같은 새로운 마이크로컴퓨터가 등장하기 시작했을 때 제조사는 하드웨어 기능에 맞게 커스터마이즈된 Microsoft BASIC을 라이센스했습니다.1978년까지 MS BASIC은 사실상의 표준이 되어 1980년대의 거의 모든 가정용 컴퓨터가 ROM에 포함되었습니다.1980년, 다른 언어와 PC DOS를 포함한 대규모 라이센스 계약의 일환으로 IBM은 Atari의 제안을 거부하고 대신 자체 구현을 통해 MS-BASIC을 라이센스하여 결국 IBM BASIC의 4개 버전을 출시했습니다(예: 카트리지 BASIC은 40KB가 [13]소요됨).IBM PC 팀의 리더인 Don Estridge는 다음과 같이 말했습니다. "IBM은 매우 뛰어난 베이직(BASIC)을 가지고 있습니다. 좋은 평가를 받고 있으며 메인프레임 컴퓨터에서도 빠르게 실행되며 마이크로 컴퓨터 베이직보다 훨씬 더 많은 기능을 갖추고 있습니다."그러나 Microsoft BASIC 사용자 수에 비해 사용자 수는 극히 적었습니다.Microsoft BASIC은 전 세계에 수십만 명의 사용자를 보유하고 있습니다.이것에 대해 어떻게 논할 것인가」([14]이러한 실장의 이후의 이력에 대해서는, Microsoft BASIC 를 참조해 주세요).
많은 업자들이 "그것을 가지고" 다른 회사를 이용하거나 그들만의 통역사를 썼다.1978년 9월, Shepardson Microsystems는 Z80 기반의 Cromemco S-100 버스 기계를 [15][16]위한 Cromemco 16K Structured BASIC을 마무리하고 있었습니다.Paul Laughton과 Kathleen O'Brien은 기본적으로 [18]6502에 이식된 Cromemco BASIC의 축소 버전으로 Atari[17] BASIC을 만들었습니다.1979년 Warren Robinett은 코드 9줄(총 64자)의 프로그램만 지원했지만, Atari, Inc.용 BASIC 프로그래밍 카트리지를 개발했습니다.또한 1979년, TI-99/4와 함께 TI-BASIC을 출시했는데, TI-99/4A로 개조하면 거의 300만 대의 시스템이 판매될 것입니다.싱클레어 베이직은 존 그랜트와 나인타일의 스티브 비커스에 의해 ZX-80용으로 개발되었다.1980년, Acon Computers의 Sophie Wilson은 Atom BASIC을 개발하였고, 그녀는 나중에 구조화된 BASIC 프로그래밍을 제공한 최초의 통역자 중 한 명인 BBC BASIC으로 발전하였다.DEF PROC/DEF FN절차 및 기능,REPEAT UNTIL루프 및IF THEN ELSE COMAL에서 [19][20]영감을 얻은 구조물.Jan Jones는 SuperB를 개발했습니다.ASIC은 Sinclair QL을 위한 구조화된 프로그래밍을 지원하는 또 다른 British BASIC입니다.1983년, Randall Hyde는 SmartBAS를 개발했습니다.콜레코 [21]아담의 IC입니다Richard Clayton, Chris Hall 및 Paul Overell은 BBC Micro용 Mallard BASIC과 Amstrad CPC용 Locomotive BASIC을 개발했습니다.이 두 가지 명령어는 모두 ISAM 색인 파일 [22]시스템을 지원합니다.1985년, MetaComCo는 Amiga용 ABASIC와 Atari ST용 ST BASIC을 출시했습니다.
1978년 David Lien은 The BASIC Handbook 초판을 발간했습니다. 78대 이상의 컴퓨터 키워드를 문서화한 베이직 컴퓨터 언어 백과사전.1981년까지 제2판에서는 250대 이상의 컴퓨터에서 키워드를 문서화하여 마이크로컴퓨터 [23]시대의 폭발적인 성장을 보여주었습니다.
응용 프로그램으로서의 인터프리터
디스크 운영체제와 이후 그래피컬 사용자 인터페이스가 등장하면서 베이직 인터프리터는 사용자가 컴퓨터를 켤 때 표시되는 첫 번째 프롬프트가 아니라 여러 애플리케이션 중 하나의 애플리케이션에 불과하게 되었습니다.
1983년, TRS-80 Model 100 휴대용 컴퓨터는 두 가지 이유로 Microsoft BASIC의 구현에 주목할 만합니다.첫째, 프로그램을 한 줄씩 입력하는 것이 아니라 단순한 텍스트 편집기인 TEXT를 사용하여 편집했습니다(단, [24]줄 번호는 여전히 필요했습니다).둘째, 이것은 빌 게이츠가 개인적으로 [25][26]개발한 마지막 마이크로소프트 제품이었다.
또한 1983년에 마이크로소프트는 GW-BASIC과 DOS를 결합하기 시작했습니다.IBM BASICA와 기능적으로 동일한 BASIC 인터프리터는 완전한 독립 실행 파일이었으며 원본 IBM PC에 있는 카세트 BASIC ROM이 필요하지 않았습니다.Mark Jones Lorenzo에 따르면, 언어의 범위를 고려할 때, "GW-BASIC은 분명 Altair까지 확장되는 마이크로소프트 계열의 라인 번호 BASIC의 ne plus 울트라이며,[27] 어쩌면 일반적인 라인 번호 BASIC도 마찬가지입니다."MS-DOS 5.0이 출시되면서 GW-BASIC의 자리는 QBasic이 차지하게 되었습니다.
MacBASIC은 오리지널 Macintosh 컴퓨터를 위한 완전한 인터랙티브 개발 환경을 특징으로 하며 Donn Denman,[28] Marianne Hsung, Larry Kenyon 및 Bryan [29]Stearns에 의해 개발되었습니다.MacBASIC은 1985년에 베타 소프트웨어로 출시되어 Dartmouth College 컴퓨터 과학부 등의 입문 프로그래밍 코스에서 사용하기 위해 채택되었습니다.그것은 애플이 개발한 베이직이 마이크로소프트 베이직을 위해 죽은 두 번째가 될 운명이었다.1985년 11월, 애플은 애플 [30][31]II의 BASIC 라이선스를 연장하기 위한 마이크로소프트와의 거래의 일환으로 이 프로젝트를 갑자기 종료했다.
BASIC 통역사는 단지 미국/영국의 발전만이 아니었다.1984년 허드슨 소프트는 샤프 MZ80용 허드슨 소프트 베이직(영어 [32]키워드 포함)을 기반으로 한 게임 프로그래밍용 정수 전용 구현인 닌텐도 패밀리 컴퓨터 비디오 게임기 패밀리 베이직(Family BASIC)을 일본 시장에 출시했다.Turbo-Basic XL은 아타리 BASIC의 호환 슈퍼셋으로 프랭크 오스트로프스키가 개발하여 독일 컴퓨터 잡지 Happy Computer 1985년 12월호에 게재되어 타이프인 프로그램으로 출판된 마지막 번역자 중 한 명이다.이 언어에는 인터프리터 외에 컴파일러가 포함되어 있으며 구조화된 프로그래밍 명령어가 포함되어 있습니다.다른 도스 시스템에서 작동하는 여러 수정 버전이 다른 저자에 의해 공개되었습니다.프랑스에서 프랑수아 라이오네와 콘스탄틴 소티로풀로스는 멀티미디어에 초점을 맞춘 두 개의 베이직 통역사를 개발했습니다.[33] 1988년 아타리 ST의 STOS BASIC과 1990년 아미가 ST의 AMOS BASIC입니다.
1991년 5월 Microsoft는 컴포넌트 오브젝트 모델([34]COM) 프로그래밍 모델로 알려진 3세대 이벤트 구동 프로그래밍 언어인 Visual Basic을 출시했습니다.Visual Basic은 그래피컬 사용자 인터페이스(GUI) 애플리케이션의 신속한 애플리케이션 개발(RAD), Data Access Objects, Remote Data Objects 또는 ActiveX Data Objects를 사용한 데이터베이스 액세스, ActiveX 컨트롤 및 객체 작성을 지원했습니다.Visual Basic은 퍼블리싱된 애플리케이션뿐만 아니라 자체 애플리케이션을 개발하기 위해 사용되었습니다.
틈새 베이직
1993년 Microsoft는 Microsoft Office 응용 프로그램용 스크립트 언어인 Visual Basic for Applications를 출시하여 Word's WordBASIC과 같은 이전 응용 프로그램별 매크로 프로그래밍 언어의 기능을 대체하고 확장했습니다.
1996년에 마이크로소프트는 Internet Explorer에서 [35]볼 수 있는 웹 페이지에 인터랙티브 클라이언트 측 기능을 추가하기 위한 JavaScript의 대안으로 VBScript를 출시했습니다.
1999년에 Venoît Minisini는 Linux로의 [36]이행을 결정한 Visual Basic 개발자들을 위한 대안으로 Gambas를 출시했습니다.
2000년에 리 뱀버와 리처드 배너는 다크비를 발매했다.Microsoft Windows용 게임 제작 시스템인 ASIC과 함께 제공되는 IDE 및 개발 도구.[37]
2001년 Small BASIC는 Palm [38]PDA용으로 출시되었습니다.Palm의 또 다른 BASIC 인터프리터는 Chipmunk Basic의 계열사인 HotPaw BASIC이었다.
2002년 Emmanuel Chailloux, Pascal Manouly 및 Bruno Pagano는 Objective Caml을 [39]사용한 애플리케이션 개발의 예로서 Tiny BASIC을 발표했습니다.
2011년에 Microsoft는 Small Basic을 출시했습니다(Small BAS와 구별).IC)는 교육 커리큘럼[40] 및 소개 가이드와 함께 Scratch와 같은 시각 프로그래밍 언어를 배운 학생들이 텍스트 기반 프로그래밍을 [42]배울 수 있도록 설계되었습니다.[41]연관된 IDE는 구문 강조 표시, 지능형 코드 완성 및 편집자 내 문서 [43]액세스와 같은 기능을 통해 단순화된 프로그래밍 환경을 제공합니다.이 언어에는 14개의 [44]키워드만 있습니다.2019년에 마이크로소프트는 학생들이 웹 [45][46]브라우저에서 프로그램을 실행할 수 있도록 하는 Small Basic Online (SBO)을 발표했다.
2014년 Robin H. Edwards는 Arduino용 Arduino BASIC을 출시하여 현재 널리 [47]보급되어 있습니다.1984년 Gordon Brandly가 68000 Tiny BASIC을 위해 Palo Alto Tiny BASIC을 개작하여 Mike [48]Field가 C로 포팅하였다.
많은 베이직 인터프리터는 현재 Apple App Store 또는 Android용 Google Play 스토어를 통해 스마트폰과 태블릿에 사용할 수 있습니다.
오늘날 BASIC 인터프리터 코딩은 레트로컴퓨팅 취미 중 하나가 되었습니다.RAM이 확장되어 있는 시스템의 상위 레벨의 프로그래밍 언어는 BASIC 인터프리터의 실장을 심플화했습니다.예를 들어 구현 언어가 스파스 매트릭스를 지원하고 변수 관리가 연관 배열로 단순하며 평가 함수로 프로그램을 쉽게 실행할 수 있는 경우 라인 관리는 단순합니다.예를 들어 Haskell[49] 또는 OCaml Tiny BASIC으로 작성된 오픈소스 프로젝트 Vintage BASIC을 참조하십시오.
판매 및 유통
1960년대 [50]후반 조직을 위해 독립적으로 패키지화된 소프트웨어를 생산하는 산업이 등장하기 전까지 통역사는 컴퓨터 하드웨어와 함께 번들되거나 커스텀 서비스로 개발되었습니다.BASIC 인터프리터는 처음에는 마이크로컴퓨터와 별도로 판매되었고, 그 후 DOS 시대에 다시 애플리케이션으로 판매되었습니다.
| 연도 | 미디어 | 예 |
|---|---|---|
| 1975 | 종이 테이프 | 알테어 BASIC |
| 1975 | 입력 프로그램 | 작은 베이직 확장 |
| 1976 | 카세트 테이프 | 애플 I BASIC |
| 1977 | 플로피 ROM | 마이크로 베이직 |
| 1977 | ROM | 정수 BASIC |
| 1983 | 플로피 디스크 | GW 베이직 |
| 1995 | CD롬 | Visual Basic 4.0 |
| 2008 | 앱스토어 | 여러가지 |
시장이 ROM으로 이동함에 따라 ROM의 크기가 BASIC 인터프리터의 크기에 대한 결정을 지배하게 되었습니다.RAM은 4KB 칩으로 판매되었기 때문에 Altair BASIC은 처음에 4K, 8K, 12K용으로 별도의 에디션으로 패키지화되었습니다.이는 제조사가 가격 목표 및 기타 제약 조건에 따라 설계에 얼마나 많은 ROM 칩을 장착할 수 있는지를 결정할 것이기 때문입니다.
컴파일러와 인터프리터
| 측면 | 컴파일러 | 통역사 |
|---|---|---|
| 최적화 | 성능 | 메모리 사용량 |
| 실행 속도 | 빠른 | 느리다 |
| 메모리 사용량 | 더 높은 | 더 낮게 |
| 세컨더리 스토리지 | 필수의 | 선택적. |
| 에러 체크 | 실행전 | 실행 중 |
| 소스 코드 | 실행 파일에 포함되어 있지 않다 | 실행에 필요 |
BASIC의 첫 번째 구현인 Dartmouth BASIC은 컴파일러였다.일반적으로 컴파일러는 프로그램 전체를 다단계 프로세스로 검사하고 소스 코드를 참조하지 않고 호스트 컴퓨터의 기본 기계 언어로 직접 실행 가능한 두 번째 파일을 생성합니다.이 코드는 종종 언어의 런타임 시스템에서 미리 작성된 루틴 호출로 구성됩니다.일반적으로 실행 파일은 작성한 소스 코드보다 작습니다.
컴파일러의 주요 단점은 적어도 역사적 맥락에서는 대량의 임시 메모리가 필요하다는 것입니다.컴파일러가 동작함에 따라 원래의 소스 코드와 함께 메모리에 보관되어 있는 출력 파일이 계속 증가하고 있습니다.임시 검색용 추가 메모리(특히 BASIC의 경우 행 번호)가 메모리 요건을 증가시킵니다.당시 컴퓨터의 메모리는 매우 적었고, 현대식 표현으로 보면 일반적인 메인프레임의 메모리는 약 64KB였습니다.대부분의 1960년대 BASIC의 경우, 타임쉐어링 시스템에서는, 그 메모리는 많은 유저에게 공유되고 있었습니다.
컴파일러를 작동시키려면 시스템에 고성능 세컨더리 스토리지(일반적으로 하드 드라이브)가 있어야 했습니다.프로그램 편집은 사용자의 소스 코드를 임시 파일에 쓰는 전용 환경에서 수행되었습니다.사용자가 프로그램을 실행했을 때 에디터는 컴파일러를 종료하고 실행했습니다.컴파일러는 그 파일을 읽고 실행 가능한 코드를 생성했습니다.그리고 마지막으로 컴파일러는 종료하고 결과 프로그램을 실행합니다.이 방법으로 작업을 분할하면 전체 BASIC 시스템 중 하나에 필요한 메모리 양이 감소합니다.또한 에디터, 컴파일러 또는 런타임만 로드하면 나머지는 스토리지에 저장됩니다.
메인프레임은 메모리 용량이 적었지만 미니컴퓨터는 더 적었습니다. 1960년대에는 4KB와 8KB 시스템이 일반적이었습니다.하지만 훨씬 더 중요한 것은 미니컴퓨터는 고성능 스토리지가 없는 경향이 있다는 것입니다. 대부분의 초기 설계에서는 펀치 테이프를 프라이머리 스토리지 시스템으로 사용했으며 마그네틱 테이프 시스템은 하이엔드 시장을 위한 것이었습니다.이 환경에서는 소스를 작성하고 컴파일한 후 결과를 실행하는 데 몇 분 정도 걸립니다.이러한 제약으로 인해 통역사가 급증했다.
인터프리터는 최종적으로 컴파일러와 동일한 기본 태스크를 수행하여 소스 코드를 읽고 런타임 함수를 호출하는 실행 명령으로 변환합니다.주요 차이점은 다양한 작업을 수행할 때입니다.컴파일러의 경우 사용자에게 단일 조작으로 보이는 동안 전체 소스 코드가 변환되는 반면 인터프리터는 소스 문을 한 번에 하나씩 변환하고 실행합니다.결과 머신 코드는 출력이 아닌 실행되며, 그 후 해당 코드는 폐기되고 프로세스는 다음 문에서 반복됩니다.따라서 실행 파일이 구축되는 동안 어떤 형태의 보조 스토리지가 필요하지 않습니다.주요 단점은 프로세스 전체의 다른 부분을 분할할 수 없다는 것입니다.소스를 머신 조작으로 변환하기 위해 필요한 코드는 실행 시간과 함께 메모리에 로드해야 하며 대부분의 경우 소스 코드 에디터도 함께 로드해야 합니다.
이러한 모든 컴포넌트에서 소량의 메모리에 들어가 사용자의 소스 코드를 저장할 수 있는 언어를 작성하는 것은 큰 과제이지만, 세컨더리 스토리지의 필요성이 없어지고 초기 미니컴퓨터와 가정용 컴퓨터 혁명 역사의 대부분에서 실용적인 솔루션이 되었습니다.
발전
언어 설계
최초 통역자를 위한 언어 설계에는 다른 구현의 참조만 수반되는 경우가 많습니다.예를 들어, BASIC에 대한 Wozniak의 레퍼런스는 HP BASIC 매뉴얼과 101 BASIC 컴퓨터 게임의 사본이었다.이러한 출처를 바탕으로 워즈니악은 언어의 [51]구문도를 스케치하기 시작했다.그는 HP의 BASIC이 101게임에서 사용되는 DEC BASIC과 크게 다르다는 것을 몰랐다.두 언어는 주로 문자열 처리 및 제어 [52]구조 면에서 달랐다.Data General Business [53]Basic은 정수 전용 구현으로 Atari Basic의 영감을 받았습니다.
이와는 대조적으로 스탠포드 대학의 컴퓨터 과학 교수인 데니스 앨리슨은 간단한 버전의 [54]언어에 대한 사양을 작성했다.Alson은 Homebrew Computer Club의 Bob Albrecht로부터 이 표준을 만들 것을 권유받았습니다.그는 미니컴퓨터에서 BASIC을 보고 Altair와 같은 새로운 기계에 완벽하게 적합하다고 생각했습니다.Alison이 제안한 디자인은 정수 연산만을 사용했을 뿐 배열이나 문자열 조작을 지원하지 않았습니다.이 프로그램의 목적은 2~3킬로바이트의 메모리를 탑재하는 것이었습니다.Tiny BASIC의 전체적인 디자인은 People's Computer Company(PCC) 뉴스레터 1975년 9월호에 게재되었습니다.
이 문법은 배커스-나우르 [55]형식으로 아래에 나열되어 있습니다.리스트에는 아스타리스크(")가 표시되어 있습니다.*" )는 왼쪽에 있는 오브젝트의 0 이상을 나타냅니다.단, 정의의 첫 번째 아스타리스크는 제외합니다.term"는 곱셈 연산자, 괄호는 그룹 객체 및 엡실론("")입니다.ε" )는 빈 세트를 나타냅니다.컴퓨터 언어 문법 표기법에서 흔히 볼 수 있듯이 세로 막대("") " )는 다른 행에 기재되어 있는 것과 같이 대체 방법을 구별합니다.기호 "CR"는 캐리지 리턴을 나타냅니다.
line ::= number statement CR statement ::= PRINT expr-list IF expression relop expression THEN 문 GOTO expression INPUT var-list LET var = expression GOSUB expr-list :: (문자열 표현식) , (문자열 표현식) ): var: var: var: ( , )요인((* /) 요인)* 요인::= 변수 번호(분열) 변수::= A B C...Y Z 번호 ::= digit* digit ::= 0 1 2 3 ...8 9 relop : : : = < ( > = ε< )> ( < = ε) ) =이 구문은 단순하지만 혁신이 하나 더 추가되었습니다.GOTO그리고.GOSUB회선번호가 아닌 식을 사용할 수 있습니다.이것에 의해, GOTO 가 할당되어[56] 있습니다.ON-GOTO/GOSUBBASIC의 전형적인 구조입니다.
Sinclair BASIC은 1978년 ANSI(American National Standards Institute) Minimal BASIC 표준을 언어 정의로 사용했지만, 그 자체는 정수 [57]산술만을 사용한 불완전한 구현이었다.ANSI 표준은 마이크로컴퓨터를 위한 1세대 인터프리터의 설계 후에 발표되었다.
아키텍처
BASIC [58]인터프리터의 공통 컴포넌트:
- I/O 및 인터럽트 처리
- 키보드와 화면
- 파일 입출력(있는 경우)
- 루틴 편집
- 명령줄
- 프로그램 편집 및 저장
- 실행 루틴
- 해석 및 해석
- 산술 패키지
- 메모리 관리
- 기호 테이블(있는 경우)
- 가비지 컬렉션(있는 경우)
코딩
초기 마이크로컴퓨터에는 개발 도구가 부족했고 프로그래머들은 코드를 미니컴퓨터로 개발하거나 손으로 개발했습니다.예를 들어 Dick Whipple과 John Arnold는 [59]옥탈을 사용하여 기계어로 Tiny BASIC Extended를 직접 작성했습니다.Robert Uiterwyk는 SWTPC(6800 시스템)용 마이크로 베이직(MICRO BASIC)을 법률용 [60]패드에 수기하였습니다.Steve Wozniak은 이 코드를 Integer BASIC에 수작업으로 작성하여 어셈블러 코드 명령을 기계 코드와 동등한 것으로 변환한 후 결과를 자신의 [61]컴퓨터에 업로드했습니다.(이 때문에 프로그램을 변경하는 것은 매우 어려웠고 Wozniak은 스티브 잡스가 Microsoft에서 BASIC을 라이선스할 만큼 빠르게 수정할 수 없었습니다.)[62]
게이츠와 앨런은 통역사를 개발하고 테스트할 알테어 시스템이 없었다.그러나 앨런은 PDP-10 시분할 컴퓨터에서 실행되는 이전 벤처인 Traf-O-Data를 위해 Intel 8008 에뮬레이터를 작성했다.Allen은 Altair 프로그래머 가이드를 기반으로 이 에뮬레이터를 채택하여 하버드 PDP-10에서 [63]인터프리터를 개발하고 테스트했습니다.하버드가 이 시스템의 사용을 중단했을 때 게이츠와 앨런은 기본 프로그램 디버깅을 완료하기 위해 보스턴의 시분할 서비스에서 컴퓨터 시간을 벌었다.게이츠는 1976년 애호가들에게 보낸 공개 서한에서 소프트웨어 개발 첫 해의 컴퓨터 시간은 4만 [64]달러였다고 주장했다.
앨런이 기계어로 핸드코드를 할 수 없다는 건 아니야통역사를 시연하기 위해 앨버커키 공항으로 최종 접근하던 중 앨런은 테이프를 기억하기 위해 부트스트랩 프로그램을 작성하는 것을 잊었다는 것을 깨달았다.8080 기계어로 쓴 앨런은 비행기가 착륙하기 전에 프로그램을 마쳤다.Altair에 프로그램을 로드하고 시스템 메모리 크기를 묻는 프롬프트를 보고 나서야 인터프리터가 Altair [65][66]하드웨어에서 작동한다는 것을 알 수 있었습니다.
Tiny BASIC의 많은 버전 중 가장 인기 있는 것은 Palo Alto Tiny BASIC, 줄여서 PATB입니다. PATB는 1976년 5월 Dobbs 박사의 Dobs 판에서 처음 등장했는데, 이것은 비표준적인 니모닉을 가진 커스텀 어셈블러 언어로 쓰여졌습니다.Li-Chen Wang은 그의 통역사를 타임셰어 시스템으로 코드화했다.
조립품 사용의 예외 중 하나는 Burroughs 대형 시스템용 [67]Paisley XBASIC 인터프리터에 ALGOL 60을 사용한 것입니다.또 다른 예외이자 입력 프로그램은 Forth의 Lennart Benschop에 의해 쓰여지고 네덜란드 Forth 잡지 Vijgeblad에 게재된 Classic BASIC이다(호 번호 42, 1993).[68]
인터프리터의 소스 코드는 (Tiny BASIC과 마찬가지로) 오픈 소스이거나 나중에 저자에 의해 출판된 경우가 많았다.Atari BASIC의 완전한 주석 소스 코드와 설계 사양은 [69]1983년에 The Atari BASIC 소스 북으로 출판되었습니다.
가상 머신
일부 BASIC 인터프리터는 네이티브 시스템 언어 위에 추상화 및 일관성 계층을 추가하기 위해 가상 시스템의 중간 표현으로 코딩되었습니다.
| BAS의 방언IC | 가상 머신 언어 | 네이티브 머신 |
|---|---|---|
| 작은 BASIC | TBIL(Tiny Basic Intermediate Language) | 6800 |
| 니블 | 중간 언어(IL) | SC/MP |
| TI 베이직 | 그래픽스 프로그래밍 언어(GPL) | TMS9900 |
가상 머신은 BASIC-PLUS와 같은 컴파일 및 이동 시스템에서 사용되었지만 이는 [70]BASIC 코드를 실행하기 위한 것일 뿐 구문 분석에는 사용되지 않았습니다.이와는 대조적으로 Tiny BASIC은 BASIC 문을 해석 및 실행(인터프리터)하는 가상 머신으로 구현되도록 설계되어 있습니다.이러한 구현에서는 Tiny BASIC 인터프리터 자체가 가상 머신 [71]인터프리터 상에서 실행됩니다.전체 인터프리터 프로그램의 길이는 32개의 [72]명령으로 구성된 120개의 가상 시스템 작업에 불과했습니다.따라서 메모리 용량과 구현 노력을 절약한 가상 머신의 선택방법은 BASIC 프로그램의 실행속도가 다소 느리지만 선택할 수 있습니다.(발췌 및 샘플 명령어는 "Tiny BASIC: 가상 머신에서의 구현" 참조).Tiny BASIC은 가상 머신을 사용하는 것을 목적으로 설계되었지만, 모든 구현에서 가상 머신을 사용하는 것은 아닙니다.Tiny BASIC Extended, 6800 Tiny [73]BASIC 및 NIBL을 포함하는 구현도 있습니다.
TI-99의 경우,[74] TI-BASIC은 GPL이라는 언어를 사용하는 가상 머신을 설계했습니다.(TI-BASIC의 퍼포먼스가 느린 것은 널리 비난받았지만, 문제의 일부는 가상 머신이 그래픽스 ROM에 저장되어 있어 8비트 인터페이스가 느린 것이었습니다.)[75]
Apple II ROM에 대한 오해로 인해 일부에서는 Integer BASIC이 가상 머신을 사용했다고 믿게 되었습니다.SWEET16은 단순한 16비트 가상 머신 내에서 실행되는 바이트 코드를 기반으로 하기 때문에 간접적인 16비트 포인터와 16비트 연산 함수를 통해 메모리를 처리할 수 있습니다.기본 다중 명령 8비트 6502 [76]코드로 변환할 필요가 없습니다.그러나 나중에 회선 번호 재지정 [77]루틴과 같은 여러 유틸리티를 구현하기 위해 사용되었지만 핵심 BASIC 코드에 의해 SWEET16이 사용되지 않았습니다.
프로그램 편집 및 저장
프로그램 편집
그 시대의 대부분의 BASIC 구현은 언어 통역 및 라인 에디터 역할을 모두 했습니다.BASIC이 실행 중일 때> 명령 프롬프트가 표시되어 사용자가 [78]문을 입력할 수 있습니다.이것을 「다이렉트 모드」라고 부릅니다.기동시에, BASIC 인터프리터는 디폴트로 다이렉트모드로 되어 있습니다.
선두 번호와 함께 입력된 문장은 [79]"실행 지연"을 위해 프로그램 스토리지에 입력됩니다. 새 행으로 입력하거나 이전에 [80]같은 번호를 사용했을 수 있는 문장과 대체됩니다.행번호 없이 입력된 문은 명령어라고 불리며 즉시 실행됩니다.문이 없는 라인 번호(즉, 캐리지 리턴)는 이전에 저장된 라인을 삭제했습니다.
프로그램이 메모리에 있고 사용자가 메모리에 입력한 경우RUN명령어를 실행하면 시스템이 "syslog 모드"가 됩니다.이 모드에서는 포인터가 프로그램의 첫 번째 행(예를 들어 10행)을 가리키도록 설정됩니다.그런 다음 스토어에서 해당 행의 원본 텍스트가 검색되고 사용자가 직접 모드에서 입력한 것처럼 실행됩니다.그런 다음 포인터가 다음 행으로 이동하고 프로세스가 계속됩니다.
다른 구현에서는 다른 프로그램 편집 기능을 제공했습니다.Altair BASIC 8K는EDIT명령어를 사용하여 한 줄에 대해 편집 모드로 전환합니다.Integer BASIC, 또한AUTO다음과 같이 지정된 시작 번호의 행 번호를 자동으로 입력하기 위한 명령어AUTO 100새로운 행마다 마지막 숫자에 10을 추가합니다. AUTO 300,5300행부터 5개씩 번호를 매기기 시작합니다.300, 305 등입니다.자동 번호 부여는 다음을 입력하여 해제되었습니다.MAN일부 인터프리터는 회선 번호 변경 명령 또는 유틸리티를 제공했습니다.[81]
행 토큰화 및 부호화
RAM을 절약하고 실행을 고속화하기 위해 모든 BASIC 인터프리터는 행의 ASCII 문자를 다른 표현으로 인코딩합니다.예를 들어, 행 번호는 바이트 또는 워드로 저장된 정수로 변환되어 키워드에 싱글바이트 토큰을 할당할 수 있습니다(예를 들어 저장).PRINTMS-BASIC)의 바이트 값 145로 지정합니다.이러한 표현은 다음 경우에 다시 읽을 수 있는 텍스트로 변환됩니다.LIST프로그램을 입력한다.
| BAS의 방언IC | 회선 번호 | 키워드 | 수치 상수 | 변수 이름 |
|---|---|---|---|---|
| 작은 BASIC | 네. | 아니요. | 아니요. | 아니요. |
| 알테어 BASIC | 네. | 네. | 아니요. | 아니요. |
| 정수 BASIC | 네. | 네. | 네. | 아니요. |
| 아타리 BASIC | 네. | 네. | 네. | 네. |
약어
토큰화 대신 RAM을 절약하기 위해 Extended Tiny BASIC,[82] Denver Tiny[83] BASIC 및 MINOL[84] truncated 키워드와 같은 초기 Tiny BASIC 구현:PR위해서PRINT,IN위해서INPUT,RET위해서RETURN.전통적인 완전한 키워드는 받아들여지지 않았습니다.
반면 Palo Alto Tiny BASIC은 기존 키워드를 받아들였지만 임의의 키워드를 최소 고유 문자열로 줄여서 사용할 수 있었습니다.예를 들어.PRINT입력할 수 있습니다.P.,비록 ~일지라도PR.그리고 다른 변형들도 효과가 있었다.이 시스템은 PATB를 사용한 TRS-80의 Level I BASIC에서 유지되었으며, Atari BASIC과 다양한 샤프 포켓 컴퓨터의 [85]BASIC에서도 볼 수 있었습니다.
약어를 확장하기 위해 Atari BASIC 토큰라이저는 예약된 단어 목록을 검색하여 제공된 부분과 일치하는 첫 번째 단어를 찾습니다.보다 일반적으로 사용되는 명령어는 예약된 단어 목록에서 먼저 발생합니다.REM처음에 (라고 입력할 수 있습니다).). 프로그램이 나중에 실행되면LISTed는 보통 전체 단어를 적습니다.MS BASIC도 허용?의 줄임말로서PRINT다만, 리스트 할 때는 전개해, 동의어가 아닌 생략형으로 취급합니다.
토큰화
대부분의 BASIC 인터프리터는 원본 텍스트 형식에서 다양한 플랫폼 고유 형식으로 적어도 일부 변환을 수행합니다.Tiny BASIC은 단순한 끝에 있었습니다.그것은 10진수 형식에서 2진수로만 회선 번호를 변환했습니다.예를 들어, 행 번호 "100"은 64달러라는 단일 바이트 값이 되어 메모리에 저장하기에 더 작을 뿐만 아니라 기계 코드에서도 더 쉽게 검색할 수 있습니다(Tiny BASIC의 일부 설계에서는 1에서 254 또는 255 사이의 행 번호만 허용되지만 대부분은 더블 바이트 값과 최소 1에서 999까지의 행 번호를 사용했습니다).줄의 나머지 부분은 원래의 텍스트 [86]형식으로 남겨졌다.실제로 Dennis Allison은 메모리 제약을 고려할 때 토큰화를 구현하려면 [87]절약되는 것보다 더 많은 코드가 필요하다고 주장했습니다.
MS-BASIC은 조금 더 나아가 회선번호를 2바이트 값으로 변환하고 키워드도 변환합니다.FOR또는PRINT를 단일 바이트 값인 "syslog"[88]로 변환합니다.토큰 값에는 런타임에 쉽게 구분할 수 있도록 높은 비트가 설정되어 있습니다.회선상의 다른 모든 것은 원래의 포맷으로 남았습니다.예를 들어 다음과 같습니다.
10 for I = 1 to 10
다음과 같이 토큰화됩니다.
$64$81 I$B211$A410
주의: 이 간격은FOR그리고.I는 토큰화된 행에 남습니다.변수명과 상수는 토큰화되지 않습니다.이 토큰화를 수행한 코드("chunker"라고 함)는 토큰으로 인식되지 않는 모든 것을 출력에 복사하여 공간을 있는 그대로 미리 구분합니다.즉,PRINTA2바이트로 저장되었지만,PRINT A 는 3바이트로 저장되었으며 공간을 제거하는 것이 메모리 [89]사용을 개선하는 일반적인 방법입니다.Sinclair BASIC은 이를 약간 수정하여 저장된 코드에서 공백을 제거하고 코드에 삽입하여LIST그렇게 해서PRINTA로서 나타나다PRINT A메모리의 여분의 바이트를 차지하지 않습니다.
반대로 Integer BASIC은 회선을 변환합니다.10 GOTO 100바로 읽고 실행할 수 있는 토큰으로 완전히 변환됩니다.MS-BASIC에서는 이 라인에 의해$64 $89 100실행 시 "100"이 발생할 때마다 16비트 형식으로 변환되어야 합니다.이와는 대조적으로 Integer BASIC은 숫자 변수도 토큰화하여 이러한 변환을 피하고 실행 속도를 높였습니다.결과 2바이트 값이 뒤에 숫자를 나타내는 프리픽스바이트와 함께 토큰화된 코드에 삽입되었습니다.Prefix는 다음 값 사이의 값입니다.$B0 및 $B9. 원래 값의 첫 번째 소수 자릿수가 되는 값의 마지막 니블입니다.대신 'HELLO WORLD'와 같은 문자열 리터럴은 각 문자의 높은 비트를 설정하여 부호화되었습니다.A$C1로 저장되었습니다.변수 이름은 동일한 방식으로 변환되며, 문자는 하이비트가 켜지도록 인코딩되어 있으며 이름 내의 숫자는 대응하는 $B0 ~$B9로 나타나 있습니다.따라서 변수는A5$C1B5로 부호화됩니다([90]토큰으로 환원되지 않음).그 밖에도 수많은 최적화가 있었습니다.Microsoft BASIC 에는 키워드에 대한 토큰이1개 있습니다.PRINT, Integer BASIC 에는 3개의 토큰이 있습니다.하나는 키워드 뒤에 인수가 없는 경우, 이제1개는 산술식이 있는 경우, 이제1개는 문자열 [91]리터럴이 이어지는 경우입니다.
또한 Atari BASIC의 토큰라이저는 입력 또는 변경 시 행 전체를 해석합니다.숫자 상수는 48비트 내부 형식으로 구문 분석된 후 해당 형식으로 행에 배치되며 문자열은 원래 형식 그대로이지만 길이를 나타내는 바이트가 앞에 붙습니다.변수는 실행 시 대신 발생 시 저장 공간을 확보하며, 이름은 메모리의 저장 위치에 대한 포인터로 대체됩니다.Shepardson은 이 조기 토큰화 개념을 "사전 컴파일 인터프리터"라고 불렀습니다.구문 오류 문장은 실제로 저장할 수 없으며 사용자는 즉시 [92]수정하라는 메시지를 받았습니다.
키보드의 토큰화
Sinclair 시스템과 같은 일부 인터프리터는 기본적으로 사용자가 예약된 단어를 입력하기 위한 특수 키 스트로크를 제공함으로써 토큰화를 수행하도록 했습니다.가장 일반적인 명령어에는 1개의 키 입력만 필요합니다(예를 들어 pressing only).P Spectrum의 회선 선두에서 완전한 명령어가 생성됩니다.PRINT. 빈도가 낮은 명령어에는 보다 복잡한 키 [93]시퀀스가 필요합니다.모든 행이 키워드로 시작되므로LET는선택사항이아닙니다.키워드가 입력되면 시스템은 텍스트의 문자별 수용으로 돌아갑니다.이 접근법의 장점 중 하나는 토큰라이저가 문자열을 키워드와 혼동할 수 없다는 것입니다.예를 들어 변수 이름을 지정할 수 있습니다.PRINT그리고 그 가치를 출력합니다.PRINT PRINT.
많은 "포켓 컴퓨터"는 마찬가지로 1개의 키 스트로크(다양한 종류의 시프트 키 앞에 있는 경우도 있음)를 사용하여 EXP, SQR, IF, 또는 샤프 포켓 컴퓨터 문자 세트나 TI-BASIC 등의 PEK 키워드 전체를 나타내는1 바이트(키워드 토큰)를 생성합니다.Bally Astrocade의 BASIC 확장에도 이 기능이 사용됩니다.
회선 관리
| 범위 | 사투리 |
|---|---|
| 1~254 | 미노 |
| 1~255 | 작은 베이직 디자인 노트 |
| 2 ~ 255 | 덴버 타이니 베이직 |
| 0 ~ 999 | UIUC 베이직 |
| 1 ~ 2045 | DEC BASIC-8 |
| 0 ~ 32767 | LLL 베이직, NIBL |
| 1~32767 | Apple I BASIC, Level I BASIC, Palo Alto Tiny BASIC |
| 1~65535 | Altair 4K BASIC, MICRO BASIC 1.3, 6800 Tiny BASIC, Tiny BASIC 확장 |
| 1~99999 | 다트머스 바스IC |
| 1~99999 | 셀바루 |
유효한 행 번호는 실장마다 다르지만, 통상은 1 ~32767이었습니다.
BASIC 인터프리터가 사용하는 메모리의 대부분은 프로그램 목록 자체를 저장하는 것이었습니다.번호가 매겨진 문은 선형 컬렉션으로 구현된 스파스 배열에 순차적으로 저장되었습니다(기술적으로는 행 번호가 여러 번 발생하지 않으므로 목록이 아닙니다).
많은 Tiny BASIC 실장에서는 다음과 같은 행이 저장되어 있습니다.
- 회선번호에 상당하는 바이너리(1바이트 또는 2바이트, 지원되는 유효한 회선번호의 범위에 따라 다름)
- ASCII 소스문(가변 길이)
- 캐리지 리턴(1바이트, 13으로 설정)
Altair BASIC에서 시작하는 Microsoft BASIC은 다음과 [94]같은 행을 저장했습니다.
- 다음 행으로의 포인터(2바이트)
- 라인 번호에 상당하는 바이너리(2바이트, 부호 없음)
- 토큰화된 소스 문(변수 길이)
- Null(1바이트, 0으로 설정)
LLL [95]베이직:
- 회선 번호에 상당하는 바이너리(2바이트)
- 포인터를 다음 줄에 전달(2바이트)
- ASCII 소스 문의 길이(1바이트)
- ASCII 소스문(가변 길이)
행의 최대 길이는, Palo Alto Tiny BASIC 의 64 문자(행 번호의 10 진표기 포함), Atari BASIC 의 120 문자, Integer [96]BASIC 의 128 문자, 및 MS-BASIC 의 255 문자(행 번호 제외)로 다양했습니다.
통역사는 프로그램을 한 번에 한 줄씩 검색하여 각 줄 번호를 봅니다.새로운 회선 번호보다 작은 경우는, 새로운 회선에 필요한 공간을 확보하기 위해서, 이후의 회선은 메모리내에서 이동됩니다.같은 행 번호이며 길이가 동일하지 않은 경우 후속 행은 앞으로 또는 [97]뒤로 이동해야 합니다(순차 순서는 항상 메모리 내에서 유지되므로 링크 리스트는 아닙니다).
Tiny BASIC 에서는, 이러한 검색에서는, 행내의 모든 바이트를 체크할 필요가 있었습니다.포인터 포인터는 캐리지 리턴이 발생할 때까지 몇 번이고 증가해, 다음 행보다 앞에 있는 바이트를 찾습니다.반면 Altair BASIC과 LLL BASIC에서는 포인터가 다음 시퀀셜 행의 선두로 설정됩니다.이것은 훨씬 빨랐지만, 1행당 2바이트가 필요합니다.Tiny Basic 프로그램이 4KB 이하로 추정된 것을 감안하면 이는 메모리 사용을 최소화하기 위해 성능을 트레이드오프한다는 Tiny Basic의 일반적인 설계 이념과 일치한다.
사용자가 입력했을 때LIST시스템은 이러한 방법 중 하나를 사용하여 행 배열 위를 루프하고 행 번호를 10진 형식으로 다시 변환한 다음 행의 나머지 텍스트를 인쇄하여 토큰 또는 기타 부호화된 표현을 디코딩합니다.
개발자들은 BASIC에 구조화된 프로그래밍 구조를 추가하면서 행 번호의 필요성을 완전히 배제하고 텍스트 편집기와 이후 통합 개발 환경을 추가했습니다.
변수 및 데이터 유형
변수 이름
Dartmouth BASIC 및 HP-BASIC은 변수 이름을 최대 2자로 제한합니다(단일 문자 또는 문자 뒤에 한 자리 숫자(예: A ~ Z9).MS-BASIC은 문자 이름 뒤에 옵션 문자 또는 숫자(예: A에서 ZZ)를 사용할 수 있도록 허용했지만 후속 문자를 무시했습니다. 따라서 변수 "LOSS"와 "LOAN"이 같은 것으로 취급되는 프로그램을 실수로 작성할 수 있습니다. "LOAN"에 값을 할당하면 "LOSS"로 의도된 값을 자동으로 덮어씁니다.
Integer BASIC은 예약된 [98]단어를 포함하지 않는 한 모든 길이 변수 이름(예: SUM, GAMEPOINTS, PLAYER2)을 지원하는 데 특이했습니다.많은 초기 BASIC에서는 키워드를 변수에 사용할 수 없었습니다. "SCORE"는 "SC" 또는 "E"로 해석됩니다. 여기서 OR은 키워드입니다.
문자열 변수는 보통 이름에 $를 붙임으로써 BASIC의 많은 마이크로컴퓨터 방언에서 구별되며, 값은 종종 "큰따옴표"로 구분되어 문자열로 식별됩니다.이후 구현에서는 변수 유형을 지정하기 위해 다른 구두점을 사용합니다.정수는 A%, 단정밀은 A!, 이중정밀은 A#입니다.
배열과 (일부 구현에서는) 문자열을 제외하고 Pascal 및 기타 구조화된 프로그래밍 언어와는 달리 BASIC은 참조되기 전에 변수를 선언할 필요가 없습니다.일반적으로 값은 0(적절한 정밀도) 또는 늘 문자열로 기본 설정됩니다.
기호 테이블
Tiny BASIC은 26개의 단일 문자 변수만 사용했기 때문에 문자의 ASCII 값을 기반으로 한 수식을 인덱스로 사용하여 변수 이름을 저장하지 않고 배열로 저장할 수 있었습니다.Palo Alto Tiny BASIC은 한 걸음 더 나아갔습니다.변수 '2바이트 값은 프로그램 내의 RAM에 있습니다.바이트 수는 130바이트(ASCII 65, 'A', 곱하기 2), 181바이트(ASCII 90, 'Z', 2바이트, 2바이트에 1바이트)[85]입니다.
대부분의 BASIC은 26개 이상의 변수를 포함할 수 있는 기능을 제공했기 때문에 사용된 변수만을 위한 스토리지 용량을 확보할 수 있는 기호 테이블이 필요했습니다.
LLL BASIC에서는 기호 테이블의 각 항목이 다음과 [99]같이 저장됩니다.
- 변수 이름(바이트 1: ASCII 문자, 바이트 2: 0-9 ASCII 또는 바이너리 0)
- 포워드 포인터(2바이트)
- 값(요소당 4바이트, 스칼라 변수의 경우 1개, 배열의 경우 DIMensioned와 같은 수의 요소)
UIUC BASIC은 대부분의 BASIC 인터프리터와 달리 해시함수가 있어 변수/함수/어레이 이름의 문자로 해시하고 거기에서 선형 검색을 수행하였다.UIUC BASIC에서 기호 테이블 항목은 다음과 같습니다.[58]
- 플래그(비트 0: 사용 중인 항목, 비트 6: 사용자 정의 함수, 비트 7: 배열)
- 변수 이름(바이트 1: ASCII 문자, 바이트: 0-9 ASCII, " 또는 "(") 또는 함수 이름(바이트 1: ASCII 문자 또는 토큰 154)
FN; ASCII 문자) - 값(5바이트):
- 스칼라 부동 소수점 값
- 어레이 정의(마지막 3바이트: 첫 번째, 두 번째, 세 번째 치수의 상위 치수, 모두 0에서 시작하는 것으로 가정)
- 사용자 함수(함수 주소가 포함된 첫 번째 2바이트. 바이트 3은 함수 정의에서 더미 변수 파라미터에 대한 기호 테이블 변위).
Atari BASIC에서는 일련의 포인터(주소)가 다양한 데이터를 나타내고 있습니다.변수명은 변수 이름 테이블(VNTP – 82, 8316)에 저장되며 그 값은 변수 값 테이블(VVTP – 86, 87을16 가리킴)에 저장됩니다.이 방법으로 변수 이름을 간접적으로 변환함으로써 변수에 대한 참조는 적절한 테이블 내의 엔트리를 처리하는 데 1바이트만 필요했습니다.문자열 변수에는 고유한 영역이 있습니다.
1개의 BBC BASIC 퍼포먼스 최적화에는 Microsoft BASIC과 같이 하나의 긴 리스트가 아닌 변수 검색에 여러 링크 리스트를 사용하는 것이 포함되어 있습니다.
메모리 관리
BASIC 인터프리터를 실행하기 위해 사용된 대부분의 시스템에서는 RAM 용량이 작기 때문에 현명한 메모리 관리 기술을 사용해야 했습니다.Altair BASIC은 사용자가 세션 중에 삼각함수를 사용하지 않을 경우 삼각함수를 위한 공간을 회수할 수 있도록 합니다.PATB는 가장 일반적인 서브루틴의 시작을 1바이트에서 사용하기 위해 프로그램 전면에 배치했습니다.RST3바이트가 아닌 8080 opcodeCALLopcode를 클릭합니다.LLL BASIC에서는 다른 변수가 명령어모드 또는 실행 [100]시에만 사용되는 경우 일부 변수가 동일한 메모리 위치를 차지했습니다.
비디오는 메모리 주소 지정이 가능한 경우가 많았고 특정 메모리 값으로 값을 조작함으로써 특정 난해한 기능을 사용할 수 있었습니다.예를 들어 주소 32~35는 Applesoft BASIC의 텍스트창 치수(그래픽창이 아닌)를 포함하고 있습니다.그POKE명령어 및PEEK (DEC 시스템-10[101] 모니터와 같은 기계 코드 모니터에서 추가됨) 기능은 다양한 [102]목적을 위해 직접 메모리 액세스를 제공했으며, 특히 입출력 주변기기 등 컴퓨터의 특정 기능을 제어하기 위해 메모리 매핑된 특수 하드웨어 레지스터를 수정하기 위해 사용되었습니다.메모리 맵은 PEEK 및 POKE에서 널리 사용되었으며, 가장 잘 알려진 메모리 맵 중 하나는 Ian Chadwick이 쓴 Mapping the Atari이다.
TRS-80 Model I/III에서 실행되는 Microsoft Interpreter 등의 일부 구현에서는 사용자가 인터프리터가 사용하는 메모리 양을 지정해야 했습니다.이는 메모리 영역을 인터프리터드 프로그램에서 호출할 수 있는 기계어 서브루틴 설치용으로 예약하여 실행 속도를 높이기 위함입니다.모델 I/II의 전원이 켜지면 "메모리 크기?"라는 메시지가 나타납니다.
수학
Integer BASIC은 이름에서 알 수 있듯이 산술 패키지의 기준으로 정수를 사용합니다.이것들은 내부에 16비트 번호의 리틀 엔디안(6502와 동일)으로 저장되었습니다.이것에 의해, -32767 ~32767 의 계산의 최대치가 허가됩니다.계산 결과 값이 이 범위를 벗어났습니다.[103]
대부분의 Tiny BASIC 인터프리터(및 Sinclair BASIC 4K)는 부동소수점 지원이 없는 정수만을 사용하여 수학을 지원했습니다.정수를 사용하면 당시의 대부분의 BASIC에서 볼 수 있는 32비트 또는 40비트 부동소수점 형식보다 훨씬 콤팩트한 16비트 형식으로 숫자를 저장할 수 있습니다.그러나 이는 범용 언어로서의 적용 가능성을 제한하였다.
Data General Business Basic 등의 Business Basic 구현도 정수형이지만 일반적으로는 32비트(2147,483,648 및 마이너스)와 트리플 정밀도(1.4x10^14)의 높은 정밀도로 구현됩니다.
다른 컴퓨터 번호 형식이 사용되기도 했습니다.예를 들어, MINOL Tiny BASIC은 부호 [84]없는 바이트만 지원했고, MICRO-BASIC은 이진 코드화된 10진수를 [104]사용했습니다.하지만 부동 소수점이 우세할 것이다.
부동 소수점
한 이야기는 부동 소수점이 왜 그렇게 중요하게 여겨졌는지를 요약하고 있다.TRS-80 모델 I의 오리지널 프로토타입은 Li-Chen Wang의 퍼블릭 도메인 버전인 Tiny BASIC을 실행했습니다.이를 위해 인터프리터에 필요한 메모리는 2KB에 불과했고, 초기 머신의 일반적인 4KB 메모리 레이아웃에 있는 사용자 프로그램에 평균 2KB의 빈 용량이 남아 있었습니다.탠디사의 당시 사장 찰스 탠디는 임원들에게 시연하는 동안 그의 급여를 입력하려 했으나 입력하지 못했다.이는 Tiny BASIC이 최대 32,767의 2바이트 부호 정수를 사용했기 때문입니다.그 결과 프로덕션 [105]버전의 부동 소수점 산술이 요구되었습니다.이로 인해 기존 16비트 정수 코드가 Tandy 직원 Steve Leininger에 [106]의해 32비트 단정도 부동소수점 숫자를 사용한 버전으로 대체되었습니다.
SCELBAL은 Wadsworth가 1975년에 발표한 8008용 머신 언어 프로그래밍에서 수치 계산을 위한 32비트(4바이트) 형식을 기반으로 한 부동소수점 루틴을 사용했습니다.수치 계산에는 23비트 가수, 1비트 기호, 7비트 지수 및 1비트 기호가 사용됩니다.이것들은 첫 번째 바이트에서 가장 낮은 유의 바이트로 역순으로 구성되었고, 이어서 중간 바이트와 가장 유의한 바이트로 높은 비트에 부호가 표시되었습니다.그 지수는 맨 마지막에 왔고, 다시 한 번 [107]높은 비트에 부호를 넣었다.설명서에는 진입점 및 사용 [108]참고 사항을 포함한 전체 산술 패키지에 대한 잘 문서화된 어셈블리 코드가 나와 있습니다.
컨설턴트는 일반적으로 메인프레임을 특징짓는 과학적 및 상업적 애플리케이션을 위해 잘 연구되고 개발된 전문 분야인 부동소수점 계산을 담당하게 되었습니다.Allen과 Gates가 Altair BASIC을 개발하고 있을 때, 하버드 대학의 동료 학생 Monte Davidoff는 정수 산술에서 바꾸도록 설득했다.그들은 여전히 4KB 메모리 제한 내에 들어갈 수 있는 부동소수점 패키지를 작성하기 위해 Davidoff를 고용했습니다.스티브 워즈니악 로이 랭킨 스탠포드 대학의 선험적 기능 군수, LOG10, 미국을 구현하기 위해;[109] 하지만 워즈니악은 정수 베이직. 로렌스 리버모어 연구소 베이직에 부동 소수 점 지원 추가하는 것을 결코 끝내지 않았지만 대학 본 아이다 호에서 존 디킨슨, 제리 바버, 그리고 존 Teeter에 의해 개발된, 데이비드 미드, Hal브랜드 프랭크가 바뀌었다올크부동소수점 [110]지원을 위해 en을 입력합니다.UIUC BASIC의 경우 Datapoint 2200 부동소수점 패키지가 [111]라이센스되었습니다.
이와는 대조적으로, 시분할 시스템은 종종 하드웨어에 의존했습니다.예를 들어, GE-235는 부동소수점 및 배정밀 [112][113]계산을 위한 "보조 연산 장치"를 갖추고 있기 때문에 다트머스 베이직의 첫 번째 버전을 구현하기 위해 선택되었습니다.
초기 인터프리터는 IEEE 754 단정도 바이너리 부동소수점 형식과 유사한 32비트 형식을 사용했습니다.이 형식은 다음과 같습니다.
다음 형식으로 저장된 값 0.15625를 다음에 나타냅니다.
이 시대에는 32비트 포맷이 일반적이었습니다만, MOS 6502 용 Microsoft BASIC 이후 버전에서는 일반적으로 [114]정밀도를 높이기 위해 40비트(5바이트) 포맷을 채택했습니다.
연산자 및 함수
일반적으로 포함된 Infix 연산자+(표준),-(의견),*(곱셈),/(나눗셈), 및 다음 값을 사용하는 지수^성격.상대 운영에는 표준적인 작업 세트가 포함되어 있습니다.=,>,<,>=,<=및 "같지 않음"에 대해서도 마찬가지입니다.<>또는 HP-TSB에서 영감을 얻은#.[115] 바이너리 연산자(예:AND,OR그리고.NOT모든 구현에 포함된 것은 아니며, 부울 대수를 실행한 것도 있고 실행하지 않은 것도 있습니다.
Dartmouth BASIC의 초판에는 다음과 같은 기능이 포함되어 있습니다.ABS(절대값),ATN(아크탄젠트),COS(코사인),EXP(e를 거듭제곱한다),INT(정수를 반환하는 소수점 값을 입력합니다),LOG(106m),RND(고란수 발생기),SIN(표준),SQR(제곱근) 및TAN( ( ( ) 。또,DEF FN1행 함수를 선언하는 스테이트먼트(그 후 참조됨)FNA(),FNB(),기타.
그RND구현은 다양했지만 기능은 초기 BASIC에서 지원되는 가장 광범위한 기능이었다.
- 다트머스
RND는 파라미터를 무시하고 항상 0과 1 사이의 새로운 의사난수 번호를 반환했습니다. - Altair BASIC 이후의 Microsoft BASIC에서는 다음 파라미터의 기호가 사용되었습니다.RND(X)의 경우 "X<0은 X를 사용하여 새로운 난수 시퀀스를 시작합니다.같은 X를 사용하여 RND를 호출하면 같은 난수 시퀀스가 시작됩니다.X=0은 마지막으로 생성된 [116]난수를 제공합니다."
- 10진수를 반환할 수 없는 경우 정수만의 BASIC은 파라미터 값을 대신 사용합니다.일반적으로 랜덤화의 상한을 지정합니다.예를 들어 Integer BASIC 자체에서는
RND(6)+1다이롤을 시뮬레이션하여 1~6의 값을 반환합니다. - 이와는 대조적으로 일부 TRS-80 BASIC에서는 파라미터가 반환 가능한 상한이었습니다.예를 들어 다음과 같습니다.
RND(6)1 ~ 6의 값을 반환하고,RND(1)항상 [117]1을 반환합니다.
어레이
Dartmouth BASIC의 두 번째 버전은 행렬과 행렬 연산을 지원하며, 일련의 연립 선형 대수 방정식을 푸는 데 유용합니다.MAT할당, 덧셈, 곱셈(호환 행렬 유형의) 및 행렬식 평가와 같은 행렬 연산이 지원되었습니다.
이와는 대조적으로 Tiny BASIC은 초기 마이크로컴퓨터에서 사용할 수 있는 메인 메모리(종종 4KB)가 제한되어 인터프리터와 BASIC 프로그램을 모두 포함해야 했기 때문에 어레이조차 없었습니다.Palo Alto Tiny BASIC은 단일 가변 길이 정수 배열을 추가했습니다. 이 정수 배열의 크기는 치수가 필요 없지만 인터프리터나 프로그램 목록에 사용되지 않는 RAM을 사용했습니다.A().
SCELBAL은 여러 어레이를 지원하지만 이들 어레이를 합치면 최대 64개의 항목을 포함할 수 없습니다.싱글 디멘션의 정수 베이직 대응 어레이.사용 가능한 [118]메모리에 의해서만 사이즈가 제한됩니다.Tiny BASIC Extended는 최대 255 x 255의 2차원 어레이를 지원했습니다.Altair BASIC 4K는 어레이(1차원)만 지원했지만 8K 버전은 최대 34차원 [119]매트릭스를 지원했습니다.
많은 구현에서는 어레이의 치수를 지정할 필요가 없다는 Dartmouth BASIC 관행을 지원했습니다.이 경우 어레이는 11개의 요소(0~10)가 있다고 가정됩니다.{{{1}}}부작용으로 11 소켓 어레이가 생성됩니다.
어레이의 도프 벡터는 구현마다 다양했습니다.예를 들어 Altair BASIC 4K [94]배열의 도프 벡터:
- 변수 이름(2바이트)
- 어레이 요소의 크기(2바이트, 즉 요소 수의 4배, 상한에 1을 더한 크기
다음으로 어레이 자체의 값을 지정합니다.
- 요소 0 값(4바이트)
- 요소 1 값(4바이트)
- ...
- 요소 N 값(4바이트)
행렬을 지원하는 구현에서는 차원 수와 각 차원의 상한을 기록해야 했습니다.또한 일부 해석기는 하나의 데이터 유형(부동소수점 또는 정수)만을 가지고 있었기 때문에 도프 벡터는 단지 차원 수와 각 차원의 상한을 기록해야 했다.데이터 유형이 여러 개인 인터프리터는 배열의 데이터 유형을 기록해야 했습니다.
Microsoft 및 기타 BASIC은 매트릭스를 지원했지만 매트릭스 연산은 내장되지 않았지만 어레이 요소에 명시적으로 프로그래밍해야 했습니다.
줄들
오리지널 Dartmouth BASIC과 그 직계 후손의 일부 및 Tiny BASIC 구현에는 문자열 처리가 부족했습니다.HP와 DEC에 의해 개척된 두 개의 경쟁적인 문자열 처리 학파가 진화했지만, 다른 접근법은 나중에 나왔다.이를 위해서는 다양한 전략이 필요했습니다.
| BAS의 방언IC | 유형 | 서브스트링 |
|---|---|---|
| HP 시간 공유 BASIC | 고정 길이 | 슬라이스 |
| DEC 베이직 플러스 | 가변 길이 | 기능들 |
| 다트머스 베이직 제4판 | 가변 길이 | 어레이 인덱싱 |
| 작은 BASIC | 정수 배열 | 어레이 인덱싱 |
가장 간단한 문자열 처리에서는 HP Time-Shared BASIC을 복사하고 문자열 변수를 다음과 같이 정의해야 합니다.DIM사용하기 전에 안감해 놓으십시오.HP TSB의 문자열은 단일 다중 문자 객체가 아닌 최대 72자 배열로 취급됩니다.디폴트로는 메모리 내에서1개의 문자가 할당되어 있으며 긴 문자열이 필요한 경우 선언해야 합니다.예를 들어.DIM A$[10]는 최대 10글자를 포함할 [120]수 있는 문자열을 설정합니다.
문자열 내의 하위 문자열에는 "슬라이싱" 표기를 사용하여 액세스합니다.A$(L,R)또는A$[L,R]여기서 하위 문자열은 인덱스 L에서 지정된 왼쪽 끝 문자로 시작하여 인덱스 R에서 지정된 오른쪽 끝 문자로 이어집니다.또는A$[L]하위 문자열이 색인 L로 지정된 맨 왼쪽 문자로 시작하여 문자열의 끝까지 이어지는 형식입니다.TSB는 () 또는 []를 번갈아 사용할 수 있습니다.배열 및 하위 문자열 색인은 1로 시작합니다.
이는 다음과 같은 기능을 사용하는 DEC 패턴을 따르는 BASIC과 뚜렷한 대조를 보입니다.LEFT$(),MID$(),그리고.RIGHT$()서브스트링에 액세스 합니다.나중에 ANSI BASIC에 의해 채택된 HP의 표기법은 또한 ANSI BASIC의 수신처 측에서도 사용될 수 있습니다.LET또는INPUT기존 문자열 값의 일부를 수정하는 문(예:100 A$[3,5]="XYZ"또는120 B$[3]="CHANGE ALL BUT FIRST TWO CHARS"의 초기 실장에서는 실행할 수 없습니다.LEFT$/MID$/RIGHT$.
Dartmouth BASIC의 최신 버전에는 문자열 변수가 포함되어 있습니다.단, 이 명령어는 사용하지 않았습니다.LEFT$/MID$/RIGHT$스트링을 조작하기 위한 함수는 대신,CHANGE명령어를 사용하여 문자열을 동등한 ASCII 값으로 변환하거나 변환합니다.(나중에 DEC에 의해 그대로 채택되어 HP에 의해 채택되어 키워드가 로 변경되었습니다).CONVERT또한 단일 따옴표를 사용하여 숫자 상수를 ASCII 문자로 변환할 수 있습니다.따옴표를 사용하여 일부 문자열을 작성할 수 있습니다.[120]A$='23 '64 '49 "DEF"스트링 'ABCDEF'를 생성했습니다.CHR$()기능합니다.[120]Dartmouth BASIC 6 Edition 지원SEG$(용)MID$)와POS(용)INSTR).
Integer BASIC, North Star[121] BASIC 및 Atari[122] BASIC은 HP의 접근방식을 모방하여 문자열이 고유한 가변 길이 [123]유형인 Microsoft BASIC을 포함한 DEC에서 파생된 스타일과 대조되었습니다.
일부 Tiny BASIC 구현은 문자 코드를 저장하기 위해 사용할 수 있는 하나 이상의 사전 정의된 정수 배열을 지원했습니다. 단, 언어가 문자 코드를 입력 및 출력하는 기능을 가지고 있는 경우(예: Astro BASIC은KP그리고.TV(이 목적을 위해서)
가비지 컬렉션
문자열, 255최대 메모리의 고정된 양 관계 없이 문자 수가 그들 내에서 사용 사용합니다, 하지만 승자 가비지 수집, 자동 메모리 관리의 한 형태 메모리 문자열에 의해 점령된 지역을 되찾는 데 사용되는을 구현하기 위한 필요성을 피하려고 유리했던 memory[124]낭비한 것 같군은 없l.onger사용 중입니다.릴리스된 짧은 문자열은 다른 문자열 중간에 저장되므로 긴 문자열이 필요할 때 해당 메모리가 사용되지 않을 수 있습니다.
메모리가 한정되어 있고 프로세서가 느린 초기 마이크로컴퓨터에서는 BASIC 가비지 컬렉션은 프로그램 동작 중에 명백하게 랜덤하고 설명할 수 없는 일시정지를 일으킬 수 있습니다.Apple II 패밀리의 Applesoft BASIC과 같은 일부 BASIC 인터프리터는 높은 메모리를 향해 압축하기 위해 주소가 가장 높은 문자열 기술자를 반복적으로 스캔하여 O(n2) 성능을 얻었으며, 이로 인해 문자열 집약적인 프로그램 실행에 몇 분간의 일시 정지가 발생할 수 있습니다.Microsoft BASIC의 [125]다른 버전에서는 가비지 컬렉션이 느리기로 악명 높거나 고장났습니다.TRS-80 모델4의 TRSDOS/LS-DOS 6.x 등 인터럽트 기반의 백그라운드태스크를 지원했던 일부 운영체제에서는 BASIC 프로그램 실행 중 가비지 수집을 처리하기 위해 사용자가 비활성화된 기간(키 입력에서 비디오 화면 새로 고침 후 시간 간격 등)을 이용했습니다.
기타 기능
그래픽스 및 사운드
대부분의 BASIC 인터프리터는 그래픽과 사운드에 큰 차이가 있으며 마이크로컴퓨터마다 크게 다릅니다.Altair BASIC은 Tiny BASIC 구현과 마찬가지로 그래픽이나 사운드 명령어가 부족했고 Integer BASIC은 풍부한 세트를 제공했습니다.
TRS-80의 Level I BASIC은 가능한 한 최소한의 세트를 갖추고 있었습니다.CLS, CLear 화면용.SET(X,Y)디스플레이의 위치를 점등합니다.RESET(X,Y)그 결과 전원이 꺼졌습니다.POINT(X,Y)로케이션이 점등되어 있는 경우는 1, 점등되어 있지 않은 경우는 0이 반환됩니다.좌표는 임의의 표현식이 될 수 있으며 X축의 경우 0 ~ 127, Y축의 경우 0 ~ 47의 범위입니다.흑백 디스플레이만 [126]지원되었습니다.
반면 Integer BASIC은 컬러 그래픽스, 심플한 사운드, 게임 컨트롤러를 지원했습니다.그래픽스 모드가 켜져 있을 때GR와의 언외의 대화TEXT도면은 모달로 보통 색상을 변경하는 명령어를 발행함으로써 시작되며 의사변수를 설정함으로써 실행된다.[127]COLOR=12그림 색상은 12, 연두색으로 설정합니다.그럼 누구는 할 수 있다PLOT 10,10그 색깔의 [128]반점 하나를 만들어내려면 HLIN 0,39 AT 20화면에 걸쳐 있는 20행의 수평선을 그립니다.VLIN 5,15 AT 7열 7 아래로 [129]더 짧은 수직선을 그립니다. A=SCRN X,Y화면 색상을 [130][b]X,Y로 반환했습니다.
하드웨어 제조업체는 종종 반문자, 단순한 모양 및 특수 문자로 취급되는 아이콘에 대한 독점적 지원을 포함했습니다.예를 들어 ZX-81의 블록 그래픽과 Commodore International PETSCI 문자 집합의 ♠, ♣, ♦ 및 ♦ 카드 기호가 포함되었습니다.BASIC은 다음과 같은 기호를 생성할 수 있습니다.PRINT CHR$();.
Microsoft는 IBM BASIC에 많은 그래픽 명령어를 추가하였습니다.LINE,PSET(픽셀 SET),PRESET(픽셀 리셋),GET(화면의 직사각형을 배열에 저장합니다),PUT(저장된 직사각형 세그먼트를 정렬합니다),LOCATE(텍스트 커서를 이동하기 위해) 및DRAW로고와 같은 구문을 사용하여 도형을 스케치합니다.빌 게이츠와 닐 콘젠은 DONKE를 썼다.BAS 번들 게임으로 [131]인터프리터의 컬러 그래픽과 사운드를 시연합니다.
입력/출력
구현이 다른 분야는 미디어(카세트 및 플로피 디스크), 키보드 입력 및 게임 컨트롤러(있는 경우)를 다루는 키워드였습니다.
ROM 기반의 BASIC 인터프리터는 다른 어플리케이션에서 로딩하기 위한 셸로서 기능하는 경우가 많기 때문에 구현에서는 카세트 테이프와 관련된 명령어가 추가되었습니다(예:CLOAD그리고.CSAVE, 바이너리 디스크 파일(예:BLOAD,BSAVE,그리고.BRUN디스크상의 BASIC 프로그램(예:LOAD,SAVE,그리고.CATALOGBusiness BASIC 구현에서는 랜덤 액세스 파일용 명령어가 추가되었습니다.(ROM 기반의 BASIC 인터프리터도 운영체제로 사용하도록 설계 또는 의도된 것은 아니며 소형 마이크로컴퓨터에는 OS가 전혀 없었습니다.)[132]
Dartmouth BASIC은 프로그램을 일시 중지하지 않고 키보드로부터 입력을 받기 위한 명령어가 없었습니다.비디오 게임을 지원하기 위해 BASICs는 이를 위한 독점 명령어를 추가했습니다.INKEY$Microsoft BASIC의 함수입니다.키를 누르지 않았거나 1글자를 누르지 않았을 경우 빈 문자열을 반환합니다.KP(KeyPress의 경우)는 Astro BASIC 입력의 ASCII 값을 반환했습니다.
Palo Alto Tiny BASIC은 문자열이 부족했지만 사용자가 수학식을 입력할 수 있도록 허용했습니다.INPUT스테이트먼트; 변수 설정(예:Y=1; N=0사용자는 Yes/No 프롬프트에서 "Y" 또는 "1" 또는 "3*2-5"라고 대답할 수 있습니다.
일부 시스템은 게임 컨트롤러를 지원했습니다.Astro BASIC 지원JX()(지정된 조이스틱의 수평 위치),JY()(수직 위치 변경),KN()(표준 상태), 및TR()(트리거 상태).Integer BASIC은 게임 컨트롤러인 패들 컨트롤러를 지원했으며, 패들 컨트롤러는 하나의 커넥터에 두 개의 컨트롤러가 있습니다.컨트롤러의 위치는 다음 명령을 사용하여PDL함수, 컨트롤러 번호(0 또는 1)로 전달, 예를 들어A=PDL(0):PRINT A0 ~ [133][c]255 사이의 값을 반환합니다.
Integer BASIC에는 커스텀 입출력 명령어가 없고,DATA스테이트먼트 및 관련 정보READ프로그램에 데이터를 송수신하기 위해 입력/출력 기능을 선택한 카드슬롯으로 리다이렉트했습니다.PR#x그리고.IN#x출력 또는 입력(각각)을 번호부 슬롯으로 리다이렉트 합니다.이때부터 기존 방식을 사용하여 카드로 데이터를 전송할 수 있습니다.PRINT명령어 및 명령어 읽기INPUT소리를 내는 [130]건PEEK단순한 "삐삐"의 메모리 부족 위치 입력, -param36.[d]
구조화된 프로그래밍
구조화된 프로그래밍은 ALGOL 58과 ALGOL 60의 예를 통해 BASIC을 설계할 때 Kemeny와 Kurtz에게 알려졌지만, 그들은 else-statement, while-loop, repeat loop, 명명된 프로시저, 파라미터 전달 및 로컬 변수를 무시하고 for-loop만을 채택했습니다.그 결과, 그 이후의 방언들은 종종 구조화된 기술에 사용되는 표현에서 극적으로 달랐다.예를 들어.WHILE...WEND(Microsoft BASIC의 경우),WHILE...ENDWHILE(Turbo-Basic XL의 경우),DO...LOOP WHILE그리고 심지어WHILE(양쪽 모두 BASIC-PLUS).
Tiny BASIC 구현 중 NIBL(National Industrial Basic Language)만이 모든 종류의 루프 명령을 제공합니다.DO/UNTIL이는 Tiny BASIC의 발명가 Dennis Alison이 [136]BASIC의 상태를 공개적으로 한탄했음에도 불구하고 일어났다.[135]
BBC BASIC은 구조화된 BASIC 프로그래밍을 제공한 최초의 마이크로컴퓨터 인터프리터 중 하나이며, 그 이름은 다음과 같다.DEF PROC/DEF FN절차 및 기능,REPEAT UNTIL루프 및IF THEN ELSECOMAL에서 영감을 얻은 구조. 제2세대 BASIC: SBASIC(1976), BBC BASIC(1981), True BASIC(1983), Beta BASIC(1983), Quick BASIC(1985년) 및 AmigaBASIC(1986) - 주로 구조화 및 프로시저 지향 프로그래밍과 관련된 많은 기능을 언어에 도입했습니다.일반적으로 라인 번호는 언어에서 생략되고 라벨(GOTO의 경우) 및 절차로 대체되어 보다 쉽고 유연한 설계를 [137]장려합니다.반복을 지원하기 위한 키워드 및 구조 외에도 지역 변수를 사용한 선택 및 절차가 도입되었다.
다음 예는 Microsoft의 구조화된 BASIC의 세 번째 구현인 Microsoft QBASIC입니다(1984년 Macintosh BASIC, [138]1985년 Amiga BASIC에 이어).
REM QBASIC 예시 REM Forward 선언 - 메인코드가 콜할 수 있도록 합니다. 소스 코드 뒷부분에서 정의된 REM 서브루틴 선언하다 후보선수 Print Some Stars (스타카운트!) REM 메인 프로그램은 다음과 같습니다. 하다 입력 "별을 몇 개 원하십니까?(종료하려면 0) ", NumStars 불러 Print Some Stars(NumStars) 고리 하는 동안에 NumStars>0 끝. REM 서브루틴 정의 후보선수 Print Some Stars (스타카운트) 렘 이것. 절차. 사용하다 a 현지의 변수 불렀다 별 $ 별 $ = STRING$(스타카운트, "*") 인쇄하다 별 $ 끝. 후보선수 객체 지향
오브젝트 지향 프로그래밍의 초기 지원에서는 Visual Basic 및 PowerB 등의 다른 언어로 작성된 오브젝트만 재사용할 수 있었습니다.ASIC는 Windows 컴포넌트 오브젝트 모델을 지원했습니다.BASIC 인터프리터는 계속 진화하면서 메서드, 컨스트럭터, 동적 메모리 할당, 속성 및 임시 할당과 같은 객체 지향 기능에 대한 지원을 추가했습니다.
부속 어셈블리러
Integer BASIC ROM에는 어셈블리 언어 [90][139][140]프로그램을 만들고 디버깅하기 위한 기계 코드 모니터, "mini-assemblyler" 및 디스어셈블러도 포함되어 있습니다.
BBC BASIC의 독특한 기능 중 하나는 인라인 어셈블러로, 사용자는 6502와 나중에 Zilog Z80, NS32016 및 ARM용 어셈블리 언어 프로그램을 작성할 수 있습니다.어셈블러는 BASIC 인터프리터에 완전히 통합되어 변수를 공유했습니다.이러한 변수는 [와 ]문자 사이에 포함할 수 있으며 *SAVE 및 *LOAD를 통해 저장되며 CALL 또는 USR 명령을 통해 호출됩니다.이를 통해 개발자는 어셈블리 언어 코드뿐만 아니라 BASIC 코드도 작성할 수 있게 되어 코드 생성 기술을 사용할 수 있고 BASIC에서 간단한 컴파일러도 작성할 수 있게 되었습니다.
실행
디버깅
대부분의 BASIC과 마찬가지로 프로그램은RUN명령어는 일반적으로 다음과 같은 특정 회선 번호로 지정할 수 있습니다.RUN 300실행은 +(또는 TRS-80 등의 BREAK)C[142]를 사용하여 언제든지 중지하고 다음으로 재시작할 수 있습니다.[141]CONT입력(CON(Integer BASIC)[143]로 설정합니다.콘솔 사용자는 인터프리터 프로그램 고유의 기능(컴파일러와는 대조적으로 코드가 한번에 하나씩 실시간으로 처리됨)을 이용하여 PRINT 스테이트먼트를 사용하여 변수 데이터를 검사하고 이러한 데이터를 즉시 변경한 후 프로그램 실행을 재개할 수 있습니다.
스텝 바이 스텝의 실행에서는,TRON또는TRACE명령 프롬프트에서 명령을 사용하거나 프로그램 자체에 배치할 수 있습니다.이 기능을 켜면 프로그램이 방문한 각 회선의 회선 번호가 인쇄됩니다.기능을 다시 끌 수 있습니다.TROFF또는NOTRACE를 클릭합니다.[144]
TRS-80의 다양한 마크를 지원하는 Microsoft 인터프리터 등의 일부 구현에는 다음 명령어가 포함되어 있습니다.ON ERROR GOSUB그러면 특별한 오류 처리를 위해 프로그램 실행이 지정된 행 번호로 리디렉션됩니다.
대부분의 BASIC과 달리 Atari BASIC은 방금 입력된 프로그램 행을 스캔하여 구문 오류를 즉시 보고했습니다.에러가 발견되었을 경우는, 에러에 가까운 텍스트를 반전 비디오로 강조 표시해, 행을 다시 표시합니다.
Atari BASIC을 포함한 많은 인터프리터에서는 오류가 숫자 코드로 표시되고 설명서가 [145]인쇄됩니다.많은 MS-BASIC은 2글자 약어(SYNATS ERROR의 경우 SN)를 사용했습니다.Palo Alto Tiny BASIC 및 Level I BASIC은 구문 오류에 대해 "WHAT?"라는 세 가지 단어를 사용했으며, 존재하지 않는 회선에 대한 GOTO 등의 런타임 오류나 숫자 오버플로에 대해서는 "HOW?"라는 단어를 사용했으며 메모리 부족 문제에 대해서는 "Sorry"라는 단어를 사용했습니다.
해석
BASIC 언어에는 간단한 구문이 있지만, 수식은 그렇지 않습니다.따라서 괄호나 다른 수학적 연산자에 대한 다른 우선순위 규칙을 지원합니다.이러한 식을 지원하려면 재귀 강하 파서를 [146]구현해야 합니다.
이 파서는 다양한 방법으로 구현할 수 있습니다.
- 위에서 설명한 바와 같이 가상 머신으로서 많은 Tiny BASIC 구현에 사용됩니다.Tiny BASIC 이니셔티브의 가치는 파서의 구현을 지정하는 데 있었습니다.
- UIUC BASIC IUC에서와 같이 유한 상태 기계로서 [147]제어 테이블로 구현되었습니다.
- Palo Alto Tiny BASIC 및 Integer BASIC과 같이 코드로 직접 입력.Integer BASIC에서는 실행 시 인터프리터는 2개의 스택을 사용했습니다.하나는 스테이트먼트키워드용이고 이제1개는 파라미터 평가용입니다.각 스테이트먼트에는 두 가지 우선순위가 주어졌습니다.하나는 연산 순서를 제공하기 위한 일련의 수학적 연산과 같이 다단계 연산에서 발생해야 할 위치를 기술하는 것과 다른 하나는 괄호 공식의 내부 값을 계산하는 것과 같이 평가가 언제 발생해야 하는지를 제안하는 것입니다.변수가 발견되면 변수 이름이 구문 분석되고 기호 테이블에서 검색됩니다.찾을 수 없는 경우 목록 끝에 추가됩니다.변수 저장소의 주소(아마 새로 생성되었을 수도 있음)는 평가 [90]스택에 배치되었습니다.
성능
BASIC 인터프리터를 프로그래밍하기 위한 설계 결정의 범위는 종종 성능 차이를 통해 드러났습니다.
라인 관리 구현은 성능에 영향을 미치는 경우가 많으며 일반적으로 선형 검색을 사용합니다.각 행을 CR로 구분하면 GOTO 또는 GOSUB가 이후의 행으로 변환됩니다.이것은, 프로그램이 타겟 회선 번호를 찾기 위해서 모든 행에 걸쳐 반복할 필요가 있기 때문입니다.Atari BASIC과 같은 일부 구현에서는 각 행의 길이가 기록되고 행 번호 뒤에 저장되므로 프로그램은 다음 캐리지 리턴을 찾기 위해 행의 각 문자를 스캔할 필요가 없습니다.많은 실장에서는, 프로그램의 개시로부터 분기하는 회선 번호를 항상 검색합니다.MS-BASIC 은, 행선지 회선 번호가 큰 경우, 현재의 회선으로부터 검색합니다.피트만은 바이너리 [148]검색을 사용하기 위해 6800 Tiny BASIC에 패치를 추가했다.
정수 연산만으로 작업하면 속도가 크게 향상됩니다.당시 컴퓨터 벤치마크의 대부분은 작고 부동 소수점이 필요 없는 간단한 계산을 수행하는 경우가 많았기 때문에 Integer BASIC은 다른 대부분의 BASIC을 [e]압도했습니다.최초의 마이크로컴퓨터 벤치마크 중 하나인 Rug/Feldman 벤치마크에서 Integer BASIC은 같은 [150]머신에서 Applesoft BASIC보다 2배 이상 빨랐습니다.수학은 덜 중요했지만 어레이 액세스와 루프 성능이 우세했던 Byte Sheve에서 Integer BASIC은 166초, Applesoft는 [151]200초가 걸렸습니다.1983년에 처음 발행된 크리에이티브 컴퓨팅 벤치마크에는 나타나지 않았습니다.그때 Integer BASIC은 [152]디폴트로 제공되지 않게 되었습니다.다음의 테스트 시리즈는, 원래의 Rug/Feldman의 [150][149]양쪽의 기사로부터 취득한 것으로, 같은 플랫폼상의 MS로부터 파생된 BASIC에 상대적인 Integer의 퍼포먼스를 나타내고 있습니다.
| 시스템. | CPU | 기본의 | 테스트 1 | 테스트 2 | 테스트 3 | 테스트 4 | 테스트 5 | 테스트 6 | 테스트 7 |
|---|---|---|---|---|---|---|---|---|---|
| 애플 II | 6502(1MHz시) | 정수 BASIC | 1.3 | 3.1 | 7.2 | 7.2 | 8.8 | 18.5 | 28.0 |
| 애플 II | 6502(1MHz시) | 애플소프트 BASIC | 1.3 | 8.5 | 16.0 | 17.8 | 19.1 | 28.6 | 44.8 |
이론적으로 Atari BASIC은 Microsoft 패턴을 기반으로 한 현재의 BASIC보다 더 빨리 실행되어야 합니다.소스 코드를 입력할 때 소스 코드가 완전히 토큰화되므로 토큰화 및 해석 절차 전체가 이미 완료되어 있습니다.복잡한 수학적 연산도 실행할 준비가 되어 있으며 수치 상수는 이미 내부 48비트 형식으로 변환되어 있으며 변수 값은 검색할 필요 없이 주소로 검색됩니다.이러한 이론적 이점에도 불구하고, 실제로 Atari BASIC은 다른 가정용 컴퓨터 BASIC보다 속도가 느립니다.[153]실제로, 이것은 증명되지 않았다.Byte 매거진의 Sieve of Eratostenes와 David H가 작성한 Creative Computing 벤치마크 테스트의 두 가지 널리 사용되는 벤치마크입니다. 아타리는 성능 면에서 거의 최하위권이었고, CPU는 동일하지만 동작 속도는 어느 쪽이든 약 2배였지만, 현대의 Apple II나 Commodore [154]PET보다 훨씬 느렸습니다.Sinclair ZX81과 같은 비교적 느린 기계와 심지어 프로그램 가능한 [155]계산기에도 뒤처져 있었다.
그 언어의 저속의 대부분은 세 가지 [153]문제에서 비롯되었다.첫 번째는 부동 소수점 연산 루틴이 제대로 최적화되지 않았다는 것입니다.Ahl 벤치마크에서는 단일 지수 연산이 느린 곱셈 함수를 내부적으로 루프하는 것이 기계의 저조한 [153]표시의 많은 원인이었습니다.둘째, 내부 부동소수점 형식과 언어의 특정 부분에서 사용되는 16비트 정수 사이의 변환은 비교적 느렸습니다.내부적으로 이러한 정수는 다른 몇 가지 작업과 함께 행 번호 및 배열 인덱싱에 사용되었지만 토큰화된 프로그램의 숫자는 항상 BCD([156]Binary-Coded Decimal) 형식으로 저장되었습니다.예를 들면, 의 회선 번호에 이러한 어느쪽인가를 발견할 때마다,GOTO 100토큰화된 BCD 값은 정수로 변환해야 합니다.정수는 3500마이크로초까지 [157]걸릴 수 있습니다.다른 BASIC에서는, 다음의 행 번호 등, 정수일 가능성이 있는 번호의 변환을 특수 캐싱 하는 것으로써, 이 지연을 회피했습니다.GOTO, 특별한 ASCII-integer 코드로 전환하여 성능을 향상시킵니다.세 번째는 Atari BASIC이 브런치를 도입하고FOR루프를 실행합니다.GOTO또는GOSUB인터프리터는 프로그램 전체를 검색하여 필요한 [158]행 번호를 찾습니다.Microsoft에서 파생된 대부분의 BASIC에서 볼 수 있는 작은 개선점 중 하나는 타깃 회선번호를 현재 회선번호와 비교하여 큰 경우 그 시점부터 검색하거나 작은 경우 맨 위에서 시작하는 것입니다.아타리 [153]베이직에서는 이 개선이 누락되었습니다.다른 거의 모든 BASIC과는 달리 포인터를 Push로 이동시킵니다.FOR스택 상에 있기 때문에, 그것이 도달했을 때NEXT그것은 쉽게 돌아올 수 있다FORAtari BASIC이 대신 회선번호를 눌렀습니다.즉, 매번NEXT시스템이 모든 프로그램을 검색하여 해당 프로그램을 검색해야 했습니다.FOR그 결과, Atari BASIC 프로그램의 루프는 다른 [153]BASIC에 비해 큰 성능 손실을 일으킵니다.
「 」를 참조해 주세요.
메모들
- ^ Microsoft BASIC은 4KB 머신에서 사용자 프로그램 코드와 변수 값을 위해 780바이트의 빈 공간을 남겨두고 문자열 변수 및 기타 기능이 없는 컷다운 버전을 실행하고 있었습니다.
- ^ SCRN의 홀수 구문에 주의해 주십시오.SCRN은 값을 반환하기 때문에 기술적으로 함수이지만 다음과 같은 함수와 같은 구문은 사용하지 않습니다.
A=SCRN(X,Y). - ^ 매뉴얼에서는 실제 값의 범위는 0 ~255 [133]미만이라고 명시하지 않습니다.
- ^ 음수는 부호 있는 형식으로 저장되는 정수의 부작용이기 때문에 32767을 초과하는 메모리 위치는 [134]BASIC에서 음의 값으로 표시됩니다.
- ^ 빌 게이츠는 Integer BASIC을 [149]MS와 같은 "진짜" BASIC과 비교하는 것은 불공평하다고 말하며 이에 대해 불평했다.
레퍼런스
- ^ "IBM VS the World: That's How It Is". Computerworld. 5 December 1973.
- ^ "Hewlett-Packard 2100 Processor Description, 1972" (PDF). Retrieved 2020-08-18.
- ^ "Can we get a complete timeline on the IRIS Operating System for Data General Novas?". Retrieved 2020-08-05.
- ^ Savetz, Kevin (April 2013). "Dave Ahl and Betsy Ah" (Interview).
- ^ "Old Computers: HP-9830A". Retrieved 2020-08-18.
- ^ A BASIC Language Interpreter for the Intel 8008 Microprocessor. Department of Computer Science, University of Illinois at Urbana-Champaign (published 1974). June 1974.
- ^ "We have a BASIC". New Mexico Museum of Natural History and Science. Archived from the original on November 30, 2012. Retrieved April 18, 2007.
- ^ Fisk, Nathan (2009). Understanding Online Piracy. ABC-CLIO. p. 14. ISBN 9780313354748.
- ^ 헤르츠펠트 1985년
- ^ Pittman, Tom. "you had to pay $5 up front to get it…". www.ittybittycomputers.com. Retrieved June 14, 2017.
- ^ Arnold, Mark; Wadsworth, Nat (February 1976a). "SCELBAL - A Higher Level Language for 8008/8080 Systems". Dr. Dobb's Journal. Vol. 1. pp. 30–34.
- ^ "Part 1 Of LLL 8080 BASIC Interpreter" (PDF).
- ^ 로렌조 2017, 페이지 118
- ^ Curran, Lawrence J.; Shuford, Richard S. (November 1983). "IBM's Estridge". BYTE. pp. 88–97. Retrieved 19 March 2016.
- ^ 윌킨슨 1982, 페이지 iv-v
- ^ 크롬코 1978년
- ^ 윌킨슨 1982 페이지 9
- ^ 윌킨슨 1982년, 대
- ^ "Video processor for Acorn/BBC computer". BBC News. Retrieved 30 November 2010.
- ^ "BBC Micro ignites memories of revolution". BBC News. 21 March 2008. Retrieved 30 November 2010.
- ^ "ECN - July/Aug. 1985".
- ^ Smith, Tony (12 February 2014). "You're NOT fired: The story of Amstrad's amazing CPC 464". The Register. Retrieved 17 February 2014.
- ^ Lien, David (1981). The BASIC Handbook (Second ed.). San Diego, CA: Compusoft Publishing. p. inside cover. ISBN 0-932760-00-7.
- ^ 로렌조 2017, 페이지 83
- ^ Gates, Bill. "Bill Gates Interview". National Museum of American History, Smithsonian Institution (Interview). Interviewed by David Allison. Retrieved April 10, 2013.
- ^ Malloy, Rich (May 1983). "Little Big Computer / The TRS-80 Model 100 Portable Computer". BYTE. p. 14. Retrieved October 19, 2013.
- ^ 로렌조 2017, 페이지 122
- ^ Williams, Gregg (February 1984). "The Apple Macintosh Computer". BYTE. p. 30.
- ^ "Mac GUI :: Re: Re: MAC Basic vs MS Basic?". macgui.com. Retrieved 23 January 2015.
- ^ Manes, Stephen; Andrews, Paul (21 January 1994). Gates: How Microsoft's Mogul Reinvented an Industry--and Made Himself the Richest Man in America: Stephen Manes, Paul Andrews: 9780671880743: Amazon.com: Books. ISBN 0671880748.
- ^ 빌 앳킨슨은 TWiT.tv 네트워크에서 TV쇼 삼각관계에서 인터뷰를 했다.
- ^ "Was Family BASIC for the NES/Famicom powerful enough to create full games and applications?". Retrieved 2020-08-27.
- ^ Thomas, Neil (19 Aug 2019). "STOS & Amos - Francois Lionet Retro Tea Break". YouTube. Retrieved 11 Mar 2020.
- ^ Plant, Robert T.; Murrell, Stephen (2007). An executive's guide to information technology. Cambridge University Press. p. 343. ISBN 978-0-521-85336-1.
Summary of positive issues: Visual Basic is easy to learn and widely available.
- ^ "The History of Visual Basic". www.johnsmiley.com.
- ^ Frank Wieduwilt (October 2008). "Programming with the Gambas Basic IDE". Linux Pro Magazine. Retrieved 2011-12-10.
- ^ "About the Game Creators - TheGameCreators".
- ^ "Small Basic download". Retrieved 2020-09-07.
- ^ Chailloux, Emmanuel; Manoury, Pascal; Pagano, Bruno (2002). Developing Applications with Objective Caml. France: O'Reilly. ISBN 2841771210.
- ^ Price, Ed (29 April 2014). "Small Basic Curriculum". TechNet. Microsoft. Retrieved 9 February 2014.
- ^ Price, Ed; Takahashi, Nonki (25 February 2014). "Small Basic Getting Started Guide". TechNet. Microsoft. Retrieved 12 February 2015.
- ^ "Small Basic". Retrieved 6 September 2020.
- ^ Price, Ed (22 October 2012). "The Unique Features of Small Basic". Small Basic. TechNet. Microsoft. Retrieved 22 April 2015.
- ^ Price, Ed (8 October 2012). "What are the 14 Keywords of Small Basic?". Small Basic. MSDN Blogs. Microsoft. Retrieved 9 February 2014.
- ^ "Announcing Small Basic Online 1.0 – Public Preview". 20 February 2019.
- ^ "Microsoft Small Basic Online v1.0 (CS): Installation Guide". Microsoft TechNet. Retrieved 8 January 2022.
- ^ "Contributors to robinhedwards/ArduinoBASIC". GitHub.
- ^ "BleuLlama/TinyBasicPlus: A C implementation of Tiny Basic, with a focus on support for Arduino". GitHub. Retrieved 2020-09-11.
- ^ "Vintage BASIC - Home". Retrieved 2020-09-11.
- ^ Ensmenger, Nathan (2010). The Computer Boys Take Over. p. 55. ISBN 978-0-262-05093-7.
- ^ 워즈니악 2014.
- ^ BASIC-PLUS Language Manual (PDF). Maynard, Massachusetts: Digital Equipment Corporation. 1972. pp. 3–13.
- ^ 로렌조 2017, 페이지 106
- ^ Allison, Dennis (July 1976). "Design notes for TINY BASIC". SIGPLAN Notices. ACM. 11 (7): 25–33. doi:10.1145/987491.987494. S2CID 18819472. ACM SIGPLAN(Special Interest Group on Programming Languages)은 1976년 1월 Tiny Basic Journal에서 Tiny Basic 설계 노트를 전재했습니다.
- ^ Allison, Dennis (1976). "Build Your Own BASIC". Dr. Dobb's Journal. Vol. 1, no. 1. p. 9.
- ^ Allison, Dennis (1976). "Quick Reference Guide for Tiny BASIC". Dr. Dobb's Journal. Vol. 1, no. 1. p. 6.
- ^ "ZX80 – 8K BASIC ROM UPGRADE".
- ^ a b A BASIC Language Interpreter for the Intel 8008 Microprocessor. Department of Computer Science, University of Illinois at Urbana-Champaign (published 1974). June 1974. pp. 16–19.
- ^ "TB Code Sheet". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte. 1 (1). December 1975.
- ^ "Robert Uiterwyk's Micro Basic".
- ^ Weyhrich 2001, 최초의 Apple II와 함께 출하된 [Integer] BASIC은 조립되지 않았습니다.손으로 쓴 사본이 하나 있었는데 모두 손으로 쓰고, 모두 손으로 조립해서..
- ^ 워즈니악 2018.
- ^ Wallace, James; Jim Erickson (1992). Hard Drive: Bill Gates and the Making of the Microsoft Empire. John Wiley & Sons. pp. 81–83. ISBN 0-471-56886-4.
- ^ Gates, Bill (January 1976). "An Open Letter To Hobbyists". Homebrew Computer Club Newsletter. Mountain View, California: Homebrew Computer Club. 2 (1): 2.
- ^ "We have a BASIC". New Mexico Museum of Natural History and Science. Archived from the original on March 23, 2012. Retrieved 2007-04-18.
- ^ Wallace, James; Jim Erickson (1992). Hard Drive: Bill Gates and the Making of the Microsoft Empire. John Wiley & Sons. p. 78. ISBN 0-471-56886-4.
- ^ "XBASIC -- A Conversational BASIC Interpreter". GitHub. Retrieved 2020-09-07.
- ^ Lennart Benschop (March 8, 2002). "BASIC interpreter Version 1.22". Retrieved 2020-09-23.
- ^ 윌킨슨, 오브라이언 & 러프턴 1983.
- ^ "BASIC-PLUS inline operators, do they actually make sense?". Retrieved 2020-08-05.
- ^ Allen, Dennis. "TINY BASIC". People's Computer Company. Vol. 4, no. 3.
- ^ Greening, Bernard (1976). "Corrected Tiny BASIC IL". Dr. Dobb's Journal. Vol. 1, no. 1. p. 12.
- ^ Veit, Holger. "Tom Pittman's 6800 tiny BASIC". Retrieved 2 May 2017.
- ^ Nouspikel, Thierry. "GPL: Graphic Programming Language". Retrieved 2 August 2020.
- ^ "I grew up and learned basic on a TI-99/4a. It was a wonderful and simple time..." Hacker News. Retrieved 2 August 2020.
- ^ 워즈니악 1977, 페이지 43
- ^ Apple Programmers Aid (PDF). Apple. 1978.
- ^ 라스킨 1978, 페이지 11
- ^ 라스킨 1978, 페이지 46
- ^ Raskin 1978, 페이지 49-55
- ^ 라스킨 1978, 페이지 65-67
- ^ "Tiny BASIC Extended". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte. 1 (2). February 1976.
- ^ "Denver Tiny BASIC". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte. 1 (3). March 1976.
- ^ a b "MINOL". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte. 1 (4). April 1976.
- ^ a b Rauskolb, Roger (December 1976). "Dr. Wang's Palo Alto Tiny BASIC" (PDF). Interface Age. pp. 92–108.
- ^ Allison, Dennis (January 1976). "Design notes for Tiny BASIC". Dr. Dobb's Journal. Vol. 1, no. 1. p. 9.
- ^ Allison, Dennis (January 1976). "Build Your Own BASIC". Dr. Dobb's Journal. Vol. 1, no. 1. p. 8.
- ^ Steil, Michael (13 January 2015). "Microsoft BASIC for 6502 Original Source Code".
- ^ Hardiman, Roger. "Altair BASIC 3.2 (4K) – Annotated Disassembly". p. 1.11. Archived from the original on 5 November 2001.
- ^ a b c 워즈니악 1977, 페이지 42
- ^ Paul R. Santa-Maria. "Apple II Integer Basic Disassembly" (PDF). Retrieved 2020-09-14.
- ^ 윌킨슨, 오브라이언 & 러프턴 1983, 5페이지
- ^ 비커스 1983, 페이지 7-8
- ^ a b "The BASIC Interpreter - Explained". Retrieved 2020-09-15.
- ^ "Part 1 Of LLL 8080 BASIC Interpreter" (PDF).
- ^ 라스킨 1978 페이지 118
- ^ Wang, Li-Chen (May 1976). "Palo Alto Tiny BASIC". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte. 1 (5): 12–25.
- ^ 라스킨 1978, 페이지 38
- ^ "Part 1 Of LLL 8080 BASIC Interpreter" (PDF).
- ^ "Part 1 Of LLL 8080 BASIC Interpreter" (PDF).
- ^ "What is the oldest reference to PEEK, POKE, and USR?". Retrieved 15 August 2020.
- ^ Altair 8800 BASIC Reference_Manual 1975, PDF 68페이지, "8K BASIC의 PEEK 기능과 OUT 문을 사용하여 사용자는 BASIC에서 바이너리 덤프 프로그램을 작성할 수 있습니다.INP와 POKE를 사용하여 바이너리 로더를 쓸 수 있습니다.PEEK 및 POKE를 사용하여 바이트 지향 정보를 저장할 수 있습니다.BASIC을 초기화할 때는 ALTAIR 메모리 용량에서 바이트 형식의 데이터를 저장하기 위한 메모리 용량을 뺀 값으로 MEMORY SIZE? 질문에 답하십시오.
- ^ 라스킨 1978, 페이지 27
- ^ "Robert Uiterwyk's BASIC".
- ^ Welsh, David; Welsh, Theresa (2007). Priming the Pump: How TRS-80 Enthusiasts Helped Spark the PC Revolution. p. 7.
- ^ Reed, Matthew. "Level I BASIC". TRS-80.org. Retrieved 27 August 2017.
- ^ 아놀드 & 워즈워스 1976, 10.1페이지
- ^ 아놀드 & 워즈워스 1976, 10장
- ^ "Floating Point Routines for the 6502". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte. 1 (7). August 1976.
- ^ "Part 1 Of LLL 8080 BASIC Interpreter" (PDF).
- ^ A BASIC Language Interpreter for the Intel 8008 Microprocessor. Department of Computer Science, University of Illinois at Urbana-Champaign (published 1974). June 1974. p. 20.
- ^ "GE-2xx documents". www.bitsavers.org. CPB-267_GE-235-SystemManual_1963.pdf, p. IV-4.
- ^ 로렌조 2017, 페이지 149
- ^ Steil, Michael (20 October 2008). "Create your own Version of Microsoft BASIC for 6502".
- ^ 라스킨 1978, 페이지 61
- ^ MITS Altair BASIC. Albuquerque, NM: MITS. 1975. p. 37.
- ^ Lien, David (1986). The Basic Handbook (Third ed.). San Diego, CA: Compusoft. p. 589. ISBN 0-932760-33-3.
- ^ Raskin 1978, 94
- ^ MITS Altair BASIC. Albuquerque, NM: MITS. 1975. p. 31.
- ^ a b c HP 2000/Access BASIC Reference Manual (PDF). Hewlett Packard. May 1976., 부품 번호 22687-90001
- ^ North Star BASIC version 6 (PDF). North Star Corporation. 1977.
- ^ The ATARI BASIC Reference Manual. Atari Inc. 1980.
- ^ "Integer, Floating Point and String Variables". C64 Programmer's Manual. Commodore.
- ^ 라스킨 1978, 페이지 89
- ^ "Create your own Version of Microsoft BASIC".
- ^ Lien, David (1977). User's Manual for Level I (First ed.). Fort Worth, TX: Tandy Corporation. pp. 105–108, 137. Retrieved 9 August 2020.
- ^ 라스킨 1978, 페이지 31
- ^ 래스킨 1978, 페이지 32
- ^ 라스킨 1978, 페이지 33
- ^ a b 라스킨 1978, 페이지 120
- ^ 로렌조 2017, 페이지 120
- ^ "Would some BASIC interpreters for microcomputers be considered operating systems?". Retrieved August 7, 2020.
- ^ a b 라스킨 1978, 페이지 36
- ^ 미니 1977, 18페이지
- ^ "NIBL". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte. 1 (10). November 1976.
- ^ "Problems with BASIC". Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte. 1 (2). February 1976.
- ^ "Differences Between GW-BASIC and QBasic". 2003-05-12. Archived from the original on 2013-10-19. Retrieved 2008-06-28.
- ^ 로렌조 2017, 137페이지
- ^ 조타수 1978, 페이지 18
- ^ Weyhrich 2001.
- ^ 라스킨 1978, 페이지 100
- ^ 라스킨 1978, 페이지 15
- ^ 라스킨 1978, 페이지 52
- ^ 라스킨 1978, 페이지 107
- ^ 매뉴얼 1980, 부록 B.
- ^ "What type of interpreter were most 8-bit BASIC implementations?". Retrieved August 9, 2020.
- ^ A BASIC Language Interpreter for the Intel 8008 Microprocessor. Department of Computer Science, University of Illinois at Urbana-Champaign (published 1974). June 1974. pp. 24–36.
- ^ Pittman, Tom (1981). "The First Book of Tiny BASIC Programs". Retrotechnology.com. Itty Bitty Computers. Retrieved August 5, 2020.
Because TA is so large (19,703 bytes), I found that execution became excruciatingly slow, simply due to the memory scan for GOTOs, GOSUBs, and RETURNs. A simple patch to the interpreter converts it to a binary search algorithm, for about an order of magnitude speedup in execution time. The necessary changes are listed in the Appendix.
- ^ a b Rugg, Tom; Feldman, Phil (October 1977). "BASIC timing comparisons… revised and updated". Kilobaud. pp. 20–25.
- ^ a b Rugg, Tom; Feldman, Phil (June 1977). "BASIC Timing Comparisons… information for speed freaks". Kilobaud. pp. 66–70.
- ^ Gilbreath, Jim (September 1981). "A High-Level Language Benchmark". Byte. p. 192.
- ^ Ahl, David (November 1983). "Benchmark Comparison Test". Creative Computing. p. 260.
- ^ a b c d e 윌킨슨 1985, 페이지 139
- ^ Ahl, David (November 1983). "Benchmark comparison test". Creative Computing. pp. 259–260.
- ^ Ahl, David (January 1984). "Creative Computing Benchmark". Creative Computing. p. 12.
- ^ 윌킨슨, 오브라이언 & 러프턴 1983, 17페이지
- ^ 크로포드 1982 페이지 8.45
- ^ Winner, Lane (1982). "De Re Atari, Chapter 10: Atari BASIC". Atari, Inc.
참고 문헌
- Apple II Mini Manual. Apple. 1977.
- Arnold, Mark; Wadsworth, Nat (1976). SCELBAL: A higher level language for 8008/8080 systems (PDF). SCELBI Computer Consulting.
- The ATARI BASIC Reference Manual. Atari Inc. 1980. Archived from the original on May 1, 2005.
- Crawford, Chris (1982). De Re Atari. Atari Program Exchange.
- Cromemco 16K Extended BASIC (PDF). Cromemco. 1978.
- Helmers, Carl (March 1978). "An Apple to Byte". Byte. pp. 18–24, 30–32, 35, 40–46.
- Hertzfeld, Andy (June 1985). "The sad story of MacBasic". Folklore.
- Lorenzo, Mark (2017). Endless Loop: The History of the BASIC Programming Language. Philadelphia: SE Books. ISBN 978-1974-27707-0.
- Raskin, Jef (1978). Apple II BASIC Programming Manual (PDF). Apple Computer.
- Vickers, Steven (1983). Sinclair ZX Spectrum BASIC Programming (2 ed.). Sinclair Research.
- Weyhrich, Steven (12 December 2001). "History part 3: The Apple II". Retrieved 2007-09-16.
- Wilkinson, Bill (1982). Inside Atari DOS. Optimized Systems Software, Inc. ISBN 0-942386-02-7. Retrieved 2009-04-04.
- Wilkinson, Bill (February 1985). "INSIGHT: Atari". Creative Computing. pp. 139–140.
- Wilkinson, Bill; O'Brien, Kathleen; Laughton, Paul (1983). The Atari BASIC Source Book. Compute! Books. ISBN 0-942386-15-9.
- Williams, Gregg; Moore, Rob (December 1984). "The Apple Story / Part 1: Early History". Byte. pp. A67–A71. Retrieved 23 October 2013.
- Wozniak, Steven (May 1977). "System Description / The Apple-II". Byte. pp. 34–43.
- Wozniak, Steven (1 May 2014). "How Steve Wozniak Wrote BASIC for the Original Apple From Scratch". Gizmodo.
- Wozniak, Steven (3 January 2018). "Apple BASIC". Woz.org.
추가 정보
BASIC 구현 릴리스의 시간 순서대로 소스 코드와 설계 문서:
- Weaver, Alfred; Tindall, Michael; Danielson, Ronald (June 1974). A BASIC Language Interpreter for the Intel 8008 Microprocessor. Department of Computer Science, University of Illinois at Urbana-Champaign (published 1974).
- Arnold, Mark (1977). SCELBAL Mathematical Functions Supplement. SCELBI Computer Consulting.
- Arnold, Mark (1977). SCELBAL Strings Supplement. SCELBI Computer Consulting.
- "Altair BASIC 3.2 (4K) - Annotated Disassembly".
- Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Volume 1. People's Computer Company. 1976.
- Rauskolb, Roger (December 1976). "Dr. Wang's Palo Alto Tiny BASIC" (PDF). Interface Age. pp. 92–108.
- Pittman, Tom (1977). Tiny BASIC Experimenter's Kit.
- Santa-Maria, Paul. "Apple II Integer Basic Disassembly" (PDF).
