MacBASIC
Последнее изменение этой страницы: 11:58, 2 июня 2016.
Спроектировано | Donn Denmann, Marianne Hsiung, Larry Kenyon, Bryan Stearns |
---|---|
Первый появившийся | 1982 |
MacBASIC — версия языка BASIC для Apple Inc., являющаяся частью программного обеспечения для платформы Macintosh начиная с 1982 года, разработанная Donn Denmann, Marianne Hsiung, Larry Kenyon и Bryan Stearns. Бета версия была выпущена в 1985 году и получила популярность в Дартмутском колледже информатики. Но поддержка данной версии интерпретатора BASIC была прекращена из-за сделки с Microsoft. Хотя MacBASIC был продуктом Apple, он был в обиходе у пользователей несколько лет и впоследствии пользовательская аудитория потеряла к нему интерес из -за отсутствия поддержки 32-разрядную компьютерную архитектуру. MacBASIC был всеобъемлющим языком программирования и полностью поддерживал интерактивную среду программирования при разработке прикладных программ на компьютере Macintosh 128K. Язык содержал в себе циклы структурного управления, определяемые пользователем функции, графику, и доступ к инструментарию Macintosh Toolbox.
Содержание
Описание
Общее
Язык Macintosh BASIC является полу-компилируемым. Когда программист набирает новую строку кода, она немедленно передается определенной части системы, которая называется Б-генератор кода. Этот генератор компилирует строку кода и обновляет программные структуры данных. После компиляции система проверяет синтаксис строки кода и предоставляет немедленную обратную связь об её лексической корректности. Затем, во время исполнения, система делает ещё один быстрый просмотр программы (примерно 2 секунды на 50-килобайтный файл) с целью проверки целостности управляющих структур. В случае, если нет фатальных ошибок, программа начинает исполняться. Высокая производительность BASIC объясняется тем, что исполняется компактный Б-код.
Macintosh BASIC позволяет программисту как разрабатывать, так и запускать любое количество программ одновременно. Под каждую программу операционной системой выделяется свое процессорное время (по умолчанию это 1/60 секунды, однако интервал может быть задан программистом). Когда время работы одной программы исчерпано ОС переходит к следующей.
Типы и переменные
Имена переменных в Macintosh BASIC могут быть любой длины, и все символы в имени являются значимыми. Первый символ должен быть алфавитно-цифровым; остальные могут быть почти всем, что вы можете ввести с клавиатуры. Это включает в себя весь набор кодировки ASCII плюс не латинские и другие специальные символы. Исключение составляют лишь арифметические символы и разделители (запятая, точка с запятой, двоеточие и пробелы).
Macintosh BASIC поддерживает массивы переменных для всех восьми типов данных и подтипов, которые будут названы ниже. Массивы могут иметь любое количество измерений, и каждое измерение может иметь до 32767 элементов. Все массивы должны быть объявлены перед использованием. При объявлении программист может указать диапазоны для элементов чисел. Таким образом, вы можете напечатать:
DIM YEAR%(1900 TO 1986)
создать 87 - элементный целочисленный (% обозначает целочисленный тип) массив, у которого первый индекс равен 1900, а последний - 1986. Вы также можете указать диапазоны для отдельных размеров, как сделано в следующем примере:
DIM NAME$(10 TO 75, 165 TO 300)
Есть три основных типа данных в языке: строки, изображения и числовой тип.
- Строки представлены довольно обыкновенно; литералы заключены в одинарные либо двойные кавычки, а имена переменных оканчиваются на символ доллара (
$
) как и в других языках BASIC семейства.
- Вы можете создать переменную типа данных изображение либо, набирая форму из графических примитивов языка, либо создав всю картину в графическом приложении (таком как Mac Paint) и передав его в BASIC через буфер обмена. Для рисования графических примитивов предусмотрен набор вспомогательных команд. Можно назначать форму для переменной изображения. Имя переменной такого типа должно заканчиваться символом
@
.
- Числовой тип данных представлен в языке шестью подтипами: один логический, два целочисленных и три вещественных. В дополнение к пяти стандартным арифметическим операциям (
+, -, *, /, "
), Macintosh BASIC включаетDIV
для целочисленного деления иMOD
для деления с модулю (которое реализовано как арифметический остаток от целочисленного деления). Также стандартными являются операторы сравнения (<, =, >, < >, > <
) и операторы логические (AND, OR, and NOT
). Для конкатенации строк предусмотрен оператор&
.
Macintosh BASIC имеет обычный набор арифметических, тригонометрических и строковых функций, в том числе DEF FN
(определяемые пользователем функции) для всех типов чисел и строк. Таблица 2 описывает многие из функций, которых нет в большинстве других языков семейства BASIC или они являются уникальными для Macintosh BASIC. Термин "интерактивный", появляющийся в нескольких описаниях, относится к графическим объектам (меню, кнопки, циферблаты и др.). Вы можете скомандовать им появиться на экране и можете манипулировать ими с помощью мыши.
Управляющие структуры
Большинство конструкций языка, управляющих потоком выполнения принимают форму управляющих структур. В языке присутствует команда GOTO
, однако вам не следует её использовать никогда.
Помимо знакомых конструкций FOR / NEXT
и DO / EXIT / LOOP
, в которой все выражения между DO
и LOOP
повторяются бесконечно и только переход к EXIT
позволяет выйти из цикла, в данной разновидности BASIC-а имеются такие структуры, которые отличаются от аналогичных в 1982 ANSI (American National Standards Institute) BASIC стандарте.
Многострочный IF / THEN / ELSE / ENDIF
дает возможность исполнять столько выражений, сколько вам угодно, в соответствии с истинностью или ложностью условия.
IF DAY.TEMP > HOT THEN
CLOTHES$ = SWIM.STUFF$
GOSUB BEACH:
ELSE CLOTHES$ = WALK.STUFF$
GOSUB CITY:
ENDIF
Ограниченная конструкция ON...GOSUB
в описываемом диалекте BASIC-а была заменена на более гибкую SELECT CASE / ENDCASE
. Она позволяет программе передавать управление некоторому множеству команд на основании значения указанной переменной. Допустимо задавать множество инструкций для одной ветви исполнения.
SELECT CASE PARTY$
CASE "REPUBLICAN"
CALL REPUBLICAN.PRIMARY.BALLOT
CASE "COMMUNIST"
CALL MILITIA
CASE "DEMOCRAT", "TORY", INDEPENDENT$
GOSUB FURTHER.CHOICE:
CALL GENERAL.PARTY.BALLOT
CASE LEFT$(PARTY$, 3) = "SEP"
CALL SEPARITIST.PRIMARY.BALLOT
CASE ELSE
CALL GEINERAL.PRIMARY.BALLOT
ENDSELECT
Тот же самый SELECT CASE
, но с числовыми значениями:
SELECT CASE AGE
CASE 2, 4, 5
GOSUB PRESCHOOL:
CASE 6 TO 12
GOSUB GRAMMAR.SCHOOL:
CASE 15, 18 TO 35, VAL (OLD$)
CALL CHECK.DEMOORAPHICS
CASE > 70
GOSUB MIGHT.BE.RETIRED:
ENDSELECT
В языке представлено несколько конструкций, прерывающих обработку. Все они построены на использовании инструкции WHEN
в паре с ENDWHEN
. Такие блоки обработки позволяют программисту задать действия, предпринимаемые при срабатывании в коде некоторых событий. В качестве последних можно использовать: нажатие на клавишу на клавиатуре, действие мышью, появление ошибки и другие.
WHEN ERR
CALL ERROR.CHECK
GOSUB SECOND.CHANCE:
ENDWHEN
WHEN KBD
PRINT "WHICH MENU DO YOU NEED?"
GOSUB MENU.CHOICE:
CALL MENUS
ENDWHEN
Использование подпрограмм в Macintosh BASIC аналогично другим языкам из того же семейства (за исключением того факта, что язык использует GOSUB
метки). Ко всему прочему имеется оператор CALL
, который позволяет выполнять целую программу как подпрограмму с передачей параметров. После того как вызванная программа отработает, она возвращает управление той команде, которая следует за вызвавшим оператором CALL
.
Графика
В языке Macintosh BASIC представлены команды для рисования как статичной так и анимированной графики для экранов 512 на 342 пикселей (скорее всего не является ограничением языка, прим. переводчика). Создание графического примитива начинается с вызова команды PLOT
, либо для конкретных примитивов можно вызвать RECT
(для рисования прямоугольника), ROUNDRECT
(прямоугольник со скругленными углами), or OVAL
(для рисования окружностей). Чтобы задать толщину линии рисования необходимо предварительно вызвать команду PENSIZE
с нужным параметром. Созданные примитивы могут быть визуализированы с рамкой с помощью FRAME
, закрашены применением команды PAINT
с предзаданными параметрами закраски или паттерном (команда SET PATTERN
), дополнены до последнего появления (INVERT
) или стерты (команда ERASE
). Различные примитивы можно затем комбинировать для получения цельного изображения и сохранять в переменную типа "изображение", для чего используется команда RECORD PICTURE
(обратная команда для восстановления изображения из переменной - это DRAW PICTURE
). Для анимаций существует такие команды как ROTATE, SCALE, and ANIMATE
, которые непосредственно двигают изображение на экране. Вся графика появляется на специальном выводном окне, поэтому можно одновременно отлаживать программу и смотреть на её результат.
Производительность
Для исследования производительности различных структур языка выбрано пять программ. Их листинг приведен ниже. Шестая программа представляет собой реализацию алгоритма "Решето Эратосфена" для поиска простых чисел.
1) Пустые GOSUBs
print time$; ' at start'
for x=1 to 5000
gosub foo:
next x
print time$; ' when done'
end
foo: return
2) Пустой FOR / NEXT
цикл
! Loops
Print "Start at ";time$
FOR I=1 TO 5000
NEXT I
PRINT "Done at ";time$
3) Взятие среза строки
print time$;' at start'
b$='Apple Computer Inc'
for x=1 to 5000
a$=mid$(b$,6,7)
next x
print time$;' when done'
print a$
end
4) Вещественное деление (на 3)
print time$;' at start'
for x=1 to 5000
y=x / 3
next x
print time$;' when done'
5) Целочисленное деление (на 3)
print time$;' at start'
for x=1 to 5000
y=x div 3
next x
print time$,' when done'
6) Решето Эратосфена (1899 простых чисел)
! Sieve
s %= 8190
dim f1ags%(s% + 1)
print " start "; time$
count% = 0
for i% = 0 to s%
f1ags%(i%) = 1
next i%
for i% = 0 to s%
if flags%(i%) = 0 then goto 250
prime% = i% + i% + 3
k% = i% + prime%
200 if k% > s% then goto 240
f1ags%(k%) = 0
k% = k% + prime%
goto 200
240 count% = count% + 1
250 next i%
print ' done '; time$
print count% ;' primes'
Тест | Время (Секунды) |
---|---|
Пустые GOSUBs | 3.0 |
Пустой FOR / NEXT цикл | 1.5 |
Взятие среза строки | 9.0 |
Вещественное деление (на 3) | 18.0 |
Целочисленное деление (на 3) | 3.0 |
Решето Эратосфена (1899 простых чисел) | 31.5 |
ISSN 2542-0356
Следуй за Полисом
Оставайся в курсе последних событий
Лицензия
Если не указано иное, содержание этой страницы доступно по лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» 4.0, а примеры кода – по лицензии Apache 2.0. Подробнее см. Условия использования.