Один из создателей языка программирования бейсик. Язык программирования Basic (Бейсик)

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

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

При проектировании языка использовались следующие восемь принципов. Новый язык должен был:

  1. быть простым в использовании для начинающих ;
  2. быть языком программирования общего назначения ;
  3. предоставлять возможность расширения функциональности , доступную опытным программистам;
  4. быть интерактивным ;
  5. предоставлять ясные сообщения об ошибках;
  6. быстро работать на небольших программах;
  7. не требовать понимания работы аппаратного обеспечения;
  8. защищать пользователя от операционной системы .

Язык был основан частично на Фортране II и частично на Алголе 60 , с добавлениями, делающими его удобным для работы в режиме разделения времени и, позднее, обработки текста и матричной арифметики. Первоначально Бейсик был реализован на мейнфрейме GE-265 с поддержкой множества терминалов. Вопреки распространённому убеждению, в момент своего появления это был компилируемый язык.

Рост

Несмотря на то, что язык уже использовался на нескольких мини-компьютерах, его настоящее распространение началось с его появления на микрокомпьютере Альтаир 8800 . Многие языки программирования были слишком большими, чтобы поместиться в небольшую память, которую пользователи таких машин могли себе позволить. Для машин с таким медленным носителем как бумажная лента (позднее - аудиокассета) и без подходящего текстового редактора такой небольшой язык как Бейсик был отличной находкой.

Зрелость

Периодом наибольшего расцвета и развития исходного Бейсика можно считать конец 1970-х - первую половину 1980-х годов. В этот период практически все персональные компьютеры имели собственный интерпретатор Бейсика, зачастую зашиваемый в ПЗУ, который в простейших компьютерах нередко выполнял также функции операционной системы. Практически все более мощные компьютеры также имели интерактивные Бейсик-системы. Характерно, что практически не было компиляторов Бейсика, абсолютное большинство реализаций представляли собой стандартный гибрид строчного редактора и интерпретатора. Недовольство примитивизмом исходного Бейсика порождало попытки улучшить и базовые средства языка, что привело к появлению в некоторых реализациях сложных операторов ветвления, дополнительных видов циклов, именованных процедур с параметрами.

Было создано несколько новых версий Бейсика для платформы IBM PC. Microsoft продавала Бейсик для MS-DOS /PC DOS , включая 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 , а также различных его модификаций (таких как VBA), в языке появились многие другие типы данных и дополнения, типичные для современных языков программирования (например, такие, как объектная модель). Объявление переменных не требует специальной секции (в отличие от Паскаля). Объявление переменной - это первое её использование.

Ранние версии Бейсика (такие как BASICA , GW-BASIC) существенно отличаются от современных диалектов и сегодня практически не используются.

Ранние версии

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

Всё это отразилось в Бейсике. Каждая строка начиналась с номера. При вводе в редактор строка оказывалась в исходном тексте программы на позиции, соответствующей её номеру. Для вставки новой строки нужно было дописать строку с номером, находящимся в диапазоне между номерами двух других строк. «Раздвинуть» строки было невозможно, если требовалось вставить новую строку между строками с соседними номерами, приходилось повторно вводить эти строки с другими номерами, чтобы обеспечить разрыв в нумерации (либо применять специальную команду RENUM , которая перенумеровывала все уже введённые строки с постоянным шагом, синхронно изменяя все команды переходов). Для упрощения оперативного редактирования программы сложилась практика нумеровать строки с шагом 10 - это позволяло практически во всех случаях вставлять новые строки без изменения номеров ранее введённых. Например, чтобы добавить третью строку между строками 20 и 30, нужно было написать строку с номером 25. Типичная строка из программы на Бейсике выглядела так:

10 PRINT "Hello, World!"

Изменять вручную номера уже имеющихся строк было небезопасно, так как номера выполняли роль меток для оператора GOTO . Ранее в Бейсике были допустимы только числовые метки для этого оператора, и наличие в каждой строке уникального номера делало возможным безусловный переход к любой из них. Числовые метки и активное использование GOTO было неизбежным при программировании на Бейсике, что способствовало плохой структуре кода и в больших проектах приводило к запутыванию самих авторов. Был даже придуман шуточный термин «макаронное программирование» (spagetti 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 . Это была одна из самых полезных возможностей языка, так как она позволяла разбить большой проект на модули, вызывая их в порядке необходимости.

Критика

В пору своего расцвета (1970-1980 годы) Бейсик подвергся жёсткой критике. Помимо констатации очевидных недостатков языка, связанных с синтаксической бедностью ранних вариантов и отсутствием многих признанных и удобных конструкций и механизмов, Бейсик критиковали за то, что его простота и бесструктурность поощряют применение порочных методик разработки и способствуют выработке опасных привычек программирования, которые иногда могут быть уместны при быстром создании малых программ для текущих нужд, но способны привести к краху крупных проектов.

Резко критиковалось повсеместно распространённое начальное обучение программированию, базирующееся на Бейсике. Одной из «визитных карточек» Эдсгера Дейкстры стало высказывание:

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

Оригинальный текст (англ.)

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 выпускались различными организациями, компаниями, фирмами:

Советские:

  • Вильнюсский университет - Вильнюс
  • ВЦ СО АН СССР - Новосибирск
  • Нижегородский государственный университет имени Н. И. Лобачевского - Нижний Новгород

Реализации

  • Visual Basic (VBA , VBS , .NET)
  • Rapid-Q basic

Напишите отзыв о статье "Бейсик"

Примечания

Литература

  • 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 с.
Стандарты
  • 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)
  • ANSI X3.113 INTERPRETATIONS-1992 «BASIC TECHNICAL INFORMATION BULLETIN # 1 INTERPRETATIONS OF ANSI 03.113-1987»

Ссылки

  • Андрей Колесов. Авторский вариант. c незначительной литературной правкой в журнале «Наука и жизнь » № 10/2000, с. 18-20.
  • Препринт Дартмутского колледжа от 1 октября 1964.
  • Thomas E. Kurtz. , 1977.
  • (англ.)

Отрывок, характеризующий Бейсик

Так странно вдруг для Наташи показался этот его кроткий, нежный, задушевный голос.
– Не будем говорить, мой друг, я всё скажу ему; но об одном прошу вас – считайте меня своим другом, и ежели вам нужна помощь, совет, просто нужно будет излить свою душу кому нибудь – не теперь, а когда у вас ясно будет в душе – вспомните обо мне. – Он взял и поцеловал ее руку. – Я счастлив буду, ежели в состоянии буду… – Пьер смутился.
– Не говорите со мной так: я не стою этого! – вскрикнула Наташа и хотела уйти из комнаты, но Пьер удержал ее за руку. Он знал, что ему нужно что то еще сказать ей. Но когда он сказал это, он удивился сам своим словам.
– Перестаньте, перестаньте, вся жизнь впереди для вас, – сказал он ей.
– Для меня? Нет! Для меня всё пропало, – сказала она со стыдом и самоунижением.
– Все пропало? – повторил он. – Ежели бы я был не я, а красивейший, умнейший и лучший человек в мире, и был бы свободен, я бы сию минуту на коленях просил руки и любви вашей.
Наташа в первый раз после многих дней заплакала слезами благодарности и умиления и взглянув на Пьера вышла из комнаты.
Пьер тоже вслед за нею почти выбежал в переднюю, удерживая слезы умиления и счастья, давившие его горло, не попадая в рукава надел шубу и сел в сани.
– Теперь куда прикажете? – спросил кучер.
«Куда? спросил себя Пьер. Куда же можно ехать теперь? Неужели в клуб или гости?» Все люди казались так жалки, так бедны в сравнении с тем чувством умиления и любви, которое он испытывал; в сравнении с тем размягченным, благодарным взглядом, которым она последний раз из за слез взглянула на него.
– Домой, – сказал Пьер, несмотря на десять градусов мороза распахивая медвежью шубу на своей широкой, радостно дышавшей груди.
Было морозно и ясно. Над грязными, полутемными улицами, над черными крышами стояло темное, звездное небо. Пьер, только глядя на небо, не чувствовал оскорбительной низости всего земного в сравнении с высотою, на которой находилась его душа. При въезде на Арбатскую площадь, огромное пространство звездного темного неба открылось глазам Пьера. Почти в середине этого неба над Пречистенским бульваром, окруженная, обсыпанная со всех сторон звездами, но отличаясь от всех близостью к земле, белым светом, и длинным, поднятым кверху хвостом, стояла огромная яркая комета 1812 го года, та самая комета, которая предвещала, как говорили, всякие ужасы и конец света. Но в Пьере светлая звезда эта с длинным лучистым хвостом не возбуждала никакого страшного чувства. Напротив Пьер радостно, мокрыми от слез глазами, смотрел на эту светлую звезду, которая, как будто, с невыразимой быстротой пролетев неизмеримые пространства по параболической линии, вдруг, как вонзившаяся стрела в землю, влепилась тут в одно избранное ею место, на черном небе, и остановилась, энергично подняв кверху хвост, светясь и играя своим белым светом между бесчисленными другими, мерцающими звездами. Пьеру казалось, что эта звезда вполне отвечала тому, что было в его расцветшей к новой жизни, размягченной и ободренной душе.

С конца 1811 го года началось усиленное вооружение и сосредоточение сил Западной Европы, и в 1812 году силы эти – миллионы людей (считая тех, которые перевозили и кормили армию) двинулись с Запада на Восток, к границам России, к которым точно так же с 1811 го года стягивались силы России. 12 июня силы Западной Европы перешли границы России, и началась война, то есть совершилось противное человеческому разуму и всей человеческой природе событие. Миллионы людей совершали друг, против друга такое бесчисленное количество злодеяний, обманов, измен, воровства, подделок и выпуска фальшивых ассигнаций, грабежей, поджогов и убийств, которого в целые века не соберет летопись всех судов мира и на которые, в этот период времени, люди, совершавшие их, не смотрели как на преступления.
Что произвело это необычайное событие? Какие были причины его? Историки с наивной уверенностью говорят, что причинами этого события были обида, нанесенная герцогу Ольденбургскому, несоблюдение континентальной системы, властолюбие Наполеона, твердость Александра, ошибки дипломатов и т. п.
Следовательно, стоило только Меттерниху, Румянцеву или Талейрану, между выходом и раутом, хорошенько постараться и написать поискуснее бумажку или Наполеону написать к Александру: Monsieur mon frere, je consens a rendre le duche au duc d"Oldenbourg, [Государь брат мой, я соглашаюсь возвратить герцогство Ольденбургскому герцогу.] – и войны бы не было.
Понятно, что таким представлялось дело современникам. Понятно, что Наполеону казалось, что причиной войны были интриги Англии (как он и говорил это на острове Св. Елены); понятно, что членам английской палаты казалось, что причиной войны было властолюбие Наполеона; что принцу Ольденбургскому казалось, что причиной войны было совершенное против него насилие; что купцам казалось, что причиной войны была континентальная система, разорявшая Европу, что старым солдатам и генералам казалось, что главной причиной была необходимость употребить их в дело; легитимистам того времени то, что необходимо было восстановить les bons principes [хорошие принципы], а дипломатам того времени то, что все произошло оттого, что союз России с Австрией в 1809 году не был достаточно искусно скрыт от Наполеона и что неловко был написан memorandum за № 178. Понятно, что эти и еще бесчисленное, бесконечное количество причин, количество которых зависит от бесчисленного различия точек зрения, представлялось современникам; но для нас – потомков, созерцающих во всем его объеме громадность совершившегося события и вникающих в его простой и страшный смысл, причины эти представляются недостаточными. Для нас непонятно, чтобы миллионы людей христиан убивали и мучили друг друга, потому что Наполеон был властолюбив, Александр тверд, политика Англии хитра и герцог Ольденбургский обижен. Нельзя понять, какую связь имеют эти обстоятельства с самым фактом убийства и насилия; почему вследствие того, что герцог обижен, тысячи людей с другого края Европы убивали и разоряли людей Смоленской и Московской губерний и были убиваемы ими.
Для нас, потомков, – не историков, не увлеченных процессом изыскания и потому с незатемненным здравым смыслом созерцающих событие, причины его представляются в неисчислимом количестве. Чем больше мы углубляемся в изыскание причин, тем больше нам их открывается, и всякая отдельно взятая причина или целый ряд причин представляются нам одинаково справедливыми сами по себе, и одинаково ложными по своей ничтожности в сравнении с громадностью события, и одинаково ложными по недействительности своей (без участия всех других совпавших причин) произвести совершившееся событие. Такой же причиной, как отказ Наполеона отвести свои войска за Вислу и отдать назад герцогство Ольденбургское, представляется нам и желание или нежелание первого французского капрала поступить на вторичную службу: ибо, ежели бы он не захотел идти на службу и не захотел бы другой, и третий, и тысячный капрал и солдат, настолько менее людей было бы в войске Наполеона, и войны не могло бы быть.
Ежели бы Наполеон не оскорбился требованием отступить за Вислу и не велел наступать войскам, не было бы войны; но ежели бы все сержанты не пожелали поступить на вторичную службу, тоже войны не могло бы быть. Тоже не могло бы быть войны, ежели бы не было интриг Англии, и не было бы принца Ольденбургского и чувства оскорбления в Александре, и не было бы самодержавной власти в России, и не было бы французской революции и последовавших диктаторства и империи, и всего того, что произвело французскую революцию, и так далее. Без одной из этих причин ничего не могло бы быть. Стало быть, причины эти все – миллиарды причин – совпали для того, чтобы произвести то, что было. И, следовательно, ничто не было исключительной причиной события, а событие должно было совершиться только потому, что оно должно было совершиться. Должны были миллионы людей, отрекшись от своих человеческих чувств и своего разума, идти на Восток с Запада и убивать себе подобных, точно так же, как несколько веков тому назад с Востока на Запад шли толпы людей, убивая себе подобных.
Действия Наполеона и Александра, от слова которых зависело, казалось, чтобы событие совершилось или не совершилось, – были так же мало произвольны, как и действие каждого солдата, шедшего в поход по жребию или по набору. Это не могло быть иначе потому, что для того, чтобы воля Наполеона и Александра (тех людей, от которых, казалось, зависело событие) была исполнена, необходимо было совпадение бесчисленных обстоятельств, без одного из которых событие не могло бы совершиться. Необходимо было, чтобы миллионы людей, в руках которых была действительная сила, солдаты, которые стреляли, везли провиант и пушки, надо было, чтобы они согласились исполнить эту волю единичных и слабых людей и были приведены к этому бесчисленным количеством сложных, разнообразных причин.
Фатализм в истории неизбежен для объяснения неразумных явлений (то есть тех, разумность которых мы не понимаем). Чем более мы стараемся разумно объяснить эти явления в истории, тем они становятся для нас неразумнее и непонятнее.
Каждый человек живет для себя, пользуется свободой для достижения своих личных целей и чувствует всем существом своим, что он может сейчас сделать или не сделать такое то действие; но как скоро он сделает его, так действие это, совершенное в известный момент времени, становится невозвратимым и делается достоянием истории, в которой оно имеет не свободное, а предопределенное значение.
Есть две стороны жизни в каждом человеке: жизнь личная, которая тем более свободна, чем отвлеченнее ее интересы, и жизнь стихийная, роевая, где человек неизбежно исполняет предписанные ему законы.
Человек сознательно живет для себя, но служит бессознательным орудием для достижения исторических, общечеловеческих целей. Совершенный поступок невозвратим, и действие его, совпадая во времени с миллионами действий других людей, получает историческое значение. Чем выше стоит человек на общественной лестнице, чем с большими людьми он связан, тем больше власти он имеет на других людей, тем очевиднее предопределенность и неизбежность каждого его поступка.
«Сердце царево в руце божьей».
Царь – есть раб истории.
История, то есть бессознательная, общая, роевая жизнь человечества, всякой минутой жизни царей пользуется для себя как орудием для своих целей.
Наполеон, несмотря на то, что ему более чем когда нибудь, теперь, в 1812 году, казалось, что от него зависело verser или не verser le sang de ses peuples [проливать или не проливать кровь своих народов] (как в последнем письме писал ему Александр), никогда более как теперь не подлежал тем неизбежным законам, которые заставляли его (действуя в отношении себя, как ему казалось, по своему произволу) делать для общего дела, для истории то, что должно было совершиться.
Люди Запада двигались на Восток для того, чтобы убивать друг друга. И по закону совпадения причин подделались сами собою и совпали с этим событием тысячи мелких причин для этого движения и для войны: укоры за несоблюдение континентальной системы, и герцог Ольденбургский, и движение войск в Пруссию, предпринятое (как казалось Наполеону) для того только, чтобы достигнуть вооруженного мира, и любовь и привычка французского императора к войне, совпавшая с расположением его народа, увлечение грандиозностью приготовлений, и расходы по приготовлению, и потребность приобретения таких выгод, которые бы окупили эти расходы, и одурманившие почести в Дрездене, и дипломатические переговоры, которые, по взгляду современников, были ведены с искренним желанием достижения мира и которые только уязвляли самолюбие той и другой стороны, и миллионы миллионов других причин, подделавшихся под имеющее совершиться событие, совпавших с ним.
Когда созрело яблоко и падает, – отчего оно падает? Оттого ли, что тяготеет к земле, оттого ли, что засыхает стержень, оттого ли, что сушится солнцем, что тяжелеет, что ветер трясет его, оттого ли, что стоящему внизу мальчику хочется съесть его?
Ничто не причина. Все это только совпадение тех условий, при которых совершается всякое жизненное, органическое, стихийное событие. И тот ботаник, который найдет, что яблоко падает оттого, что клетчатка разлагается и тому подобное, будет так же прав, и так же не прав, как и тот ребенок, стоящий внизу, который скажет, что яблоко упало оттого, что ему хотелось съесть его и что он молился об этом. Так же прав и не прав будет тот, кто скажет, что Наполеон пошел в Москву потому, что он захотел этого, и оттого погиб, что Александр захотел его погибели: как прав и не прав будет тот, кто скажет, что завалившаяся в миллион пудов подкопанная гора упала оттого, что последний работник ударил под нее последний раз киркою. В исторических событиях так называемые великие люди суть ярлыки, дающие наименований событию, которые, так же как ярлыки, менее всего имеют связи с самым событием.
Каждое действие их, кажущееся им произвольным для самих себя, в историческом смысле непроизвольно, а находится в связи со всем ходом истории и определено предвечно.

29 го мая Наполеон выехал из Дрездена, где он пробыл три недели, окруженный двором, составленным из принцев, герцогов, королей и даже одного императора. Наполеон перед отъездом обласкал принцев, королей и императора, которые того заслуживали, побранил королей и принцев, которыми он был не вполне доволен, одарил своими собственными, то есть взятыми у других королей, жемчугами и бриллиантами императрицу австрийскую и, нежно обняв императрицу Марию Луизу, как говорит его историк, оставил ее огорченною разлукой, которую она – эта Мария Луиза, считавшаяся его супругой, несмотря на то, что в Париже оставалась другая супруга, – казалось, не в силах была перенести. Несмотря на то, что дипломаты еще твердо верили в возможность мира и усердно работали с этой целью, несмотря на то, что император Наполеон сам писал письмо императору Александру, называя его Monsieur mon frere [Государь брат мой] и искренно уверяя, что он не желает войны и что всегда будет любить и уважать его, – он ехал к армии и отдавал на каждой станции новые приказания, имевшие целью торопить движение армии от запада к востоку. Он ехал в дорожной карете, запряженной шестериком, окруженный пажами, адъютантами и конвоем, по тракту на Позен, Торн, Данциг и Кенигсберг. В каждом из этих городов тысячи людей с трепетом и восторгом встречали его.
Армия подвигалась с запада на восток, и переменные шестерни несли его туда же. 10 го июня он догнал армию и ночевал в Вильковисском лесу, в приготовленной для него квартире, в имении польского графа.
На другой день Наполеон, обогнав армию, в коляске подъехал к Неману и, с тем чтобы осмотреть местность переправы, переоделся в польский мундир и выехал на берег.
Увидав на той стороне казаков (les Cosaques) и расстилавшиеся степи (les Steppes), в середине которых была Moscou la ville sainte, [Москва, священный город,] столица того, подобного Скифскому, государства, куда ходил Александр Македонский, – Наполеон, неожиданно для всех и противно как стратегическим, так и дипломатическим соображениям, приказал наступление, и на другой день войска его стали переходить Неман.
12 го числа рано утром он вышел из палатки, раскинутой в этот день на крутом левом берегу Немана, и смотрел в зрительную трубу на выплывающие из Вильковисского леса потоки своих войск, разливающихся по трем мостам, наведенным на Немане. Войска знали о присутствии императора, искали его глазами, и, когда находили на горе перед палаткой отделившуюся от свиты фигуру в сюртуке и шляпе, они кидали вверх шапки, кричали: «Vive l"Empereur! [Да здравствует император!] – и одни за другими, не истощаясь, вытекали, всё вытекали из огромного, скрывавшего их доселе леса и, расстрояясь, по трем мостам переходили на ту сторону.
– On fera du chemin cette fois ci. Oh! quand il s"en mele lui meme ca chauffe… Nom de Dieu… Le voila!.. Vive l"Empereur! Les voila donc les Steppes de l"Asie! Vilain pays tout de meme. Au revoir, Beauche; je te reserve le plus beau palais de Moscou. Au revoir! Bonne chance… L"as tu vu, l"Empereur? Vive l"Empereur!.. preur! Si on me fait gouverneur aux Indes, Gerard, je te fais ministre du Cachemire, c"est arrete. Vive l"Empereur! Vive! vive! vive! Les gredins de Cosaques, comme ils filent. Vive l"Empereur! Le voila! Le vois tu? Je l"ai vu deux fois comme jete vois. Le petit caporal… Je l"ai vu donner la croix a l"un des vieux… Vive l"Empereur!.. [Теперь походим! О! как он сам возьмется, дело закипит. Ей богу… Вот он… Ура, император! Так вот они, азиатские степи… Однако скверная страна. До свиданья, Боше. Я тебе оставлю лучший дворец в Москве. До свиданья, желаю успеха. Видел императора? Ура! Ежели меня сделают губернатором в Индии, я тебя сделаю министром Кашмира… Ура! Император вот он! Видишь его? Я его два раза как тебя видел. Маленький капрал… Я видел, как он навесил крест одному из стариков… Ура, император!] – говорили голоса старых и молодых людей, самых разнообразных характеров и положений в обществе. На всех лицах этих людей было одно общее выражение радости о начале давно ожидаемого похода и восторга и преданности к человеку в сером сюртуке, стоявшему на горе.
13 го июня Наполеону подали небольшую чистокровную арабскую лошадь, и он сел и поехал галопом к одному из мостов через Неман, непрестанно оглушаемый восторженными криками, которые он, очевидно, переносил только потому, что нельзя было запретить им криками этими выражать свою любовь к нему; но крики эти, сопутствующие ему везде, тяготили его и отвлекали его от военной заботы, охватившей его с того времени, как он присоединился к войску. Он проехал по одному из качавшихся на лодках мостов на ту сторону, круто повернул влево и галопом поехал по направлению к Ковно, предшествуемый замиравшими от счастия, восторженными гвардейскими конными егерями, расчищая дорогу по войскам, скакавшим впереди его. Подъехав к широкой реке Вилии, он остановился подле польского уланского полка, стоявшего на берегу.
– Виват! – также восторженно кричали поляки, расстроивая фронт и давя друг друга, для того чтобы увидать его. Наполеон осмотрел реку, слез с лошади и сел на бревно, лежавшее на берегу. По бессловесному знаку ему подали трубу, он положил ее на спину подбежавшего счастливого пажа и стал смотреть на ту сторону. Потом он углубился в рассматриванье листа карты, разложенного между бревнами. Не поднимая головы, он сказал что то, и двое его адъютантов поскакали к польским уланам.
– Что? Что он сказал? – слышалось в рядах польских улан, когда один адъютант подскакал к ним.
Было приказано, отыскав брод, перейти на ту сторону. Польский уланский полковник, красивый старый человек, раскрасневшись и путаясь в словах от волнения, спросил у адъютанта, позволено ли ему будет переплыть с своими уланами реку, не отыскивая брода. Он с очевидным страхом за отказ, как мальчик, который просит позволения сесть на лошадь, просил, чтобы ему позволили переплыть реку в глазах императора. Адъютант сказал, что, вероятно, император не будет недоволен этим излишним усердием.
Как только адъютант сказал это, старый усатый офицер с счастливым лицом и блестящими глазами, подняв кверху саблю, прокричал: «Виват! – и, скомандовав уланам следовать за собой, дал шпоры лошади и подскакал к реке. Он злобно толкнул замявшуюся под собой лошадь и бухнулся в воду, направляясь вглубь к быстрине течения. Сотни уланов поскакали за ним. Было холодно и жутко на середине и на быстрине теченья. Уланы цеплялись друг за друга, сваливались с лошадей, лошади некоторые тонули, тонули и люди, остальные старались плыть кто на седле, кто держась за гриву. Они старались плыть вперед на ту сторону и, несмотря на то, что за полверсты была переправа, гордились тем, что они плывут и тонут в этой реке под взглядами человека, сидевшего на бревне и даже не смотревшего на то, что они делали. Когда вернувшийся адъютант, выбрав удобную минуту, позволил себе обратить внимание императора на преданность поляков к его особе, маленький человек в сером сюртуке встал и, подозвав к себе Бертье, стал ходить с ним взад и вперед по берегу, отдавая ему приказания и изредка недовольно взглядывая на тонувших улан, развлекавших его внимание.
Для него было не ново убеждение в том, что присутствие его на всех концах мира, от Африки до степей Московии, одинаково поражает и повергает людей в безумие самозабвения. Он велел подать себе лошадь и поехал в свою стоянку.
Человек сорок улан потонуло в реке, несмотря на высланные на помощь лодки. Большинство прибилось назад к этому берегу. Полковник и несколько человек переплыли реку и с трудом вылезли на тот берег. Но как только они вылезли в обшлепнувшемся на них, стекающем ручьями мокром платье, они закричали: «Виват!», восторженно глядя на то место, где стоял Наполеон, но где его уже не было, и в ту минуту считали себя счастливыми.
Ввечеру Наполеон между двумя распоряжениями – одно о том, чтобы как можно скорее доставить заготовленные фальшивые русские ассигнации для ввоза в Россию, и другое о том, чтобы расстрелять саксонца, в перехваченном письме которого найдены сведения о распоряжениях по французской армии, – сделал третье распоряжение – о причислении бросившегося без нужды в реку польского полковника к когорте чести (Legion d"honneur), которой Наполеон был главою.
Qnos vult perdere – dementat. [Кого хочет погубить – лишит разума (лат.) ]

Русский император между тем более месяца уже жил в Вильне, делая смотры и маневры. Ничто не было готово для войны, которой все ожидали и для приготовления к которой император приехал из Петербурга. Общего плана действий не было. Колебания о том, какой план из всех тех, которые предлагались, должен быть принят, только еще более усилились после месячного пребывания императора в главной квартире. В трех армиях был в каждой отдельный главнокомандующий, но общего начальника над всеми армиями не было, и император не принимал на себя этого звания.
Чем дольше жил император в Вильне, тем менее и менее готовились к войне, уставши ожидать ее. Все стремления людей, окружавших государя, казалось, были направлены только на то, чтобы заставлять государя, приятно проводя время, забыть о предстоящей войне.
После многих балов и праздников у польских магнатов, у придворных и у самого государя, в июне месяце одному из польских генерал адъютантов государя пришла мысль дать обед и бал государю от лица его генерал адъютантов. Мысль эта радостно была принята всеми. Государь изъявил согласие. Генерал адъютанты собрали по подписке деньги. Особа, которая наиболее могла быть приятна государю, была приглашена быть хозяйкой бала. Граф Бенигсен, помещик Виленской губернии, предложил свой загородный дом для этого праздника, и 13 июня был назначен обед, бал, катанье на лодках и фейерверк в Закрете, загородном доме графа Бенигсена.
В тот самый день, в который Наполеоном был отдан приказ о переходе через Неман и передовые войска его, оттеснив казаков, перешли через русскую границу, Александр проводил вечер на даче Бенигсена – на бале, даваемом генерал адъютантами.
Был веселый, блестящий праздник; знатоки дела говорили, что редко собиралось в одном месте столько красавиц. Графиня Безухова в числе других русских дам, приехавших за государем из Петербурга в Вильну, была на этом бале, затемняя своей тяжелой, так называемой русской красотой утонченных польских дам. Она была замечена, и государь удостоил ее танца.
Борис Друбецкой, en garcon (холостяком), как он говорил, оставив свою жену в Москве, был также на этом бале и, хотя не генерал адъютант, был участником на большую сумму в подписке для бала. Борис теперь был богатый человек, далеко ушедший в почестях, уже не искавший покровительства, а на ровной ноге стоявший с высшими из своих сверстников.
В двенадцать часов ночи еще танцевали. Элен, не имевшая достойного кавалера, сама предложила мазурку Борису. Они сидели в третьей паре. Борис, хладнокровно поглядывая на блестящие обнаженные плечи Элен, выступавшие из темного газового с золотом платья, рассказывал про старых знакомых и вместе с тем, незаметно для самого себя и для других, ни на секунду не переставал наблюдать государя, находившегося в той же зале. Государь не танцевал; он стоял в дверях и останавливал то тех, то других теми ласковыми словами, которые он один только умел говорить.
При начале мазурки Борис видел, что генерал адъютант Балашев, одно из ближайших лиц к государю, подошел к нему и непридворно остановился близко от государя, говорившего с польской дамой. Поговорив с дамой, государь взглянул вопросительно и, видно, поняв, что Балашев поступил так только потому, что на то были важные причины, слегка кивнул даме и обратился к Балашеву. Только что Балашев начал говорить, как удивление выразилось на лице государя. Он взял под руку Балашева и пошел с ним через залу, бессознательно для себя расчищая с обеих сторон сажени на три широкую дорогу сторонившихся перед ним. Борис заметил взволнованное лицо Аракчеева, в то время как государь пошел с Балашевым. Аракчеев, исподлобья глядя на государя и посапывая красным носом, выдвинулся из толпы, как бы ожидая, что государь обратится к нему. (Борис понял, что Аракчеев завидует Балашеву и недоволен тем, что какая то, очевидно, важная, новость не через него передана государю.)
Но государь с Балашевым прошли, не замечая Аракчеева, через выходную дверь в освещенный сад. Аракчеев, придерживая шпагу и злобно оглядываясь вокруг себя, прошел шагах в двадцати за ними.
Пока Борис продолжал делать фигуры мазурки, его не переставала мучить мысль о том, какую новость привез Балашев и каким бы образом узнать ее прежде других.
В фигуре, где ему надо было выбирать дам, шепнув Элен, что он хочет взять графиню Потоцкую, которая, кажется, вышла на балкон, он, скользя ногами по паркету, выбежал в выходную дверь в сад и, заметив входящего с Балашевым на террасу государя, приостановился. Государь с Балашевым направлялись к двери. Борис, заторопившись, как будто не успев отодвинуться, почтительно прижался к притолоке и нагнул голову.
Государь с волнением лично оскорбленного человека договаривал следующие слова:
– Без объявления войны вступить в Россию. Я помирюсь только тогда, когда ни одного вооруженного неприятеля не останется на моей земле, – сказал он. Как показалось Борису, государю приятно было высказать эти слова: он был доволен формой выражения своей мысли, но был недоволен тем, что Борис услыхал их.
– Чтоб никто ничего не знал! – прибавил государь, нахмурившись. Борис понял, что это относилось к нему, и, закрыв глаза, слегка наклонил голову. Государь опять вошел в залу и еще около получаса пробыл на бале.
Борис первый узнал известие о переходе французскими войсками Немана и благодаря этому имел случай показать некоторым важным лицам, что многое, скрытое от других, бывает ему известно, и через то имел случай подняться выше во мнении этих особ.

Неожиданное известие о переходе французами Немана было особенно неожиданно после месяца несбывавшегося ожидания, и на бале! Государь, в первую минуту получения известия, под влиянием возмущения и оскорбления, нашел то, сделавшееся потом знаменитым, изречение, которое самому понравилось ему и выражало вполне его чувства. Возвратившись домой с бала, государь в два часа ночи послал за секретарем Шишковым и велел написать приказ войскам и рескрипт к фельдмаршалу князю Салтыкову, в котором он непременно требовал, чтобы были помещены слова о том, что он не помирится до тех пор, пока хотя один вооруженный француз останется на русской земле.
На другой день было написано следующее письмо к Наполеону.
«Monsieur mon frere. J"ai appris hier que malgre la loyaute avec laquelle j"ai maintenu mes engagements envers Votre Majeste, ses troupes ont franchis les frontieres de la Russie, et je recois a l"instant de Petersbourg une note par laquelle le comte Lauriston, pour cause de cette agression, annonce que Votre Majeste s"est consideree comme en etat de guerre avec moi des le moment ou le prince Kourakine a fait la demande de ses passeports. Les motifs sur lesquels le duc de Bassano fondait son refus de les lui delivrer, n"auraient jamais pu me faire supposer que cette demarche servirait jamais de pretexte a l"agression. En effet cet ambassadeur n"y a jamais ete autorise comme il l"a declare lui meme, et aussitot que j"en fus informe, je lui ai fait connaitre combien je le desapprouvais en lui donnant l"ordre de rester a son poste. Si Votre Majeste n"est pas intentionnee de verser le sang de nos peuples pour un malentendu de ce genre et qu"elle consente a retirer ses troupes du territoire russe, je regarderai ce qui s"est passe comme non avenu, et un accommodement entre nous sera possible. Dans le cas contraire, Votre Majeste, je me verrai force de repousser une attaque que rien n"a provoquee de ma part. Il depend encore de Votre Majeste d"eviter a l"humanite les calamites d"une nouvelle guerre.
Je suis, etc.
(signe) Alexandre».
[«Государь брат мой! Вчера дошло до меня, что, несмотря на прямодушие, с которым соблюдал я мои обязательства в отношении к Вашему Императорскому Величеству, войска Ваши перешли русские границы, и только лишь теперь получил из Петербурга ноту, которою граф Лористон извещает меня, по поводу сего вторжения, что Ваше Величество считаете себя в неприязненных отношениях со мною, с того времени как князь Куракин потребовал свои паспорта. Причины, на которых герцог Бассано основывал свой отказ выдать сии паспорты, никогда не могли бы заставить меня предполагать, чтобы поступок моего посла послужил поводом к нападению. И в действительности он не имел на то от меня повеления, как было объявлено им самим; и как только я узнал о сем, то немедленно выразил мое неудовольствие князю Куракину, повелев ему исполнять по прежнему порученные ему обязанности. Ежели Ваше Величество не расположены проливать кровь наших подданных из за подобного недоразумения и ежели Вы согласны вывести свои войска из русских владений, то я оставлю без внимания все происшедшее, и соглашение между нами будет возможно. В противном случае я буду принужден отражать нападение, которое ничем не было возбуждено с моей стороны. Ваше Величество, еще имеете возможность избавить человечество от бедствий новой войны.
(подписал) Александр». ]

13 го июня, в два часа ночи, государь, призвав к себе Балашева и прочтя ему свое письмо к Наполеону, приказал ему отвезти это письмо и лично передать французскому императору. Отправляя Балашева, государь вновь повторил ему слова о том, что он не помирится до тех пор, пока останется хотя один вооруженный неприятель на русской земле, и приказал непременно передать эти слова Наполеону. Государь не написал этих слов в письме, потому что он чувствовал с своим тактом, что слова эти неудобны для передачи в ту минуту, когда делается последняя попытка примирения; но он непременно приказал Балашеву передать их лично Наполеону.
Выехав в ночь с 13 го на 14 е июня, Балашев, сопутствуемый трубачом и двумя казаками, к рассвету приехал в деревню Рыконты, на французские аванпосты по сю сторону Немана. Он был остановлен французскими кавалерийскими часовыми.
Французский гусарский унтер офицер, в малиновом мундире и мохнатой шапке, крикнул на подъезжавшего Балашева, приказывая ему остановиться. Балашев не тотчас остановился, а продолжал шагом подвигаться по дороге.
Унтер офицер, нахмурившись и проворчав какое то ругательство, надвинулся грудью лошади на Балашева, взялся за саблю и грубо крикнул на русского генерала, спрашивая его: глух ли он, что не слышит того, что ему говорят. Балашев назвал себя. Унтер офицер послал солдата к офицеру.
Не обращая на Балашева внимания, унтер офицер стал говорить с товарищами о своем полковом деле и не глядел на русского генерала.
Необычайно странно было Балашеву, после близости к высшей власти и могуществу, после разговора три часа тому назад с государем и вообще привыкшему по своей службе к почестям, видеть тут, на русской земле, это враждебное и главное – непочтительное отношение к себе грубой силы.
Солнце только начинало подниматься из за туч; в воздухе было свежо и росисто. По дороге из деревни выгоняли стадо. В полях один за одним, как пузырьки в воде, вспырскивали с чувыканьем жаворонки.
Балашев оглядывался вокруг себя, ожидая приезда офицера из деревни. Русские казаки, и трубач, и французские гусары молча изредка глядели друг на друга.
Французский гусарский полковник, видимо, только что с постели, выехал из деревни на красивой сытой серой лошади, сопутствуемый двумя гусарами. На офицере, на солдатах и на их лошадях был вид довольства и щегольства.
Это было то первое время кампании, когда войска еще находились в исправности, почти равной смотровой, мирной деятельности, только с оттенком нарядной воинственности в одежде и с нравственным оттенком того веселья и предприимчивости, которые всегда сопутствуют началам кампаний.
Французский полковник с трудом удерживал зевоту, но был учтив и, видимо, понимал все значение Балашева. Он провел его мимо своих солдат за цепь и сообщил, что желание его быть представленну императору будет, вероятно, тотчас же исполнено, так как императорская квартира, сколько он знает, находится недалеко.
Они проехали деревню Рыконты, мимо французских гусарских коновязей, часовых и солдат, отдававших честь своему полковнику и с любопытством осматривавших русский мундир, и выехали на другую сторону села. По словам полковника, в двух километрах был начальник дивизии, который примет Балашева и проводит его по назначению.
Солнце уже поднялось и весело блестело на яркой зелени.
Только что они выехали за корчму на гору, как навстречу им из под горы показалась кучка всадников, впереди которой на вороной лошади с блестящею на солнце сбруей ехал высокий ростом человек в шляпе с перьями и черными, завитыми по плечи волосами, в красной мантии и с длинными ногами, выпяченными вперед, как ездят французы. Человек этот поехал галопом навстречу Балашеву, блестя и развеваясь на ярком июньском солнце своими перьями, каменьями и золотыми галунами.
Балашев уже был на расстоянии двух лошадей от скачущего ему навстречу с торжественно театральным лицом всадника в браслетах, перьях, ожерельях и золоте, когда Юльнер, французский полковник, почтительно прошептал: «Le roi de Naples». [Король Неаполитанский.] Действительно, это был Мюрат, называемый теперь неаполитанским королем. Хотя и было совершенно непонятно, почему он был неаполитанский король, но его называли так, и он сам был убежден в этом и потому имел более торжественный и важный вид, чем прежде. Он так был уверен в том, что он действительно неаполитанский король, что, когда накануне отъезда из Неаполя, во время его прогулки с женою по улицам Неаполя, несколько итальянцев прокричали ему: «Viva il re!», [Да здравствует король! (итал.) ] он с грустной улыбкой повернулся к супруге и сказал: «Les malheureux, ils ne savent pas que je les quitte demain! [Несчастные, они не знают, что я их завтра покидаю!]
Но несмотря на то, что он твердо верил в то, что он был неаполитанский король, и что он сожалел о горести своих покидаемых им подданных, в последнее время, после того как ему ведено было опять поступить на службу, и особенно после свидания с Наполеоном в Данциге, когда августейший шурин сказал ему: «Je vous ai fait Roi pour regner a maniere, mais pas a la votre», [Я вас сделал королем для того, чтобы царствовать не по своему, а по моему.] – он весело принялся за знакомое ему дело и, как разъевшийся, но не зажиревший, годный на службу конь, почуяв себя в упряжке, заиграл в оглоблях и, разрядившись как можно пестрее и дороже, веселый и довольный, скакал, сам не зная куда и зачем, по дорогам Польши.
Увидав русского генерала, он по королевски, торжественно, откинул назад голову с завитыми по плечи волосами и вопросительно поглядел на французского полковника. Полковник почтительно передал его величеству значение Балашева, фамилию которого он не мог выговорить.

Язык Бэйсик (он же Бейсик, он же BASIC) входит в семейство языков программирования высокого уровня.

BASIC - это аббревиатура, которая расшифровывается так: B eginner’s A ll-purpose S ymbolic I nstruction C ode - универсальный код символических инструкций для начинающих).

Язык программирования Бейсик был разработан в 1964 году. Затея заключалась в том, чтобы создать язык, с помощью которого студенты, не имеющие навыков программирования, могли самостоятельно создавать для решения своих задач.

Этот язык в своё время был очень популярен и расплодился по миру компьютеров в виде различных диалектов, в основном, как язык для домашних компьютеров.

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

Начиная с 1960-х годов компьютеры становились всё более доступными. На компьютерах могли работать уже не только учёные-программисты, но и школьники и студенты, которые не являлись программистами. Однако у этих школьников и студентов уже появились задачи, которые надо было решать с помощью компьютеров.

Готовых программ тогда почти не было. Поэтому под каждую задачу надо было создавать отдельную программу. И делать это на компьютерах тех лет, используя имеющиеся тогда языки программирования, было очень сложно (отчасти поэтому раньше языки программирования создавались для решения конкретных задач, например, ПРОЛОГ был ориентирован на создание систем с искусственным интеллектом, ФОРТРАН - для работы с математическими формулами в научных и инженерных вычислениях и т.п.).

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

В итоге в 1964 году преподавателями Дартмутского Колледжа Джоном Кемени и Томасом Курцем был придуман язык Бэйсик, и под их руководством был реализован командой студентов колледжа. Со временем, когда стали появляться другие диалекты, изначальную реализацию стали называть Dartmouth BASIC.

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

При разработке языка Бэйсик использовались следующие восемь принципов:

  1. Язык должен быть простым в использовании и понятным для начинающих.
  2. Должен быть языком программирования общего назначения (а не специального, как, например, упомянутые выше Фортран и Пролог).
  3. Язык должен предоставлять возможность расширения функциональности, доступную опытным программистам.
  4. Язык должен быть интерактивным, то есть выполнять команды пользователя.
  5. Язык должен предоставлять однозначные и понятные сообщения об ошибках.
  6. Язык должен быстро работать на небольших программах.
  7. Язык не должен быть привязан к “железу” и не должен требовать от программиста понимания работы этого самого “железа”.
  8. Язык должен защищать пользователя от операционной системы (или операционную систему от пользователя - кому как больше нравится))).

При создании Бэйсика за основу были взяты частично Фортран II и частично Алгол 60. Первоначально Бэйсик был реализован на мейнфрейме GE-265 с поддержкой множества терминалов (мейнфрейм - это большой высокопроизводительный отказоустойчивый сервер).

Несмотря на то, что язык уже использовался на нескольких мини-компьютерах, его настоящее распространение началось с внедрения на микрокомпьютере Альтаир 8800.

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

В 1975 году Microsoft (тогда это были лишь двое - и Пол Аллен, при участии Монте Давидова), выпустила Altair BASIC. Затем его версии появились на другой платформе под лицензией и скоро в использовании были уже миллионы копий и различных вариантов. Один из вариантов, Applesoft BASIC, стал стандартным языком на . Для операционной системы CP/M был создан диалект BASIC-80, который надолго опередил свое время.

Кстати, Билл Гейтс говорил, что Бэйсик - это его любимый язык программирования.

Наиболее бурно и успешно Бэйсик развивался в течение 1970-х и в начале 1980-х годов. В это время почти все персональные компьютеры имели собственный интерпретатор Бейсика, часто зашиваемый прямо в ПЗУ. В простейших компьютерах он даже выполнял функции операционной системы.

Практически все более мощные компьютеры также имели интерактивные Бейсик-системы. Было создано несколько новых версий Бейсика для платформы IBM PC и совместимых. Microsoft продавала Бейсик для MS-DOS/PC DOS, включая BASICA, GW-BASIC (модификация BASICA, не требующая «прошивки» от IBM) и QuickBASIC.

Компания Borland, получившая широкую известность благодаря (с которым она и вышла впервые на рынок) в 1985 году выпустила основанную на той же программной среде систему Turbo Basic 1.0 (его наследники впоследствии продавались другой компанией под именем PowerBASIC).

К концу 1980-х годов персональные компьютеры стали намного мощнее и предоставляли новые возможности (такие, как графический интерфейс пользователя). Использовать эти новые возможности в Бейсике было уже не так просто и не так удобно. Кроме того, появились недорогие компиляторы более продвинутых языков (таких как Паскаль и Си), которые, к тому же, имели навороченные по тем временам и дополнительные библиотеки с готовыми (например, Borland Pascal с библиотекой Turbo Vision).

Бейсик начал терять популярность, хотя огромное число его версий ещё использовались и продавались. В это же время начался постепенный переход Бэйсика в сторону признанных структурных языков: расширился словарь и набор конструкций языка, появились сложные ветвления, именованные подпрограммы и функции, длинные имена переменных.

Особенности языка Бейсик

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

Структура программы на ранних версиях Бейсика во многом формировалась с учётом того, что он предназначался для среды программирования со строчным редактором текста. В таком редакторе пользователь не имел возможности отображать весь текст на экране (в окне), не мог перемещаться по нему в любых направлениях с помощью клавиатуры и/или мыши. В строчных редакторах пользователь для изменения строки текста должен дать команду изменения строки с заданным номером, затем ввести новый текст указанной строки (вот была житуха у программистов))).

Для вставки новой строки нужно дать команду вставки, опять-таки указав номер. Вводимые строки отображаются на экране последовательно (независимо от номеров). Чтобы увидеть сделанные изменения, применяется команда вывода текста, которая выводит строки в правильном порядке (по возрастанию номеров).

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

«Раздвинуть» строки было невозможно, если требовалось вставить новую строку между строками с соседними номерами, приходилось повторно вводить эти строки с другими номерами, чтобы обеспечить разрыв в нумерации (либо применять специальную команду RENUM, которая изменяла номера всех уже введённых строк с постоянным шагом).

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

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

Пример рассмотрим чуть позже, когда познакомимся с синтаксисом языка Бейсик.

Синтаксис языка Бейсик

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

Простейшая программа на Бэйсике:

10 PRINT “Hello, WORLD!”

Бэйсик - не чувствительный к регистру язык. То есть для Бэйсика слова PRINT и print - это одно и тоже. Это касается не только ключевых слов, но и имён переменных. Хотя некоторые реализации языка являются чувствительными к регистру полностью или частично (например, Liberty BASIC).

Имена переменных должны начинаться с буквы и могут состоять из латинских букв и цифр. Для создания переменной строкового типа нужно было после имени указать знак доллара ($).

Например:

X = 100 ‘Числовая переменная X$ = “Hello” ‘Строковая переменная

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

Объявлять простые переменные не нужно. Просто в любом месте программы пишем имя переменной, и всё. Правда, массивы надо объявлять.

Ниже перечислены самые основные конструкции языка, которые были реализованы практически в любой Бейсик-системе конца 1970-х годов (многие из этих конструкций поддерживаются и современными реализациями языка Бэйсик):

LIST
Вывод на монитор текста программы в правильной последовательности строк.

RUN
Запуск текущей программы с первого оператора строки с самым маленьким номером.

REM
Комментарий. Текст, находящийся после ключевого слова и до конца строки, является комментарием. Многие интерпретаторы также поддерживают в качестве знака начала комментария одиночную кавычку ". Некоторые интерпретаторы допускают использовать слово REM, только если оно находится в самом начале строки.

INPUT
Выводит на монитор текст приглашения и ожидает, пока пользователь введёт значение и нажмёт ENTER.

PRINT
Выводит данные на монитор (текст и значения переменных).

CLS
Очищает экран.

DIM
Описание массива. В отличие от обычных переменных, массивы требуют предварительного объявления.

GOTO Метка
Команда безусловного перехода на Метку.

IF … THEN …
Обычный оператор ветвления. После IF размещается логическое условие, после THEN - оператор, который должен быть выполнен при истинности этого условия.

END
Завершение выполнения программы. Система выходит в интерпретатор и пользователю выдаётся приглашение на ввод команд.

SAVE
Команда интерактивного режима, которая сохраняет текущую программу в файле на внешнем носителе.

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

Пример программы на Бейсике:

10 CLS "Очистить экран 20 PRINT "Привет, МИР!!!" 30 X = 100 "Присвоить 100 переменной Х 40 INPUT "Введите число: "; Y 50 PRINT Y; " * "; X; " = "; X * Y 60 END

Интерпретаторы Бэйсик

Один из наиболее известных интерпретаторов языка Бэйсик - это QBasic от Microsoft. Много лет он бесплатно поставлялся вместе с операционными системами MS-DOS и Windows. QBasic имел неплохие по тем временам графические и звуковые возможности. Поэтому на QBasic создавались даже игры (один мой знакомый это делал - не то, что на картинке, но что-то типа того))).

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

Вторую жизнь Бейсик получил с появлением Visual Basic от Microsoft. Но, несмотря на популярность, в 2001 году Microsoft отказалась от дальнейшей поддержки Visual Basic (если не ошибаюсь, последняя версия Visual Basic была 6.5) в пользу принципиально нового языка Visual Basic .NET, где язык был снова “перекроен” и “перешит”, ориентирован на кросс-платформенную технологию.NET, и в текущем состоянии практически совпадает по набору возможностей c языком C#. Отличия только в синтаксисе и ключевых словах.

Так Basic перерос из средства для создания программ любителями-непрофессионалами до полноценного средства создания программ.

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

Сколько людей, столько и мнений

Даже в свои лучшие времена (1970...1980 годы) Бейсик подвергался жёсткой критике (впрочем, как и почти все другие языки программирования - критиковать у нас любят).

Конечно, у Бэйсика было немало недостатков. Но ведь он же таким и был задуман! Да, с недостатками. Но зато простой и доступный для понимания даже гуманитарию.

В основном же профессиональные программисты разносили в пух и прах Бэйсик за то, что его простота и отсутствие структурирования приводят к тому, что начинающие программисты в погоне за сокращением времени на создание программ, напрочь забывают о “правильном” подходе к программированию. Это допустимо при написании простеньких программ, но практически всегда приводит к неудаче при работе над серьёзными крупными проектами.

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

Несмотря на авторитет Дейкстры, я с ним в этом не согласен. То, что приписывают к недостаткам Бэйсика, на самом деле является его достоинствами. Недостатки Бейсика (если иметь в виду ранние диалекты) проявляются при попытке профессиональной разработки на нём сложных и крупных программ и при использовании его как базового языка для обучения программистов, но ни для одного их этих применений данный язык не предназначался. Его основной задачей было предоставить студентам-непрограммистам возможность после минимального обучения самостоятельно писать простейшие программы для собственных нужд, чтобы не отвлекать на эту работу специалистов. Эту задачу язык решает вполне успешно.

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

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

К тому же сегодня и переучиваться особо не потребуется, так как можно создавать свои классные программы, например, на Visual Basic.

Язык программирования Бейсик - это семейство языков программирования высокого уровня. Первоначально разработанный в качестве учебного пособия, он получил широкое распространение на домашних микрокомпьютерах в 1980-е годы, и остается популярным и по сей день в сильно изменном диалекте. Программирование для начинающих.
Название языка программирования BASIC было придумано в классических традициях информатики, что привело к хорошему сокращению наименования, Beginner"s All-purpose Symbolic Instruction Code (Многоцелевой код символьных инструкций для начинающих). Название связано с названием неопубликованной работы изобретателя языка Томаса Курца. Некоторые критики шутливо называют его Попытка языка Билла захватить контроль над промышленностью в ответ на политику Microsoft в отношении интерпретатора Бейсика, который включенали во все поставки с ранними ПК совместимых с IBM. Программирование для чайников.

История

До появления
До середины 1960-х годов, компьютеры были очень дорогие инструментами, которые использовались только для задач специального назначения, в то время выполнять могли они только одну "работу". С середины 1960-х годов, однако, компьютеры начали падать в цене, вплоть до того момента, когда даже небольшие компании могли их себе позволить, а скорости исполнения инструкций выросли до такой степени, когда компьютеры стали простаивать, потому что не было достаточного количества работы для них, что впоследствии рассматривалось в основах программирования.
Языки программирования той эпохи, как правило, разрабатывались с учетом возможностей вычислительных машин и для конкретных целей, таких, как научная обработкая формул. Компьютеры, которые могли выполнять только одну "работу" были дорогими, а самой главной характеристикой являлась скорость исполнения инструкций. В общем, их использование было трудным делом, и, даже можно сказать, немного "уродливым".
Именно в это время концепция разделения времени операционной системой начала становиться популярной. В такой системе время основной обработки компьютер "нарезал" на части, и каждый пользователь получал небольшое количество времени в определенной последовательности. Машины были уже достаточно быстрыми, так что большинство пользователей заблуждались, думая, что они монопольно использовали целый компьютер. В теории разделения времени снижение времени вычисления чрезвычайно важно, поскольку на одном компьютере могут работать сотни пользователй, по крайней мере теоретически.

Рождение и ранние годы
Язык программирования BASIC изобрел в 1964 году Джон Джордж Кемени (1926-93) и Томас Курц Евгений (1928 -) в Дартмутском колледже. В последующие годы, после появления множества разновидностей Бейсика, было выпущено описание оригинального BASIC от Кемени и Курца, которое дало название настоящему Бейсику "Дартмут Бейсик".
Язык программирования Бейсик был разработан для того, чтобы студенты могли писать программы, используя с компьютерные терминалы в режиме разделения времени. Бейсик предназначен для решения сложных вопросов, которые решало предыдущее поколение языков. Разработанный специально для нового класса пользователе, которые приняли идею использования разделения времени, то есть для "простого" пользователя, который был заинтересован не столько в скорости, сколько в простой возможности использования компьютера. Разработчики языка также хотели, чтобы язык стал общественным достоянием, которое помогло бы ему распространяться.
Восемь принципов построения BASIC:

  1. Быть легким для новичков
  2. Быть языком общего назначения
  3. Разрешить расширенные возможности добавления собственным усовершенствований для специалистов (при сохранении языка простым для начинающих)
  4. Быть интерактивным
  5. Разработка четких и дружественных сообщений об ошибках
  6. Быстро реагировать на небольшие программы
  7. Не требуется знание компьютерных аппаратных
  8. Ограждение пользователя от операционной системы

Язык был основан частично на Фортран II и частично на Алгол 60, с дополнениями, чтобы сделать его пригодным для разделения времени и матрицей арифметики, BASIC был впервые реализован на манфреймах GE-265, которые поддерживали несколько терминалов. Вопреки распространенному мнению, на момент создания это был компилируемый язык. Почти сразу же после его выпуска, компьютерные специалисты начали высмеивать Бейсик как слишком медленный и слишком простой. Так как элитарность языка является постоянной темой в компьютерной индустрии.
БЕЙСИК тем не менее, распространяется на большое количество машин, и становится довольно популярным на новых миникомпьютерах, таких как серия DEC PDP и Data General Nova. В этих случаях язык, как правило, выступает в качестве переводчика, а не компилятора, или, наоборот, в зависимости от потребностей.

Взрывной рост
Однако только с появлением микрокомпьютера Altair 8800 в 1975 году BASIC начинает свое массовое распространение. Большинство языков программирования были слишком велики, чтобы уместиться в небольшой памяти компьютеров, которые большинство пользователей могут позволить себе купить, а если еще учесть, что чтение происходило с медленной бумажной ленты (или в более поздних версиях аудио кассеты) и отсутствовали подходящие текстовые редакторы, то малый требования языка BASIC хорошо отвечали этим требованиям. Одним из первых появившихся на этой машине был Tiny BASIC, простая реализация BASIC изначально написанная доктором Ли-Ван Чэнь, а затем перенесенная на Альтаир Деннисом Эллисоном по просьбе Боба Альбрехта (который позже основал доктор Dobbs Journal - DDJ) . Дизайн Tiny BASIC и полный исходный код был опубликован в 1976 DDJ.
В 1977 году Microsoft (в то время это были только два человека - Гейтс и Аллен) выпустила Altair BASIC. Версии затем начали появляться и на других платформах в соответствии с лицензией, и миллионы копий и вариантов вскоре были в использовании, он стал одним из стандартных языков на Apple II. К 1979 году Microsoft ведет переговоры с несколькими поставщиками микрокомпьютеров, в том числе IBM, для того, чтобы лицензировать интерпретатор BASIC для этих компьютеров. Версия была зашита в чипах IBM PC в ПЗУ, а для ПК без дисков, Бейсик стал загружаемым автоматически при включении питания.
По мере появления новых компаний, многие из них пытались повторить успех Альтаира, например, IMSAI, Полярная звезда, и Apple, и, таким образом произошла революция домашнего компьютера, в котором BASIC стал стандартным атрибутом домашних компьютеров того времени. Большинство шли с интерпретатором BASIC в ПЗУ (функция впервые появилась на Commodore PET в 1977). Вскоре появились многие миллионы машин, работающих с BASIC во всем мире, вероятно, гораздо больше, чем число всех пользователей всех других языков вместе взятых. Многие программы, особенно те, что на Apple II и IBM PC, стали зависимыми от интерпретатора BASIC компании Microsoft и не работали без него. Таким образом, Microsoft использовали авторскую лицензию на трансляторы BASIC, чтобы получить рычаги давления на переговорах с поставщиками компьютеров.

Зрелость
В этот период времени были созданы новые и более мощные версий BASIC. Microsoft продала несколько версий BASIC для MS-DOS / PCDOS включая BASICA, GW-BASIC (BASICA-совместимую версию, которая не требовала наличия ROM IBM) и Quick Basic. Компания Borland (разработчик Turbo Pascal) опубликовала Turbo Basic 1.0 в 1985 (преемник этой версии все еще продается под названием PowerBASIC другой компанией). Появлялись различные расширения для домашнего компьютера которые поддерживал Бейсик, например, графика, звук и DOS команды, а также средства для структурного программирования. Другие языки программирования использовали широко известный синтаксис языка Бейсик в качестве основы для переноса на другие операционные системы, в качестве примера можно вспомнить GRASS .
Однако во второй половине 1980-х годов новые компьютеры были гораздо более сложными и имели множество возможностей (например, графические интерфейсы пользователя), что делало BASIC все менее и менее подходящим для программирования. В то же время компьютеры прогрессируют от инструмента любителей до инструмента профессионалов. Персональные компьютеры начинают использоваться в основном для выполнения приложений, написанных другими людьми, и программирования в целом становится менее важной составляющей для быстро растущего числа простых пользователей. БЕЙСИК начал исчезать, хотя многочисленные версии остались доступными.
Бедственное положение БЕЙСИКА изменяется с появлением Visual Basic от Microsoft. Хотя уже довольно трудно рассмотреть в этом языке классический BASIC (несмотря на использование в названии знакомых слов BASIC), но этот новый стал одним из наиболее часто используемых языков на платформе Windows. Не забудем упомянуть, что программы, написанные на этом языком представляют собой примерно 70 до 80% всех коммерческих приложений. Visual Basic для приложений (VBA) был добавлен в Microsoft Excel 5.0 в 1993 году и включен во всю линейку продуктов Microsoft Office в 1997 году. В Windows 98 появился транслятор VBScript. Последняя версия Visual Basic называется VB.NET. OpenOffice Suite включает в себя вариант BASIC менее мощный, чем его коллега MS.

Синтаксис
Оператор завершения логической строки это перевод на новую строку, если только не встретился оператор переноса логической строки на следующую с помощью символа продолжения строки. Минимальный синтаксис Бейсика: LET, PRINT, IF и GOTO команды. Интерпретатор, который запускает программу с этим минимальным синтаксисом не нуждается в стеке, потому что некоторые ранние реализации микрокомпьютеров были настолько простыми. Если добавить стек, то могут быть добавлены циклы и команды GoSub . Интерпретатору BASIC для работы с этими функциями необходимо иметь код номера строк.
Номера строк были отличительной особенностью классического BASIC для домашнего компьютера. Увы, использование номеров строк имеет большой недостаток, который требует от программиста чутья на то, сколько строк будет в программы, поскольку основными командами был переход к номеру определенной строки. А в случае внесения правок или дополнений в более поздних версиях программы, номера этих строк начинали изменяться, что приводило к необходимости изменения почти всей программы. Для решения данный проблемы использовались хитрые приемы, которые скажем гласили, что нумеровать надо строки с запасом и шаг составлял +10. Но все равно это не спасало в случае серьезных модификаций программы. Чтобы решить эту проблему с ранними трансляторами BASIC, опытные пользователи скоро написали свои собственные утилиты для перенумерации строк исходного кода программы. Некоторые трансляторы БЕЙСИКА, которые появились позже, имели встроенную команду изменения нумерации строк, тем самым устраняя наиболее актуальную проблему с номерами строк.
Современные диалекты BASIC отказались от номерации строк, и большинство реализаций поддерживают структурные управляющие операторы, которые используются в известных языках, таких как Си или Паскаль как известно и в других языках, таких как C и Pascal (хотя остаются и версии, где совмещено структурное управление и нумерация строк):

  • do - loop - while - until - exit
  • on x goto / gosub (switch & case)

Последние варианты, такие как Visual Basic ввели возможность объектно-ориентированного программирования, и даже наследование в последней версии. Управление памятью в последней реализации намного легче, чем во многих других процедурных языках программирования из-за того, что обычно включен сборщик мусора (который самостоятельно очищает память и удаляет ненужные данные).
Разнообразие вариантов языка показывает, что язык имеет "органический" характер и что этот язык может рассматриваться как субкультура в компьютерном мире, а не как фиксированный набор синтаксических правил. То же самое относится и к другим "старым" языкам программирования, таким как COBOL и FORTRAN. Огромное количество профессионалов в ИТ индустрии, которые владеют БЕЙСИКОМ, можно объяснить тем, что основная масса оттачивала зубы в программировании в 80-х годах, годы популярности Бейсика.

Процедуры и управление потоком
Basic не имеет стандартных внешних библиотек, как другие языки, такие как Си. Вместо этого транслятор (или компилятор) содержит обширную встроенную библиотеку собственных процедур. Эти процедуры включают в себя большинство инструментов, с помощью которых программист должен научиться программированию и писать простые приложения, включая математические функции, ввод и вывод строк на консоль, графики и обработка файлов.
Некоторые диалекты BASIC не позволяют программистам писать свои собственные процедуры. Программисты должны вместо этого писать свои программы с большим количеством GOTO заявлений для ветвления. Это может привести к очень запутанному исходному коду, который обычно называют код спагетти. GoSub объявляет простые виды подпрограмм без параметров или локальных переменных. Большинство современных версий BASIC, таких как Microsoft QuickBASIC добавили поддержку полных подпрограмм и функций. Это еще одна область, которой этот язык отличается от многих других языков программирования. BASIC, как Паскаль, делает различие между процедурой, которая не возвращает значение (так называемые подпрограммы) и процедуры, которые возвращают значение (называется функция). Многие другие языки (в частности, C) не делают различия и называют всё функциями (хотя некоторые функции возвращают "пустые" значения и являются процедурами-подпрограммами).

Типы данных
БЕЙСИК хорошо известен своей отменной функцией обработки строк. Уже в первых диалектах было множество фундаментальных функций (LEFT$, MID$, RIGHT$) для простой обработки строк. Так как строки часто используются в повседневных приложениях, то это было значительное преимущество перед другими языками в момент появления языка.
Оригинальный Дартмут BASIC поддерживает только числовые и строковые типы данных. В языке не было целого типа данных, вместо этого предполагалось описывать все числа с помощью переменных с плавающей точкой (весщественный тип). Строки были динамической длины. Поддерживались массивы, а также матрицы (двумерные массивы).
В каждом современном диалекте BASIC по крайней мере есть целые и строковые типы данных. Типы данных, как правило, отличаются следующим: строковые идентификаторы содержат в конце $, а целых нет. В некоторых диалектах, переменные должны быть объявлены до первого использование, в других диалектах не требуют этого, но есть возможность проверить его выполнение этого правила, для этого используют директивы, такие как Option Explicit. Многие диалекты также имеют поддержку дополнительных типов, такие как 16 и 32-разрядных целых чисел и чисел с плавающей точкой. Кроме того, некоторые позволяют определять пользовательские типы данных, похожие на Pascal "записи", или С "структуры".
Большинство основных диалектов также поддерживает массивы целых чисел или других типов. В некоторых, массивы должны быть предопределенными, прежде чем они могут быть использованы (с заявлением DIM). Поддержка двух и многомерных массивов, а также массивы нецелых типов, являются обычным делом.
DIM myIntArray (100) AS INTEGER
DIM myNameList (50) AS STRING
В зависимости от диалекта BASIC и по использованию Option Base, значения могут колебаться от myIntArray (0) до myIntArr (100), от myIntArr (1) к myIntArr (100) или из myIntArray (LowInteger) в myIntArray (HighInteger), иными словами номер первого элемента может начинаться с нуля или с единицы.

Реляционные и логические операторы
= Равны
<= меньше или равно
not логическое отрицание
<> Не равно
>= больше или равно
and логическое умножение
< Меньше
or логическое сложение
> Больше
(Обратите внимание, что нет лексического различия между оператором равенства и оператором присваивания в Бейсике - это знак "=")

Доступность и варианты диалектов
Basic доступен практически для любой платформы микропроцессоров. Есть свободный интерпретатор языка, совместимый со стандартами и кросс-платформенный Байуотер BASIC (bwBASIC). Интерпретатор написан на C и поставляется под лицензией GNU. Он предназначен для текстовой консоли программы, и как таковой не включает инструменты для создания графического интерфейса пользователя (GUI). Бесплатный Бейсик, который не включает GUI Builder, похож на Visual Basic и работает на Windows и Linux - это Phoenix Object Basic.
Самые известные версии - это компилируемая версия Microsoft Quick BASIC и QBASIC версия, которая не создает автономные программы. Некоторые версии Visual Basic также могут компилироваться в машинный код. Microsoft сохранила в Visual Basic минимальную совместимость даже с ранними версиями.
Другие версии включают язык программирования PowerBASIC от компании PowerBASIC, а также True BASIC от компании True BASIC, которые совместима с последними официальными стандартами для BASIC. Компания True BASIC была основана одним из создателей Дартмут BASIC.
REALbasic это вариант для Apple Macintosh, которая также создает исполняемые файлы для Microsoft Windows. PureBasic являет вариант с простым синтаксисом, но который производит быстрые и крошечные исполняемые файлы для Windows и Linux. SmallBASIC это диалект, который работает на многих платформах (Win32, DOS, Linux и PalmOS) и поставляется под лицензией GNU (GPL).

Взрывной рост

Несмотря на то что язык уже использовался на нескольких миникомпьютерах, его настоящее распространение началось с его появления на микрокомпьютере Altair 8800 . Многие языки программирования были слишком большими чтобы поместиться в небольшую память, которую пользователи таких машин могли себе позволить. Для машин с таким медленным носителем как бумажная лента (позднее - аудиокассета) и без подходящего текстового редактора такой небольшой язык как Бейсик был отличной находкой.

Однако, начиная с конца 1980-х, новые компьютеры стали намного более сложными и предоставляли возможности (такие, как графический интерфейс пользователя), которые делали Бейсик уже не столь удобным для программирования. Бейсик начал сдавать свои позиции, несмотря на то что огромное количество его версий ещё использовалось и продавалось.

Вторую жизнь Бейсик получил с появлением Visual Basic от Microsoft . Хотя и трудно согласиться, что этот язык - действительно Бейсик (несмотря на множество привычных ключевых слов), спустя некоторое время он стал одним из наиболее часто используемых языков на платформе Windows . Microsoft создала вариант под названием WordBasic и использовала его в MS Word до появления Word 97. Вариант Visual Basic for Applications (VBA ) был встроен в Excel 5.0 в 1993 году , затем в Access 95 в 1995 году , а после и во все остальные инструменты, входящие в пакет Microsoft Office. Internet Explorer 3.0 и выше, а также Microsoft Outlook, включали интерпретатор VBScript .

Бейсик используется в некоторых моделях программируемых калькуляторов . Например, он был встроен в советский калькулятор «Электроника МК-85 ».

Описание языка

Синтаксис языка напоминает Fortran , и многие элементы - явные заимствования из него. Язык задумывался для обучения, поэтому его конструкции максимально просты. Как и в других языках программирования , ключевые слова взяты из английского языка. Основных типов данных два: строки и числа. С появлением версии Visual Basic , а также различных его модификаций (таких как VBA), в языке появились многие другие типы данных и дополнения, типичные для современных языков программирования (например, такие как объектная модель). Объявление переменных не требует специальной секции (в отличие, например, от Паскаля). Объявление переменной - это первое её использование.

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

Ранние версии

Внешний вид программ на ранних версиях Бейсика во многом определяется тем, что он предназначался для среды программирования со строчным редактором текста. В таком редакторе пользователь не имеет привычной сейчас возможности отображать весь текст на экране (в окне), перемещаться по нему в любых направлениях с помощью клавиатуры и/или мыши. В строчных редакторах пользователь для изменения строки текста должен дать команду изменения строки с заданным номером, затем ввести новый текст указанной строки. Для вставки новой строки нужно дать команду вставки, опять-таки указав номер. Вводимые строки отображаются на экране последовательно (независимо от номеров). Чтобы увидеть сделанные изменения, применяется команда вывода текста, которая выводит строки в правильном порядке (по возрастанию номеров).

Всё это отразилось в Бейсике. Каждая строка начиналась с номера. При вводе в редактор строка оказывалась в исходном тексте программы на позиции, соответствующей её номеру. Для вставки новой строки нужно было дописать строку с номером, находящимся в диапазоне между номерами двух других строк. «Раздвинуть» строки было невозможно, если требовалось вставить новую строку между строками с соседними номерами, приходилось перевводить эти строки с другими номерами, чтобы обеспечить разрыв в нумерации (либо применять специальную команду RENUM , которая перенумеровывала все уже введённые строки с постоянным шагом, синхронно изменяя все команды переходов). Для упрощения оперативного редактирования программы сложилась практика нумеровать строки с шагом 10 - это позволяло практически во всех случаях вставлять новые строки без изменения номеров ранее введённых. Например, чтобы добавить третью строку между строками 20 и 30, нужно было написать строку с номером 25. Типичная строка из программы на Бейсике выглядела так:

10 PRINT "Hello, World!"

Изменять вручную номера уже имеющихся строк было небезопасно, так как номера выполняли роль меток для оператора GOTO . Ранее в Бейсике были допустимы только числовые метки для этого оператора, и наличие в каждой строке уникального номера делало возможным безусловный переход к любой из них. Числовые метки и активное использование GOTO было неизбежным при программировании на Бейсике, что способствовало плохой структуре кода и в больших проектах приводило к запутыванию самих авторов. Был даже придуман шуточный термин «макаронное программирование» (spagetti code), потому что программа с частыми переходами GOTO , по мнению некоторых, напоминала тарелку со спагетти.

Признаком конца оператора служил конец строки. Чтобы на одной строке разместить несколько операторов, нужно поставить между ними двоеточие (это разрешалось не во всех реализациях языка). Имена переменных в большинстве диалектов могли состоять только из одной буквы, после которой можно было добавить одну цифру, что также не способствовало улучшению понимания кода. Для создания переменной строкового типа нужно было после имени указать знак доллара ($). Переменная без этого знака являлась числовой. Было ещё несколько модификаторов, относящихся к числовому типу: знак процента (%) - целый тип, восклицательный знак (!) - обычная точность, октоторп (#) - двойная точность (для данных с плавающей точкой, то есть дробей). Числовые модификаторы применялись не во всех версиях.

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

Условный оператор (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. Особо следует выделить довольно мощные графические и звуковые возможности QBASIC, позволяющие программировать на этом языке даже игры.

Basic поздних версий (начиная с Borland Turbo Basic и Microsoft Visual Basic) резко отличается от ранних вариантов. Фактически, это новый язык, который во многом ближе к Фортрану или Паскалю , чем к исходному Basic’у. Основные изменения версий 1990-х годов состоят в следующем:

  • Отказались от представления программы как неструктурированного набора пронумерованных строк. Номера строк превратились в обычные метки, которые стали необязательными и перестали влиять на порядок исполнения программы. Если ранее строка с номером 15 всегда шла в программе раньше строки с номером 20, то теперь порядок исполнения стал определяться порядком расположения строк в исходном коде. Метки перестали быть только числовыми.
  • В языке появились именованные подпрограммы с параметрами, механизм вызова подпрограмм стал обычным: подпрограмма вызывается по имени, с указанием списка фактических параметров.
  • Были введены структурные управляющие конструкции, в результате для организации обычных ветвлений и циклов перестало быть необходимым использование оператора GOTO и меток строк.
  • Существенно расширилась номенклатура типов данных, появилась возможность явно описывать типы обычных переменных.
  • Стали необязательными типизирующие суффиксы в именах переменных, хотя их использование не запрещалось.
  • В более поздних версиях появилась обработка исключений и поддержка элементов ООП .
  • Были введены механизмы поддержки модульности - появилась возможность без «фокусов» (типа динамической загрузки модулей с помощью явных системных вызовов) разделять программу на несколько файлов исходного кода.
  • Появились средства для работы с цветной графикой и звуковой картой.
  • Visual Basic, ориентированный на разработку Windows -приложений с графическим интерфейсом пользователя, был выполнен интегрированным с графическим дизайнером интерфейса, что позволило быстро писать простые программы под Windows.

Практически все недостатки, присущие ранним версиям языка, были исправлены, и программирование на современных диалектах Бейсика мало отличается от использования других языков и сред (например, таких, как 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

Существует множество современных реализаций компилятора Basic. В состав платформы

  • Разработка под Windows
  • DONKEY.BAS. Входит в комплект IBM PC в 1981. Соавтор - Билл Гейтс

    Название BASIC появилась как сокращение от «Beginner"s All-purpose Symbolic Instruction Code», что в дословном переводе означает «многоцелевой язык символических команд для начинающих». Это тот случай, когда дословный перевод совершенно точно передавал суть. Ключевой особенностью BASIC"а была не только его простота, но и возможность, находить решение задач в режиме диалога с компьютером.

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

    Предыстория

    В середине 50-х годов роль программирования в машинных кодах стала уменьшаться. Появились языки более высокого уровня – Fortran, Algol, Cobol и так далее.

    Первым из них и одним из наиболее распространенных был Фортран (FORTRAN, от FORmula TRANslator – переводчик формул), разработанный группой программистов фирмы IBM в 1954 году (первая версия). Этот язык был ориентирован на научно-технические расчеты математического характера.

    Название языка Algol (ALGOrithmic Language), первая версия которого появилась в 1958 году, подчеркивает то обстоятельство, что он предназначен для записи алгоритмов. Благодаря четкой логической структуре Алгол стал стандартным средством записи алгоритмов в научной и технической литературе.

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

    BASIC. Просто BASIC

    С идеей создания этого языка программирования ассоциируют известную историю про английского миссионера.
    В XIX веке одному английскому миссионеру, который искал возможность облегчить и упростить контакт с туземцами, пришла в голову гениальная мысль - вычленить из английского языка самую простую его часть, практически не имеющую грамматики, и содержащую около 300 самых распространённых слов. Этот урезанный подвид английского языка был назван BASIC ENGLISH, и как показала практика - он действительно оказался очень простым для усвоения, и вскоре завоевал популярность не только среди туземного населения, но и среди иммигрантов, для которых английский не был родным языком.
    Спустя сто лет аналогичный путь избрали сотрудники математического факультета Дартмутского колледжа. Они решили облегчить взаимодействие между компьютером и непрофессиональным пользователем с помощью «упрощенного» языка программирования.

    В 1964 году Томас Курц и Джон Камени создали специализированный язык программирования, который состоял из простых слов английского языка. Новый язык назвали BASIC.

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

    Серьезное влияние на BASIC оказали Fortran II и Algol 60. Кроме того, разработчики реализовали в нем механизмы работы для систем с режимом разделения времени, а также обработки текста и матричной арифметики. Изначально компилятор языка был написан для мейнфрейма GE-265.

    Расцвет

    В 70-х появились более компактные компьютеры (ПК). Это обстоятельство удачно использовали Билл Гейтс и Пол Аллен, основатели Microsoft.

    Они создали новую версию BASIC для первых компьютеров «Альтаир» (MITS Altair), способную работать в 4КБ оперативной памяти. Со временем именно эта версия и превратилась в один из самых популярных языков программирования в мире.


    Altair

    Периодом наибольшего расцвета и развития исходного BASIC можно считать конец 1970-х - первую половину 1980-х годов. Его версии появились на других платформах, и скоро стали расходиться миллионными тиражами с всевозможными изменениями и доработками. Одной из самых популярных версий был Applesoft BASIC, ставший стандартным языком на Apple II.

    Applesoft BASIC был написан фирмой Microsoft как замена системе Integer BASIC, использовавшейся в самой первой модели Apple II и обладавшей весьма ограниченными возможностями. Applesoft BASIC был прошит в ПЗУ всех моделей Apple II, начиная с Apple II+, и всех клонов Apple II. Также более ранняя и урезанная версия Applesoft BASIC была доступна на кассетах для самой первой модели Apple II.

    Для операционной системы CP/M был создан диалект BASIC-80, надолго определивший развитие языка.

    Когда появились первые персональные компьютеры IBM PC, именно он стал стандартом в программировании, но уже в виде GW-Basic.

    В середине 1980-х BASIC стал основным языком в сложных моделях программируемых калькуляторов, которые как раз к этому времени достигли мощности, допускающей применение полноценного языка высокого уровня. BASIC был встроен в советский калькулятор «Электроника МК-85» и все его более поздние модели.

    Также в 1985 году появилась IDE Quick Basic - интегрированная среда разработки и компилятор языка программирования BASIC, разрабатывавшаяся компанией Microsoft с 1985 по 1988 год. Существовали версии для DOS и Mac OS. Используемый диалект BASIC был основан на усовершенствованном диалекте GW-BASIC: была реализована поддержка пользовательских типов, конструкций структурного программирования, значительно расширена поддержка графических и дисковых операций.

    Роберт «Боб» Зейл в 1987 году на основе своей многолетней разработки BASIC/Z создал Turbo Basic, а затем продал его компании Borland. Журнал Infoworld назвал его одним из самых значительных продуктов того года.

    В отличие от большинства реализаций BASIC того периода, Turbo Basic был полным компилятором, генерировавшим родной код для MS-DOS.

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

    Вторая жизнь

    В начале 90-х появилась операционная система Microsoft Windows с новым графическим интерфейсом пользователя.

    Чтобы создать простую программу, разработчикам приходилось писать по несколько страниц кода: прописывать объемные блоки кода для меню и окон, шрифтов, очищать память, «рисовать» кнопки и т.д. Однако преимущества нового интерфейса были довольно сильны, и у Windows появились реальные перспективы стать популярной повсеместно.

    В Microsoft понимали, что необходимо как-то облегчить жизнь разработчиков. Поэтому компания запустила несколько параллельных проектов по созданию нового языка программирования и среды разработки для Windows.

    Вторую жизнь BASIC получил, когда Microsoft выпустила Visual Basic. Он стал логическим завершением эволюции языка и, несмотря на сохранение привычных ключевых слов, по структуре и набору возможностей был ближе к Pascal, чем к изначальному BASIC.

    В 1991 году появилась первая версия новой IDE Microsoft Visual Basic. Однако в тот момент Microsoft достаточно скромно оценивала возможности этой системы, ориентируя ее, все же, на категорию начинающих и непрофессиональных программистов.

    Конечно, это был только первый шаг, так как компания Билла Гейтса планировала укрепить позиции Windows на рынке. А это было бы очень трудно сделать, оставив коммерческих разработчиков без эффективных средств создания приложений под MS Windows.

    Система программирования, созданная разработчиками Visual Basic, позволяла абстрагироваться от внутренней структуры Windows. Меню, окна, списки, кнопки, поля ввода текста и другие элементы интерфейса Windows добавлялись в программу с помощью простейших операций drag&drop, и большая часть кода для их инициализации и настройки генерировалась автоматически.

    Свою первую программу VB-программисты могли создать уже через несколько минут после начала изучения этого языка. Более того, Visual Basic позволял разработчикам создавать новые элементы графического интерфейса, которые также могли использоваться в программах наравне со стандартными.

    Несмотря на то, что многие С-разработчики не воспринимали всерьез попытки Microsoft сделать простой и понятный инструмент разработки Windows-программ, остальные участники ИТ-сообщества возлагали на Visual Basic большие надежды.

    В 1994 году компания выпустила Visual Basic for Applications. Именно в это время, после включения VBA в состав Microsoft Office, Basic стал одним из основных стандартов программирования для Windows.

    Первоначально задумывавшийся как игрушка, Visual Basic от Microsoft невероятно быстро завоевал программистский мир. Его популярность обусловлена двумя причинами: относительной простотой и продуктивностью.

    Программы на VB работали медленнее своих аналогов на C/C++, но все же они достаточно быстры для многих деловых целей и требуют гораздо меньше времени на разработку. Формы были той самой сберегающей усилия абстракцией, которую предложил VB программистам Windows.

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

    Разработка приложения в VB, таким образом, состояла из создания нескольких форм, которые взаимодействовали друг с другом.

    С точки зрения написания кода важным отличием от того же C++ стал отказ от указателей. Так решил Билл Гейтс, еще во время разработки первых версий Microsoft BASIC. Хотя указатели полезны, так как разрешают прямой доступ к памяти по любому адресу, их использование сопряжено с ошибками в том случае, если они применяются неаккуратно. А так как первоначально язык создавался для «простых смертных», это решение выглядит вполне оправданным.

    Основные версии Visual Basic

    В первой версии (1991 год) Алан Купер реализовал принцип связи языка и графического интерфейса.

    Начиная с третьей версии (1993) в VB появилась поддержка MS Access.

    Visual Basic 4.0 (1995) - версия, в которой появилась возможность создавать как 32-х так и 16-разрядные Windows-приложения. Кроме того, в язык были добавлены классы.

    Начиная с VB 5.0 (1997), появилась возможность разрабатывать собственные COM-компоненты. Кроме того, появилась новая виртуальная машина, реализованная в динамической библиотеке MSVBVM50.DLL. Компилятор VB для трансляции использовал многопроходный режим, но в конечном счете полагался на компилятор Microsoft C++ для получения выходного машинного кода после компиляции в промежуточный язык. Использование библиотеки времени исполнения и внутреннего интерфейса C++ явилось отправной точкой для формирования технологии.NET.

    VB версии 6 - это уже мощный язык, который можно использовать для создания распределенных приложений с применением компонентов СОМ и Microsoft Transaction Server. Microsoft предложила трехуровневый подход для архитектур «клиент-сервер», в котором «тонкие» пользовательские интерфейсы взаимодействовали с удаленными компонентами VB для получения данных из базы данных или с другой машины.

    Более того, VB6 (1998) можно было использовать для создания элементов управления Active-X, работающих вместе с Internet Explorer.

    В 2002 году появился первый выпуск Visual Basic .NET. С этого момента обратная совместимость с классической версией Visual Basic оказалась нарушена.

    С 2005 года Visual Basic входит в состав IDE Microsoft Visual Studio 2005. По сей день язык развивается вместе с IDE – вплоть до текущей версии – MS Visual Studio 2015.

    Языки Basic и Visual Basic прошли серьезный путь и претерпели существенные, можно сказать, необратимые изменения. От их изначальной простоты мало что осталось. В результате VB превратился в «обычный» объектно-ориентированный язык программирования высокого уровня.