Дартмутский ОСНОВНОЙ - Dartmouth BASIC

Дартмутский ОСНОВНОЙ
Парадигма императив
Разработано Джон Г. Кемени , Томас Э. Курц
Впервые появился 1964 ; 57 лет назад ( 1964 )
Операционные системы Дартмутская система разделения времени
Под влиянием
ФОРТРАН , АЛГОЛ
Под влиянием
Ср. список ОСНОВНЫХ диалектов

Dartmouth BASIC - это оригинальная версия языка программирования BASIC . Его разработали два профессора Дартмутского колледжа , Джон Г. Кемени и Томас Э. Курц . Благодаря базовой системе разделения времени Дартмута (DTSS) она предлагала интерактивную среду программирования всем студентам, а также всему университетскому сообществу.

В Дартмуте было выпущено несколько версий, реализованных студентами бакалавриата и работающих как система компиляции и запуска . Первая версия была запущена 1 мая 1964 г. и открыта для обычных пользователей в июне. Последовали обновления, кульминацией которых стал седьмой и последний выпуск в 1979 году. Дартмут также представил радикально обновленную версию, известную как Structured BASIC (или SBASIC ) в 1975 году, в которую были добавлены различные концепции структурированного программирования . SBASIC сформировали основу ANSI -эталонными Стандартного усилия в начале 1980 - х годов.

История большинства диалектов BASIC восходит к Четвертому изданию, но обычно не учитываются более эзотерические особенности, такие как матричная математика. В отличие от компиляторов Дартмута, большинство других BASIC были написаны как интерпретаторы . Это решение позволило им работать с ограниченной оперативной памятью ранних микрокомпьютеров . Microsoft BASIC - один из примеров, предназначенный для работы всего с 4 КБ памяти. К началу 1980-х годов на десятках миллионов домашних компьютеров был запущен какой-либо вариант интерпретатора MS. Он стал де-факто стандартом для BASIC, что привело к отказу от ANSI SBASIC. Позже Кемени и Курц основали компанию для разработки и продвижения версии SBASIC, известной как True BASIC .

История многих ранних игр для мэйнфреймов восходит к Dartmouth BASIC и системе DTSS. Некоторые из них были собраны в версиях HP Time-Shared BASIC в книге People's Computer Company « Что делать после нажатия клавиши Return» . Многие из первоисточников в BASIC Computer Games и связанных работах также прослеживают свою историю до Dartmouth BASIC.

История развития

Более ранняя работа

Джон Г. Кемени поступил на математический факультет Дартмутского колледжа в 1953 году и позже стал его заведующим. В 1956 году он получил доступ к IBM 704 благодаря усилиям Регионального компьютерного центра Новой Англии Массачусетского технологического института . В том же году он написал язык DARSIMCO , который упростил программирование математических операций. Ему помогал Томас Курц , присоединившийся к отделу в том же году.

DARSIMCO был забыт, когда первый компилятор FORTRAN был установлен на машине в 1957 году. Появление FORTRAN преподало важный урок. Курц, которому внушили, что FORTRAN медленный, потратил несколько месяцев на написание программы на ассемблере 704, на отладку которой потребовалось около часа процессорного времени, но она все еще не работала. Сдаваясь, он переписал его на ФОРТРАНЕ и запустил за пять минут. Урок заключался в том, что языки высокого уровня могут экономить время, независимо от их измеряемой производительности.

В 1959 году школа получила свой первый компьютер - барабанный ЛГП-30 . Один студент написал для машины язык DART, вдохновленный Фортраном. Это привело к попытке создать компилятор АЛГОЛА 58, который обратился к АЛГОЛу 60, когда это определение было окончательно доработано. Написание компилятора было трудным из-за очень маленького размера памяти, 4 КБ в современном понимании, и было очень медленным, исходя из скорости барабана 30 об / мин. Тем не менее, они смогли создать функциональную урезанную версию, известную как АЛГОЛ 30 . Дальнейшее развитие привело к появлению SCALP, «Автономного процессора Algol», однопроходного компилятора, который был готов к запуску скомпилированной программы, как только перфолента заканчивала считывание исходного кода. Эта операция в стиле compile-n-go позже будет использоваться BASIC.

В 1962 году Кемени и студент Сидни Маршалл начали экспериментировать с новым языком, DOPE (Дартмутский сверхупрощенный эксперимент по программированию) . Это использовало пронумерованные строки для представления инструкций, например, для сложения двух чисел, использовалось DOPE:

 5 + A B C

Это означало, что «в строке 5 выполните сложение значений в переменных A и B и поместите результат в C». Несмотря на несколько загадочную компоновку, можно увидеть основу для будущего языка BASIC. Помимо основных математических операций, язык включал SQR, EXP, LOG, SIN и простую конструкцию ветвления.

Вычислительная техника в гуманитарных науках

Кемени и Курц согласились с необходимостью повышения грамотности в программировании среди студентов вне традиционных областей STEM ; только 25% студентов в Дартмуте посещали курсы, связанные с STEM, но некоторый уровень математики использовался почти во всех областях. Более того, по мере того, как компьютеры становились все более важными в обществе, они задавались вопросом: «Как могут разумные решения относительно вычислений и их использования принимать люди, которые по сути не знают о них?»

Позже Кемени отметил, что «мы видели, что каждый студент в кампусе должен иметь доступ к компьютеру, а любой преподаватель должен иметь возможность использовать компьютер в классе, когда это необходимо. Это было так просто». Но сделать это было бы практически невозможно, учитывая то, с чем им приходилось работать; Срок выполнения типичного прогона SCALP составлял около 15 минут, а языки были слишком сложны для пользователей, не занимающихся STEM, чтобы использовать их для основных задач.

Проблема была не просто в сложности, а во всей концепции пакетной обработки . Студенты готовили свои программы на перфокартах или бумажной ленте, отправляли их операторам компьютеров, а затем в какой-то момент получали их результаты. Это часто выявляет ошибку, требующую повторения всего процесса. Как позже они выразились, «если на одну попытку уйдет порядка одного дня, ученик либо потеряет интерес, либо забудет, в чем заключались проблемы. В лучшем случае он будет тратить время, стоя и ожидая результатов дня. "

В 1959 году, во многом благодаря репутации Кемени как новатора в преподавании математики, кафедра получила премию Фонда Альфреда П. Слоана в размере 500 000 долларов на строительство нового здания кафедры.

Разработка концепции

Во время визита в Массачусетский технологический институт в 1961 году они познакомились с PDP-1 и его недавно завершенной экспериментальной операционной системой с разделением времени . Джон Маккарти спросил Курца, почему они не использовали разделение времени для своих усилий по распространению вычислений в массы. Позже Курц сказал Кемени, что «мы должны разделить время», на что Кемени ответил «ОК». Прибытие Телетайпного Model 33 телепринтер с использованием вновь вводимым ASCII по телефонным линиям решена проблема доступа; программистам больше не нужно было отправлять программы на карточках или бумажной ленте, теперь они будут использовать Model 33 для ввода непосредственно в компьютер. Все, что требовалось, - это новая машина, достаточно быстрая для размещения системы с разделением времени, и простой язык для использования программистами.

Когда тему простого языка начали серьезно рассматривать, Кемени сразу предложил написать новый. Курца больше интересовала урезанная версия FORTRAN или ALGOL. Но у этих языков было так много особенностей, что Курц быстро согласился с Кемени. Со временем возникли четыре ключевых элемента; система будет использовать разделение времени, потребуется новый язык, чтобы привлечь пользователей к системе, новые курсы будут вводить программирование в качестве дополнения к другим предметам, и, наконец, терминалы будут открыты для всех пользователей.

Первоначальная версия

Официально проект стартовал в сентябре 1963 года. Целью было разработать язык и операционную систему на стандартном компьютере. В начале 1964 года два гранта Национального научного фонда , один на разработку системы разделения времени, а другой - на разработку языка, вместе с образовательными скидками от General Electric привели к покупке компьютера GE-225 . Это было связано с гораздо более простой машиной DATANET-30 (DN-30) и жестким диском, подключенным к обеим машинам для обмена данными.

Система будет работать, если DN-30 будет запускать терминалы и сохранять работу пользователя на диск. Когда пользователь печатал RUN, GE-225 считывал этот файл, компилировал его, запускал и возвращал результаты в DN-30, который распечатывал результат на терминале. Эта комбинация машин была позже известна как GE-265, добавив их номера моделей вместе. GE построила еще около пятидесяти экземпляров GE-265, многие из которых были предназначены для обслуживания своих бюро обслуживания . GE назвала их своими системами разделения времени Mark I.

Летом 1963 года, ожидая покупки компьютера, GE предоставила доступ к одному из своих GE-225. Кемени начал работать над прототипом компилятора. Этой осенью студенты Майкл Буш и Джон МакГичи начали работу над дизайном операционной системы. И язык, и операционная система были значительно изменены в течение этого периода, хотя основные цели остались прежними и были опубликованы в виде черновика в ноябре того же года.

Школьная машина прибыла в последнюю неделю февраля 1964 года, была введена в эксплуатацию к середине марта и официально передана 1 апреля. К тому моменту дизайн операционной системы был уже хорошо разработан. Большинство студентов-программистов, работающих с операционной системой, работали по 50 часов в неделю в дополнение к своей обычной учебной нагрузке. Параллельно язык разрабатывался в заемное время на другой 225 машине. Операционная система была завершена в апреле, а вся система, работающая на трех терминалах Model 33, была готова к концу месяца. Джон Кемени и Джон МакГичи запустили первую программу BASIC 1 мая 1964 года в 4 часа утра по восточному времени .

Не совсем понятно, какие были первые программы. Многие источники, включая Дартмут, утверждают, что это была такая простая программа:

PRINT 2 + 2

В течение следующего месяца система была протестирована с использованием тестовых программ класса численного анализа в системе. В течение этого периода машина продолжала нормально работать в среднем пять минут. Однако проблемы были быстро решены, и в июне было принято решение увеличить количество терминалов до одиннадцати. Примерно в это же время на смену 225 пришел более быстрый GE-235. К осени уже использовалось 20 терминалов.

Новая система

Одной из первоначальных целей программы было включить программирование в другие курсовые работы. Это был успех, но он оказал серьезную нагрузку на систему, и стало ясно, что у нее нет места для будущего роста.

В 1965 году команда обратилась в GE за поддержкой в ​​продолжающейся разработке. В сентябре вице-президент Луи Рейдер предложил новый GE-635 , который работал примерно в 10 раз быстрее и включал два процессора. Кроме того, будет добавлен второй DN-30 для обработки большего количества линий, достаточного для одновременного подключения 150 пользователей. Для его размещения потребовалось бы помещение большего размера, чем подвал Колледж-холла, где работал 265-й. Питер Кевит, выпускник 22-го года, наряду с дополнительной поддержкой NSF, привел к строительству Kiewit Computing Center, который открылся в декабре 1966 года.

В ожидании прибытия этой машины летом и осенью 1966 года GE-635 в Римском центре разработки авиалайнеров использовался для разработки MOLDS, «многопользовательской системы онлайн-отладки». GE-635 был введен в эксплуатацию в начале 1967 года, и с использованием MOLDS новая операционная система была полностью функциональна в сентябре, когда GE-265 был распродан.

GE предоставила машину бесплатно в течение трех лет в рамках более широкого соглашения, согласно которому Дартмут будет разрабатывать новые версии BASIC, а GE использовала его для разработки новой версии своей версии операционной системы. Это сотрудничество оказалось успешным; GE начала развертывать эти машины в качестве своих систем с разделением времени Mark II, и к концу десятилетия они стали одним из крупнейших поставщиков устройств с разделением времени в мире.

Когда эта система «Фазы I» была введена в действие, команда Дартмута приступила к разработке «Фазы II», идеальной операционной системы. Он был установлен в марте 1969 года и вскоре после этого изменил свое название на Dartmouth Time Sharing System . Когда истек трехлетний период, GE подарила машину университету. Хотя две команды продолжали поддерживать контакты, и было предпринято несколько добросовестных попыток продолжить отношения, дальнейшего сотрудничества не произошло, и партнерство официально прекратилось 20 сентября 1972 года.

Расширение пользовательской базы

Обзор 1968 года показал, что 80% студентов и 70% преподавателей в той или иной степени использовали систему. Сотни терминалов были разбросаны по кампусу, от больницы до бизнес-школы. 57% процессорного времени было использовано для курсовой работы, 16% - для исследований, а оставшиеся 27% - для «рекреационного использования»; Дартмут активно поощрял пользователей играть в игры как способ получить практическое применение и преодолеть страх перед компьютером.

Начиная с другого гранта NFS, в 1967 году Дартмут также начал размещать терминалы за пределами кампуса, включая средние школы в этом районе. С точки зрения количества пользователей, эти терминалы обслуживали 69% от общего числа пользователей, хотя они использовали меньшее количество компьютерного времени. К 1971 г. существовало 79 удаленных терминалов, вплоть до Нью-Джерси и Бангора, штат Мэн . Они поддерживались системами мультиплексора , которые позволяли поддерживать до 12 терминалов по одной телефонной линии голосового уровня. Кроме того, некоторые из этих линий были доступны для коммутируемого доступа с модемом .

Влиять

Разделение времени было основной областью исследований в 1960-х годах, и многие представители компьютерной индустрии предсказывали, что вычислительные мощности станут недорогими и широко распространенными. Наиболее известное высказывание об этом было высказано Джоном Маккарти, который сказал: «Когда-нибудь вычисления могут быть организованы как коммунальное предприятие, так же как телефонная система является коммунальным предприятием».

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

HP 2000 RAN HP Time-Shared BASIC , сочетание BASIC и операционная система таймшер практически идентична настройке DTSS. Система поддерживала до 32 одновременных пользователей, используя ЦП HP 2100 начального уровня для работы терминалов таким же образом, как Datanet-30 из исходной установки GE-265, в то время как программы работали на более мощной модели компьютера. та же машина, обычно отличающаяся тем, что у нее было больше основной памяти . HP BASIC использовал полукомпилированный «токенизированный» формат для хранения программ, что сокращало время загрузки и означало, что «компилирование» происходило с нулевым временем.

Digital Equipment Corporation использовала другой подход, используя предложение для одной машины на основе существующей линейки PDP-11 с новой операционной системой RSTS / E и BASIC-PLUS . BASIC-PLUS более внимательно следовал за Пятым изданием, включая MATкоманды, но был реализован как чистый интерпретатор, в отличие от компилятора Дартмута или токенизированного формата HP. Он также включал в себя ряд управляющих структур, соответствующих модели JOSS , например . Tymshare SUPER BASIC также поддерживал структуры в стиле JOSS и матричную математику, но сохранил исходную операцию компиляции и запуска . PRINT I IF I > 10

Практически каждый продавец той эпохи предлагал какое-то решение этой же проблемы, хотя, возможно, они не были так похожи на оригинал. Когда Курц начал рассматривать создание стандарта ANSI для BASIC в 1973 году, он обнаружил, что количество сервисных бюро с разделением времени с доступным BASIC было больше, чем на любом другом языке. К сожалению, этот успех также был проблемой; к тому моменту было так много вариаций, что стандарт казался невозможным.

Игры на BASIC

Кемени активно поощрял игры на платформе DTSS и считал это одной из основных причин успеха системы DTSS. Вероятно, он был автором ранней игры для мэйнфреймов . Хотя Кемени не поверил этому, он позже сослался на FTBALL , заявив, что он «был написан в воскресенье после определенного матча Дартмут- Принстон в 1965 году, когда Дартмут выиграл трофей Ламберта . Это своего рода памятная программа». Игра была расстроена из-за привилегированного Принстона.

По мере расширения системы, особенно после добавления обработки строк в BASIC, система DTSS стала основной платформой для разработки многих текстовых игр . В начале 1970-х годов компания People's Computer Company начала публиковать их в своем журнале, обычно преобразованном в более широко доступный HP BASIC. Многие из этих списков были собраны в их книге 1975 года « Что делать после нажатия клавиши возврата» . Хотя они опубликованы в форме HP BASIC, большинство из них ведет свою историю либо от DTSS, либо от Зала науки Лоуренса в Калифорнии, где была установлена ​​аналогичная машина, известная как DECISION.

Более известный сборник - это BASIC Computer Games 1978 года, где около половины программ в книге были написаны либо в Дартмуте, в том числе другая Кемени, Батнумом, либо, что чаще, одной из многих средних школ, которые были подключены к ней после 1968 года. Особенно успешной средней школой была средняя школа Лексингтона в Массачусетсе, но появляются и многие другие школы. В некоторых программах не указано их первоначальное местонахождение, но они исходят от авторов, которые, вероятно, были подключены к системе через школу или общественные проекты, такие как Project SOLO.

Версии

Первое издание

Оригинальная версия, известная как заднее число версия одного, поддерживают команды LET, PRINT, END, FOR...NEXT, GOTO, GOSUB...RETURN, IF...THEN, DEF, READ, DATA, DIM, и REM. Она включала в себя основную инструкции по математике, +, -, *и /, а также стрелка вверх для экспонента «... так как на телетайпе машинку невозможно напечатать надстрочные.» В современных вариантах стрелка вверх обычно заменяется символом «шляпа» ^. Экспоненты принимали абсолютное значение числа перед вычислением, поэтому для вычисления -X^3приходилось использовать X*X*X. Была еще одна проблема в функции экспоненты, которая обрабатывалась, -X^2а (-X)^2не в правильном порядке операций -(X^2) , который не исправлялся до третьего выпуска. INT()Функция всегда усекается к нулю.

У языка был ряд собственных особенностей. В отличие от более поздних версий, эта LETкоманда требовалась для всех операторов, в которых отсутствовала другая команда, поэтому в этой версии она не действительна. В заявлении используется запятая при печати нескольких переменных, переходя к следующей из пяти «зон». Запятая не нужна в случае, когда выводится приглашение и одно значение, поэтому она действительна. Несколько скрытая особенность заключалась в том, что все переменные могли представлять массивы (векторы) до десяти элементов (индексы от 1 до 10, измененные на 0 до 10 во втором издании) без их объявления таким образом . 10 A=5*5PRINTPRINT "value of A is "ADIM

Имена переменных ограничивались одной буквой или буквой, за которой следовала цифра (286 возможных имен переменных). Все операции выполнялись с плавающей запятой . На GE-225 и GE-235 это давало точность около 30 бит (примерно десять цифр) с диапазоном экспоненты по основанию 2 от -256 до +255.

Кроме того, из-за того, что размер слова GE-235 составляет 20 бит и используется шестибитный символьный код , язык закрепил использование трехбуквенных имен функций, поскольку это позволяло хранить три шестибитных символа в 20-битном коде. слово (используя 18 бит). Вот почему функции BASIC состоят из трех букв, вроде INTили SQR, что осталось во многих разновидностях языка еще долгое время после того, как они покинули GE-235.

Издание второе, КАРТОЧНЫЙ

Второе издание BASIC, хотя в то время так и не упоминалось, внесло лишь минимальные изменения. Выпущенный в октябре 1964 года, он позволял массивам начинаться с нижнего индекса 0 вместо 1 (полезно для представления многочленов ) и добавлял точку с запятой ;в PRINTоператор. В отличие от более поздних реализаций, где оставался пробел между элементами, точка с запятой расширяла печать до следующего кратного из трех символов, что позволяло «упаковать» больше чисел в строку вывода, чем существующий разделитель запятой.

Октябрьская версия также включала отдельное определение CARDBASIC, который был просто версией BASIC для использования в рабочих процессах на основе карт. CARDBASIC был почти идентичен интерактивной версии, за исключением того, что он не включал массивы с отсчетом от нуля. Что еще более важно для будущего языка, CARDBASIC добавил MATкоманды, работающие с числовыми матрицами. CARDBASIC не получил дальнейшего развития, так как вся идея BASIC заключалась в том, чтобы быть интерактивным.

Третье издание

Третье издание, выпущенное в 1966 году и первое, в котором использовалось название «издание», было первым, разработанным специально для работы на новом компьютере GE-635, который должен был появиться в ближайшее время. Эта версия включает MATфункции из CARDBASIC, хотя теперь они позволяют использовать индекс 0.

Новая SGNфункция давала знак своему аргументу (положительный? 0 и отрицательный? 1), при этом RESTOREбыла добавлена ​​«перемотка» позиции READ/DATA. Проблема возведения в степень была исправлена, поэтому -X^2ее можно было бы интерпретировать как -(X^2). Кроме того, INTфункция была изменена на истинный пол, в отличие от обрезки по направлению к нулю, что позволило реализовать округление с помощью INT(X+0.5).

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

Четвертое издание

Третье издание использовалось в течение всего срока службы GE-235 до осени 1967 года. Однако, поскольку планировалось получить GE-635, весной 1967 года была создана экспериментальная версия модели 635. Эта версия была партнерской. между GE и Дартмутом, при этом GE внесла новую операционную систему, а также ряд функций BASIC, разработанных их собственными усилиями Mark 1 BASIC.

Эта версия, первоначально опубликованная как дополнение к Третьему изданию, добавляла RANDOMIZEкоманду для «засева» RNDфункции и ON...GOTO«вычисляемый переход», что близко соответствовало аналогичной функции в FORTRAN. Эта версия также разрешена ON...THEN, аргументируя это тем, что IF...THENне требует этого, GOTOпоэтому здесь должен быть разрешен тот же формат. Новая TABфункция позволяла перемещать печать в заданный столбец от 0 до 74. Еще одно внутреннее изменение заключалось в том, чтобы снова изменить значение MATна 1; можно использовать 0-й индекс, но обычно он игнорируется различными командами. В процессе разработки были внесены два основных дополнения. Первым добавлением были строковые переменные, а также изменения в READ/DATAоператорах, позволяющие хранить в них строки, а также INPUTоператор для их чтения в интерактивном режиме. Одной из особенностей строковой системы было то, что конечные пробелы намеренно игнорировались при сравнении, так что «YES» и «YES» считались равными. Позже это было сочтено серьезной ошибкой. В этой версии также добавлена ​​точка с запятой в PRINTоператоры для «плотной упаковки» вывода.

Официальное Четвертое издание появилось только в 1968 году, добавив несколько новых функций поверх предыдущих. Это включало возможность определять многострочные функции с помощью DEFкоманды и мощный CHANGEоператор, который рассматривал строки как массивы кодов, подобных ASCII, чтобы разрешить посимвольные операции без необходимости перебирать строку. Это также была единственная функция манипулирования строками; чтобы извлечь один символ или подстроку, нужно было CHANGEпреобразовать его в массив чисел, манипулировать этим массивом, а затем преобразовать его обратно. Это было причиной того, что MAT снова был основан на 1, поскольку длина строки была помещена в нулевое положение, поэтому обычно игнорировалась.

Пятое издание

Пятое издание с конца 1970 года снова началось как два дополнения к четвертому изданию с февраля и апреля 1969 года.

Основным изменением стало введение обработки файлов. Раньше любые заранее определенные данные, которые должны были использоваться в программе, нужно было размещать в DATAстроках, а затем считывать по очереди с помощью READкоманды. Это расширение позволяло обращаться к файлам и читать их аналогичным образом. INPUTТеперь команда может быть использована для чтения одного элемента из файла, в то время как PRINTбы написать один. Для произвольного доступа READтеперь можно разместить в любом месте файла с помощью RESETкоманды, а WRITEзапись будет выполняться в этом месте. Текущее местоположение было возвращено LOCфункцией, а длина файла - LOF. Можно также проверить, находитесь ли вы в конце файла во время последовательного чтения, используя расширение IF END THEN....

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

Также было добавлено множество более мелких изменений. Среди них были двумерные строковые массивы, в отличие от одномерных в предыдущей версии, а также возможность использовать DEFдля определения строковых функций, а не только математических. Новые системные функции включают CLK $, DAT $ для работы со временем и датой, TIM, который возвращает истекшее время, и USR $, который возвращает номер пользователя, который сегодня будет именем пользователя. Новые строковые функции включают LEN, STR $, VAL, ASC, которые распространены в современных диалектах BASIC. В этой версии также появилась 'краткая форма для REM.

Шестое издание

Работа над шестым изданием началась осенью 1969 года, еще до того, как было завершено пятое издание. В отличие от предыдущих версий, где документы спецификации основывались на любых изменениях, внесенных в компилятор, для новой версии полная спецификация была написана заранее. Над этой версией работали Кемени и Курц, а также несколько бывших студентов, вернувшихся преподавателями; Стивен Гарланд, Джон МакГичи и Роберт Харгрейвс. Ему было предоставлено значительное время для созревания: бета-версия работала в течение трех месяцев летом 1971 года, прежде чем она была окончательно выпущена 21 сентября 1971 года. В результате того, что дизайну было предоставлено время для созревания, это было, как описал Курц, «вероятно, самая продуманная и самая стабильная программная система, которую когда-либо писал Дартмут».

Одним из наиболее значительных изменений была замена более ранней CHAINконцепции на более определенную CALL, которая действовала аналогично, GOSUBно ссылалась на имя функции, а не на номер строки. Функции были определены с использованием SUB...SUBENDи позволяли передавать произвольные параметры как часть вызова, а не с помощью COMMONсистемы. Другим важным изменением было использование дескрипторов файлов (номеров), созданных с помощью FILEкоманды, что аналогично тому, что OPENесть в большинстве современных BASIC. Новые строковые функции включают в себя функцию SEG$для возврата подстрок, аналогичную той, которая используется MID$в основанных на MS BASIC, функция, POSкоторая возвращает расположение одной строки внутри другой, и функция &для конкатенации. PRINT USINGпредоставлял форматированный вывод в манере, чем-то похожей на FORTRAN.

Шестое издание было, по сути, последней версией оригинальной концепции BASIC. Он оставался неизменным многие годы. Более поздние версии были значительно разными языками.

SBASIC

В 1976 году Стивен Гарланд собрал ряд дополнений к структурированному программированию для создания Dartmouth Structured BASIC, или SBASIC. Основной целью было заменить структуры управления на основе IF...THENи GOTOс различными блочно-ориентированных структур. Это было сделано с помощью прекомпилятора, который взял исходный код SBASIC, преобразовал его в 6-е издание BASIC, а затем скомпилировал и запустил его как обычно. SBASIC также добавил ряд графических функций, основанных на PLOTкоманде, добавленной другими программистами.

Блочные структуры завершались соответствующими операторами, как это было в Алголе 68 , в отличие от общих блочных структур, встречающихся в таких языках, как Паскаль или Си . Например, он DO WHILE...занимал несколько строк, пока не заканчивался расширением LOOP. Из DOцикла можно также выйти снизу, удалив WHILEили UNTILи поместив условие внизу на LOOP. Бесконечные циклы поддерживались с помощью DO FOREVERили LOOP FOREVER.

«Исходный» Dartmouth BASIC не допускал операторов после a THEN, только номер строки для перехода. SBASIC допускает любые инструкции, например . Это базовое расширение , впервые появившееся в 1972 году с BASIC-PLUS , к этому моменту уже широко поддерживалось большинством разнообразных BASIC, включая версии для микрокомпьютеров , которые выпускались в то время. Вдобавок к этому SBASIC добавил блочную ориентацию , поместив в отдельную строку и завершив блок с . Вдобавок к этому SBASIC добавил механизм, который сохранился до наших дней в Visual Basic .NET . IF X < 5 THEN X=X+1IF...THENIFTHENCONTINUESELECT CASE

SBASIC также добавил ряд графических команд, предназначенных для использования с плоттерами . Для этого требовалось PLOTTER "plottername"направить последующие команды на выбранное устройство и WINDOW...настроить его параметры. С этого момента на PLOT X,Yвыбранном плоттере будут появляться точки, а добавление точки с запятой в конце оператора, как используется в PRINT, оставит перо на бумаге и, например, создаст линию PLOT 10,10;20,20.

SBASIC лег в основу ANSI BASIC , но эти усилия заняли так много времени, что даже Гарланд отказался ждать его утверждения, и в начале 1980-х вместо этого начал преподавать классы программирования на Паскале.

Седьмое издание

SBASIC Гарланда был написан как предварительный компилятор, сам в исходном коде SBASIC. Система будет читать исходный код SBASIC, писать соответствующий код 6-го издания и затем компилировать этот вывод. Седьмое издание, выпущенное в 1980 году, было версией SBASIC, которая была самостоятельным компилятором. Он добавил ряд собственных дополнений. Большинство изменений было дальнейшим усовершенствованием системы для вызова внешних программ и «оверлеев», которые позволяли разбивать программу на части. В этой версии они SUBсовместно используют один файл с общими данными, обеспечивая небольшую часть данных, скрываемых внутри группы подпрограмм, или того, что сегодня известно как модуль.

Кроме того, в этой редакции добавлена ​​структурированная обработка ошибок и разрешена произвольная матричная математика в LETоператорах, так что можно было, LET A = M*4если M была матричной переменной, и вывести другую матрицу в A с умножением всех элементов в M. Наконец, еще одним важным обновлением стало то, что подпрограммы теперь используют систему записи активации, которая допускает рекурсию .

ANSI BASIC, восьмое издание

К началу 1970-х годов количество реализаций BASIC выросло до десятков, каждая из которых имела свои собственные изменения в базовой концепции, представленной в исходной версии. Большинство из них были основаны на пятом издании, хотя им часто не хватало инструкций MAT и возможности делать отступы в коде. GE была одной из таких компаний; они выпустили свои системы Mark II с 5-м изданием, а не дожидались выхода 6-го через несколько месяцев. BASIC-PLUS на платформе DEC был, пожалуй, самой близкой реализацией, включая, например, команды MAT, но затем был добавлен ряд изменений, которые не были обратно совместимы.

После выпуска 6-го издания Курц стал участвовать в попытках определить стандартный БЕЙСИК. В январе 1974 года была создана рабочая группа Американского национального института стандартов (ANSI), X3J2, и соответствующая группа Европейской ассоциации производителей компьютеров (ECMA), TC21, в сентябре того же года. В то время целью было создание двух взаимосвязанных стандартов. Minimal BASIC будет похож на Second Edition, но с добавлением строк, стандартом, которому уже сможет соответствовать практически каждый BASIC. Стандартный BASIC добавил бы больше функциональных возможностей, чтобы производить что-то большее, соответствующее реальным разновидностям BASIC, представленным на рынке.

Процесс шел медленно, и первый проект Minimal BASIC не был опубликован до января 1976 года, в результате чего он был официально принят в декабре 1977 года ECMA, а в 1979 году - ANSI как X3.60-1978. Minimal BASIC был похож на 3-е издание, включая строковые переменные, но в нем отсутствовал MAT и другие расширенные функции. Напротив, в Standard BASIC было много новых функций, которых не было в других BASIC, и многие из них были плохо изучены и стали предметом некоторой критики. Например, стандарт включал символ продолжения строки, но выбирал амперсанд &, который также использовался для конкатенации строк. Использование их в одной строке может привести к очень запутанному коду.

К этому времени выпуск первых микрокомпьютерных систем в 1975 году быстро привел к появлению Altair BASIC , первой версии того, что вскоре будет известно как Microsoft BASIC . MS BASIC был основан на BASIC-PLUS и, следовательно, в пятом издании, но не имел отступов, MAT и других функций. Он также добавил LEFT$и RIGHT$функцию, преодолев три-буквенные конвенции. По мере того, как количество микрокомпьютеров росло и в конце 1970-х превратилось в рынок домашних компьютеров , MS BASIC стал стандартом де-факто .

В связи с такими быстрыми изменениями на рынке, разработка Standard BASIC еще больше замедлилась и не была официально ратифицирована до 1987 года как X3.113-1987. К этому времени стандарты не имели реальной цели; не только MS BASIC был повсюду, но к середине 1980-х использование BASIC сокращалось, так как программное обеспечение для термоусадочной упаковки пришло на смену программам, набирающим текст. Оба стандарта в конечном итоге были отменены.

Несмотря на окончательный провал усилий ANSI, проект Standard BASIC был реализован в Дартмуте как восьмое издание в 1982 году.

DTSS интерфейс

В DTSS была реализована ранняя интегрированная среда разработки (IDE): интерактивный интерфейс командной строки . Это обеспечило ряд пользовательских команд и команд управления заданиями. Например, незанятый терминал можно подключить к учетной записи пользователя путем ввода HELLOи снова выйти из системы с помощью BYE.

Любая строка, введенная пользователем и начинающаяся с номера строки, была добавлена ​​в программу, заменяя любую ранее сохраненную строку тем же номером; все остальное считалось командой DTSS и немедленно выполнялось. Строки, которые состояли исключительно из номера строки, не сохранялись, но удаляли все ранее сохраненные строки с тем же номером. Этот метод редактирования был необходим из-за использования телетайпов в качестве оконечных устройств.

Каждая учетная запись пользователя может иметь любое количество программ BASIC, хранящихся в автономном режиме, в то время как учетные записи администратора также могут оставлять программы в постоянном хранилище. Любая из них была активна в данный момент для данной учетной записи пользователя, и если программа не была загружена, предполагалась новая программа. Доступ к сохраненным программам осуществлялся с помощью команд, которые сегодня более известны как части самого языка BASIC; например, LISTкоманда проинструктировала DTSS распечатать текущую активную программу.

Список команд

HELLO
войти в DTSS
BYE
выйти из DTSS
BASIC
запустить БАЗОВЫЙ режим
NEW
назовите и начните писать программу
OLD
получить ранее названную программу из постоянного хранилища
LIST
отображать текущую программу
SAVE
сохранить текущую программу в постоянном хранилище
UNSAVE
очистить текущую программу из постоянного хранилища
CATALOG
отображать названия программ в постоянном хранилище
SCRATCH
стереть текущую программу без очистки ее имени
RENAME
изменить название текущей программы, не стирая ее
RUN
выполнять текущие программы
STOP
прервать текущую запущенную программу
FRI
Режим Friden для телетайпов с механической подачей строки
NFR
выйти из режима Фридена
EXP
объясните (помогите) EXP EXP для списка команд, которые могут быть объяснены системой
REPLACE
сохранить текущую программу, используя имя, уже используемое для другого файла

Пользователи часто полагали, что команды являются частью языка BASIC, но на самом деле они были частью системы разделения времени и также использовались при подготовке программ ALGOL или FORTRAN через терминалы DTSS.

БАЗОВЫЙ язык

В первом выпуске реализованы следующие типы операторов, некоторые операторы и ключевые слова взяты из FORTRAN II, а некоторые из ALGOL 60 . В целом, язык более точно следует модели FORTRAN, поскольку в нем обычно есть один оператор на строку кода, отсутствуют «блоки» АЛГОЛА для группирования кода (эти конструкции структурированного программирования были основной причиной разработки АЛГОЛОВ) и использование GOTO для поток программы управления.

Из ALGOL он взял FOR...TO...STEPциклы стилей, которые заменили громоздкие DO...CONTINUEоператоры FORTRAN . BASIC также упростил IF...THENконструкцию, чтобы можно было проводить простые сравнения, например IF X>5 THEN GOTO 20, в отличие от FORTRAN IF (X-5) 20,20,30. Стиль FORTRAN «вычисленное IF» был повторно представлен с помощью ON...GOTOкоманды в более поздних версиях.

Имена переменных были ограничены от A до Z, от A0 до A9, от B0 до B9, ..., от Z0 до Z9, давая максимум 286 возможных различных переменных. Нечетная система FORTRAN для настройки переменных от I до N как целых чисел, а остальных как чисел с плавающей запятой была удалена, и все переменные предполагались с плавающей запятой и размером до 10 элементов. DIMКоманда требуется только , если массив провел более десяти элементов. Имена массивов были ограничены только от A до Z.

Список операторов BASIC

DEF
определить однострочные функции
DIM
(сокращение от Dimension ) определяет размер массивов
END
определить конец программы
STOP
остановить программу до текстового завершения
FOR / TO / STEP
определить петли
NEXT
обозначить конец петель
GOSUB
передать управление простым подпрограммам
RETURN
вернуть управление из простых подпрограмм
GOTO
передать управление другому оператору
IF / THEN
принимать решение
LET / =
присвоить результаты формулы переменной
PRINT
вывод результатов
DATA
хранить статические данные в программе
READ
входные данные, хранящиеся в операторах DATA
REM
комментарий ("ЗАМЕТКА")

Он также реализовал числовые переменные с плавающей запятой и арифметику.

Список операторов

Арифметические операторы Реляционные / логические операторы
- Отрицание (унарный указ.) = Равно
+ Добавление <> Не равно
- Вычитание (бинарная операция) < Меньше, чем
* Умножение <= Меньше или равно
/ Разделение > Больше чем
? Возведение в степень => Больше или равно
Оператор группировки
( ) Группировка

Список функций

ABS
Абсолютная величина
ATN
Значение арктангенса (результат в радианах )
COS
Значение косинуса (аргумент в радианах )
EXP
Экспоненциальное значение
INT
Целочисленное значение
LOG
Натуральное логарифмическое значение
RND
Случайное значение
SIN
Значение синуса (аргумент в радианах )
SQR
Значение квадратного корня
TAN
Значение тангенса (аргумент в радианах )

Примеры

В ранних версиях BASIC не было возможности читать и записывать внешние файлы. Для представления списков данных, которые обычно читаются из файла, BASIC включил DATAключевое слово, за которым может следовать произвольно длинный список элементов, заканчивающийся только на границе длины строки. Файл DATAбыл неисполняемым и при обнаружении пропускался. READкоманды будут потреблять данные одну за другой, отслеживая их местоположение в полной коллекции DATAэлементов во внутреннем указателе. В версии 3 RESTOREбыла добавлена ​​команда для сброса указателя на первую DATAкоманду в программе.

В этом примере «первые три значения данных считываются в X, Y и Z соответственно. Значение -1 считывается в N. Следующие 11 значений, от .1 до .3, считываются в 11 элементов массива B. . "

15 READ X, Y, Z
20 READ N
24 FOR I=0 TO 10
25 READ B(I)
26 NEXT I
40 DATA 4.2, 7.5, 25.1, -1, .1, .01, .001, .0001
45 DATA .2, .02, .002, .0002, .015, .025, .3, .03, .003

В отличие от большинства последующих BASIC, Dartmouth BASIC, начиная с третьего издания, имел ключевое слово matrix MAT, которое могло префикс ряда других команд для работы с целыми массивами данных с помощью одной команды. В этом примере из руководства 1968 года MAT INPUT Vиспользуется для ввода ряда переменных. Когда пользователь ничего не вводит в строке, этот процесс заканчивается, и осуществляется доступ к общему количеству элементов в NUMпсевдопеременной. Затем код складывает все отдельные элементы в матрицу и вычисляет среднее значение. Третье издание также добавило отступы, которые используются здесь для пояснения структуры цикла.

5 LET S = 0 
10 MAT INPUT V 
20 LET N = NUM 
30 IF N = 0 THEN 99 
40 FOR I = 1 TO N 
45   LET S = S + V(I) 
50 NEXT I 
60 PRINT S/N 
70 GO TO 5 
99 END

Примечания

использованная литература

Цитаты

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

дальнейшее чтение

  • Кемени, Джон Г. и Курц, Томас Э. (1985). Вернуться к BASIC: история, коррупция и будущее языка . Addison-Wesley Publishing Company, Inc. ISBN  0-201-13433-0 .

внешние ссылки