BASIC09

редактировать
BASIC09
Разработано Motorola
Developer Microware
Впервые появилось1980; 40 лет назад (1980 г.)
Стабильный выпуск 1.1.0 / 5 января 2003 г.; 17 лет назад (05.01.2003)

BASIC09 - это структурированный диалект языка программирования BASIC, разработанный Microware от имени Motorola для новый на тот момент Motorola 6809 CPU и выпущенный в феврале 1980 года. Он в основном используется с OS-9 операционной системой, выпущенной в 1979 году. Microware также выпустила версию для OS-9 / 68k на 68000 как Microware BASIC .

В отличие от типичных BASIC того времени, BASIC09 включает многопроходный компилятор, который создает компактный байт-код, известный как I-код . I-код заменяет ряд структур данных, имеющихся в других BASIC, прямыми указателями на код и значения, повышая производительность. Пользователи могут дополнительно компилировать код с помощью команды PACK, после чего он может быть вызван непосредственно OS-9 и работать как собственный код. В случае PACKed кода используется урезанная версия BASIC09 runtime system, Runb, что дополнительно сокращает объем памяти и время загрузки.

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

Содержание
  • 1 Синтаксис
    • 1.1 Организация программы
    • 1.2 Структурированное программирование
    • 1.3 Типы данных
  • 2 Время выполнения
    • 2.1 Редактирование
    • 2.2 Компилятор
    • 2.3 Облегченная среда выполнения
  • 3 Важные особенности
  • 4 См. Также
  • 5 Примечания
  • 6 Ссылки
    • 6.1 Цитаты
    • 6.2 Библиография
  • 7 Внешние ссылки
Синтаксис

Программная организация

Ключевым отличием BASIC09 от традиционных BASIC того времени, таких как канонический Microsoft BASIC, является добавление структуры PROCEDURE/ END, которая созданы отдельно исполняемые блоки кода. Код в ПРОЦЕДУРЕимел больше общего с полными программами в других BASIC, включая переменные, которые были локальными для кода и выполнялись автономно. PROCEDUREбыли вызваны с помощью команды RUNи могли включать переменные для семантики вызова функций; например, RUN add (4,7)вызывает процедуру с именем add, которая принимает два параметра. Параметры были импортированы в процедуру с использованием ключевого слова PARAMETER, в этом примере PARAMETER a, b:

PROCEDURE add PARAMETER a, b PRINT a + b END

A side- Эффект от использования именованных процедур состоит в том, что результирующее рабочее пространство памяти фактически является собственным пространством имен. В этом отношении система BASIC09 представляется пользователю каталогом вызываемых программ. Это контрастирует с типичными BASIC, где в данный момент времени доступна только одна программа, а построение более крупных программ, вызывающих библиотечный код, обычно требует, чтобы исходный код был скопирован и вставлен между отдельными программами. В BASIC09 пользователь может ЗАГРУЗИТЬпроцедуры по имени в рабочую область, а затем вызывать их из собственного кода для создания более крупных программ из отдельно хранимых процедур.

В дополнение к коду в рабочей области, если программа вызвала RUNс именем процедуры, которое не удалось найти, она будет искать файл на диске с тем же именем и запускать его. Это работало не только с кодом BASIC09, но и с любой другой исполняемой программой, включая файлы машинного языка. Это означало, что BASIC09 мог легко вызывать системные подпрограммы.

Помимо RUN, другие общие команды BASIC также использовали имена. Например, LIST bobраспечатает исходный код («список») процедуры с именем «bob», а LIST *распечатает все процедуры, находящиеся в настоящее время в памяти. Красиво напечатанный вывод из LISTможет быть перенаправлен в файл или на принтер с нотацией, подобной оболочке, например СПИСОК bob>/ p. Также можно было бы СОХРАНИТЬи ЗАГРУЗИТЬпроцедуры из хранилища.

Структурированное программирование

В дополнение к организационным свойствам ПРОЦЕДУРА, BASIC09 также включал ряд расширений к операторам управления потоком, найденным в BASIC, для обеспечения большей структуры. Например, оператор IFможет использоваться в традиционном формате IF... THENв одной строке или в структурированном мульти формат строки:

IF x>10 THEN PRINT "больше 10" ELSE PRINT "меньше 10" ENDIF

FOR / NEXTциклы естественно имеют структурированный формат, как NEXTможно разместить в любой строке, но BASIC09 также добавил WHILE / ENDWHILEи REPEAT / UNTILдля дополнительной ясности при работе с неиндексированными циклами. Он также включал центральный выход LOOP / ENDLOOP, который использовал оператор EXITIFдля тестирования в любом месте тела цикла.

Типы данных

BASIC09 включены несколько встроенных типов данных. В дополнение к традиционным строковым (STRING) и 40-битным типам с плавающей запятой (REAL), используемым в большинстве BASIC того времени, он также включал 16-битный знаковый INTEGER, 8-битный беззнаковый BYTE и логический тип BOOLEAN. Типы BOOLEAN не были упакованы в байты, один BOOLEAN использовал весь 8-битный байт для хранения одного значения. В языке предусмотрены отдельные побайтные логические операторы для побитовых операций с байтами и целыми числами. В отличие от других BASIC, которые также работали с другими базовыми типами, BASIC09 не «украшал» имя переменной, чтобы указать тип, а вместо этого использовал DIMдля определений; например, DIM a, b: BOOLEANдля объявления двух переменных BOOLEAN или DIM c (5): INTEGERдля массива из пяти INTEGER.

Кроме того, BASIC09 включал ключевое слово TYPE, которое позволяло определять составные типы, при этом каждый «элемент» перечислялся в одной строке, разделенной точкой с запятой. Например:

TYPE employee_record = name: STRING; number (2): INTEGER; ранее: BOOLEAN

определяет тип записи сотрудника с именем employee_recordс тремя элементами, имя, номери бывший. Тип employee_record теперь может использоваться в определении, как и любой другой тип, например, DIM employee (100): employee_record, который определяет массив из 100 employee_record. Доступ к элементам в коде осуществляется с использованием точечной нотации, например, employee (50).name = "Bob".

Runtime

Editing

Номера строк использовались в большинстве BASIC диалекты прежде всего как способ поддержки редактора. Пользователи могли редактировать определенные строки кода, набирая номер, а текст после него либо добавлял, либо заменял строки, уже находящиеся в памяти. Поскольку каждая строка кода имела номер, это также делало их подходящими для указания цели GOTOили GOSUBпо сравнению с другими языками, такими как FORTRAN, где Для этого использовалась отдельная «метка линии».

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

Обратите внимание, что язык чувствителен к регистру для значений, предоставленных пользователем, таких как процедура и имена переменных, но не для ключевых слов. Ключевые слова, набранные в редакторе в нижнем регистре, будут отображаться в верхнем регистре, когда программа LISTed. BASIC09 допускает использование нескольких операторов в одной строке кода, но использует \ в качестве разделителя вместо :, используемого в большинстве диалектов. Это связано с тем, что он использовал двоеточие в операторе присваивания : =, который в дополнение к обычному =. :=был идентичен по действию =, но имел различие между присваиваниями и сравнения более очевидны.

Компилятор

Внутренний многопроходный компилятор преобразует исходный код BASIC09 в токенизированный, оптимизированный, байт-код, называемый I-кодом. I-код отличается от более традиционного подхода к токенизации, встречающегося в большинстве BASIC, тем, что ряд элементов помещался непосредственно в память вместо использования ссылок, которые затем нужно было искать.

Например, в MS на основе интерпретаторам, ссылка на переменную в коде остается в строковом формате; переменная VALбудет представлена ​​в памяти тремя буквами VAL. Во время выполнения, когда эта переменная встречается в коде, интерпретатор должен найти эту строку в таблице переменных, найти связанный адрес хранения в памяти, а затем, наконец, прочитать значение, хранящееся в этом месте. Таблица обычно строится таким образом, что значение следует за именем, чтобы сэкономить время во время окончательного поиска.

Напротив, в I-коде адрес переменной определяется заранее, а ссылка в коде заменяется по этому адресу. Это позволяет избежать поиска во время выполнения по таблице переменных. Другие оптимизации включают в себя отдельную процедуру FOR / NEXT, используемую, когда индексной переменной является INTEGER, и отдельные математические библиотеки INTEGER и REAL.

Для повышения производительности BASIC09 также включает PACKкоманда, которая взяла имя процедуры и вернула оптимизированную версию. Некоторые из этих оптимизаций включали удаление инструкций, не связанных с кодированием, таких как комментарии кода, и замену константных выражений на одно значение. Например, PACKраспознает, что LET x = x + SQR (100) / 2содержит только константы справа, и заменяет его кодом x = x + 5, который требует только одной операции во время выполнения, сложения, удаления деления и извлечения квадратного корня. PACKсократил объем памяти, занимаемый процедурой, и повысил производительность примерно на 10–30%.

Облегченная среда выполнения

Хотя обычно в среде BASIC09 запускались программы, как и в других BASIC, BASIC09 также поставлялся с отдельной версией кода только для запуска, известной как Runb. Runb удалил из системы возможности редактирования и отладки, и в результате его размер был примерно вдвое меньше, чем у BASIC09.

Целью Runb было в первую очередь запускать упакованные модули при вызове из других программ. Это означало, что если пользователь ввел имя модуля BASIC09 в командной строке OS / 9 и этот модуль был помечен как PACKed, он открывается и запускается Runb вместо BASIC09. Это сокращает объем памяти и сокращает время загрузки.

Важные особенности
  • разумно структурированные положения потока управления (например, номера строк в основном нужны для вычисляемого GOTO , поскольку В BASIC09 не было оператора switch / case или вычисленного объявления структуры GOSUB )
  • (редко в любом варианте BASIC; более распространено в более поздних реализациях BASIC)
  • внутреннее целое число и Логические типы данных
  • более двух значащих символов в именах переменных (некоторые BASIC того времени допускали только один, многие варианты Microsoft BASIC допускали только два)
  • процедуры с локальными переменными ( действительно, все переменные в BASIC09 являются локальными для процедур) и параметр, передающий по ссылке
  • разумный отладчик (его единственный существенный недостаток заключался в том, что нельзя было проверять содержимое полей в структурах)
  • способ взаимодействия с кодом машинного языка, который может передавать параметры с помощью вызывающей последовательности BASIC09
  • автоматическая распечатка исходного кода, которая обеспечивает стандартную компоновку и позволяет избежать ужасного беспорядка, который был обычным явлением программы любого размера в интерпретируемых БЕЙСИКах того времени. Обычно программисты собирают вместе как можно больше строк, чтобы избежать накладных расходов на память для номеров строк - это не проблема в BASIC09
См. Также
  • COMAL был еще одним языком, подобным BASIC, со структурными конструкциями программирования
Примечания
Ссылки

Цитирования

Библиография

Внешние ссылки
  1. ^Реклама: BASIC09 имеет двойную личность., 68 Micro Journal, Volume 04 Number 01, Опубликовано: январь 1982 г.
  2. ^Ранняя история OS-9, выберите контент из 68 Micro Journal, декабрь 1980 г., Microware слегка меняет свой 6809 г. н.э. Basic09 теперь называется Microware «Языковая система программирования Basic09», а не Motorola Basic09.
  3. ^группы новостей: comp.os.os9, От: Колин МакКей, Тема: Re: OS / 2 против W95 и OS-9, Дата: 1995/04/12, сводка: Выдержки из истории Microware для пользователей OS-9 Информационный бюллетень группы, ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ ПО НОВЫМ ПРОДУКТАМ МИКРОПРОГРАММНОГО ОБЕСПЕЧЕНИЯ Апрель 1979 г., Благодарим вас за запрос о нашей линейке аппаратных и программных продуктов семейства 6800. Мы находимся в процессе внедрения нового программного обеспечения, поэтому наш каталог за 1979 год не будет готов еще некоторое время. Тем временем мы представляем информацию о новых продуктах в этом информационном бюллетене. 6809 ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ. Компания Motorola заключила контракт с Microware на производство самого лучшего программного обеспечения для 6809. Новое программное обеспечение, которое мы подготовили для Motorola, включает новую языковую систему BASIC и операционную систему. Это программное обеспечение скоро будет доступно в компаниях Motorola и Microware.
  4. ^Об авторе, Терри Риттер,.. Программное обеспечение... Ранее: штатный инженер, Motorola MOS Division, Microcomputer Systems Design Group, июль 1976 - январь 1981... Архитектор структурированного языка BASIC для 6809. Инженер-программист, 1979-81.... Автор и руководитель проекта - BASIC09, 1978-80, проект на структурированном языке BASIC с операционной системой OS9 и соответствующими спецификациями.
Последняя правка сделана 2021-05-11 14:53:21
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте