GW-BASIC — это диалект языка программирования BASIC , разработанный Microsoft на базе IBM BASICA . Функционально идентичный BASICA, его интерпретатор BASIC представляет собой полностью автономный исполняемый файл и не требует наличия кассетного ПЗУ BASIC , имевшегося в исходном IBM PC . Он входил в состав операционных систем MS-DOS на IBM PC-совместимых компьютерах от Microsoft.
Язык подходит для простых игр, деловых программ и тому подобного. Поскольку он был включен в большинство версий MS-DOS, для многих начинающих программистов это был недорогой способ изучить основы компьютерного программирования . [2] [3] Microsoft также продала компилятор BASIC BASCOM, совместимый с GW-BASIC, для программ, которым требуется большая скорость.
По словам Марка Джонса Лоренцо, учитывая масштаб языка, «GW-BASIC, возможно, является лучшим из семейства BASIC с нумерацией строк от Microsoft, восходящего к Altair BASIC - и, возможно, даже из BASIC с нумерацией строк в целом». [4]
С выпуском MS-DOS 5.0 место GW-BASIC занял QBasic , слегка сокращенная версия интерпретаторской части отдельно доступного пакета интерпретатора и компилятора QuickBASIC . [5]
21 мая 2020 года Microsoft выпустила исходный код ассемблера 8088 для GW-BASIC 1.0 на GitHub под лицензией MIT . [1]
IBM BASICA и GW-BASIC в основном являются портами MBASIC версии 5.x, но с дополнительными функциями, специально предназначенными для оборудования IBM PC. Общие функции BASIC-80 5.x и BASICA/GW-BASIC включают:
WHILE...WEND
петлиOPTION BASE
оператор для установки начального индекса переменных массива как 0 или 1LINE INPUT
, что позволяло игнорировать символы-разделители полей, такие как запятаяCALL
оператор для выполнения процедур машинного языкаCHAIN
и MERGE
командыВозможность «сокращения» строк программы путем пропуска пробелов, общая особенность более ранних реализаций Microsoft BASIC, была удалена из BASIC-80 5.x и BASICA/GWBASIC.
Программы BASIC-80, не использующие операторы PEEK
/, POKE
выполняются под GW-BASIC. BASICA добавляет множество функций для IBM PC, таких как звук, графика и команды памяти. Функции, отсутствующие в BASIC-80, включают возможность выполнения RND
функции без параметров, а также возможность сохранять программы в «защищенном» формате, предотвращая их редактирование LIST
. BASICA также позволяет использовать числа двойной точности с математическими и тригонометрическими функциями, такими как COS
, SIN
и ATN
, что не разрешалось в 8-битных версиях BASIC. Обычно эта функция не была включена, и при запуске требовался дополнительный параметр /D
, т. е. GWBASIC /D
. При использовании BASIC объем памяти немного увеличивался.
Microsoft не предлагала общую версию MS-DOS до версии 3.20 в 1986 году; до этого все варианты операционной системы были OEM-версиями. В зависимости от OEM-производителя BASIC распространялся как BASICA.EXE или GWBASIC.EXE. Первый не следует путать с IBM BASICA, который всегда поставлялся в виде COM-файла . Некоторые варианты BASIC имеют дополнительные функции для поддержки конкретной машины. Например, версии DOS для AT&T и Tandy включают специальный GW-BASIC, который поддерживает их расширенные звуковые и графические возможности.
Первоначальная версия GW-BASIC включена в состав Compaq DOS 1.13, выпущенной вместе с Compaq Portable в 1983 году, и была аналогом IBM BASICA 1.10. Он использует блоки управления файлами, производные от CP/M , для доступа к диску и не поддерживает подкаталоги. Более поздние версии поддерживают подкаталоги, улучшенную графику и другие возможности.
GW-BASIC 3.20 (1986) добавляет поддержку графики EGA (ни одна версия BASICA или GW-BASIC не имела поддержки VGA ) и является последней крупной новой версией, выпущенной до того, как она была заменена QBasic .
Покупатели видеокарт Hercules получили специальную версию GW-BASIC на служебном диске карты под названием HBASIC, которая добавляет поддержку монохромной графики 720×348. Другие версии BASICA/GW-BASIC не поддерживают графику Hercules и могут отображать графику на этой карте только с помощью сторонней эмуляции CGA , такой как SIMCGA.
GW-BASIC имеет интегрированную среду разработки (IDE) с поддержкой командной строки , основанную на Dartmouth BASIC . С помощью клавиш перемещения курсора можно редактировать любую строку, отображаемую на экране. Он также включает в себя сочетания клавиш функциональных клавиш в нижней части экрана. Как и в других ранних версиях BASIC для микрокомпьютеров , в GW-BASIC отсутствуют многие структуры, необходимые для структурного программирования , такие как локальные переменные. Программы GW-BASIC выполнялись относительно медленно, поскольку это был интерпретируемый язык . Все строки программы должны быть пронумерованы; все ненумерованные строки считаются командами прямого режима , подлежащими немедленному выполнению. Исходные файлы программы обычно сохраняются в сжатом двоичном формате с токенами, заменяющими ключевые слова, с возможностью сохранения в текстовой форме ASCII . [6]
В среде командной строки GW-BASIC есть команды для RUN
, LOAD
, текущей SAVE
программы LIST
или выхода из операционной системы SYSTEM
; эти команды также могут использоваться как операторы программы. В GW-BASIC мало поддержки структурного программирования . Все условные операторыIF
// должны быть записаны в одной строке, хотя операторы / могут THEN
группировать несколько строк. Функции можно определить только с помощью однострочного оператора (например, ). Тип данных переменных можно указать с помощью символа в конце имени переменной: строка символов , целое число и т. д. Группам переменных также можно установить типы по умолчанию на основе начальной буквы их имени с помощью использование операторов , и т. д. Тип по умолчанию для необъявленных переменных, не идентифицируемых такими операторами типизации, — это числа с плавающей запятой одинарной точности ( 32-битный MBF ). [7]ELSE
WHILE
WEND
DEF FNf(x)=<mathematical function of x>
DEF FNLOG(base,number)=LOG(number)/LOG(base)
A$
A%
DEFINT
DEFSTR
GW-BASIC позволяет использовать устройства ввода с помощью джойстика и светового пера . GW-BASIC может читать и записывать файлы и COM-порты ; он также может выполнять перехват событий для портов. Поскольку интерфейс порта для кассет оригинального IBM PC никогда не был реализован на совместимых компьютерах, операции с кассетами не поддерживаются. GW-BASIC может воспроизводить простую музыку, используя PLAY
оператор, для которого требуется строка нот, представленная на музыкальном макроязыке , например, PLAY "edcdeeL2edfedL4c"
. Более низкоуровневое управление возможно с помощью SOUND
оператора, который принимает в качестве аргументов частоту в герцах и длину в тактах для стандартного внутреннего динамика ПК в машинах IBM. Следовательно, звук ограничен одноканальными гудками и свистками, как и положено «бизнес-машине». GW-BASIC для Tandy 1000 поддерживает до трех каналов звука для команд SOUND
и PLAY
. [7]
Существует несколько теорий о том, что означают инициалы «GW». Грег Уиттен , один из первых сотрудников Microsoft , который разработал стандарты для линейки компиляторов BASIC, говорит, что Билл Гейтс выбрал название GW-BASIC. Уиттен называет ее Gee-Whiz BASIC и не уверен, назвал ли Гейтс программу в его честь. [8] В Руководстве пользователя Microsoft от Microsoft Press он также упоминается под этим именем. [ нужна цитация ] Возможно, его также прозвали Gee -Whiz из-за многочисленных графических команд. [8] Другие распространенные теории относительно происхождения инициалов включают «Графика и Windows», « Гейтс, Уильям » (в то время президент Microsoft) или «Гейтс-Уиттен» (два главных дизайнера программы). [9] [10]