GW-BASIC — диалект языка программирования BASIC , разработанный Microsoft на основе IBM BASICA . Функционально идентичный BASICA, его интерпретатор BASIC является полностью автономным исполняемым файлом и не нуждается в Cassette BASIC ROM, который был в оригинале. Он был включен в состав операционных систем 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
текущей программы или выхода из операционной ; эти команды также могут использоваться в качестве операторов программы. В GW-BASIC SYSTEM
мало поддержки структурного программирования . Все условные операторы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 BASIC. [ необходима цитата ] Возможно, его также прозвали Gee-Whiz из-за его многочисленных графических команд. [8] Другие распространённые теории о происхождении инициалов включают «Graphics and Windows», « Gates, William » (президент Microsoft в то время) или «Gates–Whitten» (два главных разработчика программы). [9] [10]