Бейсик
BASIC | |
---|---|
Класс языка | алгоритмический, позже процедурный, позже объектно-ориентированный |
Появился в | 1964 |
Автор | Томас Курц, Джон Кемени |
Разработчик | Томас Курц, Джон Джордж Кемени и Мэри Кеннет Келлер[вд][1][2] |
Расширение файлов | .bas |
Система типов | нестрогая |
Испытал влияние | Алгол 60, Фортран II, JOSS |
Повлиял на | COMAL, GRASS и множество более поздних диалектов языка |
Медиафайлы на Викискладе |
Бе́йсик (BASIC, сокращение от англ. Beginner’s All-purpose Symbolic Instruction Code — универсальный код символических инструкций для начинающих[3]) — семейство высокоуровневых языков программирования.
Был разработан 1 мая 1964 года профессорами Дартмутского колледжа Томасом Курцем и Джоном Кемени[4][5][6].
Язык создавался как инструмент, с помощью которого студенты-непрограммисты могли самостоятельно создавать компьютерные программы для решения своих задач. Получил широкое распространение в виде различных диалектов, прежде всего как язык для домашних компьютеров[5][6]. К настоящему моменту претерпел существенные изменения, значительно отойдя от характерной для первых версий простоты, граничащей с примитивизмом, и превратившись в достаточно ординарный язык высокого уровня с типичным набором возможностей. Используется как самостоятельный язык для разработки прикладных программ, главным образом, работающих под управлением ОС Windows различных версий. Также широко распространён в качестве встроенного языка прикладных программных систем различного назначения и в качестве языка для программируемых калькуляторов.
История
Предпосылкой к появлению BASIC стали повышение доступности компьютеров в 1960-х годах и появление возможности работы в режиме разделения времени (англ. time-sharing). К компьютерам получили доступ учащиеся и специалисты, не являющиеся подготовленными программистами, но нуждающиеся в решении на компьютере своих задач.
Рождение
Бейсик был придуман в 1964 году преподавателями Дартмутского Колледжа Джоном Кемени и Томасом Курцем, и под их руководством был реализован командой студентов колледжа[5][6]. Со временем, когда стали появляться другие диалекты, изначальную реализацию стали называть Dartmouth BASIC.
Бейсик был спроектирован так, чтобы студенты могли без затруднений писать программы, используя терминалы с разделением времени. Он предназначался для более «простых» пользователей, не столько заинтересованных в скорости исполнения программ, сколько просто в возможности использовать компьютер для решения своих задач, не имея специальной подготовки[5][6].
При проектировании языка использовались следующие восемь принципов. Новый язык должен был:
- Быть простым в использовании для начинающих.
- Быть языком программирования общего назначения.
- Предоставлять возможность расширения функциональности, доступную опытным программистам.
- Быть интерактивным.
- Предоставлять ясные сообщения об ошибках.
- Быстро работать на небольших программах.
- Не требовать понимания работы аппаратного обеспечения.
- Защищать пользователя от операционной системы.
Язык был основан частично на Фортране II и частично — на Алголе 60, с добавлениями, делающими его удобным для работы в режиме разделения времени и, позднее, обработки текста и матричной арифметики. Первоначально Бейсик был реализован на мейнфрейме GE-225 с поддержкой множества терминалов[5][6]. Вопреки распространённому убеждению, в момент своего появления это был компилируемый язык.
Рост
Несмотря на то, что язык уже использовался на нескольких мини-компьютерах, его настоящее распространение началось с появления на микрокомпьютере Альтаир 8800. Многие языки программирования были слишком большими, чтобы поместиться в небольшую память, которую пользователи таких машин могли себе позволить. Для машин с таким медленным носителем, как бумажная лента (позднее — аудиокассета), и без подходящего текстового редактора такой небольшой язык, как Бейсик, был отличной находкой.
В 1975 году Microsoft (тогда это были лишь двое: Билл Гейтс и Пол Аллен — при участии Монте Давидова), выпустила Altair BASIC[3][4]. Затем его версии появились на другой платформе под лицензией, и скоро в использовании были уже миллионы копий и вариантов: один из вариантов, Applesoft BASIC, стал стандартным языком на Apple II[5][6]. Для операционной системы CP/M был создан диалект BASIC-80, надолго определивший развитие языка.
В 1979 году Microsoft обсуждала с несколькими поставщиками компьютеров (включая IBM) лицензирование интерпретатора Бейсик на своих машинах. Одна из версий (ROM BASIC) была включена в ПЗУ IBM PC: компьютер мог автоматически загружаться в Бейсик. Так как IBM не придавала тогда большого значения персональным компьютерам (основным полем её деятельности были мейнфреймы), то вопреки своим принципам она разрешила Microsoft продавать интерпретатор отдельно. Это сделало последнюю пионером в выпуске ПО нового поколения — не привязанного к конкретной аппаратуре и поставляемого отдельно от компьютера.
Бейсик в полной мере испытал на себе такое хорошо известное в 1970—1980 явление, как массовое размножение версий и диалектов языка высокого уровня, в значительной степени несовместимых между собой. Причин этому было несколько. Поскольку язык не рассматривался как промышленный, никаких специальных усилий по его стандартизации не прилагалось, и для каждого компьютера создавалась своя реализация. В эти же годы появилось большое количество 8-битных домашних и учебных компьютеров, строившихся на базе процессоров типа Intel 8080 (советский аналог — КР580ВМ80А) или Z80, на которых Бейсик был основным (или единственным доступным) языком высокого уровня. Каждая модель компьютера имела определённые аппаратные и программные особенности, специфические средства вывода звука и графики; нестандартные инструменты ввода, для поддержки которых в реализации Бейсика вводили специальные команды и конструкции. Иногда прямо в Бейсике реализовались низкоуровневые средства программирования, такие как непосредственная работа с физической памятью или обработка аппаратных прерываний. Поэтому если в базовой части (минимальный стандартный набор операторов и консольный последовательный ввод-вывод) большинство реализаций было в основном аналогично, то в части вывода звука, графики и более сложного управления текстовой консолью (управление цветами, создание подобия оконного ввода-вывода) они почти наверняка оказывались несовместимыми. В результате только наиболее распространённых версий и диалектов Бейсика было более десятка, а общее число зачастую несовместимых реализаций не уступало количеству типов и разновидностей компьютеров, находящихся в эксплуатации.[]
Зрелость
Периодом наибольшего расцвета и развития исходного Бейсика можно считать конец 1970-х — первую половину 1980-х годов. В этот период практически все персональные компьютеры имели собственный интерпретатор Бейсика, зачастую зашиваемый в ПЗУ, который в простейших компьютерах нередко выполнял также функции операционной системы. Практически все более мощные компьютеры также имели интерактивные Бейсик-системы. Практически не было компиляторов Бейсика, абсолютное большинство реализаций представляло собой стандартный гибрид строчного редактора и интерпретатора. Со временем улучшались базовые средства языка, что привело к появлению в некоторых реализациях сложных операторов ветвления, дополнительных видов циклов, именованных процедур с параметрами.
Было создано несколько новых версий Бейсика для платформы IBM PC. Microsoft продавала Бейсик для MS-DOS/PC DOS, включая IBM Advanced BASIC (BASICA), GW-BASIC (модификация BASICA, не требующая «прошивки» от IBM) и QuickBASIC. Borland, первоначально вышедшая на рынок со своим известным Turbo Pascal, в 1985 году выпустила основанную на той же программной среде систему Turbo Basic 1.0 (его наследники впоследствии продавались другой компанией под именем PowerBASIC). Некоторые другие языки использовали хорошо известный синтаксис Бейсика в качестве основы, на которой строилась совершенно иная система (см. например, GRASS). Стремление увеличить производительность Бейсик-программ привело к появлению полноценных компиляторов (каким был, например, упомянутый Turbo Basic), а также «гибридных» систем, в которых при сохранении интерпретации как основной методики исполнения программы была реализована частичная компиляция «на лету», например, компиляция коротких циклов. Кроме того, по крайней мере, на платформе IBM распространилась псевдокомпиляция бейсик-программ, когда транслятор переводил Бейсик-программу в псевдокод (нередко — обратимый) и формировал исполняемую программу из объектного модуля интерпретатора и кодированного модуля с текстом программы. Такая программа запускалась и исполнялась как обычная компилированная объектная программа, хотя по сути оставалась интерпретируемой.
В середине 1980-х Бейсик стал основным языком в сложных моделях программируемых калькуляторов, которые как раз к этому времени достигли мощности, допускающей применение полноценного языка высокого уровня. Сам факт, что многие производители, не сговариваясь, выбрали в качестве основы языка высокого уровня калькуляторов именно Бейсик, лучше всего говорит о распространённости и популярности этого языка в указанное время. Так, Бейсик был встроен в советский калькулятор «Электроника МК-85» и все его более поздние модели. Применение Бейсика в качестве основного языка высокого уровня программируемых калькуляторов продолжается по сей день; в настоящее время именно «калькуляторный» Бейсик более всего похож на изначальный вариант 1960-80х годов, например, реализация для калькуляторов CITIZEN содержит всего 14 ключевых слов (не считая математических функций) и допускает только односимвольные имена переменных.
К концу 1980-х годов персональные компьютеры стали намного мощнее и предоставляли возможности (такие, как графический интерфейс пользователя), использование которых в Бейсике было уже не столь удобным. К тому же появление на компьютерах «учебного» и «домашнего» класса недорогих трансляторов промышленных языков (прежде всего — Паскаля и Си), сопровождаемых удобными средами программирования и полезными библиотеками (например, Borland Pascal с библиотекой Turbo Vision) создало Бейсику сильную конкуренцию. Бейсик начал сдавать позиции, несмотря на то, что огромное количество его версий ещё использовалось и продавалось. В это же время началось стремительное изменение облика тех Бейсик-систем, которые оставались в эксплуатации. Происходил постепенный «дрейф» в сторону признанных структурных языков: расширился словарь и набор конструкций языка, появились сложные ветвления, именованные подпрограммы и функции, длинные имена переменных. Кроме того, возросшие возможности персональных компьютеров позволили отказаться от характерных особенностей Бейсика, введённых для обеспечения эффективной интерактивной работы за текстовым терминалом: числовых меток у каждой строки и построчного редактирования.
Вторую жизнь Бейсик получил с появлением Visual Basic от Microsoft[5][6]. Хотя и трудно согласиться, что этот язык — действительно Бейсик; он явился логическим завершением эволюции языка и, несмотря на сохранение привычных ключевых слов, по структуре и набору возможностей ближе к Паскалю, чем к первоначальному Бейсику. Но как инструмент для быстрого создания практически полезных программ для Windows при невысокой квалификации программиста он оказался очень кстати и быстро стал одним из наиболее используемых языков на платформе Windows. Не последнюю роль здесь сыграла удачная реализация включённого в систему построителя графического интерфейса пользователя, скрывавшая от разработчика детали программирования Windows GUI и позволявшая сосредоточиться на задаче. Microsoft создала вариант под названием WordBasic и использовала его в MS Word до появления Word 97. Вариант Visual Basic for Applications (VBA) был встроен в Microsoft Excel 5.0 в 1993 году, затем — в Access 95 в 1995 году, а после — и во все остальные инструменты, входящие в пакет Microsoft Office[5][6]. Internet Explorer 3.0 и выше, а также Microsoft Outlook, включали интерпретатор VBScript.
Описание
Синтаксис языка напоминает Фортран и многие элементы — явные заимствования из него. Язык задумывался для обучения, поэтому его конструкции максимально просты. Как и в других языках программирования, ключевые слова взяты из английского языка. Основных типов данных два: строки и числа. С появлением версии Visual Basic, а также различных его модификаций (таких как VBA), в языке появились многие другие типы данных и дополнения, типичные для современных языков программирования (например, такие, как объектная модель). Объявление переменных не требует специальной секции (в отличие от Паскаля). Объявление переменной — это первое её использование.
Ранние версии Бейсика (такие как BASICA, GW-BASIC) существенно отличаются от современных диалектов и сегодня практически не используются.
Ранние версии
Внешний вид программ на ранних версиях Бейсика во многом определялся тем, что он предназначался для среды программирования со строчным редактором текста. В таком редакторе пользователь не имел возможности отображать весь текст на экране (в окне), перемещаться по нему в любых направлениях с помощью клавиатуры и/или мыши. В строчных редакторах пользователь для изменения строки текста должен дать команду изменения строки с заданным номером, затем ввести новый текст указанной строки. Для вставки новой строки нужно дать команду вставки, опять-таки указав номер. Вводимые строки отображаются на экране последовательно (независимо от номеров). Чтобы увидеть сделанные изменения, применяется команда вывода текста, которая выводит строки в правильном порядке (по возрастанию номеров).
Всё это отразилось в Бейсике. Каждая строка начиналась с номера. При вводе в редактор строка оказывалась в исходном тексте программы на позиции, соответствующей её номеру. Для вставки новой строки нужно было дописать строку с номером, находящимся в диапазоне между номерами двух других строк. «Раздвинуть» строки было невозможно, если требовалось вставить новую строку между строками с соседними номерами, приходилось повторно вводить эти строки с другими номерами, чтобы обеспечить разрыв в нумерации (либо применять специальную команду RENUM
, которая перенумеровывала все уже введённые строки с постоянным шагом, синхронно изменяя все команды переходов). Для упрощения оперативного редактирования программы сложилась практика нумеровать строки с шагом 10 — это позволяло практически во всех случаях вставлять новые строки без изменения номеров ранее введённых. Например, чтобы добавить третью строку между строками 20 и 30, нужно было написать строку с номером в диапазоне от 21 до 29. Типичная строка из программы на Бейсике выглядела так:
10 PRINT "Hello, World!"
Изменять вручную номера уже имеющихся строк было небезопасно, так как номера выполняли роль меток для оператора GOTO
. Ранее в Бейсике были допустимы только числовые метки для этого оператора, и наличие в каждой строке уникального номера делало возможным безусловный переход к любой из них. Числовые метки и активное использование GOTO
было неизбежным при программировании на Бейсике, что способствовало плохой структуре кода и в больших проектах приводило к запутыванию самих авторов. Был даже придуман шуточный термин «макаронное программирование» (spaghetti code), потому что логика программы с частыми переходами GOTO
напоминает тарелку со спагетти.
Признаком конца оператора служил конец строки. Чтобы на одной строке разместить несколько операторов, нужно поставить между ними двоеточие (это разрешалось не во всех реализациях языка). Имена переменных в большинстве диалектов могли состоять только из одной буквы, после которой можно было добавить одну цифру, что также не способствовало улучшению понимания кода. Для создания переменной строкового типа нужно было после имени указать знак доллара ($
). Переменная без этого знака являлась числовой (с плавающей точкой). Было ещё несколько модификаторов, относящихся к числовому типу: знак процента (%
) — целый тип, восклицательный знак (!
) — обычная точность, октоторп (#
) — двойная точность (для данных с плавающей точкой, то есть десятичных дробей). В некоторых версиях числовые модификаторы могли не применяться или применяться не все. В абсолютном большинстве программ использовался только базовый числовой тип.
Выражения сходны с большинством других процедурных языков программирования, но в первых вариантах Бейсика их набор был довольно бедным. В самых ранних вариантах число ключевых слов не достигало даже 20. Вот набор основных программных конструкций и интерактивных команд, которые были реализованы практически в любой Бейсик-системе конца 1970-х годов:
- LIST — вывод на монитор текста программы в правильной последовательности строк. В зависимости от реализации команда поддерживала параметры — диапазон строк, который требуется вывести. Иногда поддерживался вариант LLIST — вывод на печатающее устройство.
- RUN — запуск текущей программы с первого оператора строки с самым маленьким номером. Мог поддерживаться параметр — номер строки, с которого нужно начинать исполнение.
- REM — комментарий. Текст, находившийся после ключевого слова и до конца строки, на исполнение программы не влиял. Многие интерпретаторы также поддерживали в качестве знака начала комментария одиночную кавычку '.
- INPUT «Приглашение: », Переменная — вывод на монитор текста «Приглашение: » и ожидание, пока пользователь не введёт значение и не нажмёт Enter. После этого в Переменную запишется введённое значение. В простейших реализациях приглашение в INPUT не поддерживалось и его нужно было выводить отдельным оператором PRINT (см. ниже).
- PRINT «Текст»; Переменная; Переменная; «Текст» — вывод на монитор последовательно перечисленных объектов (текста и значений переменных). В зависимости от реализации, по-разному воспринимались разделители: в одних случаях разделитель приводил к выводу хотя бы одного пробела, в других — значения выводились подряд и разделители нужно было добавлять вручную. Разделитель «;» выполнял также функцию подавления перевода на следующую строку.
- CLS — очистка экрана терминала. В зависимости от реализации, конструкции и режима работы терминала текстовый курсор переносился либо в верхний левый, либо в нижний левый угол.
- LET — присваивание (формат «LET Переменная = Значение»). В абсолютном большинстве версий оператор LET поддерживался, но был факультативным — присваивания переменным значений записывались без LET).
- DIM — описание массива. В отличие от обычных переменных, массивы требовали описания. Максимальное число размерностей массива определялось только реализацией
- DATA — набор данных, размещаемых прямо в тексте программы (аналог константы или массива-константы).
- READ — команда считывания из набора DATA.
- GOTO Lbl — команда безусловного перехода на метку Lbl.
- ON… GOTO — команда вычисляемого перехода — после ON должно было идти вычисляемое выражение или переменная, а после GOTO — набор меток через запятую. Значение выражения указывало номер метки, на которую нужно перейти.
- IF … THEN … — обычный оператор ветвления. После IF размещается логическое условие, после THEN — оператор, который должен быть выполнен при истинности этого условия. Для сокращения записи многие реализации поддерживали соглашение — если после THEN идёт число, то это — метка, на которую нужно перейти, то есть форма «IF … THEN 150» равнозначна «IF … THEN GOTO 150». Также могли поддерживаться формы «IF … GOTO…»
- FOR ПеременнаяЦикла=НачальноеЗначение TO КонечноеЗначение STEP Шаг — заголовок цикла с шагом. Инициирует цикл, в котором Переменная последовательно проходит ряд значений от НачальноеЗначение до КонечноеЗначение с шагом Шаг. Тело цикла ограничивается заголовком и ключевым словом NEXT. Часть STEP могла опускаться — в этом случае шаг был равен единице. Когда ПеременнаяЦикла выходит за указанные пределы, происходит переход за соответствующий оператор NEXT.
- NEXT — завершение тела цикла с шагом. Оператор показывает, что необходимо перейти на заголовок текущего исполняемого цикла FOR и продолжить работу. В более развитых реализациях NEXT мог содержать список переменных цикла через запятую — это означало, что в данной точке программы завершается тело не одного, а нескольких циклов. Применение NEXT с переменной также страховало от нарушения логики программы, так как вызывало ошибку времени выполнения, если при выполнении этой команды оказывалось, что активен цикл не по той переменной, имя которой указано.
- WHILE Условие — заголовок цикла с предусловием. Цикл завершался, если условие оказывалось ложно. В этом случае происходил переход за соответствующий заголовку оператор WEND.
- WEND — завершение тела цикла WHILE. Аналог NEXT но для цикла с предусловием.
- GOSUB Метка — переход к подпрограмме, начинающейся с Метки. Возврат происходит при достижении оператора RETURN. Рекурсивный вызов процедуры был, как правило, запрещён и приводил к ошибке времени выполнения.
- RETURN — оператор возврата из подпрограммы. Выполняется безусловный переход на оператор, следующий за командой GOSUB, которой был произведён переход к подпрограмме.
- END — завершение выполнения программы. Система выходит в интерпретатор и пользователю выдаётся приглашение на ввод команд.
- CHAIN — загрузка диапазона строк программы с внешнего носителя.
- OPEN — открытие файла данных на внешнем носителе.
- CLOSE — закрытие файла данных на внешнем носителе.
- GET — последовательное чтение значений указанных переменных из файла с перемещением файлового указателя за последний считанный символ.
- PUT — последовательная запись значений указанных переменных в файл с перемещением файлового указателя за последний записанный символ.
- DELETE — команда интерактивного режима — удаление строки с указанным номером.
- SAVE — команда интерактивного режима — сохранение текущей программы в файле на внешнем носителе.
- LOAD — команда интерактивного режима — загрузка в память программы из файла на внешнем носителе. Как правило, по умолчанию она приводила к уничтожению ранее загруженной программы и данных.
- RENUM — команда интерактивного режима — перенумерация всех или заданного диапазона строк программы начиная с заданного числа с указанным шагом. По умолчанию — перенумеруются все строки программы с шагом 10.
Условный оператор (IF..THEN
) изначально имел только одну ветвь — ветвь ELSE
в нём отсутствовала и моделировалась с помощью безусловного перехода. Так, в нижеследующей программе выполняется элементарная операция — ввод числа и вывод сообщения «Отрицательное число» или «Положительное число или нуль» в зависимости от его значения:
10 INPUT I
20 IF I >= 0 THEN PRINT "Positive number or null" : GOTO 40
30 PRINT "Negative number"
40 END
Имелся оператор перехода по вычисляемой метке ON..GOTO
(унаследованный от аналогичной конструкции Фортрана) — в нём после ON указывалось числовое выражение, а после GOTO
— список номеров строк. Переход происходил на строку, номер которой в списке соответствовал значению выражения. Присутствуют также циклы (цикл со счётчиком FOR
и цикл с предусловием WHILE
).
Использование функций, определяемых пользователем (участков кода, для многократного использования), было возможно двумя способами: определяемые функции и подпрограммы.
Подпрограммы не являлись аналогом функций таких языков, как Си или Паскаль, так как не имели имён и не могли принимать и/или возвращать параметры. Параметры и результаты передавались через глобальные переменные (все переменные в ранних версиях Бейсика были глобальными). Подпрограммы писались обычно в конце модуля, с нумерацией заведомо большей, чем планируемое количество строк (к примеру, нумерация блока подпрограмм могла начинаться с 5000, даже если в программе была пара сотен строк). Подпрограммы не имели заголовков и имён, и ничем не отличались от любого другого участка кода. Вызов подпрограммы осуществлялся с помощью ключевого слова GOSUB <метка>
. Это практически клон GOTO
, за исключением одного: возврат в точку вызова происходил автоматически, при достижении в подпрограмме ключевого слова RETURN
. GOSUB
, как и GOTO
, только способствовали плохой структуре кода, так как отследить выполнение программы, содержащей большое количество безусловных переходов и подпрограмм, было сложной задачей. Рекурсия не допускалась.
Отсутствие возможности давать подпрограммам имена (и передавать по ним управление), невозможность передачи параметров, отсутствие локальных переменных, использование только числовых меток в больших проектах вызывало путаницу в коде и очень затрудняло отладку.
В некоторых диалектах Бейсика имелась возможность загрузить файл с кодом непосредственно при выполнении программы (текущий при этом выгружался) оператором CHAIN
. Это была одна из самых полезных возможностей языка, так как она позволяла разбить большой проект на модули, вызывая их в порядке необходимости.
Редактора кода в ранних версиях, как такового, не было. При запуске интерпретатора Бейсика запускался диалоговый режим ввода команд. Для работы в этом режиме были предусмотрены специальные команды, которые не являлись операторами самого языка (их нельзя было включить в код программы). Это команды по управлению средой ввода, такие как: LIST <диапазон строк>
— вывод листинга программы на экран (LLIST
— на принтер), SAVE <имя файла>
— сохранение текста программы в файл, LOAD <имя файла>
— загрузка кода в память и т. д. Запуск программы производился вводом команды RUN. В большинстве интерпретаторов Бейсика в нижней части экрана была строка с этими (и другими) командами.
Если команда начиналась с номера строки (метки), она запоминалась в памяти как часть вводимой программы. Если строка оператора вводилась без номера, она выполнялась сразу же, после нажатия клавиши ↵ Enter. В качестве первых уроков обучающимся на Бейсике предлагалось поэкспериментировать с таким режимом, когда результат выполнения выражения был виден сразу. Например, если, находясь в режиме диалога, ввести строку PRINT 2+2
и нажать ↵ Enter, на экране отобразится результат сложения.
Для редактирования уже введённой строки в большинстве реализаций нужно было перепечатать её полностью. Удаление строк производилось командой DELETE <диапазон строк>
. Команда RENUM
— позволяла восстановить шаг 10 в нумерации строк. Часто возникала ситуация, что штатного шага 10 для будущих строк не хватало (так как такой шаг позволяет добавить лишь 9 строк между требуемыми) и тогда команда RENUM
была необходимой (все строки перенумеровывались с шагом 10, и соответствующим образом корректировались строки с GOTO
под новую нумерацию строк).
Для выполнения программы на Бейсике использовалась передача имени файла с кодом программы интерпретатору в командной строке. В этом случае после загрузки кода команда RUN (начать выполнение программы) вызывалась автоматически.
Фрагмент типичной программы на Бейсике:
10 CLS 'Очистка экрана
20 PRINT "Добро пожаловать!" 'Заголовок в первой строке
30 'Цикл, выводящий линию под заголовком, на всю ширину экрана
40 FOR I=1 TO 80
50 PRINT "=";
60 NEXT I
65 'Ввод символьных данных от пользователя (комментарий добавлен после ввода нижних строк)
70 INPUT "Имя: ",N$
80 INPUT "Фамилия: ",S$
90 INPUT "Отчество: ",T$
95 'Вырезаем копию первых символов из имени и отчества
100 N2$=LEFT$(N$,1)
110 T2$=LEFT$(T$,1)
120 'Выводим результат
130 PRINT "Ваше имя кратко: ";S$;" ";N2$;". ";T2$;"."
140 INPUT "Повторить программу? (Y/N) ",U$
150 IF U$="Y" THEN GOTO 10
160 END
Точка с запятой выполняет функцию подавления перехода на новую строку после оператора PRINT
. Ключевое слово END
означает завершение программы. Оно необязательно, в его отсутствие программа завершалась после исполнения последнего оператора, но было полезно в случаях, когда имелась секция подпрограмм либо программа имела несколько возможных точек завершения (в последнем случае либо в каждой такой точке ставили END
, либо END
был один, а на него делались переходы в других местах).
Поздние версии
Одним из наиболее распространённых вариантов языка Бейсик стала реализация интерпретатора QBasic корпорации Microsoft. Долгие годы она включалась как бесплатное приложение, входящее в операционные системы MS-DOS и ранних Windows. В нём имелись довольно мощные графические и звуковые возможности, позволяющие создавать на этом языке даже игры.
Бейсик поздних версий (начиная с Turbo Basic и Visual Basic) резко отличается от ранних вариантов. Фактически, это новый язык, который во многом ближе к Фортрану или Паскалю, чем к исходному Бейсику. Основные изменения версий 1990-х годов состоят в следующем:
- Отказались от представления программы как неструктурированного набора пронумерованных строк. Номера строк превратились в обычные метки, которые стали необязательными и перестали влиять на порядок исполнения программы. Если ранее строка с номером 15 всегда шла в программе раньше строки с номером 20, то теперь порядок исполнения стал определяться порядком расположения строк в исходном коде. Метки перестали быть только числовыми.
- В языке появились именованные подпрограммы с параметрами, механизм вызова подпрограмм стал обычным: подпрограмма вызывается по имени, с указанием списка фактических параметров.
- Появилась рекурсия.
- Были введены структурные управляющие конструкции, в результате для организации обычных ветвлений и циклов перестало быть необходимым использование оператора
GOTO
и меток строк. - Существенно расширилась номенклатура типов данных, появилась возможность явно описывать типы обычных переменных.
- Стали необязательными типизирующие суффиксы в именах переменных, хотя их использование не запрещалось.
- В более поздних версиях появилась обработка исключений и поддержка элементов ООП.
- Были введены механизмы поддержки модульности — появилась возможность без «фокусов» (типа динамической загрузки модулей с помощью явных системных вызовов) разделять программу на несколько файлов исходного кода.
- Появились средства для работы с цветной графикой и звуковой картой.
- Visual Basic, ориентированный на разработку Windows-приложений с графическим интерфейсом пользователя, был выполнен интегрированным с графическим дизайнером интерфейса, что позволило быстро писать простые программы под Windows.
- Появились кроссплатформенные реализации, например, FreeBASIC и PureBasic.
Практически все недостатки, присущие ранним версиям языка, были исправлены, и программирование на современных диалектах Бейсика мало отличается от использования других языков и сред (например, таких, как Delphi). Оборотной стороной процесса модификации Basic является то, что язык стал гораздо объёмнее и сложнее, его освоение требует больше времени и усилий.
Фрагмент типичной программы на FreeBASIC:
# Lang "fb"
Dim As String n,s,t,n2,t2
Cls : Print "Добро пожаловать!" 'Заголовок в первой строке
Do
'Цикл, выводящий линию под заголовком, на всю ширину экрана
For i As Integer=1 To LoWord(Width)
Print "=";
Next i
'Ввод символьных данных от пользователя
Input "Имя: ",n
Input "Фамилия: ",s
Input "Отчество: ",t
'Вырезаем копию первых символов из имени и отчества
n2=Left(n,1)
t2=Left(t,1)
'Выводим результат
Print "Ваше имя кратко: "; s; " "; n2; ". "; t2; "."
Print "Повторить программу? (y/n) "
Loop While LCase(Input(1))="y"
End 0
Несмотря на популярность, в 2001 году Microsoft отказалась от дальнейшей поддержки Visual Basic в пользу принципиально нового языка Visual Basic .NET — в этой реализации язык был снова кардинально пересмотрен и по набору возможностей практически стал совпадать c языком C#, отличаются только детали синтаксиса и ключевые слова. Таким образом, Basic перерос из средства для создания программ любителям-непрофессионалам до полноценного средства создания программ.
Помимо написания полноценных программ, Бейсик широко применяется как основа для различных скриптовых языков (например, макросы в пакете Microsoft Office пишутся на диалекте VBA, а скрипты для автоматизации выполнения задач в Windows пишутся на языках VBScript, AutoIt и AutoHotkey).
Критика
В пору своего расцвета (1970—1980 годы) Бейсик подвергся жёсткой критике. Помимо констатации очевидных недостатков языка, связанных с синтаксической бедностью ранних вариантов и отсутствием многих признанных и удобных конструкций и механизмов, Бейсик критиковали за то, что его простота и бесструктурность поощряют применение порочных методик разработки и способствуют выработке опасных привычек программирования, которые иногда могут быть уместны при быстром создании малых программ для текущих нужд, но способны привести к краху крупных проектов.
Резко критиковалось повсеместно распространённое начальное обучение программированию, базирующееся на Бейсике. Одной из «визитных карточек» Эдсгера Дейкстры стало высказывание:
Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они умственно изувечены без надежды на восстановление[7].
Оригинальный текст (англ.)It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.
В ответ на критику адепты[] Бейсика замечают, что критики приписывают языку те негативные стороны, которые следовало бы отнести к его неправильному применению. Недостатки Бейсика (если иметь в виду ранние диалекты) проявляются при попытке профессиональной разработки на нём сложных и крупных программ и при использовании его как базового языка для обучения программистов, но ни для одного из этих применений данный язык не предназначался; его основной задачей было предоставить студентам-непрограммистам возможность после минимального обучения самостоятельно писать простейшие программы для собственных нужд, чтобы не отвлекать на эту работу специалистов. Этой задаче язык вполне соответствует.[]
Если же говорить о современных диалектах и реализациях Бейсика, то они настолько далеко ушли от первоначальной формы языка, что всё вышесказанное вряд ли можно считать относящимся к ним. Современные диалекты Бейсика являются достаточно структурированными языками, они сопоставимы по возможностям с такими языками, как Си, Паскаль и т. п.[]
Производители
В разное время интерпретаторы и компиляторы BASIC выпускались различными организациями, компаниями, фирмами:
- Acorn Computers
- Apple
- Atari
- Basic International
- Borland
- CDC
- Commodore
- Comshare
- Concept Omega
- Data General
- Dartmouth
- DEC
- Digital Research
- Exidy
- Fantaisie Software
- The Game Creators
- Gordon Eubanks[англ.]
- Hedge Systems
- Honeywell
- HP
- IBM
- Mark Williams
- Microdata Corporation[англ.]
- Microsoft
- Microway
- Morgan Computing
- NCR Century
- RadioShack
- Ryan McFarland[англ.]
- Sax Software
- Sinclair Research
- Sperry / UNIVAC
- Summi Software Tehnology
- Texas Instruments
- True Basic
- Unicomp
- University of California
- University of Maryland
- Varian[англ.]
- Wang Laboratories
- Watcom
- Xerox
- Zedcor
Советские:
- Вильнюсский университет — Вильнюс
- ВЦ СО АН СССР — Новосибирск
- ПО «ВЭФ» — Рига
- Нижегородский государственный университет имени Н. И. Лобачевского — Нижний Новгород
Реализации
Apple:
Commodore:
|
|
|
Другие:
Примечания
- ↑ 1 2 Gürer D. Pioneering women in computer science (англ.) // SIGCSE bulletin — 2002. — Vol. 34, Iss. 2. — P. 175. — ISSN 0097-8418; 2331-3927 — doi:10.1145/543812.543853
- ↑ 1 2 https://www.computinghistory.org.uk/det/47364/Sister-Mary-Kenneth-Keller/
- ↑ 1 2 Знакомьтесь: компьютер = Computer basics INPUT/OUTPUT. Understanding computers / Пер. с англ. К. Г. Батаева Под ред. и с предисл. канд. физ.-мат. наук В. М. Курочкина. — М.: Мир, 1989. — 240 с. — 100 000 экз. — ISBN 5-03-001147-1.
- ↑ 1 2 Mary Bellis. The History of the BASIC Programming Language (англ.). ThoughtCo. Dotdash Meredith (26 января 2019). Дата обращения: 19 марта 2023. Архивировано 7 августа 2021 года.
- ↑ 1 2 3 4 5 6 7 8 Benj Edwards. The BASIC programming language turns 60 (англ.). Ars Technica (1 мая 2024). Дата обращения: 4 мая 2024.
- ↑ 1 2 3 4 5 6 7 8 Павел Котов. Языку программирования BASIC исполнилось 60 лет . 3DNews (2 мая 2024). Дата обращения: 4 мая 2024.
- ↑ How do we tell truths that might hurt? Архивная копия от 2 мая 2017 на Wayback Machine, The threats to computing science Архивная копия от 15 октября 2012 на Wayback Machine
Литература
- Dyakonov V., Munerman V., Samoylova T., Yemelchenkov Ye. The Revolutionary Guide to QBASIC. — Birmingham: Wrox Press Ltd, 1996. — 578 p.
- Дьяконов В. П. Справочник по алгоритмам и программам на языке Бейсик для персональных ЭВМ. — М.: Наука, Физматлит, 1987. — 240 с.
- Дьяконов В. П. Применение персональных ЭВМ и программирование на языке Бейсик. — М.: Радио и связь, 1989. — 288 с.
- Дьяконов В. П. Современные зарубежные микрокалькуляторы. — М.: СОЛОН-Р, 2002. — 400 с.
- Кетков Ю. Практика программирования Бейсик, Си, Паскаль. — БХВ, 2002. — 480 с. — ISBN 5941571046.
- Стандарты
- ANSI X3.60-1978 «FOR MINIMAL BASIC»
- ISO/IEC 6373:1984 «DATA PROCESSING — PROGRAMMING LANGUAGES — MINIMAL BASIC»
- ANSI X3.113-1987 «PROGRAMMING LANGUAGES FULL BASIC»
- ГОСТ 27787-88 «Язык программирования БЕЙСИК» (включает в себя стандарт ISO 6373:1984)
- INCITS/ISO/IEC 10279-1991 (R2005) «Information Technology — Programming Languages — Full BASIC» Архивная копия от 7 июня 2011 на Wayback Machine
- ANSI X3.113 INTERPRETATIONS-1992 «BASIC TECHNICAL INFORMATION BULLETIN # 1 INTERPRETATIONS OF ANSI 03.113-1987»
- ISO/IEC 10279:1991/ Amd 1:1994 «Modules and single character input enhancement» Архивная копия от 25 октября 2012 на Wayback Machine
Ссылки
- Авторский вариант статьи Андрея Колесова. Статья была опубликована Архивная копия от 26 апреля 2014 на Wayback Machine c незначительной литературной правкой в журнале «Наука и жизнь» № 10/2000, с. 18—20.
- A Manual for BASIC, the elementary algebraic language designed for use with the Darthmouth Time Sharing System Архивная копия от 16 июля 2012 на Wayback Machine Препринт Дартмутского колледжа от 1 октября 1964.
- Thomas E. Kurtz. BASIC (недоступная ссылка), 1977.
- Обширный список бейсико-подобных языков Архивная копия от 20 марта 2008 на Wayback Machine (англ.)