СУПЕР БАЗОВЫЙ
Разработчик | Дэн Льюис и Фрэнк Брейчер, Tymshare |
---|---|
Впервые появился | 1968 год |
Под влиянием | |
Дартмут БЕЙСИК , JOSS , CAL | |
Под влиянием | |
БЕЙСИК-ПЛЮС |
SUPER BASIC , иногда для краткости SBASIC , представляет собой расширенный диалект языка программирования BASIC, предлагаемый в Tymshare системах SDS 940, начиная с 1968 года и доступный вплоть до 1970-х годов.
Как и Dartmouth BASIC, на котором он был основан, SUPER BASIC представлял собой язык компиляции и запуска , а не интерпретатор . Помимо большинства команд и функций Dartmouth BASIC версии 4, включая матричные математические команды, SUPER BASIC также включал ряд функций оригинального языка JOSS, разработанного в Rand Corporation . [1] через версию Tymshare, CAL , и добавил множество новых функций, комплексные числа в качестве встроенного типа и двойной точности поддержку .
SUPER BASIC также значительно улучшил обработку струн по сравнению с элементарной системой в Дартмуте, представив LEFT
, MID
и RIGHT
строковые функции, простая конкатенация строк и другие возможности. Позже они были использованы в DEC от BASIC-PLUS , который позже послужил основой для оригинального Microsoft BASIC , получившего широкое распространение в 1980-х годах.
История
[ редактировать ]Оригинальный Dartmouth BASIC был выпущен в 1964 году, но в то время был в основном экспериментальным. Он претерпел несколько изменений, прежде чем стал по-настоящему полезным в четвертом издании, когда он был перенесен на машину GE 635 и опубликован в 1968 году. Дартмут специально разместил базовый проект в открытом доступе, чтобы каждый мог перенести его на свои платформы и вызвать это БЕЙСИК. Его распространению способствовали неустанные усилия его авторов по его продвижению. Однако, поскольку код был разработан для работы в операционной системе DTSS , для его запуска в производственных системах потребовалось некоторое портирование. Это привело к увеличению количества версий с незначительными отличиями. [2]
Компания Tymshare была основана в Калифорнийском университете в Беркли и первоначально сдавала в аренду время за компьютерами университета в нерабочее время. Оригинальный BASIC от Tymshare, просто Tymshare BASIC, был основан на исходном коде «из других мест» университета. [3] что Дэн Льюис начал улучшать. Фрэнк Брейчер добавил процедуры ввода-вывода файлов (I/O), что сделало его гораздо более практичным, чем исходный код Дартмута, который полагался исключительно на DATA
операторы, встроенные в программу. Рабочий процесс Дартмута был основан на ленте, поэтому загрузка и сохранение отдельных файлов было непрактично, а прямой ввод-вывод не был реализован до более поздних версий. Код ввода-вывода Брейчера изначально был разработан для предложения Tymshare SUPER FORTRAN . [2]
Одной из часто отмечаемых особенностей системы была документация, написанная Кэролайн Диль. Инструкции написаны в разговорном стиле. [3]
Tymshare поддерживала SUPER BASIC на протяжении 1970-х годов, но по мере того, как рынок арендованных услуг по программированию таймшера сокращался, система была переведена на техническое обслуживание, и Льюис и Брейчер ушли, чтобы консультировать SUPER BASIC для тех компаний, которые все еще ее используют. Техническое обслуживание в Tymshare перешло в основном к Уолтеру Мэйну. [3]
Tymshare подала заявку на регистрацию товарного знака SUPER BASIC 7 января 1970 года и обновила его 17 октября 1977 года, который стал собственностью McDonnell Douglas в 1984 году, когда компания приобрела Tymshare. [3]
Язык
[ редактировать ]Прямой и косвенный режим
[ редактировать ]Как и большинство систем BASIC того времени, SUPER BASIC имел единый редактор командной строки , который работал как интерактивный язык, так и редактор программ. Команды, набранные без номера строки, выполнялись немедленно, что они называли « прямым режимом ». [а] Если той же строке предшествовал номер строки, она вместо этого копировалась в область хранения программного кода, известную как «косвенный режим». Новые строки добавлялись в программу, если номер строки был уникальным, заменяли существующие строки тем же номером или удалялись из программы, если существующий номер строки был введен без кода после него. [4]
Программные заявления
[ редактировать ]Номера строк варьировались от 0 до 999999. [5] DELETE
(или краткая форма DEL
) можно использовать для удаления диапазона строк, используя типичные LIST
обозначение, например, DELETE 5,10-50
. [4] ENTER
команда запустила автоматическую систему нумерации строк. Он принимал два необязательных параметра: номер начальной строки и шаг, разделенные знаком BY
. Если оно не указано, начальное число предполагалось равным нулю, а шаг был равен 10. Например, ENTER
даст 0,10,20,..., ENTER BY 5
даст 0,5,10,..., и ENTER 10 BY 10
будет производить 10,20,30... [6] RENUMBER
взял три параметра: новый номер начальной строки, диапазон строк для перенумерации (например, 20-100) и шаг. [7]
Хотя встроенный редактор загружал и сохранял только строки самой программы, пользователь мог редактировать полученный текстовый файл, добавляя дополнительные команды, которые будут выполняться в прямом режиме. Типичным примером было редактирование программы и добавление RUN
в отдельной строке в конце файла. При загрузке система увидит RUN
и сразу скомпилировать и запустить программу при загрузке. [8] Это необычно для систем BASIC, хотя это обычно использовалось в JOSS.
Заявления
[ редактировать ]В соответствии с общей концепцией Dartmouth BASIC , SUPER BASIC представлял собой систему компиляции и запуска , которая компилировала исходный код при запуске программы. В SUPER BASIC для этого было две команды: типичная RUN
встречается в большинстве BASICов, а также START
который сделал то же самое. [9] Примечания можно размещать где угодно, используя !
. [10]
SUPER BASIC расширил FOR
заявление несколькими способами. Незначительное изменение заключалось в том, чтобы позволить BY
вместо STEP
и позволял размещать шаг в конце, как в большинстве BASIC, или в середине, как в JOSS и других языках. Таким образом FOR I=1 TO 10 BY 2
и FOR I=1 BY 2 TO 10
оба были действительными. [11] Кроме того, SUPER BASIC предоставил альтернативные формы определения диапазона, используя WHILE
и UNTIL
, тогда как в большинстве других языков для них использовались совершенно отдельные структуры циклов. Например, FOR X=1 WHILE X<Y
будет продолжаться до тех пор, пока X<Y, в то время как FOR X=1 UNTIL X<Y
останавливается, когда условие выполнено. [12] Как и в Microsoft BASIC , несколько циклов могут заканчиваться одним NEXT I,J
, [12] хотя в более поздних версиях MS не было функции, где индексную переменную можно было полностью исключить. Наконец, в стиле JOSS можно заменить типичный спецификатор диапазона 1 TO 10
с явным списком значений, FOR I=1,4,5,6,10
. [13]
Более серьезным изменением, последовавшим за моделью JOSS, стала концепция «модификаторов операторов», которая позволяла IF
или FOR
должен быть помещен после оператора, которым он управляет. Например, PRINT "IT IS" IF X=5
эквивалентно IF X=5 THEN PRINT "IT IS"
. Это может облегчить понимание некоторых часто встречающихся случаев использования. [14] Он также включал синтаксический сахар UNLESS
который был IF
с противоположным смыслом; например, PRINT "IT IS NOT FIVE" UNLESS X=5
. В этих случаях также можно было использовать цикл, что упростило реализацию одиночных циклов с одним оператором, например PRINT X FOR X=1 TO 10
. [15] Можно также использовать «голый» WHILE
или UNTIL
без за, X=X+2 UNTIL X>10
. Модификаторы также можно объединить, PRINT "YES" IF A=B UNLESS N=0
. [16]
Выражения
[ редактировать ]Переменные
[ редактировать ]Имена переменных могут состоять из одной или двух букв или одной буквы и цифры. SUPER BASIC не требовал ввода переменных, переменная могла содержать число в одной точке и строку в другой, что является побочным эффектом способа их хранения. Это требовало от системы проверки типа переменной во время выполнения. INPUT
и PRINT
например, что снизило производительность. Эту проблему можно решить, явно объявив тип переменной с помощью различных команд. [17]
В большинстве диалектов BASIC переменные создаются «на лету» по мере их появления в коде и обычно при создании устанавливаются в ноль (или пустую строку). Это может привести к проблемам, когда переменные должны быть установлены предыдущим кодом, который не вызывается должным образом, но во время выполнения может быть трудно определить, является ли 0 неинициализированным значением или значением с совершенно допустимыми значениями 0. SUPER BASIC решил эту проблему с помощью VAR
команда. Существовали две основные формы: VAR=ZERO
благодаря чему все неопределенные переменные автоматически получали нулевое значение при доступе, что является обычным шаблоном для BASIC, и VAR=UNDEF
что вместо этого приведет к возникновению ошибки «ПЕРЕМЕННАЯ НЕТ ЗНАЧЕНИЯ», когда ранее невидимая переменная использовалась способом, который пытался получить доступ к ее значению. Последнее очень полезно при отладке сценариев, где нормальное поведение может скрыть тот факт, что переменная, используемая в расчете, не была правильно инициализирована. [18]
Числовой
[ редактировать ]Если не указано иное, переменные хранились в 48-битном одинарной точности формате с плавающей запятой и одиннадцатью разрядами точности. Можно также явно определить переменную как REAL A
, который представлял собой формат одинарной точности. Это не учитывалось в других BASICах, где использовался какой-то суффикс, например $
, указывает тип везде, где он встречается. [17]
При необходимости можно использовать формат двойной точности с семнадцатью цифрами, хранящимися в трех 24-битных словах вместо двух, объявив переменную с помощью DOUBLE A
. [19] Существующее значение или выражение одинарной точности можно преобразовать в двойную с помощью DBL(X)
функция. Например, можно заставить выражение вычисляться с использованием двойной точности, используя DBL(10+20)
. [20]
Аналогично можно было бы объявить INTEGER A
для создания 24-битного целочисленного значения, состоящего из одного слова. [17]
Более необычным дополнением стала прямая поддержка комплексных чисел . Они были настроены аналогично другим переменным, используя COMPLEX I,J
чтобы выделить два слота одинарной точности. Встречаясь в программах, другие операторы, такие как INPUT
запускал бы альтернативные режимы, которые запрашивали два числа вместо одного, с аналогичными изменениями для READ
(используется с DATA
заявления), PRINT
и другие. Одно комплексное число может быть создано из двух одиночных чисел с помощью CMPLX(X,Y)
функция, в то время как REAL(I)
и IMAG(I)
выделил действительную и мнимую части соответственно в синглы. Также было предложено небольшое количество дополнительных служебных функций. [21]
Операторы и функции
[ редактировать ]Было семь основных математических операторов: [22]
↑
для показателей - показатель преобразуется в 12-битное целое число*
для умножения/
для разделенияMOD
по модулю, остаток целочисленного деленияDIV
для целочисленного деления+
для добавления-
для вычитания
Список математических функций SUPER BASIC был длиннее, чем у большинства BASIC, включая ряд обратных тригонометрических функций и логарифмов по основанию 2 и 10. [22]
RND(X), returns a random number using a fixed sequence, can be seeded with RND(-1)
ABS(N), absolute value
SQR(N) or SQRT(N), square root
SIN
COS
TAN
ASIN
ACOS
ATN or ATAN
ATN/ATAN with two variables, (y,x) calculates y/x and returns ATN of that
SINH
COSTH
TANH
LOG
LGT/LOG10
LOG2
EXP
EXP2
INT, as in BASIC, always truncates downward
FIX, similar to INT but simply truncating the decimal
ROUND, rounds the value to closest, unlike INT
COMP(X,Y) COMPare, combines a subtraction and SGN, so if X>Y=1, X=Y=0, X<y+-1
PDIF(X,Y) Positive DIFference, returns difference (X-Y) if X>Y, 0 otherwise
SUPER BASIC также включает в себя ряд функций JOSS: [23]
IP(), Integer Part, equivalent to INT
FP(), Fraction Part, same as X-INT(X)
MAX(...) returns the maximum value from a list of entries
MIN(...) returns the minimum
Массивы и матричная математика
[ редактировать ]Помимо базовой математики, SUPER BASIC включал в себя функциональность массивов, как и многие другие реализации BASIC. Можно было бы DIM A(5,5)
чтобы создать двумерный массив, и, как следствие того, как они хранились, все переменные, которые иначе не были объявлены, на самом деле были DIM-значениями, чтобы иметь десять индексов, поэтому можно было LET B(5)=20
без предварительного DIMing B. [24]
В отличие от других BASICов, SUPER BASIC позволял определить диапазон одного или обоих измерений, принимая 1, если он не определен. Итак, A в приведенном выше примере имеет индексы 1..5, но можно также DIM A(-5:5,0:5)
для создания массива, имеющего 11 индексов от -5 до +5 для X и от 0 до +5 для Y. Можно также использовать BASE
команда для изменения значения по умолчанию, поэтому BASE 0
Например, все размеры начинаются с 0. [24]
В дополнение к этим традиционным концепциям BASIC, SUPER BASIC также включал большинство функций матричной математики, присутствующих в более поздних версиях Dartmouth BASIC. Они были вызваны добавлением ключевого слова MAT
перед другими командами. Например, MAT A=B*C
умножает все элементы массива B на соответствующие им элементы в C, тогда как MAT A=B*5
умножает все элементы в B на 5. Были включены функции для общих матричных операций, таких как инверсия и тождество. [25]
Двоичная математика и логические значения
[ редактировать ]Как и большинство версий BASIC, SUPER BASIC включал стандартный набор операторов сравнения: =
, <>
, >=
, <=
, >
и <
, а также логические операторы OR
, AND
и NOT
. Кроме того, #
может использоваться как альтернативная форма <>
, форма, которая встречалась в ряде реализаций BASIC в ту эпоху. [14] Также добавлен SUPER BASIC XOR
, EQV
для «эквивалентности» (равен) и IMP
для «подтекста». [26]
К этому базовому набору SUPER BASIC добавил еще три новые команды для сравнения небольших различий между числами, это были >>
, <<
и =#
. Операторы «намного больше» и «намного меньше» сравнивают значения двух операндов, например, A и B в выражении. A >> B
. Если добавление B к A приводит к тому, что A остается неизменным после присущего округления, >>
вернулся правдой. Внутренне это было выполнено IF A=A-B
. =#
, близкие к равным, просто сравнивали оба значения с внутренней метапеременной, EPS
, выступая ABS(A/B-1)<EPS
. [14]
Большинство диалектов BASIC позволяют сохранять результат таких логических сравнений в переменных, используя некоторый внутренний формат для представления логического значения, часто 0 для ложного и 1 или -1 для истинного. SUPER BASIC также позволял это, что приводило к несколько запутанному поведению LET A=B=5
, который, следуя приоритету оператора, присваивает B значение 5, а затем возвращает true или false, если A=B. В SUPER BASIC также добавлены настоящие логические переменные, объявленные аналогично двойным или комплексным, с использованием LOGICAL A
, а другие переменные можно преобразовать в логическую форму с помощью L()
. [27]
В отличие от логических сравнений и операторов, в SUPER BASIC также добавлен ряд поразрядных логических операторов. Они применяли базовую логическую операцию к отдельным битам слова. В их число вошли BAN
, BOR
и BEX
, для и, или и исключающее или. Дополнительные функции включают в себя LSH(X)
и RSH(X)
для битового сдвига влево и вправо соответственно. Чтобы облегчить ввод двоичных значений, константы можно вводить в восьмеричном формате. [б] добавляя к числу префикс «О», например LET A=O41
. [28]
Струны
[ редактировать ]SUPER BASIC позволял заключать строковые константы (литералы) в одинарные или двойные кавычки, поэтому можно было использовать PRINT "HELLO, WORLD!"
или PRINT 'HELLO, WORLD!'
. [29]
В отличие от более поздних диалектов BASIC, любой переменной можно было присвоить строку, а $
означающее не использовалось, поэтому A="HELLO, WORLD!"
был действительным. Это могло привести к некоторой путанице, когда пользователь вводил значение, сочетающее цифры и буквы, а SUPER BASIC предполагал, что все, что начинается с цифры, является числом. Чтобы помочь системе, когда это может привести к путанице при вводе, можно явно объявить строковые переменные, используя STRING A
. Как и все переменные в SUPER BASIC, это могут быть массивы. STRING A(5)
. Кроме того, в SUPER BASIC добавлен дополнительный оператор TEXT
который принял второй параметр для определения длины строковых элементов, поэтому TEXT A(12):10
создает массив из 12 элементов по 10 символов каждый, а TEXT B(5:10):15
представляет собой массив из шести элементов, 5..10, каждый длиной 15 символов. [30]
Строковые операторы и функции
[ редактировать ]В состав SUPER BASIC включены операторы для =
для сравнения и +
для конкатенации. Он включал в себя следующие функции: [31]
ASC(S), returns the ASCII number for the first character in the string CHAR(N), returns a string with a single ASCII character, same as MS CHR() COMP(A,B), compares two strings, returns -1,0,1 depending on which is "bigger" INDEX(A,B), returns the index of B within A. Optional 3rd parameter is an offset starting point LENGTH(A), length of the string SPACE(X), returns a string consisting of X number of spaces VAL(A), looks through the string for a number and returns it STR(N), converts a number into a string LEFT, as in MS RIGHT SUBSTR, as MS's MID
Вспомогательные функции
[ редактировать ]Также включены типичные служебные функции: [32]
POS returns the column of the print head
POS(X) returns the position in a file
TAB(X) moves the print head to column X
TAB(X,N) the same in file number N
DATE
TIME
SUPER BASIC также включает псевдопеременные для PI
и DPI
, причем последний имеет двойную точность, как и ранее упомянутый EPS
для представления наименьшего возможного значения.
Форматирование печати
[ редактировать ]SUPER BASIC включал две формы форматирования печати, которые можно было использовать с PRINT
заявление. PRINT IN IMAGE X:
использовал строку формата, в данном случае хранящуюся в X
, аналогично тому, как другие BASIC реализованы с использованием PRINT USING
или более распространенные примеры, найденные в C и его последующих версиях. Тип поля включал целые числа, [33] заданные десятичные форматы и показатели степени, а также строки и текст. %
знаки обозначали одну цифру в целочисленном или действительном поле, и #
указал цифру в поле E. [34] *
и $
может использоваться для префикса любого значения. [35]
PRINT IN FORMAT
в целом работало одинаково, с той разницей, что пробелы нужно было явно определять с помощью B
. Таким образом, строка формата "%% BBB %%.%%"
напечатал бы два числовых значения с тремя пробелами между ними, тогда как если бы это было изображение, "BBB"
будет распечатан с пробелами по обе стороны. FORMAT
Версия поддерживала более широкий спектр строк формата и включала такие элементы, как встроенный возврат каретки, но примеры, приведенные в руководствах, не поясняют, почему существует две такие системы, если в конечном итоге они выполняют одно и то же. [36]
Интересно, что те же команды формата можно использовать для INPUT
, не просто PRINT
. В этом случае пользовательский ввод будет правильно отформатирован на основе строки, поэтому 1.2345
может быть сокращено до 1.2
если формат %.%
. [37]
Файловый ввод-вывод
[ редактировать ]SUPER BASIC включал в себя систему ввода-вывода файлов, основанную на INPUT ON X
и PRINT ON X
где X
— дескриптор файла, число. Номер был присвоен с помощью OPEN filename FOR [INPUT|OUTPUT] AS FILE X
. WRITE ON X
был предложен в качестве альтернативы PRINT ON X
, но внутри они идентичны. По завершении файл можно освободить с помощью CLOSE X
или CLOSE filename
. [38] При работе с файлами можно было прочитать местоположение следующего чтения, используя LOC(X)
и измените его, используя LOCATE 100 ON 2
. [39] POS(X)
вернул позицию в форме, если IN FORM
использовался. [40] SIZE(N)
вернул размер файла. [41] ENDFILE(X)
может использоваться в циклах для проверки того, был ли достигнут конец файла во время чтения. [42]
В систему также включена функция TEL
который вернулся независимо от того, был ли ожидающий ввод в терминале. Программы SUPER BASIC часто включали в себя такой код, как
100 WAIT(1);IF NOT TEL THEN 100
дождаться ввода пользователя и проверять его каждую секунду, прежде чем продолжить. [43] Кроме того, он включал псевдоимя файла "TEL"
который можно было открыть для чтения и записи с помощью OPEN "TEL" FOR OUTPUT AS 2
а потом WRITE ON 2 "HELLO WORLD"
. [44] В дополнение к "TEL"
, оба "T"
и "TELETYPE"
также сослался на командный телетайп. [45]
Примечания
[ редактировать ]- ^ Терминология возникла из JOSS, BASIC, производный от MS, обычно вместо этого называет это «немедленным режимом».
- ^ Шестнадцатеричная система не стала популярной до тех пор, пока большинство машин не начали использовать 8-битные слова, в эпоху 6-битных баз, таких как SDS 940, восьмеричная система была обычным явлением.
Ссылки
[ редактировать ]Цитаты
[ редактировать ]- ^ Лэмпсон, Батлер, «Системы», Research , Microsoft
- ^ Jump up to: а б Григорий 2018 , с. 132.
- ^ Jump up to: а б с д Григорий 2018 , с. 133.
- ^ Jump up to: а б Руководство 1978 года , с. 14.
- ^ Руководство 1978 г. , с. 3.
- ^ Руководство 1978 г. , с. 11.
- ^ Руководство 1978 г. , с. 107.
- ^ Руководство 1978 г. , с. 13.
- ^ Руководство 1978 г. , с. 15.
- ^ Руководство 1978 г. , с. 143.
- ^ Руководство 1978 г. , с. 9.
- ^ Jump up to: а б Руководство 1978 года , с. 43.
- ^ Руководство 1978 г. , с. 140.
- ^ Jump up to: а б с Руководство 1978 года , с. 29.
- ^ Руководство 1978 г. , с. 44.
- ^ Руководство 1978 г. , с. 45.
- ^ Jump up to: а б с Руководство 1978 года , с. 47.
- ^ Руководство 1978 г. , стр. 6, 7.
- ^ Руководство 1978 г. , с. 26.
- ^ Руководство 1978 г. , с. 27.
- ^ Руководство 1978 г. , с. 25.
- ^ Jump up to: а б Руководство 1978 г. , стр. 7, 8.
- ^ Руководство 1978 г. , с. 17.
- ^ Jump up to: а б Руководство 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.
- ^ Руководство 1978 г. , с. 89.
Библиография
[ редактировать ]- Справочное руководство SUPER BASIC . Тимшер. Февраль 1978 года.
- Грегори, Натан (2018). Тим до... Лулу. ISBN 9781387304059 .