Введение

Интерпретатор языка программирования BASIC для других диалектов BASIC, созданных в HP

HP Time Shared BASIC (HP TSB) – это интерпретатор языка программирования BASIC для линейки компьютеров HP 2000 компании Hewlett Packard, основанных на миникомпьютерах, использующих системы совместного доступа к вычислительным ресурсам. HP TSB исторически известен как платформа, на которой были выпущены первые публичные версии игры Star Trek. Система реализует диалект BASIC, а также примитивную систему пользовательских учетных записей и библиотеку программ, позволяющую нескольким пользователям одновременно работать с системой. Эти системы оказали значительное влияние в начале и середине 1970-х годов и породили большое количество программ. HP поддерживала базу данных пользовательских программ, которые клиенты могли заказать на перфоленте за небольшую плату. Большинство BASIC-ов 1970-х годов восходят к оригинальному Dartmouth BASIC 1960-х годов, однако ранние версии Dartmouth не поддерживали строковые переменные и функции для работы со строками. Разные производители предлагали собственные решения: HP использовала систему, аналогичную Fortran и другим языкам, с использованием выделения подмассивов, в то время как DEC позже представила функции MID/LEFT/RIGHT. С появлением микрокомпьютеров в середине 1970-х годов появилось множество новых BASIC-ов, чьи парсеры были основаны на синтаксисе DEC или HP. Altair BASIC, исходная версия, ставшая Microsoft BASIC, была создана по образцу BASIC PLUS от DEC. Другие, включая Integer BASIC от Apple, Atari BASIC и North Star BASIC, были разработаны в стиле HP. Это затрудняло перенос программ между этими платформами, особенно при работе со строками.

Номенклатура

Программное обеспечение также было известно по своему версионному наименованию, привязанному к версии аппаратного обеспечения, на котором оно работало, например, HP 2000C Time Shared BASIC, а операционная система выпускалась в различных вариантах – 2000A, 2000B, 2000C, High Speed 2000C, 2000E и 2000F. В некоторых публикациях HP также называла этот язык "Access BASIC". Это соответствовало наименованию машин, на которых он работал, известных как "2000/Access" в некоторых публикациях. Эта терминология, судя по всему, использовалась лишь короткое время после запуска платформы.

Подробности платформы

За исключением систем 2000A и 2000E, система реализована с использованием архитектуры с двумя процессорами. Один полностью сконфигурированный процессор серии HP 2100 используется для выполнения большей части системного кода и всего пользовательского кода, а второй, менее мощный процессор серии HP 2100 – для обработки последовательных линий RS 232, через которые подключались пользователи, работающие в режиме разделения времени. В зависимости от аппаратной конфигурации система поддерживает до 16 или до 32 одновременных удаленных пользователей. Типичным терминалом для системы TSB был Teletype Model 33 ASR, подключенный непосредственно к процессору ввода-вывода или через модем или акустический соединитель. Имена учетных записей состоят из одной буквы алфавита, за которой следуют три цифры, например, B001. Привилегированные учетные записи начинались с буквы "A" и имели дополнительные возможности для хранения команд и программ. Учетная запись суперпользователя – A000. Такая схема позволяет создать до 26 000 учетных записей пользователей. Во время выполнения пользовательские программы переносятся на диск с фиксированными головками – физически это диск, но он работает как магнитный барабан. Когда программы не выполняются, они хранятся на дисках с подвижными головками, в картриджах или пакетах. Привилегированные пользователи также могут хранить программы на гораздо более быстром барабане. Данные с жесткого диска резервировались на магнитную ленту. Имена программ и файлов состоят из комбинации до шести букв (A-Z) и цифр (0-9). Программы хранятся в токенизированном формате с помощью команды SAVE. Они также могут быть сохранены в полускомпилированном формате с помощью команды CSAVE, что позволяет им запускаться быстрее. Поскольку система была тесно связана с использованием широко распространенных телепринтеров, окончания строк в файлах состояли из символа возврата каретки (ASCII CR, 0D в шестнадцатеричном формате), за которым следовал символ перевода строки (ASCII LF, 0A в шестнадцатеричном формате).

Управление струнами

Строки в TSB рассматриваются как массив символов, а не как единый многосимвольный объект. По умолчанию, для них выделяется один символ в памяти, и если требуется строка большей длины, она должна быть предварительно объявлена. Например, DIM A$[10] создаст строку, способную хранить максимум 10 символов. Максимальная длина строки в TSB составляет 255 символов. Доступ к подстрокам внутри строк осуществляется с помощью "срезов": A$(L,R) или A$[L,R], где подстрока начинается с символа, указанного индексом L, и заканчивается символом, указанным индексом R, или форма A$[L], где подстрока начинается с символа, указанного индексом L, и продолжается до конца строки. TSB принимает круглые скобки () или квадратные скобки [] взаимозаменяемо. Индексы массивов и подстрок начинаются с 1. Это резко контрастирует с BASIC, следующими DEC, которые используют функции LEFT$, MID$ и RIGHT$ для доступа к подстрокам, хотя ANSI BASIC продолжает использовать аналогичный синтаксис подстрок, впервые представленный Hewlett Packard. Обозначение HP также можно использовать в правой части оператора LET или INPUT для изменения части существующего строкового значения, например, 100 A$[3,5]="XYZ" или 120 B$[3]="CHANGE ALL BUT FIRST TWO CHARS", что невозможно в ранних реализациях LEFT/MID/RIGHT. Главное преимущество такого способа доступа к строкам заключается в том, что он устраняет необходимость в сложном управлении памятью, которое требуется при изменении длины строки. MS BASIC имела обширную библиотеку для сжатия памяти путем удаления неиспользуемого пространства в куче строк, когда системе не хватало памяти. Она также была печально известна своей медлительностью и неоднократно модифицировалась в течение своего жизненного цикла для повышения производительности или исправления ошибок. Недостатком подхода TSB является то, что строка всегда занимает весь объем памяти, выделенный оператором DIM, даже если сама строка пуста, и простые операции, такие как конкатенация, могут привести к переполнению, если строка изначально не была объявлена достаточно большой. Более поздние версии Dartmouth BASIC включали строковые переменные, основанные на той же схеме, что и в BASIC PLUS и MS BASIC. Однако в этой версии не использовались функции LEFT/MID/RIGHT для работы со строками, а вместо этого использовалась команда CHANGE, которая преобразовывала строку в эквивалентные ASCII-значения и обратно. HP включила идентичную функциональность, просто изменив название на CONVERT. Кроме того, можно было использовать одинарную кавычку для преобразования числовой константы в символ ASCII, что позволяло собирать строку по частям; A$='23 '64 '49 "DEF" создаст строку "ABCDEF" без необходимости использования функции CHR$.