Введение
Язык программирования Dartmouth BASIC является оригинальной версией языка программирования BASIC. Он был разработан двумя профессорами Дартмутского колледжа, Джоном Г. Кемени и Томасом Э. Курцем. В сочетании с базовой системой совместного использования времени Дартмута (Dartmouth Time Sharing System, DTSS) он предоставлял интерактивную среду программирования для всех студентов и широкого университетского сообщества. В Дартмуте было создано несколько версий, реализованных студентами и работающих как система компиляции и запуска. Первая версия была запущена 1 мая 1964 года, а в июне стала доступна для широкого круга пользователей. За обновлениями последовал седьмой и последний выпуск в 1979 году. В 1975 году Дартмут также представил значительно обновлённую версию, известную как Structured BASIC (или SBASIC), которая добавила различные концепции структурированного программирования. SBASIC послужил основой для разработки стандарта ANSI Standard BASIC в начале 1980-х годов. Большинство диалектов BASIC восходят к Четвёртому изданию (которое добавило, например, строковые переменные, которые большинство пользователей BASIC считают само собой разумеющимися, хотя исходная версия могла выводить строки), но обычно не включают более эзотерические функции, такие как матричная математика. В отличие от компиляторов Дартмута, большинство других версий BASIC были написаны как интерпретаторы. Это решение позволило им работать в ограниченной оперативной памяти ранних микрокомпьютеров. Microsoft BASIC – один из примеров, разработанный для работы всего в 4 КБ памяти. К началу 1980-х годов десятки миллионов домашних компьютеров использовали различные варианты интерпретатора MS. Он стал де-факто стандартом для BASIC, что привело к прекращению разработки стандарта ANSI SBASIC. Позже Кемени и Курц основали компанию для разработки и продвижения версии SBASIC, известной как True BASIC. Многие ранние компьютерные игры для мэйнфреймов восходят к Dartmouth BASIC и системе DTSS. Подборка этих игр была собрана в версиях HP Time Shared BASIC в книге People's Computer Company «What to Do After You Hit Return». Многие из оригинальных исходных текстов в BASIC Computer Games и связанных с ними публикациях также восходят к Dartmouth BASIC.
Dartmouth BASIC is the original version of the BASIC programming language. It was designed by two professors at Dartmouth College, John G. Kemeny and Thomas E. Kurtz. With the underlying Dartmouth Time Sharing System (DTSS), it offered an interactive programming environment to all undergraduates as well as the larger university community. Several versions were produced at Dartmouth, implemented by undergraduate students and operating as a compile and go system. The first version ran on 1 May 1964, and it was opened to general users in June. Upgrades followed, culminating in the seventh and final release in 1979. Dartmouth also introduced a dramatically updated version known as Structured BASIC (or SBASIC) in 1975, which added various structured programming concepts. SBASIC formed the basis of the ANSI standard Standard BASIC efforts in the early 1980s. Most dialects of BASIC trace their history to the Fourth Edition (which added, e. g., string variables, which most BASIC users take for granted, though the original could print strings), but generally leave out more esoteric features like matrix math. In contrast to the Dartmouth compilers, most other BASICs were written as interpreters. This decision allowed them to run in the limited main memory of early microcomputers. Microsoft BASIC is one example, designed to run in only 4 KB of memory. By the early 1980s, tens of millions of home computers were running some variant of the MS interpreter. It became the de facto standard for BASIC, which led to the abandonment of the ANSI SBASIC efforts. Kemeny and Kurtz later formed a company to develop and promote a version of SBASIC known as True BASIC. Many early mainframe games trace their history to Dartmouth BASIC and the DTSS system. A selection of these were collected, in HP Time Shared BASIC versions, in the People's Computer Company book What to Do After You Hit Return. Many of the original source listings in BASIC Computer Games and related works also trace their history to Dartmouth BASIC.
Вычислительная техника в гуманитарных науках
Кемени и Курц согласились с необходимостью программистской грамотности среди студентов, не изучающих традиционные области STEM; только 25% студентов Дартмутского колледжа посещали курсы, связанные с STEM, но определенный уровень математики использовался практически во всех областях. Более того, по мере того как компьютеры становились все более важными в обществе, они задавались вопросом: "Как люди, по сути, не имеющие представления о компьютерах, могут принимать взвешенные решения об их использовании?" Позже Кемени отметил: "Наше видение заключалось в том, чтобы каждый студент в кампусе имел доступ к компьютеру, а любой преподаватель мог использовать компьютер в классе, когда это уместно. Все было так просто". Однако реализовать это было бы крайне сложно, учитывая доступные им ресурсы; время выполнения типичного запуска SCALP составляло около 15 минут, а языки программирования были слишком сложны для пользователей, не имеющих STEM-образования, чтобы выполнять даже базовые задачи. Проблема заключалась не только в сложности, но и во всей концепции пакетной обработки. Студенты подготавливали свои программы на перфокартах или бумажной ленте, передавали их операторам компьютеров, а затем в какой-то момент получали результаты. Это часто выявляло ошибку, требовавшую повторения всего процесса. Как они позже выразились: "Если на одну попытку уходит около суток, студент либо потеряет интерес, либо забудет, в чем заключалась проблема. В лучшем случае он будет тратить время впустую, ожидая результатов". В 1959 году, во многом благодаря репутации Кемени как новатора в области преподавания математики, кафедра получила грант от Фонда Альфреда П. Слоана в размере 500 000 долларов на строительство нового здания.
Разработка концепции
Во время визита в Массачусетский технологический институт в 1961 году они познакомились с PDP 1 и его недавно завершенной экспериментальной операционной системой с разделением времени. Джон Маккарти спросил Курца, почему они не использовали разделение времени в своих усилиях по внедрению вычислительной техники в массы. Курц вернулся в Дартмут и сказал Кемени: "Мы должны использовать разделение времени", на что Кемени немедленно ответил: "ОК". В эксперименте, чтобы проверить работоспособность этой концепции, студентов разделили на группы по пять человек и предоставляли им по очереди доступ к LGP 30 с использованием SCALP. Время работы на компьютере делилось на 15-минутные сессии, и каждая группа из пяти человек получала одну сессию, после чего передавала ее следующей группе. Было обнаружено, что студенты обычно могли завершить свои программы за два или три "цикла" в течение одной сессии. Это ясно показывало, что интерактивная система позволит сотням пользователей успешно использовать один компьютер. Появление телепринтера Teletype Model 33, использующего недавно внедренный ASCII по телефонным линиям, решило проблему доступа; программистам больше не нужно было подавать программы на перфокартах или бумажной ленте, теперь они могли вводить данные непосредственно в компьютер с помощью Model 33. Все, что требовалось, – это новая машина, достаточно мощная для поддержки системы с разделением времени, и простой язык программирования. Когда вопрос о простом языке стал рассматриваться серьезно, Кемени сразу же предложил разработать новый. Курц больше склонялся к упрощенной версии FORTRAN или ALGOL, но эти языки имели слишком много особенностей, и Курц пришел к согласию с Кемени: со временем выделились четыре ключевых элемента: система будет использовать разделение времени, потребуется новый язык, для привлечения пользователей в систему будут введены новые курсы, преподающие программирование как дополнение к другим дисциплинам, и, наконец, терминалы будут доступны всем пользователям.
Over time, four key elements emerged; the system would use time sharing, a new language would be needed, to get users onto the system new courses would introduce programming as an adjunct to other subjects, and finally, the terminals would be open to all users.
Новая система
Одной из первоначальных целей программы было интегрировать программирование в другие учебные курсы. Это удалось, но система оказалась под значительной нагрузкой, и стало очевидно, что у неё нет резервов для дальнейшего развития. В 1965 году команда обратилась в GE за поддержкой в продолжении разработки. В сентябре вице-президент Луи Радер предложил новую модель GE 635, которая работала примерно в 10 раз быстрее и включала два центральных процессора. Кроме того, планировалось добавить второй DN 30 для обработки большего количества линий, достаточного для 150 одновременных пользователей. Для размещения этого оборудования требовалось более просторное помещение, чем подвал здания College Hall, где работал компьютер 265. Питер Кивит, выпускник 1922 года, совместно с дополнительной поддержкой от NSF, возглавил строительство Вычислительного центра Кивита, который открылся в декабре 1966 года. В ожидании поставки нового компьютера летом и осенью 1966 года GE 635 в Центре разработки авиационных систем в Риме использовался для разработки MOLDS – "Системы многопользовательской онлайн-отладки". GE 635 был введен в эксплуатацию в начале 1967 года, а с использованием MOLDS новая операционная система стала полностью функциональной в сентябре, после чего GE 265 был продан. GE предоставила компьютер в бесплатное пользование на три года в рамках более широкого соглашения, по которому Дартмут разрабатывал новые версии BASIC, а GE использовал его для разработки нового выпуска своей операционной системы. Это сотрудничество оказалось успешным: GE начала развертывать эти машины как свои системы совместного использования времени Mark II, и к концу десятилетия они стали одним из крупнейших поставщиков систем совместного использования времени в мире. После ввода в эксплуатацию системы "Фаза I" команда Дартмута приступила к разработке "Фазы II" – идеальной операционной системы. Она была установлена в марте 1969 года и вскоре после этого получила название "Система совместного использования времени Дартмута". По истечении трехлетнего срока GE подарила компьютер университету. Хотя обе команды поддерживали связь и предпринимались неоднократные добросовестные попытки продолжить сотрудничество, дальнейшего взаимодействия практически не произошло, и партнерство официально прекратилось 20 сентября 1972 года.
Расширение пользовательской базы
В обзоре 1968 года отмечалось, что 80% студентов и 70% преподавателей в той или иной степени использовали систему. Сотни терминалов были распределены по всему кампусу, от больницы до школы бизнеса. 57% времени центрального процессора использовалось для учебных целей, 16% – для исследований, а остальные 27% – для "досуга"; Дартмут активно поощрял пользователей играть в игры, чтобы получить практический опыт и преодолеть страх перед компьютером. Начиная с другого гранта NSF, в 1967 году Дартмут также начал устанавливать терминалы за пределами кампуса, в том числе в средних школах региона. Эти терминалы обслуживали 69% от общего числа пользователей, хотя они использовали меньше вычислительного времени. К 1971 году насчитывалось 79 удаленных терминалов, расположенных вплоть до Нью-Джерси и Бангора, штат Мэн. Они поддерживались мультиплексорными системами, позволявшими подключать до 12 терминалов по одной аналоговой телефонной линии. Кроме того, некоторые из этих линий были доступны для подключения через модем.
Влияние
Распределение времени было важной областью исследований в 1960-х годах, и многие в компьютерной индустрии предсказывали, что вычислительная мощность станет недорогой и широко распространенной. Это наиболее ярко выразил Джон Маккарти, заявив: "вычисления однажды могут быть организованы как общественная услуга, подобно телефонной системе". Хотя на DTSS были доступны и другие языки, к 1972 году 98% его программ были написаны на BASIC. Благодаря BASIC компьютерные сервисы стали гораздо доступнее для конечных пользователей, чьи задачи было бы слишком долго кодировать для решения на компьютере. Это привело к тому, что ряд производителей представили компьютеры, специально разработанные для этого рынка пользователей, которым требовалось решать задачи малого или среднего масштаба, и которые не слишком беспокоились о прямой производительности. В частности, две машины, ориентированные непосредственно на этот рынок, стали "наиболее широко используемыми малыми системами с разделением времени, когда-либо созданными". HP 2000 работала на HP Time Shared BASIC – комбинации BASIC и операционной системы с разделением времени, почти идентичной конфигурации DTSS. Система поддерживала до 32 одновременных пользователей, используя процессор HP 2100 начального уровня для работы терминалов аналогично Datanet 30 в оригинальной конфигурации GE 265, в то время как программы выполнялись на более производительной модели той же машины, обычно отличавшейся большим объемом оперативной памяти. В BASIC от HP использовался полукомпилированный токенизированный формат для хранения программ, что улучшало время загрузки и означало, что "компиляция" занимала нулевое время. Digital Equipment Corporation пошла другим путем, предложив единое решение на базе существующей линейки PDP 11 с новой операционной системой RSTS/E и BASIC PLUS. BASIC PLUS более точно соответствовал Пятому изданию, включая команды MAT, но был реализован как чистый интерпретатор, в отличие от компилятора Dartmouth или токенизированного формата HP. Он также включал ряд управляющих структур, основанных на модели JOSS, например, Tymshare SUPER BASIC также поддерживала структуры в стиле JOSS и матричную математику, но сохранила исходную операцию компиляции и выполнения. Практически каждый поставщик того времени предлагал какое-то решение этой проблемы, хотя они могли и не быть столь близки к оригинальному. Когда Курц начал рассматривать возможность разработки стандарта ANSI для BASIC в 1973 году, он обнаружил, что количество бюро услуг совместного использования времени с доступным BASIC было больше, чем для любого другого языка. К сожалению, этот успех также был проблемой: к тому моменту существовало так много вариантов, что разработка стандарта казалась невозможной.
Игры на BASIC
Kemeny активно поощрял создание игр на платформе DTSS и считал это одной из главных причин успеха системы DTSS. Вероятно, он был автором одной из первых игр для мэйнфреймов. Хотя Кемени не приписывали авторство, позже он упомянул FTBALL, сказав, что она "была написана в воскресенье после определенной игры между командами Дартмут и Принстон в 1965 году, когда Дартмут выиграл трофей Ламберта. Это своего рода памятная программа". Игра стала неожиданной победой над фаворитом – командой Принстон. По мере расширения системы, особенно после добавления поддержки работы со строками в BASIC, DTSS стала основной платформой для разработки множества текстовых игр. В начале 1970-х годов компания People's Computer Company начала публиковать их в своем журнале, как правило, в преобразованном виде для более распространенного HP BASIC. Многие из этих листингов были собраны в их книге 1975 года "Что делать после нажатия Enter". Хотя они опубликованы в формате HP BASIC, большинство из них восходят к DTSS или к Lawrence Hall of Science в Калифорнии, где была установлена аналогичная машина под названием DECISION. Более известная коллекция – BASIC Computer Games 1978 года, где около половины программ в книге были написаны в Дартмуте, включая еще одну работу Кемени, Batnum, или, чаще всего, в одной из многих средних школ, подключенных к системе после 1968 года. Особенно продуктивной школой была Lexington High School в Массачусетсе, но упоминаются и многие другие учебные заведения. Некоторые программы не указывают свои первоначальные источники, но принадлежат авторам, которые, вероятно, были связаны с системой через школу или общественные проекты, такие как Project SOLO. Многопользовательские видеоигры стали возможны в BASIC благодаря разработке Стивеном Гарландом и Джоном МакГичи интерфейса MOTIF Multiple Online Terminal Interface для DTSS. Чтобы начать игру, пользователь вводил LINK, за которым следовало имя сессии, вместо RUN, что позволяло другим пользователям подключаться к игре, вводя JOIN, за которым следовало имя сессии. MOTIF затем мультиплексировал ввод и вывод для программы BASIC, добавляя в начало каждой строки ввода и вывода строковый идентификатор. Первыми программами, разработанными с использованием этого интерфейса, были двухместная версия FTBALL и игра в покер на пять игроков. Более серьезной была экономическая игра, в которой до десяти студентов школы бизнеса Амоса Така могли соревноваться в производстве и маркетинге одного продукта.
Первое издание
Оригинальная версия, ретроспективно известная как версия 1, поддерживала команды LET, PRINT, END, FOR NEXT, GOTO, GOSUB RETURN, IF THEN, DEF, READ, DATA, DIM и REM. Она включала базовые математические инструкции , , , и , а также символ «стрелка вверх» для возведения в степень, «поскольку на телетайпе невозможно было напечатать верхние индексы». В современных вариантах символ «стрелка вверх» обычно заменяется символом «крышка» (hat). Возведение в степень принимало абсолютное значение числа перед вычислением, поэтому для вычисления необходимо было использовать . Существовала дополнительная проблема в функции возведения в степень, которая интерпретировала как , вместо правильного порядка операций , которая не была исправлена до третьего выпуска. Функция INT всегда усекала в сторону нуля. Язык обладал рядом своих особенностей. В отличие от более поздних версий, команда LET требовалась для всех операторов, не содержащих другую команду, поэтому была недопустима в этой версии. Оператор PRINT использовал запятую при выводе нескольких переменных, переходя к следующей из пяти «зон». Запятая не требовалась при выводе запроса и единственного значения, поэтому была допустима. Скрытой особенностью было то, что все переменные могли представлять массивы (векторы) до десяти элементов (индексы от 1 до 10, измененные на 0 до 9 во втором издании) без предварительного объявления с помощью DIM. DIM требовался только в том случае, если был необходим вектор другого размера. Имена переменных ограничивались одной буквой или буквой, за которой следует цифра (286 возможных имен переменных). Пользовательские функции могли состоять только из одной буквы, таким образом, все операции выполнялись с плавающей точкой. На GE 225 и GE 235 это обеспечивало точность около 30 бит (примерно десять цифр) с диапазоном экспоненты по основанию 2 от -256 до +255. Кроме того, из-за того, что размер слова GE 235 составлял 20 бит и использовался шестибитный код символов, язык закрепил использование трехбуквенных имен функций, поскольку это позволяло хранить три шестибитных символа в 20-битном слове (используя 18 бит). Именно поэтому основные функции состоят из трех букв, такие как INT или SQR, что сохранилось во многих вариантах языка даже после того, как они перестали использоваться на GE 235.
Второе издание, CARDBASIC
Второе издание BASIC (хотя в то время оно так и не было названо) внесло лишь незначительные изменения. Выпущенный в октябре 1964 года, он позволял начинать массивы с индекса 0 вместо 1 (что было удобно для представления полиномов) и добавил точку с запятой (;) в оператор PRINT. В отличие от последующих реализаций, где точка с запятой оставляла пробел между элементами, она сдвигала вывод на следующий байт, кратный трем символам, что позволяло "упаковывать" больше чисел в строку вывода, чем при использовании существующего разделителя – запятой. Размер в три символа был побочным эффектом 20-битной разрядности слова компьютера GE 235, который хранил три 6-битных символа. Переход к следующему трехсимвольному столбцу осуществлялся просто путем перехода к следующему слову в памяти. Октябрьская версия также включала отдельное определение для CARDBASIC – это была версия BASIC, предназначенная для использования в системах с перфокартами. CARDBASIC был почти идентичен интерактивной версии, за исключением отсутствия поддержки массивов с нулевым индексом. Однако, что было более важно для будущего языка, CARDBASIC добавил команды MAT для работы с числовыми матрицами. CARDBASIC больше не разрабатывался, поскольку изначально BASIC задумывался как интерактивная система.
Третье издание
Третье издание, выпущенное в 1966 году и первое, получившее название "издание", было первым, разработанным специально для работы на новом компьютере GE 635, который ожидался в ближайшее время. Эта версия включала в себя функции MAT из CARDBASIC, и теперь они могли использовать 0 в качестве индекса. Новая функция SGN возвращала знак своего аргумента (положительный – 0, отрицательный – 1), а команда RESTORE была добавлена для "возврата" к началу операторов READ/DATA. Проблема с возведением в степень была исправлена, поэтому теперь интерпретировалось как . Кроме того, функция INT была изменена на функцию математического округления в меньшую сторону (floor), а не усечения к нулю, что позволило реализовать округление с помощью 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. Еще одним внутренним изменением стало возвращение к 1-индексации для MAT; нулевой индекс можно было использовать, но он обычно игнорировался командами. Основным нововведением этой версии стали строковые переменные, а также изменения в операторах READ/DATA, позволяющие хранить в них строки, и в операторе INPUT для интерактивного ввода строк. Особенностью строковой системы было преднамеренное игнорирование завершающих пробелов при сравнении строк, так что "YES" и "YES " считались равными. Позже это было признано серьезной ошибкой. Строковые переменные обозначались знаком доллара ($), просто потому, что на большинстве клавиатур не хватало других подходящих символов. Кто-то заметил, что $ напоминает букву S в слове "String", и на этом вопрос был решен. Операции над строками выполнялись с помощью новой команды. Она преобразовывала строковое значение переменной в эквивалентный набор кодов ASCII. Затем числовый массив можно было обрабатывать и преобразовывать обратно в строку. Например, следующий код выводит "is" на консоль:
Строка 140 устанавливает длину строки равной 2, которую необходимо контролировать пользователю. Первый символ находится в T(1). Хотя эта система была гибкой, она была далеко не удобной в использовании. В более поздних версиях эта проблема была решена с помощью новой функциональности. Незначительные изменения в этой версии изменили функцию точки с запятой в операторах PRINT, чтобы обеспечить "плотную" печать без пробелов, а также апостроф в качестве сокращенной формы REM. Официальное Четвертое издание появилось только в 1968 году и включало в себя несколько новых функций, дополняющих предыдущие изменения. Среди них – возможность определения многострочных функций с помощью команды DEF и мощная команда CHANGE, которая рассматривала строки как массивы кодов ASCII, позволяя выполнять операции над отдельными символами без перебора всей строки. Это была единственная функция для работы со строками; для извлечения отдельного символа или подстроки необходимо было использовать CHANGE для преобразования их в массив чисел, обрабатывать этот массив и затем преобразовывать его обратно. Именно поэтому MAT снова стал 1-индексированным; длина строки помещалась в нулевую ячейку, которую обычно нужно было игнорировать.
Пятое издание
Пятое издание, с конца 1970 года, вновь началось как два дополнения к четвертому изданию, с февраля и апреля 1969 года. Основным изменением было введение работы с файлами. Ранее любые предопределенные данные, необходимые для программы, приходилось помещать в строки, а затем считывать их по одному с помощью команды. Эта функция могла использоваться для чтения файлов аналогичным образом. Теперь команда могла читать один элемент из файла и записывать один в файл. Файлы открывались с помощью нового ключевого слова, за которым следовал список строковых констант, описывающих имена файлов. Поскольку это были константы, изменение имени файла требовало изменения кода. Именам присваивались номера: первое имя становилось файлом №1 и так далее. Поддерживались два формата файлов: прямой доступ и последовательный. Последовательный файл рассматривался как текстовый файл сегодня – можно было прочитать строку текста в строковую переменную, а затем вывести ее на терминал. В более поздних версиях добавили возможность указывать файлы строками, хотя некоторое время для этого требовалось указать в начале программы, что используется этот формат. Для файлов с прямым доступом имя должно было указывать тип данных внутри: указывало, что файл содержит бинарные данные, а указывало, что его следует читать как строки с максимальной длиной. Команда могла позиционировать указатель в любом месте файла с прямым доступом, текущее положение возвращалось функцией, а длина файла – функцией. Во время последовательного чтения можно было также проверить, достигнут ли конец файла, используя IF END THEN.
Другим важным изменением стала возможность одной программы BASIC вызывать другую с помощью команды и передавать ей переменные с помощью списка. Позже выяснилось, что эта концепция имеет ряд проблем, но она тем не менее использовалась для написания крупных программ. Обработка строк была значительно улучшена. Новая команда возвращала новую строку, вырезанную из другой. Например, строка "is" извлекается из более длинной строки. С помощью новой команды это можно сократить до , что аналогично функции, встречающейся в большинстве диалектов. SEG$ использует первый и последний индексы, MID$ – первый индекс и длину. возвращала длину строки, которая в противном случае теперь обрабатывалась внутренне и не требовала вычислений в большинстве случаев, а возвращала позицию одной строки внутри другой, что в большинстве диалектов обрабатывалось функцией. Амперсанд (&) был введен для конкатенации строк. Было добавлено множество других незначительных изменений. Среди них – двумерные строковые массивы, в отличие от одномерных в предыдущей версии, а также возможность использовать для определения строковых и математических функций. Новые системные функции включали , для работы со временем и датой, которая возвращала прошедшее время, и которая возвращала номер пользователя, то есть современное имя пользователя. Новые строковые функции включают , , , которые часто встречаются в современных диалектах BASIC. В этой версии также появилась сокращенная форма для .
Шестое издание
Работа над шестой редакцией началась осенью 1969 года, до завершения пятой редакции. Для новой версии была заранее написана полная спецификация. Это отличалось от предыдущих версий, где спецификации создавались на основе изменений в компиляторе. Над этой версией работали Кемени и Курц, а также несколько бывших студентов, вернувшихся в качестве преподавателей: Стивен Гарланд, Джон МакГичи и Роберт Харгрейвс. Ей дали достаточно времени на доработку: бета-версия работала три месяца в течение лета 1971 года, прежде чем она была окончательно выпущена 21 сентября 1971 года. Благодаря этой доработке Курц описал её как «вероятно, наиболее продуманную и стабильную программную систему, которую когда-либо создавал Дартмут». Одним из самых значительных изменений стала замена более ранней концепции CHAIN на гораздо более чётко определённую CALL, которая работала аналогично GOSUB, но обращалась к имени функции, а не к номеру строки. Функции определялись с помощью SUB…SUBEND и принимали произвольные параметры при вызове, вместо использования глобальных переменных через объявления COMMON. Другим важным изменением стало использование файловых дескрипторов (номеров), создаваемых командой FILE, аналогичной команде OPEN, встречающейся в большинстве современных версий BASIC. PRINT USING обеспечивал форматированный вывод, в некоторой степени похожий на FORTRAN, а INPUT принимал ввод без интерпретации, позволяя вводить запятые, точки с запятой и даже код BASIC. Шестое издание по сути стало последней версией оригинальной концепции BASIC. Оно оставалось неизменным на протяжении многих лет. Последующие версии значительно отличались от этого языка.
SBASIC
В 1976 году Стивен Гарланд объединил ряд дополнений к структурированному программированию для создания Dartmouth Structured BASIC, или SBASIC. Основной целью было заменить структуры управления, основанные на IF THEN и GOTO, разнообразными блочными структурами. Это было реализовано с помощью прекомпилятора, который преобразовывал исходный код SBASIC в BASIC 6-го издания, а затем компилировал и запускал его как обычно. SBASIC также добавил ряд графических функций, основанных на команде PLOT, разработанной другими программистами. Блочные структуры завершались соответствующими операторами, как в ALGOL 68, в отличие от общих блочных структур, встречающихся в языках, таких как Pascal или C. Например, DO WHILE занимал несколько строк, пока не заканчивался оператором LOOP. Цикл DO также мог быть завершен снизу, удалив WHILE или UNTIL и поместив условие в конце оператора LOOP. Бесконечные циклы поддерживались с помощью DO FOREVER или LOOP FOREVER. В "оригинальном" Dartmouth BASIC после THEN допускался только номер строки для перехода, а не какие-либо операторы. SBASIC разрешал любые операторы, поэтому, например, это базовое расширение для IF THEN, впервые реализованное в 1972 году в BASIC PLUS, к этому моменту уже широко поддерживалось большинством версий BASIC, включая версии для микрокомпьютеров, которые выпускались в то время. Более того, SBASIC добавил блочный IF, размещая THEN на отдельной строке и завершая блок оператором CONTINUE. Кроме того, SBASIC добавил механизм SELECT CASE, который сохранился и по сей день в Visual Basic NET. SBASIC также добавил ряд графических команд, предназначенных для использования с плоттерами. Для этого требовалось указать PLOTTER "имя_плоттера", чтобы последующие команды направлялись на выбранное устройство, а WINDOW – для настройки его параметров. После этого PLOT X,Y выводил точки на выбранном плоттере, а добавление точки с запятой в конце оператора, как в PRINT, оставляло перо на бумаге и рисовало линию, например, PLOT 10,10;20,20. SBASIC в конечном итоге стал основой для стандарта ANSI X3.113 1987 года для Full Basic, который расширил более ранний стандарт ANSI X3.60 1978 года для Minimal Basic. Длительная задержка в создании этого стандарта, а также пренебрежительное отношение компьютерных ученых к неструктурированному Basic привели к тому, что комитет Колледжа, разрабатывающий курс повышения квалификации по информатике, который возглавлял Гарланд, решил требовать использования Pascal и не допускать Basic в качестве языка для курса. Гарланд использовал SBASIC для преподавания вводного курса по информатике в Дартмуте, но переписал свой учебник для курса на Pascal, чтобы его можно было использовать для преподавания курса AP.
Седьмое издание
SBASIC от Garland был предкомпилятором, написанным на самом исходном коде SBASIC. Система считывала исходный код SBASIC, генерировала соответствующий код 6-й редакции, а затем компилировала этот результат. Седьмая редакция, выпущенная в 1980 году, представляла собой самостоятельный компилятор SBASIC. Она включала ряд собственных дополнений. Большинство изменений представляли собой дальнейшее развитие системы для вызова внешних программ и "накладок", которые можно было использовать для разбиения программы на части. В этой версии подпрограммы, совместно использующие один файл, фактически обменивались данными друг с другом. Это обеспечивало некоторую степень сокрытия данных внутри группы подпрограмм. Такое разделение сегодня известно как модуль. Кроме того, в этой редакции была добавлена структурированная обработка ошибок и произвольные матричные вычисления в операторах LET, позволяя, например, выполнять LET A = M*4, где M – матричная переменная, и оператор выводил бы в A другую матрицу, со всеми элементами M, умноженными на 4. Наконец, еще одним важным обновлением стало использование записей активации для подпрограмм, что сделало возможной рекурсию.
ANSI BASIC, Восьмое издание
К началу 1970-х годов число реализаций BASIC выросло до десятков, каждая из которых вносила свои изменения в базовую концепцию, представленную в оригинальной версии. Большинство из них основывались на Пятом издании, хотя часто не поддерживали инструкции MAT и возможность отступа кода. GE была одной из таких компаний; они выпустили свои системы Mark II на базе 5-го издания, вместо того чтобы ждать выхода 6-го, который должен был появиться через несколько месяцев. BASIC PLUS на платформе DEC был, пожалуй, наиболее близкой реализацией, включавшей, например, команды 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 вывести на печать текущую активную программу.
Система TEACH/тестирования
Около 80% всех студентов Дартмута в конце 1960-х годов изучали два курса математики, а на втором курсе, будь то математический анализ или дискретная математика, они осваивали язык Basic. В начале этих курсов им читались две часовые лекции по Basic, после чего требовалось написать четыре программы на этом языке – от программ для приближенного вычисления числа π или поиска корня полинома пятой степени до программ для решения дифференциального уравнения или определения (методом моделирования) предельной вероятности в цепи Маркова. Система TEACH/Test помогала студентам в выполнении этих заданий. Когда студент считал, что программа работает, он вводил команду TEST, после чего программа, написанная преподавателем, либо одобряла написанный код, либо давала подсказку об ошибке. Студенты должны были предоставить листинг каждой программы, пример выполнения (RUN) и подтверждение одобрения от системы TEACH/Test. Система не выставляла оценок за задания и не фиксировала количество попыток (команд TEST), сделанных студентом; она лишь оказывала помощь студентам и преподавателям.
Язык BASIC
Первый выпуск реализовал следующие типы операторов, заимствуя некоторые из FORTRAN II и некоторые из ALGOL 60. В целом, язык больше соответствует модели FORTRAN, в частности, обычно имеет один оператор на строку кода, не имеет "блоков" ALGOL для группировки кода (эти структуры структурированного программирования были основной причиной разработки ALGOL) и использует оператор GOTO для управления потоком программы. От ALGOL были взяты циклы в стиле FOR TO STEP, которые заменили неудобные конструкции DO CONTINUE в FORTRAN. BASIC также упростил конструкцию IF THEN, позволяя простые сравнения, в отличие от IF (X 5) 20,20,30 в FORTRAN. "Вычисляемый IF" в стиле FORTRAN был возвращен в более поздних версиях с помощью команды ON GOTO. Имена переменных ограничивались буквами от A до Z, от A0 до A9, от B0 до B9, от Z0 до Z9, что давало максимум 286 различных возможных переменных. Странная система FORTRAN, устанавливающая переменные от I до N как целые, а остальные как числа с плавающей точкой, была удалена, и все переменные считались числами с плавающей точкой и имели размерность до 10 элементов. Команда DIM требовалась только в том случае, если массив содержал более десяти элементов. Имена массивов ограничивались только буквами от A до Z.
Список операторов
Арифметические операторыОтносительные/логические операторы Отрицание (унарная оп.)=Равно+Сложение<>Не равно-Вычитание (бинарная оп.)<Меньше*Умножение<=Меньше или равно/Деление>Больше?Возведение в степень>=Больше или равноГруппирующий оператор( )Группировка