Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
Пример ввода популярной программы в интерпретатор BASIC (в данном случае HAMURABI )

BASIC интерпретатор является интерпретатор , который позволяет пользователям вводить и программ , запускаемых на BASIC язык и был для первой части микрокомпьютера эры, по умолчанию приложения , которые будут запускать компьютеры. Предполагалось, что пользователи будут использовать интерпретатор BASIC для ввода программ или загрузки программ из хранилища (первоначально кассетные ленты, а не гибкие диски ).

Переводчики BASIC имеют историческое значение. Первым продуктом Microsoft, выставленным на продажу, был интерпретатор BASIC ( Altair BASIC ), который проложил путь к успеху компании. До Altair BASIC микрокомпьютеры продавались в виде комплектов, которые нужно было программировать в машинном коде (например, Apple I ). В течение периода Альтаира переводчики BASIC продавались отдельно, став первым программным обеспечением, продаваемым частным лицам, а не организациям; Apple BASIC был первым программным продуктом Apple. После MITS Altair 8800 ожидалось, что микрокомпьютеры будут поставляться в комплекте с собственными интерпретаторами BASIC (например, Apple II, в котором было несколько реализаций BASIC). Негативная реакция на цену Altair BASIC от Microsoft также привела к ранней совместной разработке программного обеспечения, для реализации Tiny BASIC в целом и Palo Alto Tiny BASIC в частности.

История [ править ]

BASIC помог дать толчок эре разделения времени, стал мейнстримом в эру микрокомпьютеров, затем исчез, превратившись в еще одно приложение в эру DOS и GUI, и сегодня выживает в нескольких нишах, связанных с разработкой игр, ретрокомпьютингом и обучением.

Эпоха разделения времени [ править ]

Первоначально реализованный как система компиляции и запуска, а не интерпретатор, BASIC возник как часть более широкого движения к системам с разделением времени. General Electric , работавшая над Dartmouth Time Sharing System , написала свою собственную базовую операционную систему и запустила онлайн-систему разделения времени, известную как Mark I, с компилятором BASIC (а не интерпретатором) в качестве одного из основных преимуществ. Другие компании в развивающейся сфере быстро последовали их примеру. К началу 1970-х годов BASIC был в основном универсальным для универсальных мэйнфреймов. [1]

Система HP 2000 была разработана для выполнения BASIC с разделением времени в качестве своей основной задачи.

BASIC, как упрощенный язык, разработанный с учетом интегрированного редактирования строк, естественно подходил для переноса на рынок мини-компьютеров , который зарождался одновременно с сервисами разделения времени. Эти машины имели очень маленькую основную память , возможно, всего 4 КБ по современной терминологии, и не хватало высокопроизводительного хранилища, такого как жесткие диски, которые делают компиляторы практичными. Напротив, интерпретатор потребовал бы меньше вычислительных ресурсов за счет производительности. В 1968 году Hewlett Packard представила HP 2000 , систему, основанную на интерпретаторе HP Time-Shared BASIC . [2] В 1969 году Дэн Паймар.и Ира Бакстер написал еще один ранний интерпретатор BASIC для Data General Nova . [3] К началу 1970-х годов BASIC стал почти универсальным на рынке мини-компьютеров, с появлением Business BASIC , и конкуренты BASIC, такие как FOCAL и JOSS , были забыты. [4]

Эпоха микрокомпьютеров [ править ]

Появление первых микрокомпьютеров в середине 1970-х годов продолжило бурный рост BASIC, преимуществом которого было то, что он был довольно хорошо известен молодым дизайнерам и компьютерным энтузиастам, проявлявшим интерес к микрокомпьютерам, многие из которых видели BASIC на мини-компьютерах. или мэйнфреймы. BASIC был одним из немногих языков, которые были достаточно высокоуровневыми , чтобы их могли использовать те, кто не обучался, и достаточно малы, чтобы поместиться в микрокомпьютерах того времени. В 1972 году HP представила настольный программируемый калькулятор HP 9830A с интерпретатором BASIC Plus в постоянной памяти (ROM). [5]

В июне 1974 года Альфред Уивер, Майкл Тиндалл и Рональд Дэниэлсон из Университета Иллинойса в Урбане-Шампейне доказали в своей статье с тем же названием возможность создания «БЕЙСИЧЕСКОГО языкового интерпретатора для микропроцессора Intel 8008», хотя их приложение было развернуто на симуляторе 8008 для IBM 360/75 и потребовало 16 КБ. [6]

Альтаир 8К Бейсик на бумажной ленте

В январе 1975 года был анонсирован Altair 8800, который произвел революцию в области микрокомпьютеров . Одна из первых микрокомпьютерных версий BASIC была написана Гейтсом, Алленом и Монте Давидофф в соавторстве с их недавно созданной компанией Micro-Soft. Он был выпущен MITS в формате перфоленты для Altair 8800 вскоре после самой машины [7], демонстрируя BASIC как основной язык для ранних микрокомпьютеров.

В марте 1975 года Стив Возняк посетил первое собрание Клуба домашних компьютеров и начал разрабатывать дизайн своего собственного компьютера. Члены клуба были в восторге от Altair BASIC. [8] Возняк пришел к выводу, что его машина должна иметь собственный БЕЙСИК. В то время он работал в Hewlett Packard и использовал их диалект миникомпьютеров HP Time-Shared BASIC в качестве основы для своей собственной версии. Integer BASIC был выпущен на кассете для Apple I и поставлялся в ПЗУ, когда Apple II был отправлен летом 1977 года. [9]

Другие члены Homebrew Computer Club начали распространять копии Altair BASIC на бумажной ленте, в результате чего Гейтс написал свое Открытое письмо любителям , в котором он жаловался на этот ранний пример компьютерного пиратства . Частично в ответ на письмо Gate, и частично , чтобы сделать еще меньше BASIC , который будет работать с пользой на 4 Кбайта машин, [а] Боб Альбрехт призвал Деннис Эллисон написать свой собственный вариант языка. О том, как разработать и реализовать урезанную версию интерпретатора для языка BASIC, рассказывалось в статьях Эллисон в первых трех ежеквартальных выпусках People's Computer Company.информационный бюллетень, опубликованный в 1975 году, и реализации с исходным кодом, опубликованные в журнале доктора Добба по Tiny BASIC Calisthenics & Orthodontia: Running Light Without Overbyte . Это привело к появлению большого количества Tiny BASIC с добавленными функциями или другими улучшениями с хорошо известными версиями от Тома Питтмана и Ли-Чен Ванга , обоих членов Homebrew Computer Club. [10] Tiny BASIC был опубликован открыто, и Ван ввел термин «авторское лево», чтобы побудить других копировать его исходный код. Любители и профессионалы создали свои собственные реализации, сделав Tiny BASIC примером проекта свободного программного обеспечения , существовавшего до движения за свободное программное обеспечение .

Многие фирмы разработали интерпретаторы BASIC. В 1976 году SCELBI представила SCELBAL для 8008 [11], а Ливерморская лаборатория Университета Айдахо и Лоуренса объявили, что они будут публиковать в открытом доступе LLL BASIC, который включает поддержку операций с плавающей запятой. [12] В 1977 году Apple II и TRS-80 Model I имели по две версии BASIC: меньшая версия, представленная с начальными выпусками машин, и лицензионная версия Microsoft, представленная позже по мере роста интереса к платформам.

Hello World , с инверсным видео и символом колокольчика , запускается и отображается в Applesoft BASIC

Microsoft перенесла свой интерпретатор на MOS 6502 , который быстро стал одним из самых популярных микропроцессоров 8-битной эры. Когда начали появляться новые микрокомпьютеры, такие как Commodore PET , их производители лицензировали Microsoft BASIC, адаптированную к возможностям оборудования. К 1978 году MS BASIC стал стандартом де-факто, и практически каждый домашний компьютер 1980-х годов включал его в ПЗУ . В 1980 году в рамках более крупного лицензионного соглашения, которое включало другие языки и PC DOS , IBM отклонила предложение Atari и вместо этого лицензировала MS-BASIC над своей собственной реализацией, в конечном итоге выпустив четыре версии IBM BASIC., каждый намного больше, чем предыдущие интерпретаторы (например, Cartridge BASIC занимал 40 КБ). [13] Дон Эстридж , лидер команды IBM PC , сказал: «У IBM отличный BASIC - он хорошо принят, быстро работает на мэйнфреймах и намного функциональнее, чем BASIC на микрокомпьютере ... Но [его ] количество пользователей было бесконечно малым по сравнению с количеством пользователей Microsoft BASIC. У Microsoft BASIC были сотни тысяч пользователей по всему миру. Как вы собираетесь с этим спорить? " [14] ( Последующую историю этих различных реализаций см. В Microsoft BASIC .)

Многие поставщики «спорили с этим» и использовали другие фирмы или писали свои собственные интерпретаторы. В сентябре 1978 года Shepardson микросистема заканчивала CROMEMCO 16K Структурированный BASIC для Z80 -А CROMEMCO S-100 шины машин. [15] [16] Пол Лотон и Кэтлин О'Брайен затем создали Atari BASIC [17] как урезанную версию Cromemco BASIC, перенесенную на 6502. [18] В 1979 году Уоррен Робинетт разработал картридж BASIC Programming для Atari. , Inc. , хотя он поддерживал только программы с 9 строками кода (всего 64 символа). Также в 1979 г.Компания Texas Instruments выпустила TI-BASIC со своим TI-99/4 , который после модернизации в TI-99 / 4A будет продано почти 3 миллиона систем. Sinclair BASIC был разработан для ZX-80 Джоном Грантом и Стивом Викерсом из Nine Tiles. В 1980 году Софи Уилсон из Acorn Computers разработала Atom BASIC , который позже превратился в BBC BASIC , один из первых интерпретаторов, предлагающих структурированное программирование BASIC с именованными DEF PROC/ DEF FNпроцедурами и функциями, REPEAT UNTILциклами и IF THEN ELSEструктурами, вдохновленными COMAL . [19] [20] Ян Джонс разработал SuperBASIC , еще один британский BASIC, поддерживающий структурное программирование, для Sinclair QL . В 1983 году Рэндалл Хайд разработал SmartBASIC для Coleco Adam . [21] Ричард Клейтон, Крис Холл и Пол Оверелл разработали Mallard BASIC для BBC Micro и Locomotive BASIC для Amstrad CPC , обе команды поддерживают индексированные файловые системы ISAM . [22] В 1985 году MetaComCo выпустила ABasiC для Amiga и ST BASIC для Atari ST..

В 1978 году Дэвид Лиен опубликовал первое издание The BASIC Handbook: An Encyclopedia of the BASIC Computer Language , документируя ключевые слова на более чем 78 различных компьютерах. К 1981 году во втором издании были задокументированы ключевые слова с более чем 250 различных компьютеров, что свидетельствует о стремительном росте эпохи микрокомпьютеров. [23]

Переводчики как приложения [ править ]

С появлением дисковых операционных систем и более поздних графических пользовательских интерфейсов интерпретаторы BASIC стали лишь одним из множества приложений, вместо того чтобы предоставлять первое приглашение, которое пользователь может увидеть при включении компьютера.

В 1983 году дебютировал портативный компьютер TRS-80 Model 100 , реализация которого на Microsoft BASIC примечательна по двум причинам. Во-первых, программы редактировались с помощью простого текстового редактора TEXT, а не набирались построчно (но номера строк по-прежнему требовались). [24] Во-вторых, это был последний продукт Microsoft , разработанный лично Биллом Гейтсом . [25] [26]

Также в 1983 году Microsoft начала объединять GW-BASIC с DOS. Функционально идентичный IBM BASICA , его интерпретатор BASIC был полностью автономным исполняемым файлом и не нуждался в Cassette BASIC ROM, который был в оригинальном IBM PC . По словам Марка Джонса Лоренца, учитывая масштаб языка, «GW-BASIC, вероятно, п плюс ультра семейств Microsoft, поточный номером BASIC , уходящей Альтаир - и , возможно , даже линии пронумерованных BASIC в целом.» [27] С выпуском MS-DOS 5.0 место GW-BASIC занял QBasic .

MacBASIC представлял собой полностью интерактивную среду разработки для исходного компьютера Macintosh и был разработан Донном Денманом, [28] Марианной Сюн, Ларри Кеньоном и Брайаном Стернсом. [29] MacBASIC был выпущен в виде бета-версии в 1985 году и был принят для использования в таких местах, как факультет информатики Дартмутского колледжа , для использования во вводном курсе программирования. Он был обречен на то, чтобы стать вторым BASIC, разработанным Apple, в пользу Microsoft BASIC. В ноябре 1985 года Apple внезапно завершила проект в рамках сделки с Microsoft о продлении лицензии на BASIC на Apple II . [30] [31]

BASIC появился в некоторых системах видеоигр, таких как Nintendo Famicom .

Устные переводчики BASIC были не только разработкой Америки и Великобритании. В 1984 году Hudson Soft выпустила Family BASIC на японском рынке для игровой консоли Nintendo Family Computer - целочисленную реализацию, разработанную для программирования игр, основанную на Hudson Soft BASIC для Sharp MZ80 (с английскими ключевыми словами). [32] Turbo-Basic XL - это совместимый надмножество Atari BASIC, разработанное Фрэнком Островски и опубликованное в выпуске немецкого компьютерного журнала Happy Computer за декабрь 1985 года , что делает его одним из последних интерпретаторов, опубликованных как программа для ввода текста.. Язык включает компилятор в дополнение к интерпретатору и содержит команды структурированного программирования. Другие авторы выпустили несколько модифицированных версий, работающих с разными системами DOS. Во Франции Франсуа Лионе и Константин Сотиропулос разработали два интерпретатора BASIC с упором на мультимедиа: STOS BASIC для Atari ST в 1988 году [33] и AMOS BASIC для Amiga в 1990 году.

В мае 1991 года Microsoft выпустила Visual Basic , язык программирования третьего поколения, управляемый событиями, известный своей моделью программирования Component Object Model (COM). [34] Visual Basic поддерживал быструю разработку приложений (RAD) приложений с графическим пользовательским интерфейсом (GUI) , доступ к базам данных с помощью объектов доступа к данным , удаленных объектов данных или объектов данных ActiveX , а также создание элементов управления и объектов ActiveX . Visual Basic использовался для разработки собственных приложений, а также опубликованных приложений.

Нишевые ОСНОВНЫЕ [ править ]

В 1993 году Microsoft выпустила Visual Basic для приложений , язык сценариев для приложений Microsoft Office , который заменяет и расширяет возможности более ранних языков программирования макросов для конкретных приложений, таких как WordBASIC Word (который был представлен в 1989 году).

В 1996 году Microsoft выпустила VBScript в качестве альтернативы JavaScript для добавления интерактивных клиентских функций к веб-страницам, просматриваемым с помощью Internet Explorer . [35]

В 1999 году Бенуа Минисини выпустил Gambas в качестве альтернативы для разработчиков Visual Basic, которые решили перейти на Linux . [36]

В 2000 году Ли Бамбер и Ричард Ваннер выпустили DarkBASIC , систему для создания игр для Microsoft Windows с сопутствующей IDE и инструментами разработки. [37]

В 2001 году для КПК Palm был выпущен SmallBASIC . [38] Другим интерпретатором BASIC для Palm был HotPaw BASIC, ответвление от Chipmunk Basic .

В 2002 году Эммануэль Шайю, Паскаль Манури и Бруно Пагано опубликовали Tiny BASIC в качестве примера разработки приложений с помощью Objective Caml . [39]

В 2011 году Microsoft выпустила Small Basic (отличный от SmallBASIC) вместе с учебной программой [40] и вводным руководством [41], разработанной, чтобы помочь студентам, изучившим языки визуального программирования, такие как Scratch, изучать текстовое программирование. [42] Соответствующая IDE обеспечивает упрощенную среду программирования с такими функциями, как подсветка синтаксиса , интеллектуальное завершение кода и доступ к документации в редакторе. [43] В языке всего 14 ключевых слов. [44]В 2019 году Microsoft анонсировала Small Basic Online (SBO), позволяя студентам запускать программы из веб-браузера . [45] [46]

В 2014 году Робин Х. Эдвардс выпустил Arduino BASIC для Arduino , и теперь это широко разветвленная реализация. [47] Другая реализация с тем же именем была адаптирована из Palo Alto Tiny BASIC в 1984 году Гордоном Брэндли для своего 68000 Tiny BASIC, позже перенесенного на C Майком Филдом. [48]

Mobile BASIC для Android

Многие интерпретаторы BASIC теперь доступны для смартфонов и планшетов через Apple App Store или Google Play store для Android.

Сегодня программирование интерпретаторов BASIC стало частью хобби ретрокомпьютеров . Языки программирования более высокого уровня в системах с обширной оперативной памятью упростили реализацию интерпретаторов BASIC. Например, управление строками становится простым, если ваш язык реализации поддерживает разреженные матрицы , управление переменными упрощается с помощью ассоциативных массивов , а выполнение программы выполняется с помощью функций eval . В качестве примеров см. Проект с открытым исходным кодом Vintage BASIC, написанный на Haskell [49] или OCaml Tiny BASIC .

Продажа и распространение [ править ]

Первоначально переводчики были либо в комплекте с компьютерным оборудованием, либо разрабатывались как заказная услуга до того, как в конце 1960-х годов появилась отрасль, производящая отдельно упакованное программное обеспечение для организаций. [50] Интерпретаторы BASIC сначала продавались отдельно от микрокомпьютеров, затем были встроены, а затем снова стали продаваться как приложения в эпоху DOS.

Когда рынок перешел на ПЗУ, размер ПЗУ стал доминировать при принятии решений о том, насколько большим может быть интерпретатор BASIC. Поскольку оперативная память продавалась как микросхемы по 4 КБ, Altair BASIC изначально был упакован в отдельные выпуски для 4K, 8K и 12K; это перенесено на микросхемы ПЗУ, поскольку производители будут решать, сколько микросхем ПЗУ они могут уместить в своей конструкции с учетом целевых цен и других ограничений.

Компиляторы против интерпретаторов [ править ]

Первой реализацией BASIC, Dartmouth BASIC , был компилятор. Как правило, компиляторы исследуют всю программу в многоэтапном процессе и создают второй файл, который может быть непосредственно исполнен на базовом машинном языке главного компьютера без ссылки на исходный код. Этот код часто состоит из вызовов заранее написанных подпрограмм в системе времени выполнения языка . Исполняемый файл обычно меньше размера исходного кода, который его создал.

Главный недостаток компиляторов, по крайней мере, в историческом контексте, заключается в том, что они требуют большого количества временной памяти. По мере работы компилятор создает постоянно растущий выходной файл, который хранится в памяти вместе с исходным исходным кодом. Дополнительная память для временного поиска, особенно номера строк в случае BASIC, увеличивает требования к памяти. У компьютеров той эпохи было очень мало памяти; в современных условиях типичный мэйнфрейм может иметь размер порядка 64 КБ. В системе с разделением времени, что характерно для большинства BASIC 1960-х годов, эта память распределялась между многими пользователями.

Для того, чтобы компилятор работал, системы должны были иметь некоторую форму высокопроизводительного вторичного хранилища , обычно жесткий диск . Редактирование программы происходило в специальной среде, которая записывала исходный код пользователя во временный файл. Когда пользователь запускал программу, редактор выходил и запускал компилятор, который читал этот файл и создавал исполняемый код, а затем, наконец, компилятор выходил и запускал полученную программу. Такое разделение задачи уменьшило объем памяти, необходимый для любой из частей общей системы BASIC; в любой момент времени должны были быть загружены только редактор, компилятор или среда выполнения, остальное находилось в хранилище.

В то время как мэйнфреймы имели небольшой объем памяти, миникомпьютеры имели еще меньший объем: системы с 4 и 8 КБ были типичными для 1960-х годов. Но что еще более важно, миникомпьютеры, как правило, лишены какой-либо высокопроизводительной системы хранения; в большинстве ранних разработок перфолента использовалась в качестве основной системы хранения, а системы с магнитной лентой предназначались для высокого сегмента рынка. В этой среде система, которая записала исходный код, скомпилировала его и затем запустила результат, заняла бы минуты. Из-за этих ограничений количество устных переводчиков увеличивалось.

Интерпретаторы в конечном итоге выполняют те же базовые задачи, что и компиляторы, считывая исходный код и преобразовывая его в исполняемые инструкции, вызывающие функции времени выполнения. Основная разница в том, когдаони выполняют различные задачи. В случае компилятора весь исходный код преобразуется во время того, что кажется пользователю одной операцией, тогда как интерпретатор преобразует и запускает исходный код по одному оператору за раз. Результирующий машинный код выполняется, а не выводится, затем этот код отбрасывается, и процесс повторяется со следующим оператором. Это избавляет от необходимости в некоторой форме вторичного хранилища во время создания исполняемого файла. Основным недостатком является то, что вы больше не можете разделять различные части общего процесса - код, необходимый для преобразования исходного кода в машинные операции, должен быть загружен в память вместе со средой выполнения, необходимой для его выполнения, и в большинстве случаев редактор исходного кода.

Создание языка со всеми этими компонентами, который может уместиться в небольшой объем памяти и все еще иметь место для исходного кода пользователя, является серьезной проблемой, но он устраняет необходимость во вторичном хранилище и был единственным практическим решением для ранних миникомпьютеров и большинства история революции домашних компьютеров .

Развитие [ править ]

Языковой дизайн [ править ]

Дизайн языка для первых интерпретаторов часто просто включал ссылки на другие реализации. Например, Возняк ссылался на BASIC как руководство HP BASIC и копию 101 BASIC Computer Games . Основываясь на этих источниках, Возняк начал набрасывать схему синтаксиса языка. [51] Он не знал, что HP BASIC сильно отличается от разновидности DEC BASIC, используемой в 101 Games . Эти два языка принципиально различались с точки зрения обработки строк и структур управления. [52] Data General Business Basic , реализация только для целых чисел, послужила источником вдохновения для Atari BASIC. [53]

Напротив, Деннис Эллисон , член факультета компьютерных наук Стэнфордского университета , написал спецификацию для простой версии языка. [54] Эллисон был убежден создать стандарт Бобом Альбрехтом из Homebrew Computer Club , который видел BASIC на миникомпьютерах и чувствовал, что он идеально подходит для новых машин, таких как Altair. Предложенная Эллисон конструкция использовала только целочисленную арифметику и не поддерживала массивы или манипуляции со строками. Задача заключалась в том, чтобы программа поместилась в памяти от 2 до 3 килобайт. Общий дизайн Tiny BASIC был опубликован в сентябрьском выпуске бюллетеня People's Computer Company (PCC) за 1975 год .

Грамматика приведена ниже в форме Бэкуса-Наура . [55] В листинге звездочка (« * ») обозначает ноль или более объектов слева от него - за исключением первой звездочки в определении « термин », которая является оператором умножения; круглые скобки группируют объекты; и эпсилон (« ε ») означает пустое множество. Как это часто бывает в нотации грамматики компьютерного языка, вертикальная черта (" | ") выделяет альтернативы, так как они перечислены в отдельных строках. Символ « CR » обозначает возврат каретки .

 строка  :: =  номер  оператора  CR | заявление  CR  оператор  :: =  PRINT  expr-list  IF  выражение  relop  expression  THEN  statement  GOTO  expression  INPUT  var-list  LET  var  =  expression  GOSUB  expression  RETURN  CLEAR  LIST  RUN  END  expr-list  :: =  ( строка | выражение )  ( , ( строка | выражение )  ) *  список-вар  :: =  вар  ( , вар ) *  выражение  :: =  ( + | - | ε )  термин  (( + | - )  термин ) *  термин  :: =  коэффициент  (( * | / )  коэффициент ) *  фактор  :: =  var | номер | ( выражение )  var  :: = A | B | C ... | Y | Z  число  :: =  цифра  цифра *  цифра  :: =  0 | 1 | 2 | 3 | ... | 8 | 9  relop  :: = < ( > | = | ε ) | > ( <| = | ε ) | знак равно

Этот синтаксис, так просто , как это было, добавил одно новшество: GOTOи GOSUBможет принимать выражение , а не номер строки, обеспечивая назначенную GOTO [56] , а не о переключателе в ON-GOTO/GOSUBструктуре более типичной BASIC.

Sinclair BASIC использовал в качестве определения языка минимальный стандарт BASIC Американского национального института стандартов (ANSI) 1978 года , но сам был неполной реализацией только с целочисленной арифметикой. [57] Стандарт ANSI был опубликован после разработки первого поколения интерпретаторов для микрокомпьютеров.

Архитектура [ править ]

Общие компоненты интерпретатора BASIC: [58]

  • Ввод / вывод и обработка прерываний
    • Клавиатура и экран
    • Файловый ввод / вывод (если есть)
  • Процедуры редактирования
    • Командная строка
    • Редактирование и хранение программ
  • Процедуры исполнения
    • Разбор и интерпретация
    • Арифметический пакет
    • Управление памятью
      • Таблица символов (если есть)
      • Сборка мусора (если есть)

Кодирование [ править ]

Ранним микрокомпьютерам не хватало инструментов разработки, и программисты разрабатывали свой код либо на мини-компьютерах, либо вручную. Например, Дик Уиппл и Джон Арнольд написали Tiny BASIC Extended прямо в машинном коде, используя восьмеричный код . [59] Роберт Уитервик написал вручную MICRO BASIC для SWTPC (система 6800 ) на блокноте. [60] Стив Возняк написал код для Integer BASIC вручную, переведя инструкции кода ассемблера в их эквиваленты машинного кода и затем загрузив результат на свой компьютер. [61](Из-за этого программу было очень трудно изменить, и Возняк не смог изменить ее достаточно быстро для Стива Джобса , который впоследствии получил лицензию на BASIC у Microsoft. [62] )

У Гейтса и Аллена не было системы Altair, на которой можно было бы разработать и протестировать свой интерпретатор. Однако Аллен написал эмулятор Intel 8008 для своего предыдущего предприятия Traf-O-Data , который работал на компьютере с разделением времени PDP-10 . Аллен адаптировал этот эмулятор на основе руководства программиста Altair, и они разработали и протестировали интерпретатор на гарвардском PDP-10. [63] Когда Гарвард прекратил использование этой системы, Гейтс и Аллен купили компьютерное время у службы разделения времени в Бостоне, чтобы завершить отладку своей программы BASIC. Гейтс заявил в своем Открытом письме любителям в 1976 году, что стоимость компьютерного времени в первый год разработки программного обеспечения составила 40 000 долларов. [64]

Не то чтобы Аллен не умел кодировать вручную на машинном языке. На последнем подходе к аэропорту Альбукерке во время поездки, чтобы продемонстрировать интерпретатор, Аллен понял, что забыл написать программу начальной загрузки для считывания ленты в память. Написав на машинном языке 8080, Аллен закончил программу до приземления самолета. Только когда он загрузил программу на Altair и увидел подсказку с запросом размера системной памяти, он узнал, что интерпретатор работает на оборудовании Altair. [65] [66]

Одной из самых популярных из множества версий Tiny BASIC была Palo Alto Tiny BASIC, или сокращенно PATB. PATB впервые появился в выпуске Доктора Доббса в мае 1976 года , написанном на специальном языке ассемблера с нестандартной мнемоникой. Ли-Чен Ван написал свой интерпретатор в системе с разделением времени с помощью универсального ассемблера.

Единственным исключением из использования ассемблера было использование АЛГОЛА 60 для интерпретатора Paisley XBASIC для больших систем Берроуза . [67] Еще одним исключением и программой для набора текста был Classic BASIC, написанный Леннартом Беншопом на языке Forth и опубликованный в голландском журнале Forth Vijgeblad (выпуск № 42, 1993). [68]

Исходный код интерпретаторов часто был открытым (как в случае с Tiny BASIC) или опубликован авторами позже. Полный аннотированный исходный код и спецификации дизайна Atari BASIC были опубликованы как The Atari BASIC Source Book в 1983 г. [69]

Виртуальные машины [ править ]

Некоторые основные переводчики были закодированы в промежуточном представлении в виде виртуальной машины , чтобы добавить слой абстракции и лаконичности выше родного языка машины .

Хотя виртуальные машины использовались в системах компиляции и запуска, таких как BASIC-PLUS , они предназначались только для выполнения кода BASIC, а не для его анализа. [70] Tiny BASIC, напротив, был разработан для реализации как виртуальная машина, которая анализирует и выполняет (интерпретирует) операторы BASIC; в такой реализации интерпретатор Tiny BASIC сам запускается на интерпретаторе виртуальной машины. [71] Длина всей программы интерпретатора составляла всего 120 операций виртуальной машины, состоящих из 32 команд. [72] Таким образом, выбор подхода с использованием виртуальной машины позволил сэкономить пространство памяти и усилия по реализации, хотя программы BASIC, выполняемые на ней, выполнялись несколько медленно. (ВидетьTiny BASIC: реализация на виртуальной машине отрывка и примеров команд.) Хотя замысел дизайна заключался в том, чтобы Tiny BASIC использовал виртуальную машину, не все реализации это делали; в том числе Tiny BASIC Extended, 6800 Tiny BASIC [73] и NIBL.

Для своего TI-99 компания Texas Instruments разработала виртуальную машину с языком под названием GPL, что означает «язык программирования графики». [74] (Хотя многие обвиняют в низкой производительности TI-BASIC , часть проблемы заключалась в том, что виртуальная машина хранилась в графическом ПЗУ, которое имело медленный 8-битный интерфейс.) [75]

Непонимание ПЗУ Apple II привело некоторых к мысли, что Integer BASIC использовал виртуальную машину, специальный язык ассемблера, содержащийся в ПЗУ Apple и известный как SWEET16 . SWEET16 основан на байт-кодах, которые выполняются в простой 16-битной виртуальной машине, поэтому память может быть адресована через косвенные 16-битные указатели и 16-битные математические функции, вычисленные без необходимости их преобразования в базовую мультиинструкцию 8-битного 6502. код. [76] Однако SWEET16 не использовался в основном коде BASIC, хотя позже он был использован для реализации нескольких утилит, таких как процедура перенумерации строк. [77]

Редактирование и хранение программ [ править ]

Редактирование программы [ править ]

Большинство реализаций BASIC того времени выполняли функции как языкового интерпретатора, так и строкового редактора . Когда BASIC был запущен, отображалась > командная строка, в которой пользователь мог вводить операторы. [78] Это было известно как « прямой режим ». После загрузки интерпретатор BASIC по умолчанию перешел в прямой режим.

Операторы, которые были введены с ведущими числами, вводятся в память программы для «отложенного выполнения» [79] либо как новые строки, либо заменяют те, которые ранее могли иметь такой же номер. [80] Операторы, введенные без номера строки, назывались командами и выполнялись немедленно. Номера строк без операторов (т. Е. С последующим возвратом каретки ) удаляют ранее сохраненную строку.

Когда программа присутствует в памяти и пользователь вводит RUNкоманду, система переходит в «косвенный режим». В этом режиме указатель устанавливается так, чтобы указывать на первую строку программы, например, строку 10. Затем исходный текст для этой строки извлекается из хранилища и запускается, как если бы пользователь только что набрал его в прямом режиме. Затем указатель переместится на следующую строку, и процесс продолжится.

Различные реализации предлагали другие возможности редактирования программ. В Altair BASIC 8K была EDITкоманда для перехода в режим редактирования одной строки. Integer BASIC, также включает AUTOкоманду для автоматического ввода номеров строк с заданным начальным номером, например AUTO 100, добавление 10 к последнему числу с каждой новой строкой. AUTO 300,5начинал бы нумерацию в строке 300 пятерками; 300, 305 и др. Автоматическая нумерация отключена вводом MAN. [81] Некоторые интерпретаторы предлагали команды или утилиты для перенумерации строк.

Строки токенизации и кодирования [ править ]

Чтобы сэкономить оперативную память и ускорить выполнение, все интерпретаторы BASIC будут кодировать некоторые символы ASCII строк в другие представления. Например, номера строк были преобразованы в целые числа, хранящиеся как байты или слова , а ключевым словам могут быть назначены однобайтовые токены (например, сохранены PRINTкак байтовые значения 145 в MS-BASIC). Эти представления затем будут преобразованы обратно в читаемый текст при LISTнаписании программы.

Сокращения [ править ]

В качестве альтернативы токенизации, для экономии оперативной памяти, ранние реализации Tiny BASIC, такие как Extended Tiny BASIC, [82] Denver Tiny BASIC [83] и MINOL [84], усеченные ключевые слова: PRfor PRINT, INfor INPUT, RETfor RETURN. Полные традиционные ключевые слова не принимаются.

Напротив, Palo Alto Tiny BASIC принимает традиционные ключевые слова, но позволяет сокращать любое ключевое слово до минимальной уникальной строки с завершающей точкой. Например, PRINTможно было набрать P., хотя PR.работали и другие варианты. Эта система была сохранена на уровне I BASIC для TRS-80 , который использовал PATB, а также была обнаружена в Atari BASIC и BASIC различных карманных компьютеров Sharp . [85]

Чтобы расширить аббревиатуру, токенизатор Atari BASIC просматривает свой список зарезервированных слов, чтобы найти первое, которое соответствует предоставленной части. Наиболее часто используемые команды появляются первыми в списке зарезервированных слов, с REMв начале (его можно ввести как .). Когда программа позже LISTредактируется, она обычно записывает слова полностью. MS BASIC также разрешено использовать ?как сокращенную форму для PRINT, но расширяет его при перечислении, рассматривая его как аббревиатуру, а не синоним.

Токенизация [ править ]

Большинство интерпретаторов BASIC выполняют по крайней мере некоторые преобразования из исходной текстовой формы в различные форматы, специфичные для платформы. Tiny BASIC был прост: он только преобразовывал номер строки из десятичного формата в двоичный. Например, номер строки «100» превратился в однобайтовое значение, 64 доллара США, что уменьшило его размер для хранения в памяти, а также облегчило поиск в машинном коде (в некоторых вариантах Tiny BASIC разрешены номера строк от 1 до 254 или 255, хотя чаще всего используются двухбайтовые значения и номера строк от 1 до 999). Остальная часть строки осталась в исходном текстовом формате. [86] Фактически, Деннис Эллисон утверждал, что с учетом ограничений памяти для реализации токенизации потребуется больше кода, чем можно сэкономить. [87]

MS-BASIC пошли немного дальше, преобразовав номер строки в двухбайтовое значение, а также преобразовав ключевые слова, такие как FORили PRINT, в однобайтовое значение, «токен». [88] Токенизация Microsoft BASIC не размечала пробелы (например, PRINTAхранилась в двух байтах, а PRINT Aв трех); Напротив, Sinclair BASIC отображал пробел после каждого токенизированного ключевого слова, создавая более читаемый код. В MS BASIC для такого оператора, как 20 GOTO 100, номер строки 20и GOTOбудет токенизироваться, [89] в то время 100как оставалось в исходном формате, и его приходилось повторно анализировать в 16-битное целое число каждый раз, когда встречалась строка. [90]

Напротив, Integer BASIC полностью преобразует строку 20 GOTO 100в токены, которые могут быть немедленно прочитаны и выполнены. Если у Microsoft BASIC был один токен для ключевого слова PRINT, у Integer BASIC было три токена : один, если за ключевым словом не следовали аргументы, один, если за ним следует арифметическое выражение, и один, если за ним следует строковый литерал. [91] Поскольку Integer BASIC преобразовал больше исходного исходного кода в токены, время выполнения было быстрее, чем версии, которые требовали дополнительного анализа времени выполнения. Числовые литералы, такие как значение 500, были преобразованы в их 16-битное (двухбайтовое) двоичное представление, в данном случае шестнадцатеричное $ 01F4.. Чтобы указать, что это значение, а не ключевое слово, перед двухбайтовым значением был вставлен один байт между $ B0 и $ B9. Строковые литералы, такие как «HELLO WORLD», вместо этого кодировались установкой старшего бита каждого символа, чтобы Aон хранился как $ C1. Имена переменных были преобразованы таким же образом, с буквами, закодированными для включения их старшего бита, и любыми цифрами в имени, представленными соответствующими от $ B0 до $ B9, так что переменная A5будет закодирована как $ C1B5 (не сводится к жетону). [92]

Продолжая это делать , токенизатор Atari BASIC анализирует всю строку при вводе или изменении. Числовые константы разбираются в их 40-битной внутренней форме и затем помещаются в строку в этом формате, в то время как строки остаются в исходном формате, но с префиксом байта, описывающего их длину. Переменные имеют хранилище, выделяемое по мере их появления, и их имя заменяется указателем на их место хранения в памяти. Шепардсон назвал эту концепцию ранней токенизации «интерпретатором предварительной компиляции»; Операторы с синтаксическими ошибками фактически не могли быть сохранены, и пользователю немедленно предлагалось исправить их. [93]

Токенизация с клавиатуры [ править ]

Комбинации клавиш используются для ввода ключевых слов BASIC.

Некоторые интерпретаторы, такие как системы Bally Astrocade и Sinclair, в основном заставляли пользователя выполнять токенизацию, предоставляя комбинированные нажатия клавиш для ввода зарезервированных слов. Для наиболее распространенных команд достаточно одного нажатия клавиши; например, нажатие только Pв начале строки на Spectrum производит полную команду PRINT. Менее частые команды требуют более сложных комбинаций клавиш: BEEP(например) вводится нажатием CAPS SHIFTплюса SYMBOL SHIFTдля доступа к расширенному режиму (более поздние модели включают EXTENDED MODEклавишу), удерживая SYMBOL SHIFTнажатой и нажимая Z. Ключевые слова имеют цветовую кодировку на оригинальной клавиатуре Spectrum, чтобы указать, какой режим требуется: [94]

  • Белый : только ключ
  • Красный на самом ключе: SYMBOL SHIFTплюс ключ
  • Зеленый над клавишей: EXTENDED MODEза ней следует клавиша
  • Красный под клавишей: EXTENDED MODEзатем SYMBOL SHIFTплюс клавиша

Интерпретатор BASIC мог быстро определить любую команду или функцию, оценив один байт (токен ключевого слова). Учитывая синтаксическое требование, чтобы каждая строка начиналась с ключевого слова команды (например, LETне является необязательным), нажатие одной клавиши для команды в начале строки переводит редактор из командного режима в буквенный. Токенизация на клавиатуре означала, что ключевые слова не были зарезервированными словами, как в других диалектах BASIC, например, разрешено определять переменную с именем PRINTи выводить ее значение с помощью PRINT PRINT.

Линейное руководство [ править ]

Допустимые номера строк варьировались от реализации к реализации, но обычно были от 1 до 32767.

Большая часть памяти, используемой интерпретаторами BASIC, предназначалась для хранения самого списка программ. Пронумерованные операторы хранились в последовательном порядке в разреженном массиве, реализованном как линейная коллекция (технически не в виде списка, поскольку номер строки не может встречаться более одного раза).

Многие реализации Tiny BASIC хранят строки следующим образом:

  • Двоичный эквивалент номера строки (один или два байта, в зависимости от диапазона допустимых номеров строк)
  • Исходный текст ASCII (переменной длины)
  • Возврат каретки (один байт, 13)

Microsoft BASIC, начиная с Altair BASIC, сохранял следующие строки: [95]

  • Указатель на следующую строку (два байта)
  • Двоичный эквивалент номера строки (два байта, без знака)
  • Токенизированный исходный оператор (переменной длины)
  • Нулевой (один байт, установлен в 0)

LLL BASIC: [96]

  • Двоичный эквивалент номера строки (два байта)
  • Вперед указатель на следующую последовательную строку (два байта)
  • Длина исходного выражения ASCII (один байт)
  • Исходный текст ASCII (переменной длины)

Максимальная длина строки варьировалась: 64 символа в Palo Alto Tiny BASIC, включая десятичное представление номера строки; 120 символов в Atari BASIC; 128 символов на языке Integer BASIC; [97] и 255 символов в MS-BASIC (не включая номер строки).

Переводчики будут искать программу по строке за раз, просматривая номер каждой строки. Если бы он был ниже, чем номер новой строки, последующие строки были бы перемещены в памяти, чтобы освободить место для места, необходимого для новой строки. Если бы это был тот же номер строки, а не точно такой же длины, последующие строки нужно было бы перемещать вперед или назад. [98] (Поскольку в памяти всегда поддерживался последовательный порядок, это не были связанные списки .)

В Tiny BASIC эти поиски требовали проверки каждого байта в строке: указатель будет увеличиваться снова и снова, пока не встретится возврат каретки, чтобы найти байт перед следующей строкой. С другой стороны, в Altair BASIC и LLL BASIC указатель будет установлен на начало следующей последовательной строки; это было намного быстрее, но требовало двух байтов на строку. Учитывая, что размер программ Tiny BASIC предполагался размером 4 КБ или меньше, это соответствовало общей философии дизайна Tiny BASIC, заключающейся в компромиссе с производительностью в пользу минимизации использования памяти.

Когда пользователь вводил LISTв командной строке, система перебирала массив строк, используя один из этих методов, преобразовывала номер строки обратно в десятичный формат, а затем распечатывала остальной текст в строке, расшифровывая любые токены. или другие закодированные представления.

По мере того, как разработчики добавляли в BASIC конструкции структурированного программирования , они часто полностью избавлялись от необходимости в номерах строк и добавляли текстовые редакторы, а затем и интегрированные среды разработки .

Переменные и типы данных [ править ]

Имена переменных [ править ]

Dartmouth BASIC и HP-BASIC ограничивают имена переменных максимум двумя символами (либо одной буквой, либо буквой, за которой следует одна цифра; например, от A до Z9). MS-BASIC разрешал имена переменных, состоящие из буквы, за которой следует необязательная буква или цифра (например, от A до ZZ), но игнорировала последующие символы: таким образом, можно было непреднамеренно написать программу с переменными «LOSS» и «LOAN», которые были бы рассматриваться как то же самое; присвоение значения «ССУДОМ» приведет к незаметной перезаписи значения, обозначенного как «УБЫТКА».

Целочисленный BASIC не поддерживал имя переменной любой длины (например, SUM, GAMEPOINTS, PLAYER2) при условии, что он не содержал зарезервированного слова. [99] Ключевые слова не могли использоваться в переменных во многих ранних BASIC; «SCORE» будет интерпретироваться как «SC» ИЛИ «E», где OR было ключевым словом.

Строковые переменные обычно различаются на многих микрокомпьютерных диалектах BASIC по суффиксу $ к их имени, а значения часто идентифицируются как строки, будучи разделенными «двойными кавычками». В более поздних реализациях будут использоваться другие знаки препинания для указания типа переменной: A% для целого числа, A! для одинарной точности и A # для двойной точности .

За исключением массивов и (в некоторых реализациях) строк и в отличие от Паскаля и других более структурированных языков программирования, BASIC не требует, чтобы переменная объявлялась перед обращением к ней. По умолчанию значения обычно равны 0 (соответствующей точности) или нулевой строке.

Таблица символов [ править ]

Поскольку Tiny BASIC использовал только 26 однобуквенных переменных, переменные можно было хранить в виде массива без сохранения соответствующих имён, используя формулу, основанную на значении ASCII буквы в качестве индекса. Palo Alto Tiny BASIC пошел дальше: двухбайтовые значения переменных были размещены в ОЗУ внутри программы, от байтов 130 (ASCII 65, 'A', умноженное на два) до 181 (ASCII 90, 'Z', умноженное на два , плюс один для второго байта). [85]

Большинство BASIC предусматривали возможность иметь гораздо больше, чем 26 переменных, и поэтому нуждались в таблицах символов , которые оставляли бы емкость памяти только для используемых переменных.

В LLL BASIC каждая запись в таблице символов хранилась следующим образом: [100]

  • Имя переменной (байт 1: буква ASCII; байт 2: 0-9 ASCII или двоичный 0)
  • Прямой указатель (2 байта)
  • Значение (4 байта на элемент, 1 элемент, если скалярная переменная, в противном случае столько элементов, сколько DIMensioned для массива)

В отличие от большинства интерпретаторов BASIC, UIUC 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, 83 16 ), а их значения сохранялись в таблице значений переменных (указывается на VVTP - 86, 87 16 ). Благодаря такому косвенному обращению к именам переменных для ссылки на переменную требуется только один байт для адресации ее записи в соответствующей таблице. У строковых переменных была своя область.

Одна оптимизация производительности BBC BASIC включала использование нескольких связанных списков для поиска переменных, а не одного длинного списка, как в Microsoft BASIC .

Управление памятью [ править ]

Из-за небольшого объема оперативной памяти большинства систем, изначально использовавшихся для работы интерпретаторов BASIC, пришлось использовать умные методы управления памятью. Altair BASIC позволяет пользователям освободить место для функций тригонометрии, если они не использовались во время сеанса. PATB помещал начало наиболее распространенных подпрограмм в начало программы для использования однобайтовым RSTкодом операции 8080 вместо 3-байтового CALLкода операции. В LLL BASIC некоторые переменные занимали одни и те же ячейки памяти в случаях, когда разные переменные использовались только в командном режиме или только во время выполнения. [101]

Видео часто было адресуемым в памяти, и определенные эзотерические функции были доступны путем манипулирования значениями в определенных значениях памяти. Например, адреса с 32 по 35 содержат размеры текстового окна (в отличие от графического окна) в Applesoft BASIC. Команда POKEи PEEKфункция (адаптированные из мониторов машинного кода, таких как монитор DECsystem-10 [102] ) обеспечивали прямой доступ к памяти для различных целей [103], особенно для изменения специальных аппаратных регистров с отображением в память. для управления определенными функциями компьютера, такими как периферийные устройства ввода / вывода. «Карты памяти» (в архаическом смысле списков адресов памяти и их функций) были популярны для использования с PEEK и POKE , при этом одной из самых известных карт памяти была книга Mapping the Atari , написанная Яном Чедвиком.

Математика [ править ]

Integer BASIC, как следует из названия, использует целые числа в качестве основы для своего математического пакета. Они хранились внутри как 16-битные числа с прямым порядком байтов (как и 6502). Это допускало максимальное значение для любых вычислений между -32767 и 32767. Вычисления, которые привели к значениям за пределами этого диапазона, привели к ошибке. [104]

Большинство интерпретаторов Tiny BASIC (а также Sinclair BASIC 4K) поддерживали математику, используя только целые числа, без поддержки с плавающей запятой . Использование целых чисел позволило хранить числа в гораздо более компактном 16-битном формате, который можно было читать и обрабатывать быстрее, чем 32- или 40-битные форматы с плавающей запятой, присутствовавшие в большинстве BASIC того времени. Однако это ограничивало его применимость в качестве языка общего назначения.

Реализации Business BASIC , такие как Data General Business Basic , также были только целочисленными, но обычно с более высокой точностью: «двойная точность», то есть 32-битная (плюс-минус 2147483648) и «тройная точность» (плюс-минус 1,4x10 ^ 14).

Иногда использовались другие форматы компьютерных чисел . Например, Миноль Крошка BASIC поддерживается только неподписанные байт , [84] и микро-BASIC Крошка BASIC используется двоично - десятичном . [105] Но преобладает числа с плавающей запятой.

Плавающая точка [ править ]

Одна история объясняет, почему плавающая точка считалась такой важной. Первоначальный прототип TRS-80 Model I запускал публичную версию Tiny BASIC Ли-Чен Вана . Это требовало всего 2 КБ памяти для интерпретатора , оставляя в среднем еще 2 КБ свободными для пользовательских программ в обычных 4-килобайтных схемах памяти ранних машин. Во время демонстрации руководству тогдашний президент Tandy Corporation Чарльз Тэнди попытался указать свою зарплату, но не смог. Это произошло потому, что Tiny BASIC использовал 2-байтовые целые числа со знаком с максимальным значением 32 767. Результатом стал запрос на вычисления с плавающей запятой для производственной версии. [106]Это привело к замене существующего 16-битного целочисленного кода версией, использующей 32-битные числа с плавающей запятой одинарной точности, сотрудником Tandy Стивом Лейнингером. [107]

SCELBAL использовал процедуры с плавающей запятой , опубликованные Wadsworth в 1975 году в Machine Language Programming для 8008, основанные на 32-битном (четырехбайтовом) формате для числовых вычислений, с 23-битной мантиссой , 1-битным знаком для мантиссы, 7- битовая экспонента и 1-битный знак для экспоненты. Они были организованы в обратном порядке: младший байт мантиссы в первом байте, за ним следует средний, а затем старший байт со знаком в старшем бите. Показатель был последним, снова со знаком в старшем бите. [108] В руководстве содержится хорошо документированный ассемблерный код для всего математического пакета, включая точки входа и примечания по использованию. [109]

Консультантам обычно приходилось заниматься арифметикой с плавающей запятой , специализированной областью, хорошо изученной и разработанной для научных и коммерческих приложений, характерных для мэйнфреймов. Когда Аллен и Гейтс разрабатывали Altair BASIC, коллега из Гарварда Монте Давидофф убедил их отказаться от целочисленной арифметики . Они наняли Давидоффа для написания пакета с плавающей запятой, который все еще мог уместиться в пределах 4 КБ памяти. Стив Возняк обратился к Рою Рэнкину из Стэнфордского университета с просьбой реализовать трансцендентные функции LOG, LOG10 и EXP; [110] Однако Возняк так и не закончил добавлять поддержку операций с плавающей запятой в Integer BASIC. LLL BASIC, разработанный в Университете Айдахо Джоном Дикенсоном, Джерри Барбером и Джоном Титером, обратился к Дэвиду Миду, Хэлу Брэнду и Фрэнку Олкену за их поддержкой с плавающей запятой. [111] Для UIUC BASIC был лицензирован пакет с плавающей запятой Datapoint 2200 . [112]

Напротив, системы с разделением времени часто полагались на оборудование. Например, GE-235 был выбран для реализации первой версии Dartmouth BASIC именно потому, что он имел « вспомогательный арифметический блок » для вычислений с плавающей запятой и двойной точности. [113] [114]

Ранние интерпретаторы использовали 32-битные форматы, аналогичные двоичному формату с плавающей запятой одинарной точности IEEE 754 , который определяет:

  • Знаковый бит : 1 бит
  • Ширина экспоненты : 8 бит
  • Существенная точность : 24 бита (23 сохранены явно)

Вот значение 0,15625, сохраненное в этом формате:

В то время как 32-битные форматы были распространены в ту эпоху, более поздние версии BASIC, начиная с Microsoft BASIC для MOS 6502 , обычно использовали 40-битный (пятибайтовый) формат для дополнительной точности. [115]

Операторы и функции [ править ]

Инфиксные операторы обычно включают +(сложение), -(вычитание), *(умножение), /(деление) и показатель степени с использованием ^символа. Относительные операции включали в себя стандартный набор =, >, <, >=, <=, и «не равно» либо <>или HP-TSB -inspired #. [116] Бинарные операторы, такие как AND, ORи NOT, присутствовали не во всех реализациях, некоторые выполняли логическую алгебру, а некоторые нет.

Первоначальная версия Dartmouth BASIC включала следующие функции: ABS( абсолютное значение ), ATN( арктангенс ), COS( косинус ), EXP( e в степени), INT(усечение любого дробного значения, возвращение целого числа), LOG( логарифм ), RND( генератор псевдослучайных чисел ) , SIN( синус ), SQR( квадратный корень ) и TAN( касательная ). Он также включал DEF FNоператор для объявления однострочных функций, которые затем будут называться FNA(), FNB()и т. Д.

Эта RNDфункция была самой распространенной функцией, которая поддерживалась в ранних BASIC, хотя реализации были разными:

  • Дартмут RNDигнорировал параметр и всегда возвращал новое псевдослучайное число от 0 до 1.
  • В Altair BASIC и более поздних версиях Microsoft BASIC использовался знак параметра: для RND (X) «X <0 запускает новую последовательность случайных чисел с использованием X. Вызов RND с тем же X запускает ту же последовательность случайных чисел. X = 0 дает последнее сгенерированное случайное число ". [117]
  • Будучи не в состоянии вернуть десятичное целое число, BASIC вместо этого использовал значение параметра, как правило, для указания верхней границы для рандомизации; например, в самом Integer BASIC RND(6)+1имитирует бросок кубика, возвращая значения от 1 до 6.
  • Напротив, в некоторых TRS-80 BASIC параметр был верхней границей, которая могла быть возвращена; например, RND(6)вернет значение от 1 до 6 и RND(1)всегда вернет 1. [118]

Массивы [ править ]

Вторая версия Dartmouth BASIC поддерживала матрицы и матричные операции , полезные для решения систем одновременных линейных алгебраических уравнений; MATподдерживались операции с матрицами, такие как присваивание, сложение, умножение (совместимых типов матриц) и оценка определителя.

Напротив, в Tiny BASIC в первоначальном виде даже не было никаких массивов из-за ограниченной оперативной памяти, доступной на ранних микрокомпьютерах , часто 4 КБ, которая должна была включать как интерпретатор, так и программу BASIC. Пало - Альто Крошка BASIC добавлен единый массив переменной длины целых чисел, размер которых не должны иметь такие размеры , но используется RAM не используется интерпретатором или программы листинга, A().

SCELBAL поддерживал несколько массивов, но вместе эти массивы не могли содержать более 64 элементов. Целочисленный BASIC поддерживает массивы одного измерения, размер которых ограничен только доступной памятью. [119] Tiny BASIC Extended поддерживал двумерные массивы размером до 255 на 255. Altair BASIC 4K поддерживал только массивы (одно измерение), в то время как версия 8K поддерживала матрицы до 34 измерений. [120]

Многие реализации поддерживали практику Dartmouth BASIC, не требующую измерения массива, и в этом случае предполагалось, что он имеет 11 элементов (от 0 до 10); например, {{{1}}}в качестве побочного эффекта создаст массив из 11 элементов.

Дурман вектор массивов варьировался от реализации к реализации. Например, вектор допинга массива Altair BASIC 4K: [95]

  • Имя переменной (2 байта)
  • Размер элементов массива в байтах (2 байта, то есть в 4 раза больше количества элементов, которое было верхней границей плюс один)

Затем сами значения массива:

  • Значение элемента 0 (4 байта)
  • Значение элемента 1 (4 байта)
  • ...
  • Значение элемента N (4 байта)

Реализации, поддерживающие матрицы, должны были записывать количество измерений и верхнюю границу каждого измерения. Кроме того, поскольку у некоторых интерпретаторов был только один тип данных (либо с плавающей запятой, либо целочисленный), допинговый вектор просто нуждался в регистрации количества измерений и верхней границы каждого измерения. Интерпретаторы с несколькими типами данных должны были записывать тип данных массива.

Несмотря на то, что Microsoft и другие BASIC поддерживали матрицы, матричные операции не были встроены, и их нужно было явно программировать для элементов массива.

Строки [ править ]

В исходном Dartmouth BASIC, некоторых его непосредственных потомках и реализациях Tiny BASIC отсутствовала обработка строк. Появились две конкурирующие школы обработки струн, первыми из которых стали HP и DEC, хотя позже появились и другие подходы. Для их реализации потребовались разные стратегии.

Простейшая обработка строк скопировала HP Time-Shared BASIC и определила строковые переменные как массивы символов, которые необходимо было DIMобъединить перед использованием. Строки в HP TSB обрабатываются как массив символов, всего до 72 символов, а не как один многосимвольный объект. По умолчанию им выделяется один символ в памяти, и если требуется строка большей длины, их необходимо объявить. Например, настроит строку, которая может содержать не более 10 символов. [121]DIM A$[10]

Доступ к подстрокам в строках осуществляется с использованием нотации « срезов »: или , где подстрока начинается с крайнего левого символа, указанного индексом L, и продолжается до крайнего правого символа, указанного индексом R, или формы, в которой подстрока начинается с крайнего левого символа указывается индексом L и продолжается до конца строки. TSB принимает () или [] взаимозаменяемо. Индексы массива и подстроки начинаются с 1.A$(L,R)A$[L,R]A$[L]

Это резко контрастирует к основам следующих шаблона DEC , которые используют функции , такие как LEFT$(), MID$()и RIGHT$()для подстрок доступа. Позднее принятая в ANSI BASIC нотация HP может также использоваться на стороне назначения оператора LETor 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. [121] ). Кроме того, можно использовать одинарные кавычки для преобразования числовой константы в символ ASCII, что позволяет строить строку по частям. ; A$='23 '64 '49 "DEF"произвел строку «ABCDEF» без необходимости в CHR$()функции. [121] Шестое издание Dartmouth BASIC поддержано SEG$(для MID$) и POS(для INSTR).

Integer BASIC, North Star BASIC [122] и Atari BASIC [123] имитировали подход HP, который снова контрастировал со стилем BASIC, производным от DEC , включая Microsoft BASIC , где строки являются внутренним типом переменной длины. [124]

Некоторые из реализаций Tiny BASIC поддерживали один или несколько предопределенных целочисленных массивов, которые можно было использовать для хранения кодов символов при условии, что язык имел функциональные возможности для ввода и вывода кодов символов (например, Astro BASIC имел KPи TVдля этой цели).

Сборка мусора [ править ]

Пример внешней фрагментации

Использование строками фиксированного объема памяти независимо от количества используемых в них символов, максимум до 255 символов, могло привести к потере памяти [125], но имело преимущество в избежании необходимости реализации сборки мусора из кучи , форма автоматического управления памятью, используемая для освобождения памяти, занятой строками, которые больше не используются. Освободившиеся короткие строки могут храниться в середине других строк, предотвращая использование этой памяти, когда требуется более длинная строка.

На ранних микрокомпьютерах с их ограниченной памятью и медленными процессорами сборка мусора BASIC часто могла вызывать явно случайные, необъяснимые паузы в процессе работы программы. Некоторые интерпретаторы BASIC, такие как Applesoft BASIC в семействе Apple II , неоднократно сканировали строковые дескрипторы для строки с наивысшим адресом, чтобы сжать ее в сторону верхней памяти, что привело к производительности O (n 2 ) , что могло привести к длительности в несколько минут. приостанавливает выполнение строковых программ. Сборка мусора была заведомо медленной или даже неработающей в других версиях Microsoft BASIC. [126]

Другие функции [ править ]

Графика и звук [ править ]

Большинство интерпретаторов BASIC сильно различались графикой и звуком, которые сильно различались от микрокомпьютера к микрокомпьютеру. В Altair BASIC не было графических или звуковых команд, как и в реализациях Tiny BASIC, тогда как Integer BASIC предоставлял богатый набор.

Уровень I BASIC для TRS-80 имел минимальный набор:, CLSдля CLear Screen; SET(X,Y), который освещал место на дисплее; RESET(X,Y), который выключил его; и POINT(X,Y), который возвратил 1, если место было освещено, 0, если это не было. Координаты может быть любое выражение , и в диапазоне от 0 до 127 для X-оси и от 0 до 47 для Y-оси . Поддерживался только черно-белый дисплей. [127]

Напротив, Integer BASIC поддерживает цветную графику, простой звук и игровые контроллеры. Графический режим был включен с помощью GRоператора и выключен с помощью TEXT. [128] Рисование было модальным и обычно начиналось с выдачи команды на изменение цвета, которая выполнялась установкой псевдопеременной; COLOR=12установит цвет рисунка на 12, светло-зеленый. Затем можно PLOT 10,10было создать одно пятно этого цвета [129], HLIN 0,39 AT 20 чтобы нарисовать горизонтальную линию в строке 20, которая охватывает весь экран, или VLIN 5,15 AT 7нарисовать более короткую вертикальную линию в столбце 7. [130] A=SCRN X,Y вернул цвет экрана в X , Y. [131] [b]

текстовый блок графический набор ZX-81

Производители оборудования часто включали проприетарную поддержку полуграфики , простых форм и значков, рассматриваемых как специальные символы . Примеры включали блочную графику ZX-81 и символы карт , ♣, ♥ и ♦ в наборе символов Commodore International PETSCII . BASIC может генерировать эти символы, используя PRINT CHR$();.

Microsoft добавила много графических команды IBM BASIC : LINE, PSET(Pixel SET), PRESET(пиксель RESET), GET(сохраняет прямоугольник экрана на массив), PUT(отображает хранимый прямоугольный сегмент), LOCATE(для перемещения текстового курсора), и DRAW, который рисует формы с использованием синтаксиса, подобного LOGO . Билл Гейтс и Нил Конзен написали DONKEY.BAS , игру в комплекте, чтобы продемонстрировать цветную графику и звук интерпретатора . [132]

Ввод / вывод [ править ]

Другая область, в которой реализации разошлись, заключалась в ключевых словах для работы с носителями (кассетами и гибкими дисками), вводом с клавиатуры и игровыми контроллерами (если таковые имеются).

Поскольку ROM на основе BASIC переводчики часто функционировали в качестве оболочек для загрузки в других приложениях, реализации добавлены команды , связанные с кассетой (например, CLOADи CSAVE), двоичные файлами на диске (например, BLOAD, BSAVE, и BRUN), а также основные программы на диске (например, LOAD, SAVE, и CATALOG). Реализации Business BASIC добавили команды для файлов с произвольным доступом. (Даже интерпретаторы BASIC на основе ПЗУ не были разработаны и не предназначены для использования в качестве операционных систем, а в меньших микрокомпьютерах просто не было ОС вообще. [133] )

В Dartmouth BASIC отсутствовала команда для получения ввода с клавиатуры без остановки программы. Для поддержки видеоигр в BASIC были добавлены специальные команды для этого: INKEY$была функция в Microsoft BASIC , которая возвращала бы пустую строку, если не была нажата ни одна клавиша или какой-либо другой символ; KP(для KeyPress ) вернул значение ASCII ввода в Astro BASIC .

В Palo Alto Tiny BASIC не было строк, но он позволял пользователям вводить математические выражения в качестве ответа на INPUTутверждения; задавая переменные, например Y=1; N=0, пользователь мог ответить «Y», «1» или даже «3 * 2-5» на запрос «да / нет».

Некоторые системы поддерживают игровые контроллеры. Поддерживается Astro BASIC JX()(заданное горизонтальное положение джойстика), JY()(вертикальное положение джойстика), KN()(статус ручки) и TR()(статус триггера). Integer BASIC поддерживал игровой контроллер , контроллер весла , у которого было два контроллера на одном разъеме. Положение контроллера можно прочитать с помощью PDLфункции, передав номер контроллера, 0 или 1, например A=PDL(0):PRINT A, возвращая значение от 0 до 255. [134] [c]

В Integer BASIC не было никаких настраиваемых команд ввода / вывода, а также не было DATAоператора и связанных с ним READ. Чтобы получать данные в программу и из нее, функции ввода / вывода были перенаправлены на выбранный слот карты с помощью PR#xи IN#x, которые перенаправляли вывод или ввод (соответственно) в пронумерованный слот. С этого момента данные можно было отправлять на карту с помощью обычных PRINTкоманд и считывать с нее INPUT. [131] Создание звуков было достигнуто с PEEKпомощью отображенного в памяти местоположения простого «звукового сигнала», −16336. [d]

Структурированное программирование [ править ]

Хотя структурированное программирование на примерах АЛГОЛА 58 и АЛГОЛА 60 было известно Кемени и Курцу при разработке БЕЙСИКа, они адаптировали только цикл for, игнорируя оператор else, цикл while, цикл повторения, именованные процедуры, параметр проходные и локальные переменные. В результате последующие диалекты часто сильно различались по формулировкам, используемым для структурированных методов. Например, WHILE...WEND(в Microsoft BASIC ), WHILE...ENDWHILE(в Turbo-Basic XL ) DO...LOOP WHILEи даже WHILEпредложения (оба в BASIC-PLUS ).

Крошечные BASIC реализаций, только национальный промышленный Basic Language (Нибл) предложил команду цикла любого рода, DO/UNTIL. [136] Это произошло несмотря на то, что изобретатель Tiny BASIC Деннис Эллисон публично сетовал на состояние BASIC. [137]

BBC BASIC был одним из первых микрокомпьютерных интерпретаторов, которые предложили структурированное программирование BASIC с именованными DEF PROC/ DEF FNпроцедурами и функциями, REPEAT UNTILциклами и IF THEN ELSEструктурами, вдохновленными COMAL . BASIC второго поколения - например, SBASIC (1976), BBC BASIC (1981), True BASIC (1983), Beta BASIC (1983), QuickBASIC (1985) и AmigaBASIC (1986) - представили ряд функций в язык, в первую очередь связанный со структурным и процедурно-ориентированным программированием. Обычно нумерация строк в языке опускается и заменяется метками (дляGOTO ) и процедуры, способствующие более простому и гибкому дизайну. [138] Кроме того, были введены ключевые слова и структуры для поддержки повторения, выбора и процедур с локальными переменными.

Следующий пример - в Microsoft QBASIC, третьей реализации Microsoft структурированного BASIC (после Macintosh BASIC в 1984 году и Amiga BASIC в 1985 году). [139]

Пример REM QBASICОбъявление REM Forward - позволяет основному коду вызывать подпрограмму REM, которая определена позже в исходном коде DECLARE SUB PrintSomeStars ( StarCount! )   REM Основная программа следует DO ВХОДА "Сколько звезд вы хотите? (0 бросить)" , NumStars ЗВОНИТЕ PrintSomeStars ( NumStars ) LOOP WHILE NumStars > 0 END       REM определение подпрограммы SUB PrintSomeStars ( StarCount ) REM Эта процедура использует в локальную переменную под названием Stars $ Stars $ = STRING $ ( StarCount , "*" ) PRINT Stars $ END SUB                  

Объектно-ориентированный [ править ]

Первоначальная поддержка объектно-ориентированного программирования предусматривала только повторное использование объектов, созданных на других языках, например, как Visual Basic и PowerBASIC поддерживали компонентную объектную модель Windows . По мере развития интерпретаторов BASIC они добавляли поддержку объектно-ориентированных функций, таких как методы , конструкторы , динамическое выделение памяти , свойства и временное выделение.

Включенный ассемблер [ править ]

ПЗУ Integer BASIC также включает монитор машинного кода , «мини- ассемблер » и дизассемблер для создания и отладки программ на языке ассемблера . [92] [140] [141]

Одной из уникальных особенностей BBC BASIC был встроенный ассемблер , позволяющий пользователям писать программы на языке ассемблера для 6502, а затем и Zilog Z80 , NS32016 и ARM . Ассемблер был полностью интегрирован в интерпретатор BASIC и разделял с ним переменные, которые можно было включать между символами [и], сохранять с помощью * SAVE и * LOAD и вызывать с помощью команд CALL или USR. Это позволило разработчикам писать не только код на языке ассемблера, но и код BASIC для вывода на языке ассемблера, что позволяет использовать методы генерации кода и даже писать простые компиляторы на BASIC.

Казнь [ править ]

Отладка [ править ]

Как и в большинстве BASIC, программы запускались с помощью RUNкоманды, и, как было принято, их можно было направить на конкретный номер строки, например RUN 300. [142] Выполнение можно было остановить в любое время с помощью Ctrl+ C[143], а затем перезапустить с помощью CONTinue ( CONв Integer BASIC. [144]

Для пошагового выполнения инструкцию TRONили TRACEможно использовать в командной строке или поместить в саму программу. Когда он был включен, номера строк распечатывались для каждой строки, которую посещала программа. Функцию можно снова отключить с помощью TROFFили NOTRACE. [145]

В отличие от большинства BASIC, Atari BASIC сканировал только что введенную строку программы и немедленно сообщал об ошибках синтаксиса. Если была обнаружена ошибка, редактор повторно отображал строку, выделяя текст рядом с ошибкой в инвертированном видео .

Во многих интерпретаторах, включая Atari BASIC, ошибки отображаются в виде числовых кодов, а описания печатаются в руководстве. [146] Многие MS-BASIC использовали двухсимвольные сокращения (например, SN для SYNTAX ERROR). Palo Alto Tiny BASIC и Level I BASIC использовали три слова для сообщений об ошибках: «ЧТО?» для синтаксических ошибок: «КАК?» для ошибок времени выполнения, таких как переход к несуществующей строке или числовое переполнение, и "ИЗВИНЕНИЕ" при нехватке памяти.

Разбор [ править ]

В то время как язык BASIC имеет простой синтаксис, математические выражения его не имеют, поддерживая разные правила приоритета для скобок и разные математические операторы. Для поддержки таких выражений требуется реализация синтаксического анализатора рекурсивного спуска . [147]

Этот парсер можно реализовать несколькими способами:

  • В качестве виртуальной машины, как обсуждалось выше для многих реализаций Tiny BASIC. Ценность инициативы Tiny BASIC заключалась в определении реализации синтаксического анализатора.
  • Как конечный автомат , как в UIUC BASIC IUC, где он был реализован как управляющая таблица . [148]
  • Непосредственно в коде, как в Palo Alto Tiny BASIC и Integer BASIC. В Integer BASIC интерпретатор времени выполнения использовал для выполнения два стека: один для ключевых слов оператора, а другой для оценки параметров. Каждому оператору было дано два приоритета: один, который указывал, где он должен выполняться в многоэтапной операции, например, строка математических операций для определения порядка операций , и другой, который предлагал, когда должна произойти оценка, например, вычисление внутренних значений формула скобок. Когда переменные встречались, их имена анализировались, а затем просматривались в таблице символов. Если он не был найден, он добавлялся в конец списка. Адрес хранилища переменной, возможно, только что созданный, затем помещался в стек оценки. [92]

Производительность [ править ]

Диапазон проектных решений, которые использовались при программировании интерпретатора BASIC, часто проявлялся в различиях в производительности.

Реализации линейного управления часто влияли на производительность и обычно использовали линейный поиск . Разделение каждой строки символом CR приведет к переходу GOTO или GOSUB к более поздней строке, что займет больше времени, так как программе потребуется перебрать все строки, чтобы найти целевой номер строки. В некоторых реализациях, таких как Atari BASIC, длина каждой строки записывалась и сохранялась после номера строки, так что программе не приходилось сканировать каждый символ строки, чтобы найти следующий возврат каретки. Многие реализации всегда будут искать номер строки, к которой следует перейти от начала программы; MS-BASIC будет искать из текущей строки, если номер строки назначения был больше. Питтман добавил к своему 6800 Tiny BASIC патч, позволяющий использовать двоичный поиск. [149]

Работа исключительно с целочисленной математикой дает еще один существенный прирост скорости. Поскольку многие компьютерные тесты того времени были небольшими и часто выполняли простую математику, не требующую операций с плавающей точкой, Integer BASIC превзошел большинство других BASIC. [e] В одном из самых ранних известных тестов микрокомпьютеров, тестах Rugg / Feldman , Integer BASIC был более чем в два раза быстрее, чем Applesoft BASIC на той же машине. [151] В Byte Sieve , где математика была менее важна, но преобладали доступ к массивам и производительность циклов, Integer BASIC занял 166 секунд, а Applesoft - 200. [152] Он не появился в Creative Computing Benchmark., который был впервые опубликован в 1983 году, к тому времени Integer BASIC больше не предоставлялся по умолчанию. [153] Следующая серия тестов, взятая из обеих исходных статей Rugg / Feldman, [151] [150] показывает производительность Integer относительно производного от MS BASIC на той же платформе.

Теоретически Atari BASIC должен был работать быстрее, чем современные BASIC, основанные на шаблоне Microsoft. Поскольку исходный код полностью токенизируется при вводе, все этапы токенизации и синтаксического анализа уже завершены. Даже сложные математические операции готовы к запуску, любые числовые константы уже преобразованы во внутренний 40-битный формат, а значения переменных ищутся по адресу, а не по запросу. Несмотря на эти теоретические преимущества, на практике Atari BASIC работает медленнее, чем другие домашние компьютеры BASIC, часто намного. [154] На практике это не подтвердилось. На двух широко используемых ориентирах той эпохи, Решете Эратосфена журнала Byte иТест Креативный Вычислительный тест написанный David H. Ahl , Атари закончил в конце списка с точки зрения производительности, и был намного медленнее , чем современный Apple II или Commodore PET , [155] , несмотря на наличие на тот же процессор , но работает он примерно в два раза быстрее любого из них. Он финишировал позади относительно медленных машин, таких как Sinclair ZX81, и даже некоторых программируемых калькуляторов. [156]

Большая часть медлительности языка связана с тремя проблемами. [154] Во-первых, математические процедуры с плавающей запятой были плохо оптимизированы. В тесте Ahl операция с одной экспонентой, которая внутренне перебирает функцию медленного умножения, во многом была причиной плохих результатов машины. [154] Во-вторых, преобразование между внутренним форматом с плавающей запятой и 16-битными целыми числами, используемыми в некоторых частях языка, было относительно медленным. Внутри эти целые числа использовались для номеров строк и индексации массивов, а также для некоторых других задач, но числа в токенизированной программе всегда хранились в двоично-десятичном формате (BCD). [157] Каждый раз, когда встречается одно из них, например, в номере строки вGOTO 100, токенизированное значение BCD необходимо преобразовать в целое число - операция, которая может занять до 3500 микросекунд. [158] Другие BASIC избегали этой задержки, используя специальный регистр для преобразования чисел, которые могли быть только целыми числами, например, номер строки после a GOTO, переключаясь на специальный код ASCII-to-integer для повышения производительности. В-третьих, в Atari BASIC реализованы ветки и FORциклы. Чтобы выполнить переход в GOTOили GOSUB, интерпретатор ищет во всей программе соответствующий номер строки, который ему нужен. [159]Одним из незначительных улучшений, обнаруженных в большинстве основанных на Microsoft BASIC, является сравнение номера целевой строки с текущим номером строки и поиск вперед от этой точки, если он больше, или запуск сверху, если меньше. Это улучшение отсутствовало в Atari BASIC. [154] В отличие от почти всех других BASIC, которые помещали указатель на расположение в FORстеке, поэтому, когда он достигал, NEXTон мог легко вернуться к нему FORснова за одну операцию ветвления, Atari BASIC вместо этого вставлял номер строки. Это означало, что каждый раз, когда NEXTвстречался a , системе приходилось перебирать всю программу, чтобы найти соответствующую FORстроку. В результате любые циклы в программе Atari BASIC вызывают большую потерю производительности по сравнению с другими BASIC.[154]

См. Также [ править ]

  • Список ОСНОВНЫХ диалектов
  • Список компьютеров со встроенным BASIC

Примечания [ править ]

  1. ^ Microsoft BASIC оставил 780 байт свободными для кода программы пользователя и значений переменных на машине размером 4 КБ, и на ней была запущена урезанная версия без строковых переменных и других функций.
  2. ^ Обратите внимание на странный синтаксис SCRN, который технически является функцией, потому что он возвращает значение, но не использует синтаксис, подобный функции, который мог бы бытьA=SCRN(X,Y).
  3. ^ В руководстве предполагается, но не прямо указано, что фактический диапазон значений меньше 0–255. [134]
  4. ^ Отрицательное число является побочным эффектом хранения целых чисел в формате со знаком, поэтому любая ячейка памяти более 32767 отображается в BASIC как отрицательное значение. [135]
  5. ^ Билл Гейтс жаловался на это, заявляя, что было бы несправедливо сравнивать Integer BASIC с "настоящим" BASIC, таким как MS. [150]

Ссылки [ править ]

  1. ^ «IBM VS мир: вот как это есть» . Компьютерный мир . 5 декабря 1973 г.
  2. ^ "Описание процессора Hewlett-Packard 2100, 1972" (PDF) . Проверено 18 августа 2020 .
  3. ^ «Можем ли мы получить полную хронологию операционной системы IRIS для Data General Novas?» . Проверено 5 августа 2020 .
  4. ^ Savetz, Кевин (апрель 2013). «Дэйв Аль и Бетси А» (Интервью).
  5. ^ "Старые компьютеры: HP-9830A" . Проверено 18 августа 2020 .
  6. ^ BASIC Language Interpreter для микропроцессора Intel 8008 . Департамент компьютерных наук Университета Иллинойса в Урбана-Шампейн (опубликовано в 1974 г.). Июнь 1974 г.
  7. ^ "У нас есть БЕЙСИК" . Музей естественной истории и науки Нью-Мексико . Архивировано из оригинального 30 ноября 2012 года . Проверено 18 апреля 2007 года .
  8. ^ Фиск, Натан (2009). Понимание интернет-пиратства . ABC-CLIO. п. 14. ISBN 9780313354748.
  9. ^ Hertzfeld 1985 .
  10. ^ Питтман, Том. «чтобы получить его, нужно было заплатить 5 долларов вперед…» . www.ittybittycomputers.com . Проверено 14 июня 2017 года .
  11. ^ Арнольд, Марк; Уодсворт, Нат (февраль 1976a). «SCELBAL - язык высокого уровня для систем 8008/8080» . Журнал доктора Добба . Vol. 1. С. 30–34.
  12. ^ "Часть 1 LLL 8080 BASIC Interpreter" (PDF) .
  13. ^ Лоренцо 2017 , стр. 118.
  14. ^ Курран, Лоуренс Дж .; Шфорд, Ричард С. (ноябрь 1983 г.). "Эстридж IBM" . БАЙТ . С. 88–97 . Проверено 19 марта 2016 .
  15. Перейти ↑ Wilkinson 1982 , pp. Iv – v.
  16. ^ Cromemco 1978 .
  17. Перейти ↑ Wilkinson 1982 , p. ix.
  18. Перейти ↑ Wilkinson 1982 , p. v.
  19. ^ "Видеопроцессор для компьютера Acorn / BBC" . BBC News . Проверено 30 ноября 2010 года .
  20. ^ «BBC Micro зажигает воспоминания о революции» . BBC News . 21 марта 2008 . Проверено 30 ноября 2010 года .
  21. ^ http://www.sacnews.net/adamcomputer/09.html
  22. ^ Смит, Тони (12 февраля 2014 г.). «Вы НЕ уволены: история удивительной CPC 464 Амстрада» . Реестр . Проверено 17 февраля 2014 года .
  23. ^ Льен, Дэвид (1981). Справочник BASIC (Второе изд.). Сан-Диего, Калифорния: Compusoft Publishing. п. внутренняя крышка. ISBN 0-932760-00-7.
  24. ^ Лоренцо 2017 , стр. 83.
  25. ^ Гейтс, Билл . «Интервью Билла Гейтса» . Национальный музей американской истории, Смитсоновский институт (интервью). Беседовал Дэвид Эллисон . Проверено 10 апреля 2013 года .
  26. Перейти ↑ Malloy, Rich (май 1983). "Маленький большой компьютер / Портативный компьютер TRS-80 Model 100" . БАЙТ . п. 14 . Проверено 19 октября 2013 года .
  27. ^ Лоренцо 2017 , стр. 122.
  28. ^ Уильямс, Грегг (февраль 1984). «Компьютер Apple Macintosh». БАЙТ . п. 30.
  29. ^ "Mac GUI :: Re: Re: MAC Basic vs MS Basic?" . macgui.com . Проверено 23 января 2015 года .
  30. ^ Манес, Стивен; Эндрюс, Пол (21 января 1994). Гейтс: Как могол из Microsoft заново изобрел индустрию и стал самым богатым человеком в Америке: Стивен Мейнс, Пол Эндрюс: 9780671880743: Amazon.com: Книги . ISBN 0671880748.
  31. ^ Билл Аткинсон интервью на телешоу триангуляции на TWiT.tv сети
  32. ^ "Был ли Family BASIC для NES / Famicom достаточно мощным, чтобы создавать полноценные игры и приложения?" . Проверено 27 августа 2020 .
  33. Томас, Нил (19 августа 2019 г.). "STOS & Amos - Франсуа Лионет | Ретро чайная пауза" . Дата обращения 11 мар 2020 .
  34. ^ Плант, Роберт Т .; Мюррелл, Стивен (2007). Руководство по информационным технологиям для руководителей . Издательство Кембриджского университета . п. 343 . ISBN 978-0-521-85336-1. Сводка положительных моментов: Visual Basic легко изучить и широко доступен.
  35. ^ «История Visual Basic» . www.johnsmiley.com .
  36. ^ Фрэнк Видувилт (октябрь 2008 г.). «Программирование с помощью Gambas Basic IDE» . Журнал Linux Pro . Проверено 10 декабря 2011 .
  37. ^ «О создателях игры - TheGameCreators» .
  38. ^ "Небольшая базовая загрузка" . Проверено 7 сентября 2020 .
  39. ^ Шайю, Эммануэль; Манури, Паскаль; Пагано, Бруно (2002). Разработка приложений с помощью Objective Caml . Франция: О'Рейли. ISBN 2841771210.
  40. Прайс, Эд (29 апреля 2014 г.). "Малая базовая учебная программа" . TechNet . Microsoft . Проверено 9 февраля 2014 .
  41. ^ Цена, Эд; Такахаши, Нонки (25 февраля 2014 г.). «Руководство по началу работы с Small Basic» . TechNet . Microsoft . Проверено 12 февраля 2015 года .
  42. ^ "Small Basic" . Дата обращения 6 сентября 2020 .
  43. Прайс, Эд (22 октября 2012 г.). «Уникальные особенности Small Basic» . Маленький базовый . TechNet. Microsoft . Проверено 22 апреля 2015 года .
  44. Прайс, Эд (8 октября 2012 г.). "Каковы 14 ключевых слов в Small Basic?" . Маленький базовый . Блоги MSDN. Microsoft . Проверено 9 февраля 2014 .
  45. ^ https://techcommunity.microsoft.com/t5/Small-Basic-Blog/Announcing-Small-Basic-Online-1-0-Public-Preview/ba-p/353682
  46. ^ https://social.technet.microsoft.com/wiki/contents/articles/52801.microsoft-small-basic-online-v1-0-cs-installation-guide.aspx
  47. ^ «Авторы robinhedwards / ArduinoBASIC» .
  48. ^ «BleuLlama / TinyBasicPlus: реализация Tiny Basic для AC с упором на поддержку Arduino» . Проверено 11 сентября 2020 .
  49. ^ "Vintage BASIC - Home" . Проверено 11 сентября 2020 .
  50. ^ Ensmenger, Nathan (2010). Компьютерные мальчики берут верх . п. 55. ISBN 978-0-262-05093-7.
  51. ^ Возняк 2014 .
  52. ^ Руководство по языку BASIC-PLUS (PDF). Мейнард, Массачусетс: Digital Equipment Corporation. 1972. С. 3–13.
  53. ^ Лоренцо 2017 , стр. 106.
  54. Эллисон, Деннис (июль 1976 г.). «Заметки по дизайну для TINY BASIC». Уведомления SIGPLAN . ACM. 11 (7): 25–33. DOI : 10.1145 / 987491.987494 . S2CID 18819472 . ACM Special Interest Group по Языки программирования (SIGPLAN) перепечатали Крошечные Основные ноты дизайн с января 1976 года малолетка BASIC Journal.
  55. ^ Эллисон, Деннис (1976). «Создайте свой собственный БЕЙСИК» . Журнал доктора Добба . Vol. 1 шт. 1. п. 9.
  56. ^ Эллисон, Деннис (1976). «Краткое руководство по Tiny BASIC» . Журнал доктора Добба . Vol. 1 шт. 1. п. 6.
  57. ^ "ZX80 - ОБНОВЛЕНИЕ БАЗОВОГО ПЗУ 8K" .
  58. ^ a b BASIC Language Interpreter для микропроцессора Intel 8008 . Департамент компьютерных наук Университета Иллинойса в Урбана-Шампейн (опубликовано в 1974 г.). Июнь 1974. С. 16–19.
  59. ^ «Таблица кодов ТБ». Журнал доктора Добба по компьютерной гимнастике и ортодонтии, «Бегущий свет без избыточного байта» . 1 (1). Декабрь 1975 г.
  60. ^ "Micro Basic Роберта Уитервика" .
  61. ^ Weyhrich 2001 , [Integer] BASIC, который мы поставляли с первыми Apple II, никогда не собирался. Была одна рукописная копия, все рукописные, все собранные вручную ...
  62. ^ Возняк 2018 .
  63. ^ Уоллес, Джеймс; Джим Эриксон (1992). Жесткий диск: Билл Гейтс и создание империи Microsoft . Джон Вили и сыновья. С.  81–83 . ISBN 0-471-56886-4.
  64. ^ Гейтс, Билл (январь 1976 г.). «Открытое письмо любителям» . Информационный бюллетень Homebrew Computer Club . Маунтин-Вью, Калифорния: Клуб домашних компьютеров. 2 (1): 2.
  65. ^ "У нас есть БЕЙСИК" . Музей естественной истории и науки Нью-Мексико. Архивировано из оригинального 23 марта 2012 года . Проверено 18 апреля 2007 .
  66. ^ Уоллес, Джеймс; Джим Эриксон (1992). Жесткий диск: Билл Гейтс и создание империи Microsoft . Джон Вили и сыновья. п. 78 . ISBN 0-471-56886-4.
  67. ^ "XBASIC - разговорный BASIC интерпретатор" . Проверено 7 сентября 2020 .
  68. ^ http://home.iae.nl/users/mhx/basic.frt . Проверено 23 сентября 2020 . Отсутствует или пусто |title=( справка )
  69. Перейти ↑ Wilkinson, O'Brien & Laughton 1983 .
  70. ^ "Встроенные операторы BASIC-PLUS, действительно ли они имеют смысл?" . Проверено 5 августа 2020 .
  71. ^ Аллен, Деннис. "МАЛЕНЬКИЙ БАЗОВЫЙ". Народная компьютерная компания . Vol. 4 шт. 3.
  72. ^ Гриннинг, Бернард (1976). "Исправленный Tiny BASIC IL" . Журнал доктора Добба . Vol. 1 шт. 1. п. 12.
  73. ^ Вейт, Хольгер. "6800 крошечный БЕЙСИК Тома Питтмана" . Дата обращения 2 мая 2017 .
  74. ^ Nouspikel, Тьерри. «GPL: язык программирования графики» . Дата обращения 2 августа 2020 .
  75. ^ «Я вырос и изучил основы на TI-99 / 4a. Это было чудесное и простое время ...» Hacker News . Дата обращения 2 августа 2020 .
  76. Возняк 1977 , стр. 43.
  77. ^ Программа Apple Programmers Aid (PDF) . Яблоко. 1978 г.
  78. Раскин 1978 , стр. 11.
  79. Раскин 1978 , стр. 46.
  80. Перейти ↑ Raskin 1978 , pp. 49–55.
  81. Перейти ↑ Raskin 1978 , pp. 65–67.
  82. ^ "Tiny BASIC Extended". Журнал доктора Добба по компьютерной гимнастике и ортодонтии, «Бегущий свет без избыточного байта» . 1 (2). Февраль 1976 г.
  83. ^ "Денвер Крошечный ОСНОВНОЙ". Журнал доктора Добба по компьютерной гимнастике и ортодонтии, «Бегущий свет без избыточного байта» . 1 (3). Март 1976 г.
  84. ^ а б "МИНОЛ". Журнал доктора Добба по компьютерной гимнастике и ортодонтии, «Бегущий свет без избыточного байта» . 1 (4). Апрель 1976 г.
  85. ^ a b Раусколб, Роджер (декабрь 1976 г.). "Крошечный БЕЙСИК Пало-Альто доктора Ванга" (PDF) . Возраст интерфейса . С. 92–108.
  86. Эллисон, Деннис (январь 1976 г.). «Замечания по дизайну для Tiny BASIC» . Журнал доктора Добба . Vol. 1 шт. 1. п. 9.
  87. Эллисон, Деннис (январь 1976 г.). «Создайте свой собственный БЕЙСИК» . Журнал доктора Добба . Vol. 1 шт. 1. п. 8.
  88. ^ Steil, Майкл (13 января 2015). «Microsoft BASIC для оригинального исходного кода 6502» .
  89. ^ "Токенизированный файл MBASIC" . Просто решите проблему с форматом файла . Дата обращения 2 августа 2020 .
  90. ^ Хардиман, Роджер. «Альтаир Бейсик 3.2 (4K) - Аннотированная разборка» . п. 1.11. Архивировано из оригинала 5 ноября 2001 года.
  91. ^ Пол Р. Санта-Мария. «Базовая разборка Apple II Integer» (PDF) . Проверено 14 сентября 2020 .
  92. ^ a b c Возняк 1977 , стр. 42.
  93. Перейти ↑ Wilkinson, O'Brien & Laughton 1983 , p. 5.
  94. Перейти ↑ Vickers 1983 , p. 7–8.
  95. ^ a b «BASIC Interpreter - Explained» . Проверено 15 сентября 2020 .
  96. ^ "Часть 1 LLL 8080 BASIC Interpreter" (PDF) .
  97. Раскин 1978 , стр. 118.
  98. Ван, Ли-Чен (май 1976 г.). "Пало-Альто Крошечный БЕЙСИК". Журнал доктора Добба по компьютерной гимнастике и ортодонтии, «Бегущий свет без избыточного байта» . 1 (5): 12–25.
  99. Раскин 1978 , стр. 38.
  100. ^ "Часть 1 LLL 8080 BASIC Interpreter" (PDF) .
  101. ^ "Часть 1 LLL 8080 BASIC Interpreter" (PDF) .
  102. ^ "Какая самая старая ссылка на PEEK, POKE и USR?" . Дата обращения 15 августа 2020 .
  103. ^ Altair 8800 BASIC Reference_Manual 1975 , стр. 68 PDF, «Используя функцию PEEK и оператор OUT 8K BASIC, пользователь может написать программу двоичного дампа на BASIC. Используя INP и POKE, можно написать двоичный загрузчик. PEEK и POKE может использоваться для хранения байтовой информации. Когда вы инициализируете BASIC, ответьте на вопрос MEMORY SIZE?, Указав объем памяти в вашем ALTAIR за вычетом объема памяти, который вы хотите использовать в качестве хранилища для данных в байтовом формате ».
  104. Раскин 1978 , стр. 27.
  105. ^ "БЕЙСИК Роберта Уитервика" .
  106. Валлийский, Дэвид; Валлийский, Тереза ​​(2007). Заправка насоса: как энтузиасты TRS-80 помогли спровоцировать революцию в области ПК . п. 7.
  107. ^ Рид, Мэтью. «Уровень I БАЗОВЫЙ» . TRS-80.org . Проверено 27 августа 2017 года .
  108. Арнольд и Уодсворт, 1976 , стр. 10.1.
  109. Перейти ↑ Arnold & Wadsworth 1976 , Глава 10.
  110. ^ "Процедуры с плавающей запятой для 6502". Журнал доктора Добба по компьютерной гимнастике и ортодонтии, «Бегущий свет без избыточного байта» . 1 (7). Август 1976 г.
  111. ^ "Часть 1 LLL 8080 BASIC Interpreter" (PDF) .
  112. ^ BASIC Language Interpreter для микропроцессора Intel 8008 . Департамент компьютерных наук Университета Иллинойса в Урбана-Шампейн (опубликовано в 1974 г.). Июнь 1974. с. 20.
  113. ^ "Документы GE-2xx" . www.bitsavers.org . CPB-267_GE-235-SystemManual_1963.pdf , стр. IV-4.
  114. ^ Лоренцо 2017 , стр. 149.
  115. ^ Steil, Майкл (20 октября 2008). «Создайте свою собственную версию Microsoft BASIC для 6502» .
  116. Раскин 1978 , стр. 61.
  117. ^ MITS Altair BASIC . Альбукерке, Нью-Мексико: MITS. 1975. с. 37.
  118. ^ Льен, Дэвид (1986). Базовый справочник (Третье изд.). Сан-Диего, Калифорния: Compusoft. п. 589. ISBN. 0-932760-33-3.
  119. Раскин 1978 , стр. 94.
  120. ^ MITS Altair BASIC . Альбукерке, Нью-Мексико: MITS. 1975. с. 31.
  121. ^ a b c Справочное руководство HP 2000 / Access BASIC (PDF) . Hewlett Packard. Май 1976 г. , Деталь № 22687-90001
  122. ^ North Star BASIC, версия 6 (PDF) . North Star Corporation. 1977 г.
  123. ^ Справочное руководство ATARI BASIC . Atari Inc., 1980 год.
  124. ^ «Целые числа, переменные с плавающей запятой и строковые переменные». Руководство программиста C64 . Коммодор.
  125. Раскин 1978 , стр. 89.
  126. ^ «Создайте свою собственную версию Microsoft BASIC» .
  127. ^ Льен, Дэвид (1977). Руководство пользователя для Уровня I (Первое изд.). Форт-Уэрт, Техас: Корпорация Тэнди. С. 105–108, 137 . Дата обращения 9 августа 2020 .
  128. Раскин 1978 , стр. 31.
  129. Раскин 1978 , стр. 32.
  130. Раскин 1978 , стр. 33.
  131. ^ а б Раскин 1978 , с. 120.
  132. ^ Лоренцо 2017 , стр. 120.
  133. ^ "Могут ли некоторые интерпретаторы BASIC для микрокомпьютеров считаться операционными системами?" . Проверено 7 августа 2020 года .
  134. ^ а б Раскин 1978 , с. 36.
  135. Mini 1977 , стр. 18.
  136. ^ "НИБЛ". Журнал доктора Добба по компьютерной гимнастике и ортодонтии, «Бегущий свет без избыточного байта» . 1 (10). Ноябрь 1976 г.
  137. ^ "Проблемы с BASIC". Журнал доктора Добба по компьютерной гимнастике и ортодонтии, «Бегущий свет без избыточного байта» . 1 (2). Февраль 1976 г.
  138. ^ «Различия между GW-BASIC и QBasic» . 2003-05-12. Архивировано из оригинала на 2013-10-19 . Проверено 28 июня 2008 .
  139. ^ Лоренцо 2017 , стр. 137.
  140. ^ Helmers 1978 , стр. 18.
  141. ^ Weyhrich 2001 .
  142. Раскин 1978 , стр. 100.
  143. Раскин 1978 , стр. 15.
  144. Раскин 1978 , стр. 52.
  145. Раскин 1978 , стр. 107.
  146. Руководство 1980 , Приложение B.
  147. ^ "Какой тип интерпретатора использовался в большинстве 8-битных реализаций BASIC?" . Проверено 9 августа 2020 года .
  148. ^ BASIC Language Interpreter для микропроцессора Intel 8008 . Департамент компьютерных наук Университета Иллинойса в Урбана-Шампейн (опубликовано в 1974 г.). Июнь 1974. С. 24–36.
  149. ^ Питтман, Том (1981). «Первая книга крошечных программ BASIC» . Retrotechnology.com . Itty Bitty Computers . Проверено 5 августа 2020 года . Поскольку TA настолько велик (19 703 байта), я обнаружил, что выполнение стало мучительно медленным просто из-за сканирования памяти на предмет GOTO, GOSUB и RETURN. Простой патч для интерпретатора преобразует его в алгоритм двоичного поиска , что примерно на порядок ускоряет время выполнения. Необходимые изменения перечислены в Приложении.
  150. ^ a b Рагг, Том; Фельдман, Фил (октябрь 1977 г.). «ОСНОВНЫЕ сравнения сроков… исправлено и обновлено» . Килобода . С. 20–25.
  151. ^ a b Рагг, Том; Фельдман, Фил (июнь 1977 г.). «БАЗОВЫЕ СРАВНЕНИЯ ГРМ… информация для фанатов скорости» . Килобода . С. 66–70.
  152. ^ Гилбрет, Джим (сентябрь 1981). «Тест языка высокого уровня» . Байт . п. 192.
  153. Перейти ↑ Ahl, David (ноябрь 1983 г.). «Сравнительный тест» . Творческие вычисления . п. 260.
  154. ↑ a b c d e Wilkinson 1985 , p. 139.
  155. Перейти ↑ Ahl, David (ноябрь 1983 г.). «Сравнительный тест» . Творческие вычисления . С. 259–260.
  156. Перейти ↑ Ahl, David (январь 1984). «Тест творческих вычислений» . Творческие вычисления . п. 12.
  157. Перейти ↑ Wilkinson, O'Brien & Laughton 1983 , p. 17.
  158. Перейти ↑ Crawford 1982 , p. 8.45.
  159. Перейти ↑ Winner, Lane (1982). "De Re Atari, Глава 10: Atari BASIC" . Atari, Inc.

Библиография [ править ]

  • Арнольд, Марк; Уодсворт, Нат (1976). SCELBAL: язык более высокого уровня для систем 8008/8080 (PDF) . SCELBI Computer Consulting.
  • Справочное руководство ATARI BASIC . Atari Inc. 1980. Архивировано из оригинала на 1 мая 2005 года.
  • Кроуфорд, Крис (1982). De Re Atari . Обмен программами Atari.
  • Cromemco l6K Extended BASIC (PDF) . Cromemco. 1978 г.
  • Герцфельд, Энди (июнь 1985 г.). «Печальная история MacBasic» . Фольклор .
  • Лоренцо, Марк (2017). Бесконечный цикл: история языка программирования BASIC . Филадельфия: SE Books. ISBN 978-1974-27707-0.
  • Раскин, Джеф (1978). Руководство по программированию Apple II BASIC (PDF) . Компьютер Apple.
  • Викерс, Стивен (1983). Sinclair ZX Spectrum BASIC Programming (2-е изд.). Sinclair Research.
  • Вейрих, Стивен (12 декабря 2001 г.). «История, часть 3: Apple II» . Проверено 16 сентября 2007 .
  • Уилкинсон, Билл (1982). Внутри Atari DOS . Optimized Systems Software, Inc. ISBN 0-942386-02-7. Проверено 4 апреля 2009 .
  • Уилкинсон, Билл (февраль 1985). «INSIGHT: Atari» . Творческие вычисления . С. 139–140.
  • Уилкинсон, Билл; О'Брайен, Кэтлин; Лотон, Пол (1983). Справочник по Atari BASIC . Вычислить! Книги. ISBN 0-942386-15-9.
  • Уильямс, Грегг; Мур, Роб (декабрь 1984). «История Apple / Часть 1: Ранняя история» . Байт . стр. A67 – A71 . Проверено 23 октября 2013 года .
  • Возняк, Стивен (май 1977 г.). «Описание системы / Apple-II» . Байт . С. 34–43.
  • Возняк, Стивен (1 мая 2014 г.). «Как Стив Возняк написал BASIC для оригинального яблока с нуля» . Gizmodo .
  • Возняк, Стивен (3 января 2018 г.). «ЯБЛОЧНЫЙ БЕЙСИК» . Woz.org .

Дальнейшее чтение [ править ]

Исходный код и проектная документация в хронологическом порядке выпуска реализаций BASIC:

  • Уивер, Альфред; Тиндалл, Майкл; Дэниэлсон, Рональд (июнь 1974 г.). Интерпретатор языка BASIC для микропроцессора Intel 8008 . Департамент компьютерных наук Университета Иллинойса в Урбана-Шампейн (опубликовано в 1974 г.).CS1 maint: uses authors parameter (link)
  • Арнольд, Марк (1977). Дополнение к математическим функциям SCELBAL . SCELBI Computer Consulting.
  • Арнольд, Марк (1977). Дополнение по струнам SCELBAL . SCELBI Computer Consulting.
  • «Альтаир Бейсик 3.2 (4K) - Аннотированная разборка» .
  • Журнал доктора Добба по компьютерной гимнастике и ортодонтии, том 1 . Народная компьютерная компания. 1976 г.
  • Раусколб, Роджер (декабрь 1976 г.). "Крошечный БЕЙСИК Пало-Альто доктора Ванга" (PDF) . Возраст интерфейса . С. 92–108.
  • Питтман, Том (1977). Tiny BASIC Experimenter's Kit .
  • Санта-Мария, Поль. «Базовая разборка Apple II Integer» (PDF) .