Опубликовано 16 ноября 2022 года
Оригинал статьи на www.codeproject.com
Я программирую на языке BASIC с 1975 года и думаю, что пришло время объяснить, что такое BASIC на самом деле и чем он не является. На протяжении десятилетий BASIC подвергался критике из-за мифов о нём. Кто, как не программист, который профессионально использует BASIC на протяжении десятилетий, сможет объяснить, что такое BASIC на самом деле? Слушайте, как я рассказываю о том, как я узнал о языке Basic, о разных версиях Basic, которые я пробовал, и о том, чего мне удалось достичь за эти годы с помощью Basic.
Мое первое знакомство с Бейсиком
В середине 1970-х я посещал углублённый курс математики в старших классах. В то время в наших классах не было компьютеров, но мой учитель математики договорился с соседним колледжем об использовании терминала (только клавиатура и принтер, без экрана) для подключения к мейнфрейму соседнего колледжа через модем. Он научил нас программировать на BASIC, и это было несложно, но позволяло нам использовать знания, полученные на уроках математического анализа, в программировании. В то время это был потрясающий опыт. В те времена не было мобильных телефонов. Не было планшетов. Не было недорогих компьютеров. Это была эпоха мейнфреймов и языка программирования BASIC.
В колледже я изучал программирование на Фортране. Набирал программы на перфокартах (с маленькими отверстиями в них), а затем приносил стопку карт в компьютерный отдел, чтобы запустить их в надежде, что когда-нибудь они запустят ваше приложение и вы получите распечатку. В лучшем случае это было примитивно. Но с малоизвестным языком под названием BASIC произошло нечто. Тайм-шаринг использовался для того, чтобы сотни компьютерных терминалов (с зелёными экранами) могли одновременно взаимодействовать с мейнфреймом, а вы могли вводить свою программу и сразу получать результат. Это было потрясающе! BASIC затмил все остальные языки благодаря использованию интерпретатора и тайм-шарингу. Мгновенные результаты при вводе кода позволяли по-настоящему наслаждаться программированием. BASIC не был детским языком программирования. Это был мощный инструмент, который студенты колледжей получили в своё распоряжение. Он делал то, что не могли или почти не могли делать другие языки. Он делал программирование продуктивным, быстрым и увлекательным.
Эпоха домашних компьютеров
В 1980-х годах появились так называемые домашние компьютеры. Такие компьютеры, как Commodore 64, Atari 400/800/XL, Texas Instruments TI/994A, Sinclair, Timex и другие, стоили недёшево. Эти компьютеры не были детскими игрушками. Они предназначались для хакеров прошлого. Для создателей прошлого. Те, кто был увлечён технологиями, когда технологии только зарождались.
Они были слишком дорогими для меня, но со временем появились новые компьютеры, и цены на домашние компьютеры снизились. Однажды я нашёл его на распродаже в местном универмаге и приобрёл свой первый домашний компьютер — TI99/4A. Я снова начал программировать ради удовольствия. Со временем я купил Atari 400 и Commodore 64. Мой интерес к программированию вспыхнул с новой силой.
BASIC — это не только интерпретаторы
Один из современных мифов заключается в том, что Basic всегда был медленным интерпретатором, предназначенным для детей. В 1980-х годах Commodore 64 познакомил мир с домашними компьютерами, но многие компании и производители использовали C64 для самых разных целей. С помощью C64 выполнялась настоящая работа. BASIC был только началом для C64. Многие пользователи BASIC осознавали необходимость повышения производительности и поэтому часто изучали машинный код 6502. Commodore Basic поощрял изучение аппаратного обеспечения низкого уровня, вероятно, лучше, чем большинство современных языков программирования. Книги о компьютерном оборудовании низкого уровня для C64 открыли для многих новый мир. В BASIC были PEEK и POKE, которые позволяли напрямую обращаться к аппаратному обеспечению. Интерпретатор BASIC в ПЗУ можно было расширить, взломав систему и добавив новые команды. Одним из первых языков, которые я выучил, был машинный код 6502, чтобы я мог расширить язык Basic. В C64 BASIC есть команды (SYS, USR) для вызова подпрограмм на машинном языке из программы на BASIC. Вместо того чтобы скрывать аппаратное обеспечение от пользователя, BASIC использовал его.
Затем я нашёл компилятор языка Abacus BASIC. Теперь я мог писать на BASIC, а затем компилировать код непосредственно в машинный язык, что увеличивало скорость более чем в 10 раз. Да, у программистов на BASIC в те времена были компиляторы. Abacus BASIC также предлагал улучшения для языка BASIC.
Затем я использовал компилятор Abacus, чтобы написать собственный компилятор для создания ещё более быстрых программ. Мой компилятор был подмножеством языка Basic. Набор команд был очень ограничен, но он научил меня писать компиляторы, генерировать машинный код и добиваться максимальной производительности от компьютера чей процессор работал с тактовой частотой всего в 1 МГц. Я написал свою первую видеоигру для всей семьи и продал её компьютерному журна��у (Compute Gazette). Игра была опубликована в выпуске за октябрь 1987 года. Эта небольшая игра, написанная на подмножестве языка Basic с использованием компилятора, который я написал на основе компилятора Abacus Basic, в то время принесла мне целых 1500 долларов.
BASIC и мир бизнеса (времена CP/M и IBM Dos)
В конце 1980-х годов малый и средний бизнес начал осознавать преимущества использования компьютеров. Тогда всё было не так, как сейчас. В то время было мало готового программного обеспечения. Чтобы получить действительно полезный программный пакет, нужно было нанять программиста. Лишь немногие малые и средние предприятия могли позволить себе нанять программиста для разработки программного обеспечения на заказ. Не было такого интернета, как сейчас, где можно было бы скачать программное обеспечение с открытым исходным кодом или бесплатное ПО. До того, как IBM вывела ПК на массовый рынок, существовал мир CP/M. Было достаточно плохо, что приходилось нанимать программиста для написания программного обеспечения, но представьте, что вы пытаетесь написать такое ПО, скажем, на C или Fortran, — стоимость была бы заоблачной. Но на помощь пришёл развивающийся язык BASIC! Но интерпретаторы BASIC были уже доступны в ряде систем CP/M. Это позволяло начинающим программистам быстро писать и тестировать программное обеспечение. Так я начал свою профессиональную деятельность. Будучи программистом-самоучкой, я находил заказы от клиентов на создание программ под их нужды. Я написал несколько приложений на BASIC. Когда появилась PC-DOS с собственной версией BASIC, я продолжил писать бизнес-приложения. В те времена, когда CP/M и IBM были совместимы, я написал несколько реальных приложений для таких компаний, как магазин по прокату видео (учёт), мебельный магазин (учёт) и даже для отдела контроля качества на местной фабрике. И все они были написаны на BASIC. Возможно, вам будет интересно узнать, что версия BASIC от IBM называлась Basica, что расшифровывалось как IBM Advanced Basic. Идея о том, что BASIC был продвинутым языком, сегодня может показаться смехотворной, но да, у BASIC есть история дальнейшего развития. Он рос и менялся с течением времени. Да, со временем BASIC заимствовал мощные конструкции из других языков и адаптировал их под себя (то есть сделал их максимально простыми в использовании).
Программисты на BASIC мечтают о компиляторах
Когда совместимые с ПК компьютеры начали завоёвывать мир, модной операционной системой стала Microsoft MSDOS. В ней тоже был свой BASIC. В конце концов Microsoft создала компилятор QuickBasic. Уникальность QuickBasic заключалась в том, что для запуска и тестирования программы не нужно было её компилировать. Он использовал своего рода интерпретатор для немедленного запуска приложения, но его также можно было скомпилировать позже, чтобы оно работало с максимальной производительностью, как нативный скомпилированный код. Это было лучшее из двух миров. Благодаря своему уникальному дизайну QuickBasic стал любимым языком программирования для начинающих профессиональных программистов, которым нужно было быстро разрабатывать приложения, но при этом создавать современные приложения с высокой производительностью. Основная причина популярности QuickBasic заключалась в том, что этот язык был прост в использовании, но при этом позволял создавать качественное программное обеспечение, которое хорошо работало и, вероятно, разрабатывалось в два раза быстрее, чем на других языках. Вершиной творчества Microsoft в то время был Professional Basic.Да, вы не ослышались, это Basic для профессионалов. Это была PDS 7.1, или система профессионального разработки Microsoft. Я использовал QuickBasic, а затем PDS 7.1 для разработки программного обеспечения для своих клиентов в различных сферах бизнеса, таких как контроль качества на производстве, отслеживание заказов в механических цехах, работа с дебиторской задолженностью на лесопилках, работа шерифа, ремонт трансмиссий и система отслеживания АТС. Все это реальные приложения. BASIC, будучи компилятором, позволял мне писать программы не хуже, чем на любом другом языке программирования того времени. Возможно, вы заметили, что до этого момента я писал BASIC заглавными буквами. Это потому , что это название было сокращением от “Beginners’ All-purpose Symbolic Instruction Code“. Отныне подходящее написание - Basic (не все заглавные). Почему? Потому что с этого момента Basic стал профессиональным языком программирования. Microsoft PDS 7.1 даже позволяла создавать ссылки в модулях, написанных на других языках. Раньше я писал низкоуровневые модули на ассемблере, а затем подключал их к своему приложению на Basic. Basic стал профессиональным языком программирования со множеством современных конструкций, таких как типы, подпрограммы, функции и т. д.
Basic и Windows
Если бы не Windows, Basic как профессиональный язык программирования, скорее всего, продолжал бы развиваться и расти. Windows 1.0 своим появлением поставила крест на Basic и его будущем. Многие программисты, работавшие с DOS Basic, со временем почувствовали необходимость перенести свои приложения с DOS на Windows, и для некоторых этот переход оказался слишком сложным. Даже компании, разрабатывавшие языки программирования, почувствовали необходимость в этом, и некоторые из них потерпели неудачу в попытках создать Basic для Windows, а некоторые добились успеха. Переход с DOS на Windows был таким сложным для программистов, работавших с языком Basic, по двум ключевым причинам. Во-первых, пользовательские интерфейсы в DOS обычно были текстовыми (хотя кое-какая графика и существовала, каждой программе приходилось определять собственный графический движок, что было непросто). Windows представляла собой переход к среде с графическим интерфейсом, в которой используется событийно-ориентированное программирование. В то время Windows не была объектно-ориентированной и оставалась процедурной, но поток кода в ней существенно отличался из-за событийной (с точки зрения API, фактически основанной на сообщениях) стилизации кода.Windows просто сбивала с толку программистов, привыкших к строго линейному процедурному стилю кодирования. Ряд компаний пытались создать Basic для Windows, но многие из них так и не смогли добиться успеха из-за запутанной внутренней структуры Windows. Программисты, работавшие с DOS Basic, часто просто терялись в таких инструментах и отказывались от них, вместо того чтобы тратить время на изучение совершенно нового стиля программирования. Вы просто не смогли бы быстро перенести своё приложение, написанное на DOS Basic, на Windows Basic. Это означало бы полную переработку с нуля. Изначально большинство приложений для Windows писалось на C (а не на C++). Написать приложение для Windows было очень сложно. Со временем в Windows появился Basic, но многие программисты, работавшие с DOS Basic, не смогли успешно перейти на новую платформу. Поначалу сообщество программистов, работавших с Basic, сильно пострадало из-за Windows. А как же я?
Нащупывая путь в выборе Basic
Давайте начнём с основ для Windows, с которыми я пытался работать, но так и не смог добиться продуктивности. Я продлил срок службы приложений Basic на DOS, которые написал в PDS 7.1. На самом деле одно из моих приложений для DOS, написанное в 1990-х годах, использовалось компанией вплоть до прошлого года. Да, некоторые из моих приложений на DOS Basic использовались десятилетиями. Тем не менее я пробовал работать с любым языком программирования под названием Basic, который мне попадался для Windows. Один из них назывался CA_Realizer от Computer Associates. Другой был GFA_Basic. Оба были отличными попытками создать Basic для Windows. Ни одна из них не увенчалась успехом, так что, очевидно, в них чего-то не хватало. Я так и не освоил ни один из них. Basic, который действительно привлёк моё внимание, был Microsoft Visual Basic 1.0. К нему нужно было привыкнуть, но со временем я научился эффективно им пользоваться. Единственная проблема Visual Basic 1.0 заключалась в том, что это был компилятор p-кода. Хотя я всегда считал, что Microsoft создала Visual Basic с нуля, только спустя годы я узнал, что они просто купили права на чужое программное обеспечение и превратили его в Visual Basic. Подробнее об Аллене Купере, создавшем то, что впоследствии стало Visual Basic, читайте здесь. Visual Basic быстро стал популярным не только потому, что это был Basic, но и благодаря уникальной среде с функцией Drag'n'Drop. Basic был, так сказать, вишенкой на торте. Язык Basic упрощал написание кода по сравнению, скажем, с C, но среда с функцией перетаскивания в то время была поистине потрясающей. В совокупности это сделало его одним из самых популярных языков программирования для Windows. Но Visual Basic 1.0 в некотором смысле разочаровал профессиональных программистов, работавших с Basic в 1980-х и начале 1990-х годов. Поскольку это был компилятор p-кода, производительность была в лучшем случае низкой. По сравнению с так называемыми «настоящими программами», написанными на C, они редко могли с ними сравниться. Во времена DOS компания Microsoft серьёзно относилась к тому, чтобы сделать Basic профессиональным языком, но в первые годы существования Windows Visual Basic стал языком программирования для «любителей». Мы потеряли возможность просто компилировать в машинный код и заметили это. Visual Basic 1.0 был одновременно большим шагом вперёд и несколькими шагами назад. Я действительно не думаю, что Microsoft ожидала, что Visual Basic станет таким популярным. Одним из хороших решений была поддержка элементов управления ActiveX (а позже и элементов управления OCX), что позволило сторонним компаниям создавать всевозможные дополнения для Visual Basic(скорее всего, большинство из них были написаны на C, а не на Visual Basic). Я действительно считаю, что именно поддержка сторонних разработчиков вывела Visual Basic из разряда хобби-программ в разряд профессиональных. На Visual Basic писалось программное обеспечение для реального мира. Поскольку многие разработчики использовали Visual Basic для написания программного обеспечения коммерческого качества, у Microsoft не было другого выбора, кроме как продолжать улучшать его, чтобы сделать более «профессиональным». В конце концов, он стал настоящим компилятором машинного кода, но, судя по тому, что я читал об этом, для достижения такого результата потребовалось использовать бэкенд компилятора C. Оглядываясь назад, я понимаю, что Microsoft не воспринимала Visual Basic всерьёз как профессиональный язык программирования. Да, он был популярен. Да, Microsoft сделала его лучше. Но главный вопрос в том, почему Basic никогда не рассматривался как язык, на котором профессионалы могли бы создавать что-то с нуля? Да, несмотря на свой успех, Visual Basic сильно повлиял на отношение программистов к языку Basic. Со временем, каким бы хорошим ни был Visual Basic, он так и не стал профессиональным языком программирования. Во времена DOS Basic был профессиональным языком программирования, так почему бы ему не стать таковым и в эпоху Windows?
А как обстоят дела с другими Basic?
Следует отметить, что, как бы мир программирования ни пытался объявить Basic устаревшим, он по-прежнему процветает в той или иной форме. Существует ряд современных «независимых» версий Basic, которые заслуживают внимания. Вот лишь некоторые из них:
Purebasic (платное программное обеспечение, мультиплатформенное), довольно популярное
Freebasic (бесплатное)
ThinBasic (бесплатное)
Oxygen (бесплатное, 32- и 64-битное)
Liberty Basic (платное)
AutoIt
Basic-256
Basic для QT
BBC Basic
Creative Basic
GLBasic
True Basic (создано автором оригинального Basic)
XBasic
Это не все языки, а только те, с которыми я знаком. Те, которые я настоятельно рекомендую изучить, — это PureBasic, Freebasic, ThinBasic, Oxygen, Creative Basic и GLBasic, но только потому, что я лучше знаком с ними и их преимуществами. Теперь я хотел бы обсудить два других современных языка программирования на основе Basic, которые относятся к профессиональному уровню. Первый — XOJO. Изначально XOJO назывался RealBasic, но позже название продукта было изменено. К сожалению, в XOJO посчитали нужным отказаться от части Basic. Однако XOJO по-прежнему является языком Basic. Я не знаю, почему они так поступили, но можно предположить, что это изменение было вызвано негативным отношением к слову Basic в мире программирования. XOJO — это очень мощный язык программирования профессионального уровня, во многом похожий на классический Visual Basic. Он поддерживает функцию перетаскивания и является мультиплатформенным. Существует даже версия, которая может генерировать приложение для Raspberry PI. Последний Basic, который я хотел бы обсудить, — это тот самый язык программирования Basic, которым я пользовался последние 20 лет.
Профессиональный BASIC, который пару раз чуть не умер
Этот язык программирования называется PowerBasic. Чтобы лучше понять этот язык, нужно знать его историю. До появления Microsoft QuickBasic и Borland International TurboBasic во времена DOS был программист по имени Боб Зейл. Он создал компилятор под названием Basic/Z. У Microsoft был самый популярный компилятор Basic для профессионалов во времена DOS, а Borland International конкурировала с Microsoft на рынке языков программирования. У Borland был очень популярный Turbo Pascal, на который обратила внимание Microsoft. Компания Borland хотела добавить Basic в семейство Turbo к Turbo Pascal и Turbo C. Они решили выкупить компилятор Боба Залеса и переименовали его в Turbo Basic. Turbo Basic действительно заставил Microsoft «попотеть», так сказать в то время. Это был компилятор профессионального уровня, как и у Microsoft. К сожалению, компания Borland отказалась от разработки языков программирования. Они продали большую часть своих языков компании Embarcadero, где они используются до сих пор и в профессиональных целях. Turbo Basic они продали обратно его создателю, Бобу Зейлу.Он переименовал его в Powerbasic. Таким образом, TurboBasic почти исчез, но благодаря своему создателю он продолжает существовать. Проблема с Powerbasic заключалась не в самом продукте, а в том, что он перешёл из рук крупной компании с глубокими карманами в руки небольшой компании с гораздо меньшими ресурсами. Позднее этому переходу помешал переход с DOS на Windows. Powerbasic был потрясающим компилятором Basic профессионального уровня. PowerBasic мог работать не хуже любого компилятора C того времени. Windows создала проблему, из-за которой этот язык программирования мог бы снова исчезнуть, но Боб Зейл нашёл способ сделать небольшой шаг в сторону Windows, но не полностью. Проблема при создании языка программирования для Windows заключается не в самом языке программирования, а в том, как обеспечить поддержку всех функций графического интерфейса в Windows. У PowerBasic (компании) не было таких ресурсов, как у Microsoft, чтобы с самого начала создать визуальный конструктор с функцией перетаскивания, как в Visual Basic. Поверьте мне на слово, сложно написать среду визуального проектирования с функцией перетаскивания (я знаю, потому что сам это делал). Поэтому Powerbasic использовал свои сильные стороны, чтобы определить рынок для версии компилятора для Windows. Сам Powerbasic (часть компилятора), был написан на ассемблере. Он генерировал машинный код так же хорошо, как любой компилятор C. Они преобразовали некоторые заголовки Windows API в синтаксис PowerBasic, чтобы он мог обращаться к Windows API. PowerBasic мог компилироваться как в EXE, так и в DLL, поэтому PowerBasic позиционировался как дополнение к Visual Basic (ранние версии до того, как VB стал компилятором собственного кода). Теперь вы могли писать DLL на Basic для использования в приложениях Visual Basic (или на любом другом языке). Производительность была на уровне C. Именно тогда я впервые познакомился с языком программирования PowerBasic. Продукт назывался компилятором PowerBasic DLL. Я использовал Visual Basic 1.0 и 2.0 и был в восторге от PowerBasic. Я мог писать код, как любой программист на C, но на Basic, и он работал быстро. Сначала я использовал его для написания DLL-библиотек для Visual Basic. Позже я использовал его для написания DLL-расширения для мультимедийного инструмента под названием MediaForge. Но мне хотелось большего. Это означало, что мне нужно было научиться работать с Windows API. Это заняло у меня время, поскольку программирование для Windows API больше относится к сфере деятельности программистов на C. Но мощь компилятора машинного кода и Windows API просто поражает! Однако со временем кое-что снова поставило под угрозу полезность Powerbasic. Microsoft отказалась от классического Visual Basic в пользу VB dot.net. Классический VB постепенно терял популярность среди программистов, и что же стало с продуктом, который позиционировался как компилятор DLL для VB? Его пришлось изобретать заново. К счастью для Powerbasic, это произошло благодаря обширному сообществу пользователей. Из них вышли программисты, которые разработали такие вещи, как визуальные дизайнеры, фреймворки для графического интерфейса, пользовательские элементы управления и многое другое. Теперь PowerBasic мог самостоятельно разрабатывать полноценные приложения. Из-за всей этой шумихи даже компания Powerbasic взялась за переосмысление себя. Они создали собственный визуальный конструктор (PB Forms)и переименовали продукт в PowerBasic для Windows. Несмотря на то, что это была небольшая компания с ограниченными ресурсами, она продолжала процветать в мире Windows. К сожалению, в 2012 году умер Боб Зейл, создатель Turbo Basic и Powerbasic. На этот раз этот профессиональный язык программирования едва не умер вместе с ним. Сообщество пользователей поддерживало PowerBasic, пока он не был продан нынешнему владельцу, компании Drake Software. Да, профессиональный уровень Basic по-прежнему актуален. Версия Basic от XOJO продолжает развиваться. Похоже, это сильная компания с хорошей базой пользователей. Powerbasic, несмотря на все трудности, продолжает жить и, вероятно, является одним из немногих современных компиляторов профессионального уровня, написанных на ассемблере. Basic стал инструментом профессионального уровня в 1980-х годах. Он остаётся инструментом профессионального уровня и сегодня, несмотря на все трудности. Продолжают появляться новые языки Basic. В сфере микроконтроллеров Basic по-прежнему популярен. Долгая жизнь Basic — одно из свидетельств того, что это настоящий язык программирования для профессионалов, а не только для программистов-любителей. Если я и хочу донести до читателей этой статьи какую-то мысль, то она заключается в том, что Basic не только продолжает жить, но и должен стать серьёзным языком, синтаксис которого стоит рассмотреть для использования в будущих языках программирования.
Примечание: Я не стал подробно рассказывать о том, какое программное обеспечение я создал с помощью Powerbasic, но достаточно будет сказать, что с его помощью я научился расширять возможности WIN32 API. С его помощью я разработал полноценную среду графического интерфейса и визуальный конструктор. Вот лишь несколько примеров того, что я мог сделать с помощью Powerbasic в небольших тестовых приложениях, которые я написал. Может показаться, что это не так уж много, но вы можете удивиться.
Тестируемое приложение WIN32, использующее мой фреймворк для GUI:
Моё приложение для конкурса CodeProject Intel, которое я отправил:
License
Эта статья, а также все связанные с ней исходные тексты и файлы доступны по лицензии The Code Project Open License (CPOL).