WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте
Бейсик Вильнюс
Класс языка алгоритмическое, процедурное
Тип исполнения Интерпретатор компилирующего типа
Появился в 1985
Расширение файлов .BAS, COD
Система типов нестрогая
Испытал влияние MSX BASIC

Бейсик Вильнюс (также известен как BASIC-86) — реализация языка программирования Бейсик для 16-разрядных домашних и учебных компьютеров с процессорами архитектуры PDP-11. Первоначально разработан в вычислительном центре Вильнюсского государственного университета (ВЦКП ВГУ) в 1985 году. Использовался на компьютерах: УКНЦ, ДВК, БК-0010/БК-0011, Немига.

По-видимому, Бейсик Вильнюс был разработан под сильным влиянием MSX BASIC: совпадают названия большинства операторов и функций, а также коды сообщений об ошибках. Но в Бейсик Вильнюс нет возможности записи нескольких операторов в одной строке, нет оператора PLAY, отсутствуют операторы задания типа переменных DEFINT, DEFDBL и др., а также и некоторые другие возможности. Изображение символа с кодом 36, которое в кодировке ASCII соответствует символу доллара ($), заменено на изображение обобщённого знака валюты (¤, «солнышко» / «черепашка»). Поэтому все строковые переменные и функции со строковым результатом пишутся через ¤, например MID¤.

Исполнение

При запуске программы командой RUN происходит компиляция программы в промежуточный, так называемый шитый код. Шитый код, по сути, представляет собой последовательность адресов вызова подпрограмм и данные для вызовов. При этом транслятор перед исполнением программы переводит все числа во внутренне представление и все выражения — в обратную бесскобочную запись. При выполнении программы исполняющая система производит вызовы указанных подпрограмм и передаёт им подготовленные данные. Таким образом, шитый код выполняется значительно (в 1,5-3 раза и более) быстрее чем обычная интерпретация (поскольку при исполнении программы не тратится время на «распознавание» чисел и имён переменных, на преобразование выражений и т. д.), но во много раз медленнее чем программа в машинном коде, полученная на выходе настоящего компилятора. Кроме того, при первом запуске программы возникает заметная пауза, зависящая от длины программы, во время которой и происходит «компиляция».

Взгляд на язык

Бейсик-Вильнюс на БК
Бейсик-Вильнюс на УКНЦ

Пример простейшей программы:

10 CLS
20 PRINT "Всем привет!"
30 END

Программа состоит из набора нумерованных строк, в каждой строке записывается один оператор. Работа по редактированию текста программы происходит в режиме командной строки. Команды:

  • RUN — запуск программы на выполнение
  • CONT — продолжение работы программы после остановки
  • CSAVE, CLOAD — запись/чтение программы на магнитную ленту и с неё, расширение файла .COD; команда FIND позволяет найти файл, записанный на магнитную ленту
  • LIST — вывод текста программы на экран; LLIST — печать листинга на принтер
  • . — вызов строки на редактирование
  • DELETE — удаление строк
  • NEW — удаление всей программы
  • RENUM — перенумерация строк
  • AUTO — ввод программы с автонумерацией строк
  • BSAVE, BLOAD — запись/чтение блока памяти на магнитную ленту и с неё
  • MONIT, SYSTEM — выход из Бейсика в системный монитор

Операторы языка:

BEEP    CALL    CIRCLE  CLEAR   CLOSE   CLS     COLOR
DATA    DEF     DEF FN  DEF USR DIM     DRAW    END
FOR     GOSUB   GOTO    IF      INPUT   KEY     LET
LINE    LOCATE  LPRINT  ON      OPEN    OUT     NEXT
PAINT   POKE    PRESET  PRINT   PSET    READ    REM
RESTORE RETURN  SCREEN  STOP    TROFF   TRON

Есть возможность при вводе сокращать операторы до трёх символов (например: CIRCLE можно сократить до CI), а некоторые, первые два символа которых не совпадают ни с одним другим оператором — до двух (POKE — PO). Команду PRINT можно заменять знаком ?. Также есть возможность использовать цепочную конструкцию IF — THEN — ELSE IF, пользуясь при этом сокращениями TH, EL и ELIF. При этом максимальная длина одной строки программы ограничивается 254 символами.

Функции:

SQR     SIN     COS     TAN     ATN     PI      EXP     LOG
ABS     FIX     INT     SGN     RND     FRE   
CINT    CSNG    CDBL
PEEK    INP
BIN¤    OCT¤    HEX¤    CHR¤    ASC     LEN     STRING¤ INKEY¤
STR¤    VAL     MID¤
CSRLIN  POS     LPOS    EOF
POINT

Бейсик Вильнюс включает в себя возможности вызова подпрограмм в машинном коде. Для этого используется конструкция DEF USR. Машинный код может загружаться командой BLOAD либо формироваться оператором POKE.

Среди недостатков этого бейсика — отсутствие ряда почти необходимых команд, например, INSTR для поиска вхождения строки в строку, DEC для перевода 16-й числа в 10-е, средств для работы с ошибками во время исполнения программы, команды для посимвольного ввода из файла.

Варианты

Бейсик Вильнюс для БК-0010/БК-0011 занимает 24 КБ ПЗУ. В целях экономии памяти тексты ошибок не были зашиты в ПЗУ; ошибки выдаются не текстом, а кодами, например: «Ошибка 2 в строке 10».

Для БК-0010 с Фокалом в ПЗУ была создана упрощённая версия вильнюсского Бейсика размером всего 9 КБ, загружаемая в ОЗУ с магнитофона (первый вариант — в 1985 г, второй — в 1987-м). Она не поддерживала разные типы чисел (только вещественные одинарной точности), а также часть операторов и функций основной версии, но базовый набор возможностей Бейсика был реализован. При этом версия 87-го года допускала использование нескольких операторов в одной строке, а также сокращённое до одной или нескольких первых букв написание операторов. Кроме того, использование вещественной арифметики одинарной точности ускоряло работу с вещественными числами в несколько раз относительно версии для БК-0010-01 в ПЗУ, что делало версию в ОЗУ действительно чрезвычайно быстрой реализацией Бейсика при работе с переменными этого типа.

Существует три варианта Бейсик Вильнюс для УКНЦ — версия в кассете ПЗУ занимает 24 КБ, версия для загрузки через сеть (сетевая) — 28 КБ, дисковая версия — 30 КБ. Дисковая и сетевая реализации отличаются наличием текстовых сообщений об ошибках. Последние варианты датируются сентябрём 1988 года.

Адаптация Бейсик Вильнюс для компьютера Немига по-видимому выполнена позже и уже в Белоруссии. Сам язык отличается наличием оператора PLAY, позволяющего проигрывать звуки и мелодии.

Интересные факты

Иллюстрация недостатков RND()
  • В Бейсик-Вильнюс использовался популярный в то время алгоритм генерации случайных чисел RANDU, и пользователями БК был замечен существенный недостаток алгоритма[1] — например, при отрисовке большого количества точек, координаты которых получены функцией RND(), было хорошо видно разделение точек по диагональным плоскостям.
  • Существенным недостатком такого транслятора был большой расход памяти: фактически программа занимала в 2 раза больше памяти, чем у классических интерпретаторов, поскольку в ОЗУ одновременно хранилась и исходная программа, и «скомпилированная», готовая для исполнения[источник не указан 998 дней]. Из-за этого максимальный размер программ на Бейсике как у БК-0010-01, так и у УКНЦ был очень скромным — соответственно около 7 (в режиме «расширенной памяти» — около 13) и 8,5 Кбайт. Хотя была возможность отказаться от исходного текста и использовать только «скомпилированную» версию программы.
  • Особенностью Вильнюсского Бейсика на БК-0010-01 (как и прототипа — Бейсика MSX) было принудительное использование вещественных вычислений двойной точности (даже для переменных одинарной точности)[источник не указан 998 дней], что очень сильно влияло на производительность. Если при работе с целыми числами Бейсик БК показывал выдающуюся скорость, во много раз превышавшую показатели Бейсика на других подобных ПК, то при обработке вещественных чисел, в том числе одинарной точности, он нередко уступал даже классическим интерпретаторам с достаточно быстрой вещественной арифметикой. В то же время, упрощённая версия Вильнюсского Бейсика, загружаемая в ОЗУ, обладала в 2-3 раза большей скоростью вычислений (а при вычислении сложных функций — до 10 раз большей!), поскольку в ней использовалась только одинарная точность и, по-видимому, другие — более быстрые — алгоритмы вещественных вычислений.
  • Скорость работы с графикой в Бейсике БК (рисование линий, окружностей, закраска и т. д.) была сравнительно невысокой, из-за чего, несмотря на наличие быстрого «полукомпилятора», в графических тестах на Бейсике БК уступал многим ПК, аналогичным по цене и скорости процессора[2].
  • На всех базовых советских учебных ПК — БК-0010-01, УКНЦ и «Корвете» — использовались версии Бейсика, аналогичные MSX Basic, что упрощало преподавание информатики, перенос программ и т. д. Причём наиболее близкой к оригиналу была версия для «Корвета», практически не отличавшаяся от MSX (и даже существенно превосходившая компьютеры MSX по скорости сложных вычислений), а в Вильнюсском Бейсике, к сожалению из-за ограниченной ОЗУ БК 0010, были упомянутые ограничения — только один оператор в строке, отсутствие операторов задания типа переменных вроде DEFINT и некоторые другие.

Литература

Примечания

  1. М. Максимов. Случайны ли случайные числа? — Журнал «Наука и жизнь», № 10, 1986.
  2. https://www.youtube.com/watch?v=UJZpngjvCD8&list=PLiWLTRSJ9VmvBQHIEDEX6q8urb6Eqikwd&index=15 УКНЦ: дополнение к тесту неигровой графики ПК 80-х годов

Ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

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

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии