СУПЕР БАЗОВЫЙ - SUPER BASIC
Разработчик | Дэн Льюис и Фрэнк Брэкер, Тимшаре |
---|---|
Впервые появился | 1968 |
Под влиянием | |
Дартмутский ОСНОВНОЙ, JOSS, CAL | |
Под влиянием | |
БАЗОВЫЙ-ПЛЮС |
СУПЕР БАЗОВЫЙиногда SBASIC короче говоря, это продвинутый диалект BASIC язык программирования предлагается на Тимшаре с SDS 940 системы, начиная с 1968 года и доступные вплоть до 1970-х годов.
Словно Дартмутский ОСНОВНОЙ он был основан, SUPER BASIC был компилировать и идти язык, в отличие от переводчик. В дополнение к предложению большинства команд и функций из Dartmouth BASIC версии 4, включая математические команды для матриц, SUPER BASIC также включает ряд функций из основополагающих JOSS язык разработан в Rand Corporation,[1] через версию Tymshare, CAL, и добавил множество новых функций, сложные числа как встроенный тип, и двойная точность поддержка.
История
Оригинал Дартмутский ОСНОВНОЙ был выпущен в 1964 году, но в то время был в основном экспериментальным. Он претерпел несколько изменений, прежде чем стал действительно полезным в четвертом издании, когда его перенесли на GE 635 machine и был опубликован в 1968 году. Дартмут специально поместил базовый проект в общественное достояние, чтобы любой мог перенести его на свои платформы и назвать его БАЗОВЫМ. Его распространению способствовали неустанные усилия авторов по его продвижению. Однако, поскольку код был разработан для работы на DTSS операционной системы, потребовалось некоторое портирование для ее запуска в производственных системах. Это привело к увеличению количества версий с незначительными отличиями.[2]
Tymshare была образована в рамках Калифорнийский университет в Беркли, изначально сдавая время на компьютерах Университета в нерабочее время. Оригинальный BASIC Tymshare, просто Tymshare BASIC, был основан на исходный код "откуда-нибудь" в университете,[3] что Дэн Льюис начал улучшать. Фрэнк Брахер добавил процедуры для ввода / вывода файлов (I / O), что сделало их гораздо более практичными, чем исходный код Дартмута, основанный исключительно на ДАННЫЕ
операторы, встроенные в программу. Рабочий процесс Дартмута был лента на основе поэтому загрузка и сохранение отдельных файлов было непрактичным, и прямой ввод-вывод не рассматривался до более поздних версий. Код ввода-вывода Bracher изначально был разработан для Tymshare СУПЕР ФОРТРАН предложение.[2]
Одной из часто упоминаемых особенностей системы была документация, написанная Кэролайн Дил. Пособия написаны в разговорном стиле.[3]
Tymshare поддерживал SUPER BASIC в течение 1970-х годов, но по мере того, как рынок арендованных услуг программирования таймшеров истощался, система была переведена на техническое обслуживание, и Льюис и Брэкер ушли, чтобы проводить SUPER BASIC консультации для тех компаний, которые все еще использовали ее. Обслуживание в Tymshare перешло в основном к Уолтеру Мэйну.[3]
Tymshare подала заявку на регистрацию товарного знака на SUPER BASIC 7 января 1970 г. и обновила его 17 октября 1977 г., который стал собственностью Макдоннелл Дуглас в 1984 году, когда компания приобрела Tymshare.[3]
Язык
Прямой и непрямой режим
Как и большинство BASIC-систем того времени, SUPER BASIC имела единственную командная строка редактор, который работал и как интерактивный язык, и как редактор программ. Команды, которые были введены без номера строки, выполнялись немедленно, что они называли "прямой режим ".[а] Если к той же строке был добавлен префикс с номером строки, он вместо этого копировался в область хранения программного кода, известную как «косвенный режим». Новые строки добавлялись в программу, если номер строки был уникальным, заменял существующие строки тем же номером или удалялся из программы, если существующий номер строки был введен без какого-либо кода после него.[4]
Операторы программы
Номера строк от 0 до 999999.[5] В УДАЛИТЬ
(или краткая форма DEL
) можно использовать для удаления диапазона строк, используя типичные СПИСОК
обозначение, например, УДАЛИТЬ 5,10-50
.[4] В ВОЙТИ
команда запустила автоматическую систему нумерации строк. Требовалось два необязательных параметра, номер начальной строки и шаг, разделенные знаком ОТ
. Предполагалось, что начальный номер равен нулю, если он не указан, а шаг равен 10. Например, ВОЙТИ
произведет 0,10,20, ..., ВОЙТИ 5
будет производить 0,5,10, ..., и ВВЕДИТЕ 10 НА 10
произведет 10,20,30 ...[6] НОМЕР
взял три параметра, новый номер начальной строки, диапазон строк для перенумерования (например, 20-100) и шаг.[7]
Хотя встроенный редактор загружал и сохранял только строки в самой программе, пользователь мог редактировать полученный текстовый файл, чтобы добавить дополнительные команды, которые будут выполняться в прямом режиме. Типичным примером было редактирование программы и добавление БЕГАТЬ
на отдельной строке в конце файла. При загрузке система увидит БЕГАТЬ
и сразу же скомпилировать и запустить программу при загрузке.[8] Это необычно для систем BASIC, хотя обычно использовалось в JOSS.
Заявления
В соответствии с общим Дартмутский ОСНОВНОЙ концепция SUPER BASIC была компилировать и идти система, которая скомпилировала исходный код при запуске программы. В SUPER BASIC для этого было две команды, типичная БЕГАТЬ
встречается в большинстве БЕЙСИКОВ, а также НАЧНИТЕ
который сделал то же самое.[9] Замечания могут быть размещены где угодно, используя !
.[10]
SUPER BASIC расширил ДЛЯ
заявление несколькими способами. Незначительное изменение должно было позволить ОТ
на месте ШАГ
, и позволил разместить шаг в конце, как в большинстве BASIC, или в середине, как в JOSS и других языках. Таким образом ДЛЯя=1К10ОТ2
и ДЛЯя=1ОТ2К10
оба действительны.[11] Кроме того, SUPER BASIC предоставил альтернативные формы определения диапазона, используя В ТО ВРЕМЯ КАК
и ДО ТЕХ ПОР
, тогда как в большинстве других языков для них используются полностью отдельные циклические структуры. Например, ДЛЯИкс=1В ТО ВРЕМЯ КАКИкс<Y
будет продолжаться, пока X СЛЕДУЮЩИЙ I, J
,[12] хотя он не включал функцию более поздней версии MS, в которой индексную переменную можно было полностью исключить. Наконец, в стиле JOSS можно заменить типичный спецификатор диапазона От 1 до 10
с явным списком значений, ДЛЯя=1,4,5,6,10
.[13]
Более серьезным изменением по сравнению с моделью JOSS стала концепция «модификаторов операторов», которая позволяла ЕСЛИ
или ДЛЯ
помещается после контролируемого заявления. Например, ЕСЛИИкс=5ТОГДАРАСПЕЧАТАТЬ"ЭТО"
эквивалентно РАСПЕЧАТАТЬ"ЭТО"ЕСЛИИкс=5
. Это может упростить понимание некоторых часто встречающихся вариантов использования.[14] Он также включал синтаксический сахар ЕСЛИ
который был ЕСЛИ
с противоположным смыслом; например, РАСПЕЧАТАТЬ«ЭТО НЕ ПЯТЬ»ЕСЛИИкс=5
. В этих случаях можно также использовать цикл, который упрощает реализацию одиночных циклов с одним оператором, например РАСПЕЧАТАТЬИксДЛЯИкс=1К10
.[15] Можно также использовать "голый" В ТО ВРЕМЯ КАК
или ДО ТЕХ ПОР
без for, Икс=Икс+2ДО ТЕХ ПОРИкс>10
. Модификаторы также могут быть объединены, РАСПЕЧАТАТЬ"ДА"ЕСЛИА=BЕСЛИN=0
.[16]
Выражения
Переменные
Имена переменных могут состоять из одной или двух букв или одной буквы и цифры. SUPER BASIC не требовал ввода переменных, переменная могла содержать число в одной точке, а строка с другой стороны, побочный эффект от способа их хранения. Это потребовало от системы проверки типа переменной во время выполнения ВВОД
и РАСПЕЧАТАТЬ
например, что снизило производительность. Эту проблему можно решить, явно объявив тип переменной с помощью различных команд.[17]
В большинстве диалектов BASIC переменные создаются «на лету», когда они встречаются в коде, и обычно устанавливаются в ноль (или пустую строку) при создании. Это может привести к проблемам, когда переменные должны быть установлены предыдущим кодом, который не вызывается должным образом, но во время выполнения может быть трудно узнать, является ли 0 неинициализированным значением или значением с совершенно допустимыми значениями 0. SUPER BASIC обратился к этому с VAR
команда. Были две основные формы, VAR = ZERO
что заставляет все неопределенные переменные автоматически получать нулевое значение при доступе, что является нормальным шаблоном для BASIC, и VAR = UNDEF
что вместо этого привело бы к возникновению ошибки «ПЕРЕМЕННАЯ НЕТ ЗНАЧЕНИЯ», когда ранее невидимая переменная использовалась таким образом, чтобы попытаться получить доступ к ее значению. Последний очень полезен в отладка сценарии, в которых нормальное поведение может скрыть тот факт, что переменная, используемая в вычислении, не была правильно инициализирована.[18]
Числовой
Если не указано иное, переменные хранились в 48-битном одинарная точность плавающая точка формат с точностью до одиннадцати цифр. Можно также явно определить переменную как РЕАЛЬНЫЙ А
, который был форматом одинарной точности. Это не рассматривалось в других BASIC, где какой-либо суффикс, например $
, указывал тип везде, где он встречался.[17]
При необходимости двойная точность формат с семнадцатью цифрами, хранящийся в трех 24-битных словах вместо двух, можно использовать, объявив переменную с ДВОЙНОЙ А, В
.[19] Существующее значение или выражение с одинарной точностью можно преобразовать в удвоение с помощью DBL (X)
функция. Например, можно заставить выражение оценивать с использованием двойной точности, используя DBL (10 + 20)
.[20]
Точно так же можно было объявить INTEGER A
для получения 24-битного целочисленного значения из одного слова.[17]
Более необычным дополнением стала прямая поддержка сложные числа. Они были настроены аналогично другим переменным, используя КОМПЛЕКС I, J
чтобы выделить два слота одинарной точности. При обнаружении в программах других операторов, таких как ВВОД
запускал альтернативные режимы, которые запрашивали два числа вместо одного, с аналогичными модификациями для ЧИТАТЬ
(используется с ДАННЫЕ
заявления), РАСПЕЧАТАТЬ
и другие. Одно комплексное число может быть создано из двух одиночных чисел с помощью CMPLX (X, Y)
функция, в то время как РЕАЛЬНЫЙ (I)
и IMAG (I)
извлекли реальную и мнимую части соответственно в одиночные игры. Также было предложено небольшое количество дополнительных служебных функций.[21]
Операторы и функции
Всего было семь основных математических операторов:[22]
↑
для экспонент - показатель преобразуется в 12-битное целое число*
для умножения/
для разделенияMOD
по модулю остаток от целочисленного деленияDIV
для целочисленного деления+
для дополнения-
для вычитания
Список математических функций SUPER BASIC был длиннее, чем у большинства BASIC, включая ряд обратные тригонометрические функции и логарифмы для базы 2 и 10.[22]
RND(Икс),возвращаетсяаслучайныйколичествос помощьюаисправленопоследовательность,мочьбытьзасеянныйс участиемRND(-1)АБС(N),абсолютныйценностьSQR(N)илиSQRT(N),квадраткореньГРЕХCOSTANКАК ВACOSATNилиЗАГАРATN/ЗАГАРс участиемдвапеременные,(у,Икс)вычисляету/ИксивозвращаетсяATNизэтоSINHСТОИМОСТЬТАНЬЖУРНАЛLGT/LOG10LOG2EXPEXP2INT,так каквБАЗОВЫЙ,всегдаусекаетвнизИСПРАВИТЬ,аналогичныйкINTнопростоусечениетодесятичная дробьКРУГЛЫЙ,раундытоценностькближайший,в отличиеINTКОМП(Икс,Y)СРАВНИТЬ,сочетаетавычитаниеиSGN,такеслиИкс>Y=1,Икс=Y=0,Икс<у+-1PDIF(Икс,Y)ПоложительныйРАЗНИЦА,возвращаетсяразница(Икс-Y)еслиИкс>Y,0в противном случае
SUPER BASIC также включает в себя ряд функций от JOSS:[23]
IP(),Целое числоЧасть,эквиваленткINTFP(),Дробная частьЧасть,такой жетак какИкс-INT(Икс)МАКСИМУМ(...)возвращаетсятомаксимумценностьотасписокиззаписиMIN(...)возвращаетсятоминимум
Массивы и матричная математика
Помимо базовой математики, SUPER BASIC, как и многие другие реализации BASIC, включал в себя функции массива. Можно было РАЗМЕР А (5,5)
чтобы сделать двумерный массив, и, как следствие способа их хранения, все необъявленные переменные фактически были DIM-DIM, чтобы иметь десять индексов, так что можно было Пусть B (5) = 20
без предварительного затемнения B.[24]
В отличие от других BASIC, SUPER BASIC позволял определять диапазон одного или обоих измерений, принимая 1, если не определено. Итак, A в приведенном выше примере имеет индексы 1..5, но можно также РАЗМЕР A (-5: 5,0: 5)
для создания массива с 11 индексами от -5 до +5 для X и от 0 до +5 для Y. Можно также использовать БАЗА
команда, чтобы изменить значение по умолчанию, поэтому БАЗА 0
, например, все измерения начинаются с 0.[24]
В дополнение к этим традиционным концепциям BASIC SUPER BASIC также включал большинство функций матричной математики, обнаруженных в более поздних версиях Dartmouth BASIC. Они были вызваны добавлением ключевого слова МАТ
перед другими командами. Например, МАТ А = В * С
умножает все элементы в массиве B на их соответствующие элементы в C, тогда как МАТ A = B * 5
умножает все элементы в B на 5. Были включены функции для общих матричных операций, таких как инверсия и идентичность.[25]
Двоичные математические и логические значения
Как и в большинстве версий BASIC, SUPER BASIC включает стандартный набор операторов сравнения, =
, <>
, >=
, <=
, >
и <
, а также логические операторы ИЛИ
, И
и НЕ
. К тому же, #
может использоваться как альтернативная форма <>
, форма, которая была найдена во многих реализациях BASIC в ту эпоху.[14] SUPER BASIC также добавил XOR
, EQV
для «эквивалентности» (равно) и IMP
для «импликации».[26]
К этому базовому набору SUPER BASIC также добавлены три новые команды для сравнения небольших различий между числами, это были >>
, <<
и =#
. Операторы «намного больше» и «гораздо меньше» сравнивают значения двух операндов, например, A и B в выражении А >> Б
. Если добавление B к A приводит к тому, что A остается неизменным после внутреннего округления, >>
вернул истину. Внутренне это было выполнено ЕСЛИА=А-B
. =#
, близкие к равным, просто сравнивали оба значения с внутренней метапеременной, EPS
, выполняя АБС (A / B-1)
Большинство диалектов BASIC позволяют сохранять результат таких логических сравнений в переменных, используя некоторый внутренний формат для представления логического значения, часто 0 для ложных и 1 или -1 для истинных. SUPER BASIC также позволял это, что приводило к несколько запутанному поведению ПОЗВОЛЯТЬА=B=5
, который, следуя приоритету оператора, присваивает B 5, а затем возвращает истину или ложь, если A = B. SUPER BASIC также добавил истинные логические переменные, объявленные аналогичным образом как двойные или сложные, используя ЛОГИЧЕСКИЙ А
, а другие переменные могут быть преобразованы в логическое использование L
.[27]
В отличие от логических сравнений и операторов, SUPER BASIC также добавил ряд побитовых логических операторов. Они применяли базовую логическую операцию к отдельным битам в слове. К ним относятся БАН
, BOR
и BEX
, для и, или и исключающее или. Дополнительные функции включают LSH (X)
и RSH (X)
для сдвига битов влево и вправо соответственно. Для облегчения ввода двоичных значений константы можно вводить в восьмеричный формат[b] поставив перед числом букву "О", например ПОЗВОЛЯТЬА=O41
.[28]
Струны
SUPER BASIC позволяет заключать строковые константы (литералы) в одинарные или двойные кавычки, поэтому ПЕЧАТЬ "ПРИВЕТ, МИР!"
и ПЕЧАТЬ «ПРИВЕТ, ВИКИПЕДИЯ!»
оба были действительными заявлениями.[29]
В отличие от более поздних диалектов BASIC, можно было присвоить строку любой переменной и $
означающее не использовалось, поэтому A = "ПРИВЕТ, МИР!"
был действителен. Это могло привести к некоторой путанице, когда пользователь вводил значение, объединяющее цифры и буквы, а SUPER BASIC предполагал, что все, что начинается с цифры, является числом. Чтобы управлять системой, когда это может привести к путанице ввода, можно явно объявить строковые переменные, используя STRING A
. Как и все переменные в SUPER BASIC, это могут быть массивы, СТРОКА A (5)
. Кроме того, SUPER BASIC добавил дополнительный оператор ТЕКСТ
который взял второй параметр для определения длины строковых элементов, поэтому ТЕКСТ A (12): 10
создает массив из 12 элементов по 10 символов каждый, а ТЕКСТ B (5:10): 15
представляет собой массив из шести элементов, 5..10, каждая строка из 15 символов.[30]
Строковые операторы и функции
SUPER BASIC включает операторов для =
для сравнения и +
для конкатенации. Он включал в себя следующие функции:[31]
ASC(S),возвращаетсятоASCIIколичестводлятопервыйхарактервтострокаСИМВОЛ(N),возвращаетсяастрокас участиемане замужемASCIIхарактер,такой жетак какРСCHR()КОМП(А,B),сравниваетдваструны,возвращается-1,0,1в зависимостинакоторыйявляется"больше"ПОКАЗАТЕЛЬ(А,B),возвращаетсятопоказательизBв пределахА.Необязательный3rdпараметрявляетсяансмещениеначалоточкаДЛИНА(А),длинаизтострокаКОСМОС(Икс),возвращаетсяастрокасостоящийизИксколичествоизпробелыВАЛ(А),выглядитчерезтострокадляаколичествоивозвращаетсяЭтоSTR(N),обращаетаколичествовастрокаОСТАЛОСЬ,так каквРСПРАВИЛЬНОSUBSTR,так какРСMID
Служебные функции
Также включены типичные служебные функции:[32]
POSвозвращаетсятостолбецизтоРаспечататьголоваPOS(Икс)возвращаетсятодолжностьвафайлНАЛОГ(Икс)движетсятоРаспечататьголовакстолбецИксНАЛОГ(Икс,N)тотакой жевфайлколичествоNДАТАВРЕМЯ
SUPER BASIC также включает псевдопеременные для ПИ
и DPI
, последний из которых имеет двойную точность, а также ранее упомянутый EPS
для представления наименьшего возможного значения.
Форматирование печати
SUPER BASIC включает две формы форматирования печати, которые можно использовать с РАСПЕЧАТАТЬ
заявление. ПЕЧАТЬ В ИЗОБРАЖЕНИИ X:
использовала строку формата, в данном случае хранящуюся в X, аналогично тому, как это реализовано в других BASIC с использованием ПЕЧАТЬ
или более распространенные примеры, найденные в C и его последующие. Тип поля включает целые числа,[33] указанные десятичные форматы и экспоненты, а также строки и текст. %
знаки обозначают одну цифру в целочисленном или вещественном поле, и #
указал цифру в поле E.[34] *
и $
может использоваться как префикс любого значения.[35]
ПЕЧАТЬ В ФОРМАТЕ
работал в целом одинаково, с той разницей, что пробелы нужно было явно определять с помощью B
. Таким образом, строка формата «%% BBB %%. %%» будет печатать два числовых значения с тремя пробелами между ними, тогда как если бы это было изображение, «BBB» было бы напечатано с пробелами с обеих сторон. Версия формы поддерживала более широкий спектр форматных строк и включала такие элементы, как встроенный возврат каретки, но примеры, приведенные в руководствах, не проясняют, почему существуют две такие системы, когда в конечном итоге они выполняют одно и то же.[36]
Интересно, что команды того же формата могут использоваться для ВВОД
, не просто РАСПЕЧАТАТЬ
. В этом случае пользовательский ввод будет правильно отформатирован на основе строки, поэтому 1,2345 может быть усечено до 1,2, если формат равен%.%.[37]
Файловый ввод-вывод
SUPER BASIC включает систему ввода / вывода файлов на основе ВХОД НА X
и ПЕЧАТЬ НА X
где X - дескриптор файла, число. Номер был присвоен с помощью ОТКРЫТОимя файлаДЛЯ[ВВОД|ВЫВОД]ТАК КАКФАЙЛИкс
. НАПИСАТЬ НА X
был предоставлен как альтернатива print, но внутренне идентичен. По завершении файл можно освободить с помощью ЗАКРЫТЬ X
или ЗАКРЫТЬ имя файла
.[38] При работе с файлами можно было прочитать место следующего чтения, используя LOC (X)
и измените его, используя НАЙДИТЕ 100 НА 2
.[39] POS (X)
вернул позицию в форме, если использовался IN.[40] РАЗМЕР (N)
вернул размер файла.[41] В КОНЕЧНЫЙ ФАЙЛ (X)
может использоваться в циклах для проверки, был ли достигнут конец файла во время чтения.[42]
В систему также включена функция ТЕЛ
который вернул, есть ли ожидание ввода в терминале. Программы SUPER BASIC часто включают такой код, как
100ПОДОЖДИТЕ(1);ЕСЛИНЕТЕЛТОГДА100
ждать ввода пользователя и проверять его каждую секунду перед продолжением.[43] Кроме того, он включал псевдо-имя файла «ТЕЛ»
который можно открыть для чтения и записи с помощью ОТКРЫТО«ТЕЛ»ДЛЯВЫВОДТАК КАК2
а потом ЗАПИСЫВАТЬНА2"ПРИВЕТ МИР"
.[44]
Заметки
использованная литература
Цитаты
- ^ Лэмпсон, Батлер, "Системы", Исследование, Microsoft
- ^ а б Григорий 2018, п. 132.
- ^ а б c d Григорий 2018, п. 133.
- ^ а б Руководство 1978, п. 14.
- ^ Руководство 1978, п. 3.
- ^ Руководство 1978, п. 11.
- ^ Руководство 1978, п. 107.
- ^ Руководство 1978, п. 13.
- ^ Руководство 1978, п. 15.
- ^ Руководство 1978, п. 143.
- ^ Руководство 1978, п. 9.
- ^ а б Руководство 1978, п. 43.
- ^ Руководство 1978, п. 140.
- ^ а б c Руководство 1978, п. 29.
- ^ Руководство 1978, п. 44.
- ^ Руководство 1978, п. 45.
- ^ а б c Руководство 1978, п. 47.
- ^ Руководство 1978, стр. 6,7.
- ^ Руководство 1978, п. 26.
- ^ Руководство 1978, п. 27.
- ^ Руководство 1978, п. 25.
- ^ а б Руководство 1978, С. 7,8.
- ^ Руководство 1978, п. 17.
- ^ а б Руководство 1978, п. 21.
- ^ Руководство 1978, п. 24.
- ^ Руководство 1978, п. 30.
- ^ Руководство 1978, стр.30,31.
- ^ Руководство 1978, п. 28.
- ^ Руководство 1978, п. 33.
- ^ Руководство 1978, п. 34.
- ^ Руководство 1978 С. 35-37.
- ^ Руководство 1978, п. 18.
- ^ Руководство 1978, п. 51.
- ^ Руководство 1978, п. 52.
- ^ Руководство 1978, п. 53.
- ^ Руководство 1978, п. 55.
- ^ Руководство 1978, п. 60.
- ^ Руководство 1978 С. 71-75.
- ^ Руководство 1978, п. 84.
- ^ Руководство 1978, п. 85.
- ^ Руководство 1978, п. 132.
- ^ Руководство 1978, п. 126.
- ^ Руководство 1978, п. 99.
- ^ Руководство 1978, п. 76.
Список используемой литературы
- Справочное руководство SUPER BASIC. Tymshare. Февраль 1978 г.
- Грегори, Натан (2018). Тымь до ... Лулу. ISBN 9781387304059.CS1 maint: ref = harv (ссылка на сайт)