~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ B47FCDCFA341FA33BC2343FC3F4F4B6E__1713263700 ✰
Заголовок документа оригинал.:
✰ BASIC interpreter - Wikipedia ✰
Заголовок документа перевод.:
✰ Бейсик-интерпретатор — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/BASIC_interpreter ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/b4/6e/b47fcdcfa341fa33bc2343fc3f4f4b6e.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/b4/6e/b47fcdcfa341fa33bc2343fc3f4f4b6e__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 06:41:57 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 16 April 2024, at 13:35 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Бейсик-интерпретатор — Википедия Jump to content

БЕЙСИК-интерпретатор

Из Википедии, бесплатной энциклопедии
Пример набора популярной программы в интерпретатор Бейсика (в данном случае 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 перестали использоваться по мере того, как компьютеры росли в мощности, а связанные с ними программы становились слишком длинными, чтобы их можно было вводить в качестве разумного формата распространения. Программное обеспечение все чаще поставлялось предварительно скомпилированным и передавалось на дискетах или через системы досок объявлений , что делало необходимость в списках исходных кодов менее важной. Кроме того, все более сложные командные оболочки , такие как MS-DOS и графический интерфейс Apple Macintosh, стали основным пользовательским интерфейсом , и необходимость в BASIC действовать в качестве оболочки отпала. К середине 1980-х годов использование интерпретаторов BASIC в качестве основного языка и интерфейса к системам практически исчезло.

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

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

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

Впервые реализованный как система компиляции, а не интерпретатор, BASIC возник как часть более широкого движения к системам разделения времени . General Electric , работавшая над системой разделения времени Dartmouth и связанным с ней Dartmouth BASIC , написала свою собственную базовую операционную систему и запустила онлайн-систему разделения времени, известную как 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]

Одним из воздержавшихся была Digital Equipment Corporation (DEC), ведущий поставщик миникомпьютеров. Они выпустили новый язык, известный как FOCAL , на основе более раннего JOSS , разработанного на машине DEC в Стэнфордском исследовательском институте в начале 1960-х годов. JOSS во многих отношениях был похож на BASIC, а FOCAL представлял собой версию, предназначенную для работы в системах с очень маленькой памятью, особенно в PDP-8 , которая часто поставлялась с 4 КБ основной памяти . К концу 1960-х годов продавцы DEC, особенно в отделе продаж образовательных услуг, обнаружили, что их потенциальные клиенты не интересуются FOCAL и ищут свои системы в другом месте. Это побудило Дэвида Х. Ала нанять программиста для создания BASIC для PDP-8 и других машин DEC. В течение года весь интерес к альтернативам, таким как JOSS и FOCAL, исчез. [4]

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

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

В июне 1974 года Альфред Уивер, Майкл Тиндалл и Рональд Дэниэлсон из Университета Иллинойса в Урбана-Шампейн в своей одноименной статье доказали возможность создания «Интерпретатора языка BASIC для микропроцессора 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 на бумажной ленте, в результате чего Гейтс написал свое « Открытое письмо любителям» , жалуясь на этот ранний пример программного пиратства . Частично в ответ на письмо Гейта, а частично для того, чтобы сделать Бейсик еще меньшего размера, который можно было бы с пользой работать на машинах с памятью 4 КБ, [а] Боб Альбрехт призвал Денниса Эллисона написать собственную версию языка. Как спроектировать и реализовать урезанную версию интерпретатора языка BASIC, было описано в статьях Эллисона в первых трех ежеквартальных выпусках информационного бюллетеня People's Computer Company , опубликованном в 1975 году, а также в реализациях с исходным кодом, опубликованных в журнале доктора Добба. Tiny BASIC Художественная гимнастика и ортодонтия: бегущий свет без лишнего байта . Это привело к появлению большого разнообразия 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, представленную позже, по мере роста интереса к платформам.

Привет, мир! , с инверсным видео и символом звонка , запустите, а затем перечислите в Applesoft BASIC

Microsoft портировала свой интерпретатор на MOS 6502 , который быстро стал одним из самых популярных микропроцессоров 8-битной эпохи. Когда начали появляться новые микрокомпьютеры, такие как Commodore PET , их производители лицензировали Microsoft BASIC, адаптированную к возможностям оборудования. К 1978 году MS BASIC стал стандартом де-факто , и практически каждый домашний компьютер 1980-х годов включал его в ПЗУ . В 1980 году в рамках более крупного лицензионного соглашения, которое включало другие языки и 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 Microsystems заканчивала разработку Cromemco 16K Structured BASIC для Z80 на базе автобусных машин Cromemco S-100 . [15] [16] Пол Лотон и Кэтлин О'Брайен затем создали Atari BASIC. [17] по сути, это урезанная версия Cromemco BASIC, портированная на 6502. [18] В 1979 году Уоррен Робинетт разработал картридж для программирования BASIC для 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 году Дэвид Лиен опубликовал первое издание « Справочника по BASIC: энциклопедия компьютерного языка BASIC» , в котором описаны ключевые слова на более чем 78 различных компьютерах. К 1981 году второе издание задокументировало ключевые слова с более чем 250 различных компьютеров, демонстрируя взрывной рост эпохи микрокомпьютеров. [23]

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

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

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

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

MacBASIC представлял собой полностью интерактивную среду разработки для оригинального компьютера Macintosh и был разработан Донном Денманом, [28] Марианна Сюн, Ларри Кеньон и Брайан Стернс. [29] MacBASIC был выпущен как бета-версия программного обеспечения в 1985 году и был принят для использования в таких местах, как Дартмутского колледжа факультет информатики , для использования во вводном курсе программирования. Он был обречен стать вторым BASIC, разработанным Apple, вместо BASIC от Microsoft. В ноябре 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 году SmallBASIC был выпущен для КПК Palm . [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]

Мобильный БЕЙСИК для Android

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

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

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

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

Год СМИ Пример
1975 Бумажная лента Альтаир БЕЙСИК
1975 Введите программу Tiny BASIC Расширенный
1976 Кассета Apple I БЕЙСИК
1977 Дискета МИКРО БЕЙСИК
1977 ПЗУ Целочисленный БЕЙСИК
1983 Дискета GW-БЕЙСИК
1995 компакт-диск Визуал Бейсик 4.0
2008 Магазин приложений Различный

Когда рынок перешел на ПЗУ, размер ПЗУ стал доминировать при принятии решений о том, насколько большим может быть интерпретатор 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] Он не знал, что BASIC HP сильно отличался от разновидности BASIC DEC, используемой в 101 Games . Эти два языка принципиально различались с точки зрения обработки строк и структур управления. [52] Data General Business Basic , реализация только целых чисел, послужила источником вдохновения для Atari BASIC. [53]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Виртуальные машины в известных интерпретаторах BASIC
Диалект БЕЙСИКА Язык виртуальной машины Родная машина
Крошечный БЕЙСИК Промежуточный язык Tiny BASIC (TBIL) 6800
НИБЛ Средний язык (IL) СК/МП
ВЫ БАЗОВЫЙ Язык графического программирования (GPL) ТМС9900

Хотя виртуальные машины использовались в системах компиляции и запуска, таких как 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] и НИБЛ.

Для своих компьютеров TI-99/4 и TI-99/4A компания 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работа с программой.

Кодирование и токенизация в известных интерпретаторах BASIC
Диалект БЕЙСИКА Номера строк Ключевые слова Числовые константы Имена переменных
Крошечный БЕЙСИК Да Нет Нет Нет
Альтаир БЕЙСИК Да Да Нет Нет
Целочисленный БЕЙСИК Да Да Да Нет
Атари БЕЙСИК Да Да Да Да

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

В качестве альтернативы токенизации для экономии оперативной памяти использовались ранние реализации Tiny BASIC, такие как Extended Tiny BASIC, [82] Денвер Тайни БЕЙСИК [83] и МИНОЛ [84] сокращенные ключевые слова: PR для PRINT, IN для INPUT, RET для RETURN. Полные традиционные ключевые слова не принимались.

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

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

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

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

MS-BASIC пошли немного дальше, преобразовав номер строки в двухбайтовое значение, а также преобразовав ключевые слова, например FOR или PRINT, в однобайтовое значение, «токен». [88] Для значения токена был установлен старший бит, чтобы их можно было легко отличить во время выполнения. Все остальное в строке было оставлено в исходном формате, например, строка:

 10 ДЛЯ I=1 ДО 10
 

будет токенизирован как:

 $64$81 I$B211$A410
 

Обратите внимание, что пространство между FOR и Iостается в маркированной строке, а имена переменных и констант не маркируются. Код, выполнявший эту токенизацию, известный как «чанкер», просто копировал все, что он не распознавал как токен, обратно в выходные данные, сохраняя пробелы как есть. Это означало, что PRINTA хранился в двух байтах, а PRINT A хранился в трех байтах, и удаление пробелов было распространенным способом улучшить использование памяти. [89] Sinclair BASIC немного изменил это, удалив пробелы из сохраненного кода и вставив их в код во время выполнения. LIST, такой, что PRINTA будет выглядеть как PRINT A но не занимает лишний байт в памяти.

Напротив, Integer BASIC преобразует строку 10 GOTO 100полностью в токены, которые можно было немедленно прочитать и выполнить. В MS-BASIC линия будет выдавать $64 $89 100, и во время выполнения «100» придется конвертировать в 16-битный формат каждый раз, когда он встречается. Напротив, Integer BASIC также маркировал числовые переменные, избегая этого преобразования и ускоряя выполнение. Полученное двухбайтовое значение было вставлено в токенизированный код вместе с префиксным байтом, указывающим последующее число. Префикс был значением между $B0 и $B9 , последний полубайт значения представляет собой первую десятичную цифру исходного значения. Вместо этого строковые литералы, такие как «HELLO WORLD», кодировались путем установки старшего бита каждого символа так, чтобы A хранился как $С1 . Имена переменных были преобразованы таким же образом: буквы были закодированы так, чтобы их старший бит был включен, а любые цифры в имени были представлены соответствующими $B0 через $B9 , так что переменная A5 будет закодировано как $C1B5 (не превращается в токен). [90] Было множество других оптимизаций; где Microsoft BASIC имел один токен для ключевого слова PRINT, Integer BASIC имел три токена: один, если за ключевым словом не следовали аргументы, один, если за ним следовало арифметическое выражение, и один, если за ним следовал строковый литерал. [91]

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

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

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

Некоторые интерпретаторы, такие как системы Sinclair, в основном заставляли пользователя выполнять токенизацию, предоставляя специальные нажатия клавиш для ввода зарезервированных слов. Для наиболее распространенных команд требуется только одно нажатие клавиши; например, нажав только P в начале строки на Спектруме выдает полную команду PRINT. Менее частые команды требуют более сложных последовательностей клавиш. [93] Поскольку каждая строка начинается с ключевого слова, LETне является обязательным, после ввода ключевого слова система возвращается к посимвольному приему текста. Одним из преимуществ этого подхода является то, что токенизатор не может путать строки с ключевыми словами. Например, он позволяет называть переменную PRINT и выведите его значение с помощью PRINT PRINT.

Многие « карманные компьютеры » аналогично используют одно нажатие клавиши (иногда которому предшествуют различные виды клавиш Shift) для создания одного байта (токена ключевого слова), который представляет целое ключевое слово BASIC, например: EXP, SQR, IF или PEEK , например наборы символов для карманных компьютеров Sharp и TI-BASIC . Расширение BASIC для Bally Astrocade также использует это.

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

Допустимые номера строк в ранних реализациях BASIC
Диапазон Диалект
от 1 до 254 МИНОЛ
от 1 до 255 Примечание к дизайну Tiny BASIC
от 2 до 255 Денвер Тайни БЕЙСИК
от 0 до 999 УИУК БАЗОВЫЙ
от 1 до 2045 ДЕК БЕЙСИК-8
от 0 до 32767 LLL БЕЙСИК, НИБЛ
от 1 до 32767 Apple I BASIC , Уровень I BASIC , Palo Alto Tiny BASIC
от 1 до 65535 Altair 4K BASIC , MICRO BASIC 1.3, 6800 Tiny BASIC, Tiny BASIC Extended
от 1 до 99999 Дартмут БЕЙСИК
от 1 до 999999 СКЕЛЬБАЛ

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

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

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

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

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

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

ЛЛЛ БАЗОВЫЙ: [95]

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

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

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

В 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», которая была бы рассматриваются как одинаковые; присвоение значения «КРЕДИТ» автоматически перезапишет значение, предназначенное как «ПОТЕРЯ».

Integer BASIC необычно поддерживал имена переменных любой длины (например, SUM, GAMEPOINTS, PLAYER2), при условии, что они не содержали зарезервированного слова. [98] Ключевые слова нельзя было использовать в переменных во многих ранних версиях 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 каждая запись в таблице символов сохранялась следующим образом: [99]

  • Имя переменной (байт 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 поместил начало наиболее распространенных подпрограмм в начале программы для использования 1-байтовым кодом. RST Код операции 8080 вместо 3-байтового CALLкод операции. В LLL BASIC некоторые переменные занимали одни и те же ячейки памяти в тех случаях, когда разные переменные использовались только в командном режиме или только во время выполнения. [100]

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

Некоторые реализации интерпретатора Microsoft, например, работающие на моделях TRS-80 I/III, требовали от пользователя указания объема памяти, который будет использоваться интерпретатором. Это должно было позволить зарезервировать область памяти для установки подпрограмм машинного языка, которые могли быть вызваны интерпретируемой программой, для большей скорости выполнения. При включении моделей I/III пользователя приветствует запрос «Размер памяти?» для этой цели.

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

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

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

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

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

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

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

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

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

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

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

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

Хотя в то время 32-битные форматы были распространены, более поздние версии BASIC, начиная с Microsoft BASIC для MOS 6502 , обычно использовали 40-битный (пятибайтовый) формат для большей точности. [114]

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

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

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

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

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

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

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

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

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

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

Вектор совместимости массивов менялся от реализации к реализации. Например, вектор примеси массива Altair BASIC 4K: [94]

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

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

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

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

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

Струны [ править ]

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

Обработка строк в известных интерпретаторах BASIC
Диалект БЕЙСИКА Тип Подстроки
HP с разделением времени BASIC Фиксированная длина Нарезка
ДЕК БЕЙСИК-ПЛЮС Переменная длина Функции
Дартмутский БЕЙСИК, четвертое издание Переменная длина Индексирование массива
Крошечный БЕЙСИК Целочисленный массив Индексирование массива

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

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

Это резко контрастирует с BASICами, которые следуют шаблону DEC и используют такие функции, как LEFT$(), MID$(), и RIGHT$()для доступа к подстрокам. Нотация HP, позже принятая ANSI BASIC, также может использоваться на стороне назначения. LET или INPUT оператор для изменения части существующего строкового значения, например 100 A$[3,5]="XYZ" или 120 B$[3]="CHANGE ALL BUT FIRST TWO CHARS", что невозможно сделать при ранних реализациях LEFT$/MID$/RIGHT$.

Более поздние версии Dartmouth BASIC включали строковые переменные. Однако они не использовали LEFT$/MID$/RIGHT$ функции для работы со строками, но вместо этого использовал CHANGEкоманда, которая преобразовывала строку в эквивалентные значения ASCII и обратно. (Позднее принято DEC как есть и адаптировано HP, которая изменила ключевое слово на CONVERT. [120] ) Кроме того, можно использовать одинарные кавычки для преобразования числовой константы в символ ASCII, что позволяет создавать строку по частям; A$='23 '64 '49 "DEF" создал строку «ABCDEF» без необходимости CHR$() функция. [120] Поддерживается шестое издание Dartmouth BASIC SEG$ (для MID$) и POS (для INSTR).

Целочисленный BASIC, Полярная звезда BASIC [121] и Атари БЕЙСИК [122] имитировал подход HP, который снова контрастировал со стилем BASIC, производным от DEC , включая Microsoft BASIC , где строки являются внутренним типом переменной длины. [123]

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

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

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

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

На ранних микрокомпьютерах с их ограниченной памятью и медленными процессорами сборка мусора в BASIC часто могла вызывать случайные, необъяснимые паузы в процессе работы программы. Некоторые интерпретаторы BASIC, такие как Applesoft BASIC в семействе Apple II , неоднократно сканировали дескрипторы строк в поисках строки, имеющей самый высокий адрес, чтобы сжать ее в большую память, что приводило к результату O(n 2 ) производительность, что может привести к многоминутным паузам при выполнении строковых программ. В других версиях Microsoft BASIC сбор мусора работал очень медленно или даже некорректно. [125] Некоторые операционные системы, которые поддерживали фоновые задачи, управляемые прерываниями, такие как TRSDOS/LS-DOS 6.x на TRS-80 Model 4 , использовали периоды бездействия пользователя (например, периоды продолжительностью в миллисекунды между нажатиями клавиш и периоды после обновления видеоэкрана). ) для обработки сборки мусора во время выполнения программы BASIC.

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

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

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

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

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

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

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

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

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

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

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

В 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. [133] [с]

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

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

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

Из реализаций Tiny BASIC только National Industrial Basic Language (NIBL) предлагал какие-либо команды цикла. DO/UNTIL. [135] И это несмотря на то, что изобретатель Tiny BASIC Деннис Эллисон публично сетовал на состояние BASIC. [136]

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 ) и процедурами , чтобы обеспечить более простой и гибкий дизайн. [137] Кроме того, были введены ключевые слова и структуры для поддержки повторения, выбора и процедур с локальными переменными.

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

Пример REM QBASIC 

 Объявление REM Forward - позволяет основному коду вызывать 
 подпрограмму REM, которая определена позже в исходном коде 
 DECLARE   SUB   PrintSomeStars   (  StarCount!  ) 

 Основная программа REM следует за 
 DO 
    INPUT   «Сколько звезд вы хотите? (0 для выхода) "  ,   NumStars 
    CALL   PrintSomeStars  (  NumStars  ) 
 LOOP   WHILE   NumStars  >  0 
 END 

 определение подпрограммы 
 SUB   PrintSomeStars   (  StarCount  ) 
    REM   Эта   процедура   использует   локальную   )   переменную   с именем   Stars$ 
    Stars$   =   STRING$  (  StarCount  ,   "*"  REM 
    PRINT   Stars$ 
 END   SUB 

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

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

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

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

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

Исполнение [ править ]

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

Как и в большинстве BASICов, программы запускались с RUN команда и, как обычно, могла быть направлена ​​на определенный номер строки, например RUN 300. [141] Выполнение можно остановить в любой момент, используя Ctrl+ C[142] (или BREAK, например, на TRS-80), а затем перезапустился с помощью CONTвходить ( CON в Integer BASIC). [143] Воспользовавшись уникальными возможностями интерпретируемых программ (код обрабатывается в реальном времени по одному оператору, в отличие от компиляторов ), пользователь за консолью мог просматривать переменные данные с помощью оператора PRINT и изменять такие данные на лету. , затем возобновите выполнение программы.

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

Некоторые реализации, такие как интерпретаторы Microsoft для различных моделей TRS-80, включали команду ON ERROR GOSUB. Это перенаправит выполнение программы на указанный номер строки для специальной обработки ошибок.

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

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

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

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

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

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

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

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

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

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

Система Процессор БАЗОВЫЙ Тест 1 Тест 2 Тест 3 Тест 4 Тест 5 Тест 6 Тест 7
Яблоко II 6502 @ 1 МГц Целочисленный БЕЙСИК 1.3 3.1 7.2 7.2 8.8 18.5 28.0
Яблоко II 6502 @ 1 МГц Applesoft БЕЙСИК 1.3 8.5 16.0 17.8 19.1 28.6 44.8

Теоретически Atari BASIC должен был работать быстрее, чем современные BASIC, основанные на шаблоне Microsoft. Поскольку исходный код полностью токенизирован при вводе, все этапы токенизации и анализа уже завершены. Даже сложные математические операции готовы к выполнению: все числовые константы уже преобразованы во внутренний 48-битный формат, а значения переменных ищутся по адресу, а не искать их. Несмотря на эти теоретические преимущества, на практике Atari BASIC медленнее, чем другие BASIC для домашних компьютеров , часто значительно. [153] На практике это не подтвердилось. В двух широко используемых тестах того времени, Byte журнала «Решете Эратосфена» и тесте Creative Computing , написанном Дэвидом Х. Алом , Atari финишировала ближе к концу списка с точки зрения производительности и была намного медленнее, чем современный Apple II. или Коммодор ПЭТ , [154] несмотря на то, что у них тот же процессор, но он работает примерно в два раза быстрее, чем любой из них. Он финишировал позади относительно медленных машин, таких как Sinclair ZX81, и даже некоторых программируемых калькуляторов. [155]

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

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

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

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

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

  1. ^ «IBM против всего мира: вот как оно есть» . Компьютерный мир . 5 декабря 1973 года.
  2. ^ «Описание процессора Hewlett-Packard 2100, 1972 г.» (PDF) . Проверено 18 августа 2020 г.
  3. ^ «Можем ли мы получить полную информацию о сроках создания операционной системы IRIS для Data General Novas?» . Проверено 5 августа 2020 г.
  4. ^ Савец, Кевин (апрель 2013 г.). «Дэйв Ал и Бетси Ах» (интервью).
  5. ^ «Старые компьютеры: HP-9830A» . Проверено 18 августа 2020 г.
  6. ^ Интерпретатор языка BASIC для микропроцессора Intel 8008 . Кафедра компьютерных наук Университета Иллинойса в Урбана-Шампейн (опубликовано в 1974 г.). Июнь 1974 года.
  7. ^ «У нас есть БЕЙСИК» . Музей естественной истории и науки Нью-Мексико . Архивировано из оригинала 30 ноября 2012 года . Проверено 18 апреля 2007 г.
  8. ^ Фиск, Натан (2009). Понимание интернет-пиратства . АВС-КЛИО. п. 14. ISBN  9780313354748 .
  9. ^ Херцфельд 1985 .
  10. ^ Питтман, Том. «Чтобы получить его, нужно было заплатить 5 долларов вперед…» . www.ittybittycomputers.com . Проверено 14 июня 2017 г.
  11. ^ Арнольд, Марк; Уодсворт, Нат (февраль 1976a). «SCELBAL — язык более высокого уровня для систем 8008/8080» . Журнал доктора Добба . Том. 1. С. 30–34.
  12. ^ «Часть 1 интерпретатора LLL 8080 BASIC» (PDF) .
  13. ^ Лоренцо 2017 , с. 118.
  14. ^ Карран, Лоуренс Дж.; Шуфорд, Ричард С. (ноябрь 1983 г.). «Эстридж от IBM» . БАЙТ . стр. 88–97 . Проверено 19 марта 2016 г.
  15. ^ Уилкинсон 1982 , стр. iv – v.
  16. ^ Кромемко 1978 .
  17. ^ Уилкинсон 1982 , с. ix.
  18. ^ Уилкинсон 1982 , с. в.
  19. ^ «Видеопроцессор для компьютера Acorn/BBC» . Новости BBC . Проверено 30 ноября 2010 г.
  20. ^ «BBC Micro разжигает воспоминания о революции» . Новости BBC . 21 марта 2008 года . Проверено 30 ноября 2010 г.
  21. ^ «ECN — июль/август 1985 г.» . Архивировано из оригинала 07 марта 2018 г. Проверено 4 августа 2020 г.
  22. ^ Смит, Тони (12 февраля 2014 г.). «Вы НЕ уволены: история потрясающего CPC 464 компании Amstrad» . Регистр . Проверено 17 февраля 2014 г.
  23. ^ Лиен, Дэвид (1981). БАЗОВЫЙ Справочник (Второе изд.). Сан-Диего, Калифорния: Издательство Compusoft. п. внутренняя крышка. ISBN  0-932760-00-7 .
  24. ^ Лоренцо 2017 , с. 83.
  25. ^ Гейтс, Билл . «Интервью Билла Гейтса» . Национальный музей американской истории, Смитсоновский институт (интервью). Беседовал Дэвид Эллисон . Проверено 10 апреля 2013 г.
  26. ^ Маллой, Рич (май 1983 г.). «Маленький большой компьютер / Портативный компьютер TRS-80 Model 100» . БАЙТ . п. 14 . Проверено 19 октября 2013 г.
  27. ^ Лоренцо 2017 , с. 122.
  28. ^ Уильямс, Грегг (февраль 1984 г.). «Компьютер Apple Macintosh». БАЙТ . п. 30.
  29. ^ «Mac GUI :: Re: Re: MAC Basic против MS Basic?» . macgui.com . Проверено 23 января 2015 г.
  30. ^ Манес, Стивен; Эндрюс, Пол (21 января 1994 г.). Гейтс: Как магнат Microsoft заново изобрел индустрию и стал самым богатым человеком в Америке: Стивен Мейнс, Пол Эндрюс: 9780671880743: Amazon.com: Books . Пробный камень. ISBN  0671880748 .
  31. Билл Аткинсон дал интервью телешоу «Триангуляция» в TWiT.tv. сети
  32. ^ «Был ли Family BASIC для NES/Famicom достаточно мощным для создания полноценных игр и приложений?» . Проверено 27 августа 2020 г.
  33. ^ Томас, Нил (19 августа 2019 г.). «СТОС и Амос - Франсуа Лионе | Ретро-перерыв на чай» . YouTube . Проверено 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. ^ «Маленькая базовая загрузка» . 19 ноября 2018 года . Проверено 7 сентября 2020 г.
  39. ^ Шайу, Эммануэль; Манури, Паскаль; Пагано, Бруно (2002). Разработка приложений с помощью Objective Caml . Франция: О'Рейли. ISBN  2841771210 .
  40. ^ Прайс, Эд (29 апреля 2014 г.). «Малый базовый учебный план» . ТехНет . Майкрософт . Проверено 9 февраля 2014 г.
  41. ^ Прайс, Эд; Такахаси, Нонки (25 февраля 2014 г.). «Небольшое базовое руководство по началу работы» . ТехНет . Майкрософт . Проверено 12 февраля 2015 г.
  42. ^ «Маленький базовый» . Проверено 6 сентября 2020 г.
  43. ^ Прайс, Эд (22 октября 2012 г.). «Уникальные особенности Small Basic» . Малый базовый . ТехНет. Майкрософт . Проверено 22 апреля 2015 г.
  44. ^ Прайс, Эд (8 октября 2012 г.). «Каковы 14 ключевых слов Small Basic?» . Малый базовый . Блоги MSDN. Майкрософт . Проверено 9 февраля 2014 г.
  45. ^ «Анонсируем Small Basic Online 1.0 — общедоступная предварительная версия» . 20 февраля 2019 г.
  46. ^ «Microsoft Small Basic Online v1.0 (CS): Руководство по установке» . Microsoft TechNet . Проверено 8 января 2022 г.
  47. ^ «Соавторы robinhedwards/ArduinoBASIC» . Гитхаб .
  48. ^ «BleuLlama/TinyBasicPlus: реализация Tiny Basic на переменном токе с упором на поддержку Arduino» . Гитхаб . Проверено 11 сентября 2020 г.
  49. ^ «Винтажный БЕЙСИК — Дом» . Проверено 11 сентября 2020 г.
  50. ^ Энсменгер, Натан (2010). Компьютерные мальчики берут верх . МТИ Пресс. п. 55. ИСБН  978-0-262-05093-7 .
  51. ^ Возняк 2014 .
  52. ^ Руководство по языку BASIC-PLUS (PDF). Мейнард, Массачусетс: Корпорация цифрового оборудования. 1972. стр. 3–13.
  53. ^ Лоренцо 2017 , с. 106.
  54. ^ Эллисон, Деннис (июль 1976 г.). «Заметки по проектированию TINY BASIC» . Уведомления SIGPLAN . 11 (7). АКМ: 25–33. дои : 10.1145/987491.987494 . S2CID   18819472 . по Специальная группа по интересам ACM языкам программирования (SIGPLAN) перепечатала заметки по проектированию Tiny Basic из журнала Tiny BASIC Journal за январь 1976 года.
  55. ^ Эллисон, Деннис (1976). «Создайте свой собственный БЕЙСИК» . Журнал доктора Добба . Том. 1, нет. 1. п. 9.
  56. ^ Эллисон, Деннис (1976). «Краткое справочное руководство по Tiny BASIC» . Журнал доктора Добба . Том. 1, нет. 1. п. 6.
  57. ^ «ZX80 – ОБНОВЛЕНИЕ БАЗОВОЙ ПЗУ 8K» .
  58. ^ Перейти обратно: а б Интерпретатор языка BASIC для микропроцессора 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 г.). «Открытое письмо любителям» . Информационный бюллетень доморощенного компьютерного клуба . 2 (1). Маунтин-Вью, Калифорния: Домашний компьютерный клуб: 2.
  65. ^ «У нас есть БЕЙСИК» . Музей естественной истории и науки Нью-Мексико. Архивировано из оригинала 23 марта 2012 года . Проверено 18 апреля 2007 г.
  66. ^ Уоллес, Джеймс; Джим Эриксон (1992). Жесткий диск: Билл Гейтс и создание империи Microsoft . Джон Уайли и сыновья. п. 78 . ISBN  0-471-56886-4 .
  67. ^ «XBASIC — разговорный интерпретатор BASIC» . Гитхаб . Проверено 7 сентября 2020 г.
  68. ^ Леннарт Беншоп (8 марта 2002 г.). «БЕЙСИК-интерпретатор версии 1.22» . Проверено 23 сентября 2020 г.
  69. ^ Уилкинсон, О'Брайен и Лотон 1983 .
  70. ^ «Встроенные операторы BASIC-PLUS, имеют ли они смысл?» . Проверено 5 августа 2020 г.
  71. ^ Аллен, Деннис. «ТИНИ БЕЙСИК». Народная компьютерная компания . Том. 4, нет. 3.
  72. ^ Грининг, Бернард (1976). «Исправленный Tiny BASIC IL» . Журнал доктора Добба . Том. 1, нет. 1. п. 12.
  73. ^ Фейт, Хольгер. «Крошечный BASIC 6800 Тома Питтмана» . Проверено 2 мая 2017 г.
  74. ^ Нуспикель, Тьерри. «GPL: язык графического программирования» . Проверено 2 августа 2020 г.
  75. ^ «Я вырос и изучил основы на TI-99/4a. Это было чудесное и простое время…» Hacker News . Проверено 2 августа 2020 г.
  76. ^ Возняк 1977 , с. 43.
  77. ^ Помощь программистам Apple (PDF) . Яблоко. 1978.
  78. ^ Раскин 1978 , стр. 11.
  79. ^ Раскин 1978 , стр. 46.
  80. ^ Раскин 1978 , стр. 49–55.
  81. ^ Раскин 1978 , стр. 65–67.
  82. ^ «Расширенный Tiny BASIC». Журнал доктора Добба по компьютерной гимнастике и ортодонтии, Бегущий свет без лишнего байта . 1 (2). Февраль 1976 года.
  83. ^ «Денвер Тайни БЕЙСИК». Журнал доктора Добба по компьютерной гимнастике и ортодонтии, Бегущий свет без лишнего байта . 1 (3). Март 1976 года.
  84. ^ Перейти обратно: а б «МИНОЛ». Журнал доктора Добба по компьютерной гимнастике и ортодонтии, Бегущий свет без лишнего байта . 1 (4). Апрель 1976 года.
  85. ^ Перейти обратно: а б Рауколб, Роджер (декабрь 1976 г.). «Крошечный БЕЙСИК Пало-Альто доктора Вана» (PDF) . Возраст интерфейса . стр. 92–108.
  86. ^ Эллисон, Деннис (январь 1976 г.). «Заметки по проектированию Tiny BASIC» . Журнал доктора Добба . Том. 1, нет. 1. п. 9.
  87. ^ Эллисон, Деннис (январь 1976 г.). «Создайте свой собственный БЕЙСИК» . Журнал доктора Добба . Том. 1, нет. 1. п. 8.
  88. ^ Стейл, Майкл (13 января 2015 г.). «Исходный код Microsoft BASIC для 6502» .
  89. ^ Хардиман, Роджер. «Altair BASIC 3.2 (4K) – Аннотированная разборка» . п. 1.11. Архивировано из оригинала 5 ноября 2001 года.
  90. ^ Перейти обратно: а б с Возняк 1977 , с. 42.
  91. ^ Пол Р. Санта-Мария. «Базовая разборка Apple II Integer» (PDF) . Проверено 14 сентября 2020 г. [ постоянная мертвая ссылка ]
  92. ^ Уилкинсон, О'Брайен и Лотон 1983 , с. 5.
  93. ^ Викерс 1983 , с. 7–8.
  94. ^ Перейти обратно: а б «Интерпретатор BASIC – объяснение» . Проверено 15 сентября 2020 г.
  95. ^ «Часть 1 интерпретатора LLL 8080 BASIC» (PDF) .
  96. ^ Раскин 1978 , стр. 118.
  97. ^ Ван, Ли-Чен (май 1976 г.). «Пало-Альто Крошечный БЕЙСИК». Журнал доктора Добба по компьютерной гимнастике и ортодонтии, Бегущий свет без лишнего байта . 1 (5): 12–25.
  98. ^ Раскин 1978 , стр. 38.
  99. ^ «Часть 1 интерпретатора LLL 8080 BASIC» (PDF) .
  100. ^ «Часть 1 интерпретатора LLL 8080 BASIC» (PDF) .
  101. ^ «Какая самая старая ссылка на PEEK, POKE и USR?» . Проверено 15 августа 2020 г. .
  102. ^ Справочное руководство по Altair 8800 BASIC, 1975 г. , стр. 68 PDF-файла: «Используя функцию PEEK и оператор OUT 8K BASIC, пользователь может написать программу двоичного дампа на BASIC. Используя INP и POKE, можно написать двоичный загрузчик. PEEK и POKE можно использовать для хранения байтовой информации. При инициализации BASIC ответьте на вопрос РАЗМЕР ПАМЯТИ, указав количество. памяти в вашем ALTAIR минус объем памяти, который вы хотите использовать в качестве хранилища для данных в байтовом формате».
  103. ^ Раскин 1978 , стр. 27.
  104. ^ «БЕЙСИК Роберта Уитервика» .
  105. ^ Валлийский, Дэвид; Валлийский, Тереза ​​(2007). Запуск насоса: как энтузиасты TRS-80 помогли спровоцировать революцию ПК . п. 7.
  106. ^ Рид, Мэтью. «Уровень I БАЗОВЫЙ» . TRS-80.org . Проверено 27 августа 2017 г.
  107. ^ Арнольд и Уодсворт 1976 , с. 10.1.
  108. ^ Арнольд и Уодсворт 1976 , Глава 10.
  109. ^ «Процедуры с плавающей запятой для 6502». Журнал доктора Добба по компьютерной гимнастике и ортодонтии, Бегущий свет без лишнего байта . 1 (7). Август 1976 года.
  110. ^ «Часть 1 интерпретатора LLL 8080 BASIC» (PDF) .
  111. ^ Интерпретатор языка BASIC для микропроцессора Intel 8008 . Кафедра компьютерных наук Университета Иллинойса в Урбана-Шампейн (опубликовано в 1974 г.). Июнь 1974 г. с. 20.
  112. ^ «Документы GE-2xx» . www.bitsavers.org . CPB-267_GE-235-SystemManual_1963.pdf , стр. IV-4.
  113. ^ Лоренцо 2017 , с. 149.
  114. ^ Стейл, Майкл (20 октября 2008 г.). «Создайте свою собственную версию Microsoft BASIC для 6502» .
  115. ^ Раскин 1978 , стр. 61.
  116. ^ МИТС Альтаир БЕЙСИК . Альбукерке, Нью-Мексико: MITS. 1975. с. 37.
  117. ^ Лиен, Дэвид (1986). Базовый справочник (Третье изд.). Сан-Диего, Калифорния: Compusoft. п. 589. ИСБН  0-932760-33-3 .
  118. ^ Раскин 1978 , стр. 94.
  119. ^ МИТС Альтаир БЕЙСИК . Альбукерке, Нью-Мексико: MITS. 1975. с. 31.
  120. ^ Перейти обратно: а б с Справочное руководство HP 2000/Access BASIC (PDF) . Hewlett Packard. Май 1976 г. , деталь № 22687-90001.
  121. ^ North Star BASIC, версия 6 (PDF) . Корпорация Северная Звезда. 1977. Архивировано из оригинала (PDF) 5 марта 2020 г. Проверено 1 августа 2020 г.
  122. ^ Справочное руководство по ATARI BASIC . Atari Inc., 1980. Архивировано из оригинала 1 мая 2005 г. Проверено 1 августа 2020 г.
  123. ^ «Целое число, переменные с плавающей запятой и строковые переменные». Руководство программиста С64 . Коммодор.
  124. ^ Раскин 1978 , стр. 89.
  125. ^ «Создайте свою собственную версию Microsoft BASIC» .
  126. ^ Лиен, Дэвид (1977). Руководство пользователя для уровня I (Первое изд.). Форт-Уэрт, Техас: Tandy Corporation. стр. 105–108, 137 . Проверено 9 августа 2020 г.
  127. ^ Раскин 1978 , стр. 31.
  128. ^ Раскин 1978 , стр. 32.
  129. ^ Раскин 1978 , стр. 33.
  130. ^ Перейти обратно: а б Раскин 1978 , с.120.
  131. ^ Лоренцо 2017 , с. 120.
  132. ^ «Могут ли некоторые интерпретаторы BASIC для микрокомпьютеров считаться операционными системами?» . Проверено 7 августа 2020 г.
  133. ^ Перейти обратно: а б Раскин 1978 , с.36.
  134. ^ Мини 1977 , с. 18.
  135. ^ «НИБЛ». Журнал доктора Добба по компьютерной гимнастике и ортодонтии, Бегущий свет без лишнего байта . 1 (10). Ноябрь 1976 года.
  136. ^ «Проблемы с Бейсиком». Журнал доктора Добба по компьютерной гимнастике и ортодонтии, Бегущий свет без лишнего байта . 1 (2). Февраль 1976 года.
  137. ^ «Различия между GW-BASIC и QBasic» . 12 мая 2003 г. Архивировано из оригинала 19 октября 2013 г. Проверено 28 июня 2008 г.
  138. ^ Лоренцо 2017 , с. 137.
  139. ^ Хелмерс 1978 , с. 18.
  140. ^ Вейрих 2001 .
  141. ^ Раскин 1978 , стр. 100.
  142. ^ Раскин 1978 , стр. 15.
  143. ^ Раскин 1978 , стр. 52.
  144. ^ Раскин 1978 , стр. 107.
  145. ^ Руководство 1980 г. , Приложение B.
  146. ^ «Какой тип интерпретатора использовали большинство 8-битных реализаций BASIC?» . Проверено 9 августа 2020 г.
  147. ^ Интерпретатор языка BASIC для микропроцессора Intel 8008 . Кафедра компьютерных наук Университета Иллинойса в Урбана-Шампейн (опубликовано в 1974 г.). Июнь 1974 г., стр. 24–36.
  148. ^ Питтман, Том (1981). «Первая книга крошечных программ на BASIC» . Retrotechnology.com . Этти-битти-компьютеры . Проверено 5 августа 2020 г. Поскольку TA очень велика (19 703 байта), я обнаружил, что выполнение стало мучительно медленным просто из-за сканирования памяти на предмет GOTO, GOSUB и RETURN. Простой патч к интерпретатору преобразует его в алгоритм двоичного поиска , что ускоряет время выполнения примерно на порядок. Необходимые изменения перечислены в Приложении.
  149. ^ Перейти обратно: а б Рагг, Том; Фельдман, Фил (октябрь 1977 г.). «БАЗОВЫЕ сравнения времени… переработаны и обновлены» . Килобод . стр. 20–25.
  150. ^ Перейти обратно: а б Рагг, Том; Фельдман, Фил (июнь 1977 г.). «БАЗОВЫЕ Сравнения времени… информация для любителей скорости» . Килобод . стр. 66–70.
  151. ^ Гилбрит, Джим (сентябрь 1981 г.). «Эталон языка высокого уровня» . Байт . п. 192.
  152. ^ Ахль, Дэвид (ноябрь 1983 г.). «Сравнительный тест» . Творческие вычисления . п. 260.
  153. ^ Перейти обратно: а б с д Это Уилкинсон 1985 , с. 139.
  154. ^ Ахль, Дэвид (ноябрь 1983 г.). «Эталонный сравнительный тест» . Творческие вычисления . стр. 259–260.
  155. ^ Ахль, Дэвид (январь 1984 г.). «Бенчмарк творческих вычислений» . Творческие вычисления . п. 12.
  156. ^ Уилкинсон, О'Брайен и Лотон 1983 , с. 17.
  157. ^ Кроуфорд 1982 , с. 8.45.
  158. ^ Победитель, Лейн (1982). «De Re Atari, Глава 10: Atari BASIC» . Атари, Инк.

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

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

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

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: B47FCDCFA341FA33BC2343FC3F4F4B6E__1713263700
URL1:https://en.wikipedia.org/wiki/BASIC_interpreter
Заголовок, (Title) документа по адресу, URL1:
BASIC interpreter - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)