[LinuxFocus-icon]
Домой  |  Карта  |  Индекс  |  Поиск

Новости | Архивы | Ссылки | Про LF
эта страница доступна на следующих языках: English  Castellano  Deutsch  Francais  Nederlands  Russian  Turkce  

[Photo de l'Auteur]
автор John Perr
<johnperr(at)Linuxfocus.org>

Об авторе:

Пользователь Linux с 1994, один из французских редакторов LinuxFocus.



Перевод на Русский:
Dmitry Martsynkevitch <ursa(at)zaba.ru>

Содержание:

 

Программирование на BASIC в Unix

[Illustration]

Резюме:

Разработка ПО под Linux или другую Unix -систему на BASIC? Почему нет? Разнообразные бесплатные предложения позволяют нам использовать BASIC для создания как скомпилированных, так и интерпретируемых приложений.


_________________ _________________ _________________

 

Вступление

Не смотря на то, что BASIC появился на компьютерной сцене позже других языков, он быстро стал распространённым на системах отличных от Unix и его потомков, как заменитель языков сценариев. Возможно это главная причина, по которой пользователи Unix редко прибегают к помощи этого языка. Unix с самого рождения обладал гораздо более мощными языками сценариев. Чаще всего, как и для других языков сценариев, для BASIC выпускают интерпретаторы. Он обладает достаточно простым синтаксисом — без типов данных, ну кроме различия строк и чисел. Именно из-за своей простоты и возможности с помощью него легко обучать студентов программированию, BASIC и получил своё название.

К сожалению, недостаток стандартизации, привёл к появлению многочисленных версий, в большинстве своём не совместимых. Можно даже сказать, что сколько интерпретаторов, столько и версий BASIC -а, это делает его трудно переносимым.
Не смотря на выше перечисленные, и многие другие недостатки, о которых нам напомнят "настоящие программисты", BASIC остаётся одним из возможных средств для быстрого создания маленьких программ. Долгие годы это было особенно заметно в Windows версиях, Это особенно заметно в Windows версиях, где, с помощью Интегрированной Среды Разработки, можно создавать графический интерфейс за несколько кликов мышкой. Более того, эти версии, названные "Visual", используются для расширения возможностей приложений, за счёт написания макросов, что увеличило распространения этих приложений среди людей, которые никогда бы так и не начали программировать.
Здесь мы рассмотрим несколько наиболее известных версий BASIC под Linux и попробуем сравнить их.

 

Немного истории

Сведения взяты из документации к kbasic, Andrea M. Marconi.

 

Рождение BASIC

Язык BASIC (Универсальная Символическая Система Команд для Начинающих) родился в Дартмутском университете, в Нью Хэмпшире (США), в 1964 году. Его разработали Дж. Кемени (1926-93) и Томас Е. Курц (1928-). До этого Кемени работал в Проекте Манхэттэн (1945), а позднее (1948-49), как ассистент Альберта Ейнштейна. Он встретил Курца в Дартмуте, в 1956.

Оба они начали работать над новым упрощённым языком программирования, и после версий, которые назывались Darsimco и DOPE, они сформулировали для себя следующие свойства желаемого языка:

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

Чтобы реализовать это они начали с FORTRAN и ALGOL. Окончательная версия называлась "Dartmuth BASIC" и включала в себя 14 команд. "Дартмутский BASIC" был компилированным, а потому весьма быстрым для того времени.

Усилия Кемени и Курца были вознаграждены 1 мая, 1964 года, в 4 часа утра, когда две BASIC программы были одновременно запущены на компьютере Дженерал Электрик 255 Ю Си Дартмутского университета.

 

Развитие BASIC

Кемени И Курц не стали патентовать своё изобретение, что способствовало его развитию и увеличению числа версий. Среди первых пользователей BASIC была и компания Дженерал Электрик, продавшая GE-255 в Дартмут.

У истоков многих версий BASIC стоит Гордон Юбанкс (главный администратор компании Симантек). В 1970 вышел E-BASIC, он использовал псевдокод, как сегодня Java. Потом был CBASIC и много других, что заставило ANSI определить некоторые стандарты. Но когда в 1978 они вышли, ими никто не стал пользоваться: BASIC был распространён уже очень широко.

В это же время (1975), Боб Альбрехт и Дэннис Эллисон выпускают TinyBasic: он работает всего при 2 килобайтах оперативной памяти. Тогда же появляется и первый интерпретатор BASIC. Его разработали Уильям Х. Гейтс III (1955-, больше известный как Билл) и Пол Аллен (1953-). Производители компьютеров стали записывать копию BASIC на постоянные запоминающие устройства своих машин. В конце 70 -х, первые персональные компьютеры также имеют свою версию BASIC:

 

Эволюция BASIC

С начала 80 -х, история BASIC тесно связана с историей компьютеров. Два продукта доминировали на рынке: IBM предлагала BASIC A с PC-DOS, это интерпретатор, записан в ROM, расширяем. MS-DOS предлагала Gee-Witz BASIC (Вот так BASIC).
В 1984 появляется компилятор Microsoft BASIC, а за ним многочисленные версии, среди которых серия QuickBASIC. Её начали выпускать в 1985, а закончили в 1990 пакетом Microsoft BASIC Professional Development System 7.1

Появление графического интерфейса (GUI) у операционных систем, приводит к очередным изменениям в языке. Выходит Visual BASIC, сделанный специально для поддержки GUI; утверждается, что он объектно-ориентированный. Многие программисты с этим не согласны, однако, по последним подсчётам до 90% программ для Windows 9x используют Visual BASIC.

 

BASIC(и) сегодня

Если мы захотим составить список Basic доступных под Linux, то найдём около полудюжины более менее интересных для рассмотрения. На сайте sourceforge есть "Кузница BASIC", по которой можно судить о количестве скачиваний:

Вот наиболее скачиваемые пакеты с Sourceforge.net

  1. XBasic
  2. SmallBASIC
  3. wxBasic
  4. GNU/Liberty Basic
  5. YaBASIC
  6. X11-Basic

Также нам известно, что Gnome и KDE имеют проект, который должен заменить Visula BASIC. Более того, Ричард Столлмэн говорит о необходимости бесплатной альтернативы VB вписьме в интернет-журнал "the register", от 10 февраля 2002 года.
Энтони Лигуори (ajl13-at-bellatantic.net), автор GLBCC (Коллекция компиляторов Liberty Basic) единственный проект BASIC с упоминанием GNU, также просит об этом на сайте GLBCC (lbpp.sourceforge.net).

Давайте рассмотрим разные пакеты BASIC, чтобы составить представление об их интерфейсе и возможностях предоставляемого языка:

 

XBasic

XBasic — это среда разработки с одним из наиболее мощных пользовательских интерфейсов. Это Интегрированная Среда Разработчика, то есть, это возможность создавать графический интерфейс программы, отлаживать её и компилировать. Система "точка - команда" ("dot commands") позволяет использовать возможности среды не мышкой, а клавиатурой, печатая точку, а за ней команду, в поле ввода слева вверху главного окна:

XBasic
XBasic, Рис 1a: Главное Окно

XBasic math
XBasic, Рис 1b: Приложение Math

Что касается возможностей, XBasic имеет всё необходимое для программирования графических интерфейсов, а также много расширений. Нужно добавить, что имеется возможность вызова процедур, написанных на C. Есть также такие черты C, как определение новых типов, ассоциация переменных, создание библиотек.
И последнее: XBasic доступен по GPL под Windows или Linux на: http://www.xbasic.org


 

SmallBASIC

SmallBASIC — это интерпретатор, выпущенный пока под Win32, Linux и PalmOS. Для возможности переноса на другие системы, есть специальная хорошая документация. Интерпретатор может быть собран для разных интерфейсов:

Он может быть запущен как в текстовом, так и в графическом режиме. Этот пример запускает программу System_info.bas:

 

Текстовый режим

$ sbasic  System_info.bas
SmallBASIC version 0.8.2, use -h for help
http://smallbasic.sourceforge.net

VMT Initialization...
File: System_info.bas
Section: Main
PASS1: Line 24; finished
SB-MemMgr: Maximum use of memory: 30KB

PASS2: Node 3/3
Creating byte-code...
Variables  20
Labels     0
Proc/Func  0
Code size  707

System Information

OS:     Unix/Linux version 2.4.18-6mdk (quintela @ bi.mandrakesoft.com)
       (gcc version 2.96 20000731 (Mandrake Linux 8.2 2.96-0.76mdk))
       #1 Fri Mar 15 02:59:08 CET 2002 204018
SB:     802
Display 99x58
Colors  16
Font:   1x1

Total free memory: 127728 KB
Stack size: 127728 KB
Largest free memory block: 127728 KB

 * DONE *

SB-MemMgr: Maximum use of memory: 30KB
$
 

Графический режим

   $ sbasic -g  System_info.bas
   SmallBASIC version 0.8.2, use -h for help
   http://smallbasic.sourceforge.net


   VMT Initialization...
   File: System_info.bas
   Section: Main
   PASS1: Line 24; finished
   SB-MemMgr: Maximum use of memory: 30KB

   PASS2: Node 3/3
   Creating byte-code...
   Variables  20
   Labels     0
   Proc/Func  0
   Code size  707

   SB-MemMgr: Maximum use of memory: 30KB
   $

SmallBASIC
Рис 2: SmallBASIC. Графический режим SDL.

Язык SmallBASIC достаточно прост и близок к тому, что вы можете ожидать от "стандартного" BASIC. Среди графических функций нет ничего нового, и классические RECTANGLE и CIRCLE могут быть выполненными на любой, указанной ранее операционной системе. Типы переменных отсутствуют.
Однако, SmallBASIC совместим со старыми TINYBasic и QuickBasic и хорошо интегрирован в PalmOS, скачать его можно на http://smallbasic.sourceforge.net

 

wxBasic

wxBasic имеет черты QuickBASICа, но кое-что он взял из Unix , как например ассоциированные массивы. wxBasic — это интерпретатор, он помещается всего на одну дискету, обладает полной документацией (138 стр.), доступной в формате pdf. В комплект поставки входит графическая библиотека, позволяющая писать программы для X Window или Windows. С этой стороны данный язык близок к объектно-ориентированным, как например C++. Однако, графический интерфейс приходится делать вручную, также нет никакого встроенного интерфейса разработки.

 // My first wxBasic demo...
 option explicit

 // create the window
 dim frame=new wxFrame(0,-1,"wxBasic App",wxPoint(10,10),wxSize(300,200))
 frame.Centre()

 // place a panel in the window
 dim panel = new wxPanel(frame, -1)

 // add a status bar
 dim sBar = frame.CreateStatusBar( 1 )
 sBar.SetStatusText("wxBasic Frame Demo")

 // attach a menubar to the window
 dim mBar = new wxMenuBar()
 frame.SetMenuBar(mBar)

 // build the "File" dropdown menu
 dim mFile = new wxMenu()
 mBar.Append(mFile,"&File")

 // populate it
 mFile.Append(wxID_NEW, "&New", "Creates a new file")
 mFile.Append(wxID_OPEN, "&Open", "Loads an existing file from disk")
 mFile.Append(wxID_SAVE, "&Save", "Saves current file")
 mFile.Append(wxID_SAVEAS, "Save &As", "Saves current file with new name")
 mFile.AppendSeparator()
 mFile.Append(wxID_EXIT, "&Exit", "Exit Application")

 // build the "Edit" dropdown menu
 etc.....

wxBasic

wxBasic
Рис 3: wxBasic: одна из demo-программ

Вэб сайт : http://wxbasic.sourceforge.net

 

GNU/Liberty Basic

Также называемый GLBCC (Коллекция компиляторов Liberty Basic), это компилятор, а вернее интерфейс к GNU компилятору gcc, переводящий BASIC в C. Это немного похоже на некоторые компиляторы C++, переводящие перед компилированием C++ в C. Как видно из названия, этот компилятор стопроцентно совместим с Liberty BASIC. Последний появился в 90 -х, на Windows платформах, и имел весьма широкую популярность из-за своей доступности (отсюда и название). За дальнейшей информацией, обращайтесь на этот сайт, на нём вы найдёте много доказательств высокого качества данного программного продукта. Этот язык не бесплатен, но пробную версию можно скачать.

Компилятор GLBCC имеет реализации как под Linux, так и под Windows, и может создавать независимые исполнимые файлы, работающие не медленнее, чем такие же, но написанные на любом другом языке. Автор обращает внимание, что программа на Liberty BASIC, скомпилированная c GLBCC, в отношении скорости "делает" Visual BASIC.

Установка GLBCC под Linux достаточно проста — необходимы классический "tar", чтобы распаковать архив, и "make install".
В обычном режиме, программа использует командную строку. "glbcc hello.bas" создаст выполнимый файл примерно так:

$ glbcc
/usr/local/bin/lbpp -I/usr/local/lib/glbcc-lib/0.0.7/include -o out.c hello.bas
gcc -g -I/usr/local/lib/glbcc-lib/0.0.7/include `gnome-config --cflags gnomeui`
    -o hello out.c /usr/local/lib/glbcc-lib/0.0.7/lib/lbcrt0.o
    -L/usr/local/lib/glbcc-lib/0.0.7/lib -lLB
    -lm `gnome-config --libs gnomeui`
$ ls -l hello*
-rwxr-xr-x  1 john  john  339671 oct 13 21:55 hello
-rw-r--r--  1 john  john      22 avr 14 17:41 hello.bas
$ cat hello.bas
print "Hello, world!"
$ ./hello
Hello, world!

Когда параметры не указаны, GLBCC откроет графический диалог и попросит вас ввести имя файла с кодом на BASIC и имя исполнимого файла, который будет создан. По умолчанию, под Windows к имени входной программы добавится суффикс ".exe", а под Linux не добавится никакой.

GNU/Liberty Basic
Рис 4: GNU/Liberty Basic

Работа с графикой в GLBCC основана на библиотеке GTK. Забавно, что GLBCC сам написан на BASIC.

 

YaBASIC

Ещё один Basic под Unix и Windows

Хоть YaVASIC и ведёт себя как интерпретатор, интерпретатором он не является. Просто поданный на вход код он сразу компилирует и сразу же запускает. YaBASIC вызывается из командной строки, с указанием в качестве аргумента имени файла. Если файл указан, то он и компилируется, если нет, то вы попадёте в режим интерпретации, как в этом примере:

$ yabasic
Enter your program, type RETURN twice when done.
for i=1 to 10
   print i,"hello, world"
next i

1hello, world
2hello, world
3hello, world
4hello, world
5hello, world
6hello, world
7hello, world
8hello, world
9hello, world
10hello, world
$

Такой способ работы YaBASIC позволяет писать на нём Unix сценарии или даже CGI скрипты, вставляя в начало файла строку вида "#!/bin/yabasic", и делая такой файл исполнимым.

Язык YaBasic близок к Quick BASIC, без типов переменных. Есть только возможность различать строки и числа, ставя или нет символ $ в конце имени переменной. Здесь нет объектно-ориентированного программирования, но есть возможность создавать свои собственные библиотеки, есть команды доступа к графическим режимам X11 или Windows, в зависимости от операционной системы. Есть также несколько полезных моментов, таких как функция split(), подобная одноимённой из Perl или php, циклы FOR, WHILE или REPEAT UNTIL, а также конструкция IF ELSE ENDIF; последние конструкции вошли в BASIC в 80 -х, с появлением структурного программирования.

 

X11-BASIC

X11-BASIC — это интерпретатор структурированного BASIC, с графическими возможностями X11. Этот BASIC перенесён с системы Atari ST GEM/TOS (конец 80 -х) на Unix. Его можно использовать как интерпретатор, создавать сценарии или CGI скрипты. Есть компилятор, который может делать отдельные исполнимые файлы (статический режим), или прилинкованные к стандартной библиотеке X11 размером около 200 Кбайт (динамический режим). Компилятор на самом деле не настоящий, так как выдаёт не исполняемый CPU код, а сжатый интерпретатором исходный. Сам псевдокомпилятор написан на X11-BASIC.
Язык этого BASIC весьма богат, структурирован, с наличием типов переменных (integer, floating, text, array, boolean). Доступные команды позволяют обращаться к памяти, подобно malloc() в C, или перемножать матрицы, хранящиеся в массивах.
Графические команды такие же как и в Atari ST GFA BASIC, имеют такой же результат, но под системой X Window. Например команда MENU создаёт в графическом окне меню. Этот интерпретатор снабжён документацией и большим количеством примеров, правда пока эта документация местами на немецком языке. Неприятная сторона состоит в том, что перенос с исходной системы ещё не закончен, и могут быть проблемы, даже с примерами. В заключении скажем, что этот интерпретатор в основном ведёт себя как бета версия, им вполне могут пользоваться люди, считающие BASIC "своим" языком.

$ xbasic
***************************************************************
*               xbasic                 V. 1.07                *
*                    by Markus Hoffmann 1997-2002 (c)         *
*                                                             *
* version date:           Wed Sep 25 10:26:29 CEST 2002       *
* library V. 1.07 date:   Wed Sep 25 10:26:29 CEST 2002       *
***************************************************************
Домашняя страничка: http://www-cip.physik.uni-bonn.de/~hoffmann/X11-Basic/

 

HBasic

Вот BASIC, производящий хорошее впечатление с первого взгляда, может это от его возможностей, а может от качества документации, которая весит 7.7 Мегабайт. Если у вас нет последней версии дистрибутива Linux, то, возможно, вам понадобится Qt-3.*, доступная на сайте Trolltech (http://www.troll.no). Это полная среда разработки со всем, что может захотеть программист (не смотря на "молодость" : версия 0.8 ):

Авторы HBasic предупреждают: "Настоящая версия HBasic ещё не достаточно стабильна, чтобы её могли использовать разработчики программ на BASIC. Им надо дождаться выпуска первой стабильной версии: 1.0".

hbasic
Рис. 5:Hbasic
 

GNOME Basic

Проект GNOME Basic хотели сделать стопроцентно совместимым с Visual BASIC, VBA, VBScript, и другими связанными с ними языками. Вначале он был предназначен для выполнения VBA макросов из gnumeric, но, в связи с неожиданными изменениями, он может исполнить только некоторые формы, проверить большую часть VB кода и исполнить некоторые скрипты на ASP. С более качественной интеграцией в Bonobo, можно ожидать более MS совместимой среды.
Сейчас Gnome Basic — это попытка предать черты VB проекту Gnome, особенно для повышения производительности и удобства приложений.
Этот проект всё ещё находится в предварительном состоянии и должен быть оставлен разработчикам Gnome.

Домашняя страничка : http://www.gnome.org/gb/

 

KBasic

Перед нами ещё одна попытка сделать BASIC совместимым с Visual Basic. Разработчики надеются выпустить первую стабильную версию 1.0 летом 2003. Сейчас это только нестабильная версия, находящаяся в стадии разработки. KBasic будет использовать окружение Kdevelop.

Вот как выглядит kbasic доступный сейчас для скачивания:
$ kbasic1 --help
Usage: kbasic1 [OPTION]... FILE
      --help                  display this help and exit
  -V, --version               print version information and exit
  -c, --copyright             print copyright information and exit
$ kbasic1 -V

KBasic version 0.8

Copyright (C) 2000, 2001, 2002 The KBasic Team
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
to the extent permitted by law.

Visit us on http://www.kbasic.org/

$kbasic1 hello.bas
-- scan --

LINE 00001 PRINT STRING "Hello, world!" EOL
LINE 00002 END

-- parse --

STRING in line 1
EOL in line 1
parsed PRINT

parsed END


-- interpret --

0000:  KBASIC   KBASIC
0006:  VER      1.000000
0011:  OPTION R OFF
0013:  JMP      36
0036:  DIM_STAT "Hello, world!", 1
0055:  JMP      18
0018:  PUSHS    1 , " Hello, world! "
0023:  PRINT
Hello, world!
0034:  END      execution ended

Как вы можете видеть, kbasic работает, но далёк от желаемого: нет возможности отключить вывод отладочных сообщений интерпретатора и сгенерированного ассемблерного кода.

Сайт: http://www.kbasic.org

 

Заключение

Этот обзор интерпретаторов и компиляторов BASIC, даёт нам некоторую информацию. В первую очередь, на удивление, этот столь дискредитированный язык всё ещё жив, даже на Unix системах, где его полезность весьма сомнительна, так как есть много альтернатив (PERL, python, Tcl/Tk, php....), также работающих в режиме интерпретации. Удивительно, какую активность разработчиков свободно распространяемого ПО вызывает этот язык. Число проектов достаточно велико, и все они весьма активны. Возможно высок спрос, что способствует развитию свободного ПО, тем самым привлекая BASIC программистов.
В Windows системах, Visual Basic широко распространён из-за своей интегрированности в саму систему, ASP и различные приложения. Однако, стоит заметить, что большая часть рассмотренных нами BASIC работает на обеих платформах, а иногда и некоторых других.
Далее, BASIC всё ещё имеет изъяны. Недостаточная стандартизация приводит к появлению большого числа версий, в основном несовместимых между собой. Желание некоторых проектов, таких как Gnome BASIC и KBasic, поддерживать Visual Basic, ставший стандартом де факто, было бы хорошей идеей, если бы VB был бесплатным, что очевидно не так. Монополизация в данном случае была бы более подходящей...
Что касается разработчиков программ на BASIC: у них есть выбор, хоть и небольшой. В качестве IDE, HBasic выглядит многообещающе. Наиболее законченным, на сегодняшний день, выглядит XBasic. Однако smallbasic и yabasic дают возможность тем, кто только что перешёл на Unix, писать скрипты и CGI, не задумываясь о выборе из большого числа предложений, предоставляемых этой системой. Также есть GLBCC, позволяющий помимо всего компилировать программы великим GCC. Но отсутствие у него IDE, и поэтому простого в использовании отладчика, делает сложным разработку и поддержание больших программ. Наконец, wx-Basic не относится ни к какой категории, но обладает некоторыми достоинствами, такими как возможность создания графического интерфейса.
Хорошая сторона этих BASIC, это простота переноса программ с одной платформы на другую, без перекомпиляции, так как большая часть представленных версий доступна и для Win32 и для Unix.
Таким образом перед разработчиками стоит непростой вопрос: выбрать правильное средство для своих целей.

 

Страница отзывов

У каждой заметки есть страница отзывов. На этой странице вы можете оставить свой комментарий или просмотреть комментарии других читателей :
 talkback page 

Webpages maintained by the LinuxFocus Editor team
© John Perr, FDL
LinuxFocus.org
Translation information:
fr --> -- : John Perr <johnperr(at)Linuxfocus.org>
fr --> en: Georges Tarbouriech <gt(at)Linuxfocus.org>
en --> ru: Dmitry Martsynkevitch <ursa(at)zaba.ru>

2003-01-17, generated by lfparser version 2.31