1

Тема: Бейсик и стандарты

Тут в группе речь зашла о стандартах на язык Бейсик. Про стандарты есть даже упоминание в документации на Бейсик Агат. Заявлено, что он соответствует какому-то загадочному стандарту АНСИ Х30 1978. Такого в природе не нашлось, но нашелся стандарт ANSI X3.60-1978.

Глянул я в стандарт и нашел некоторые любопытные моменты. Например, оказалось что в Бейсике допустимы два варианта написания операторов GOTO и GOSUB. Можно писать слитно, а можно через пробел - GO TO, GO SUB.
Ну, я решил поставить опыт и написал простую программку:

10 GO TO 100
20 STOP
100 PRINT "HELLO"
110 GO TO 20

Ввел ее на Агате и на Apple и вывел листинг.
На Apple ][ оператор "склеился" в обычный GOTO:

10  GOTO 100
20  STOP
100  PRINT "HELLO"
110  GOTO 20

Программа запускается и работает.
А вот на Агате (проверял в Бейсике-60 и ИКП-7) результат отличается. Пробел остался:

10  GO TO 100
20  STOP
100  PRINT "HELLO"
110  GO TO 20

Но самое интересное, что при запуске программа падает в 10 строке с синтаксической ошибкой. То есть, там не оператор GOTO. Судя по байт-коду, это переменная GO и оператор TO.


Потом проверил GOSUB:

10 GO SUB 100
20 STOP
100 PRINT "HELLO"
110 RETURN

На Apple ][ оператор вернулся в "склеенное" состояние:

10  GOSUB 100
20  STOP
100  PRINT "HELLO"
110  RETURN

Программа работает нормально.

На Агате результат неожиданный:

10  GO SUB100
20  STOP
100  PRINT "HELLO"
110  RETURN

Программа падает в строке 10, но теперь тут две переменных: GO и SUB, а после SUB число 100.


Еще один пример. Немножко хулиганский, так как по стандарту перед каждым оператором должен стоять пробел. Что должен делать интерпретатор, если пробела нет - стандарт умалчивает. Программка такая:

10 A=5
20 FORI=ATOA*2
30 PRINTI
40 NEXT

Apple это понимает без проблем и выводит такой листинг:

10 A = 5
20  FOR I = A TO A * 2
30  PRINT I
40  NEXT

А вот Агат - не очень:

10 A = 5
20  FOR I =  AT  OA * 2
30  PRINT I
40  NEXT

ATOA превратилось в оператор AT и переменную OA. Похоже, что Бейсик Apple сначала ищет оператор TO, а потом пытается разобраться с именами переменных. А вот Бейсик Агат разбирает все последовательно и первым находит оператор AT.

Бейсик Apple тоже можно "ввести в заблуждение". Например, если переименовать переменную A в BAT, то он "увидит" это как переменную B и оператор AT. Но оператор TO он найдет и в этом случае.


Получается, что добавление новых возможностей в Бейсик Агат заодно привело к некоторой потере совместимости со стандартом.

Интересно, что оператор DEF FN работает на Apple и Агате одинаково. Можно ввести DEFFNA(X), можно DEF FN A(X) - разницы нет, все работает правильно.

2

Re: Бейсик и стандарты

Про бейсик раньше так говорили: сколько интерпретаторов столько и стандартов :)

Насколько я понимаю идею этого языка: писать программу быстро и просто, максимально лёгкое освоение, нет особого расчёта на что-то сложное (требующее жестких структур, синтаксиса...). Но поддержка того, что выгодно отличает данный компьютер от других. Графика, принтер, спрайты, музыка - всё, что есть.

И всё же были два подхода: распространенный (Ямаха, Агат, Корвет, PC....), вроде бы он пошел от Microsoft и довольно заметно отличающийся Dec'овский, который шел с RT11 (ДВК, Электроника-60...).

1) В первой группе разделитель операторов в строке - двоеточие ':', во втором - обратный '\'.
2) В первом goto слитно, во втором - раздельно (даже если ввести слитно, при выводе листинга будет пробел).
3) В первом работа с файлами была реализована по  разному, но обычно синтаксис открытия файлов был короткий.
Во втором - довольно длинный: open "dk:xxxx.sav" for output as file # n
Когда клавиатуру-то ещё плохо освоил, такие фразы немного отпугивали.
4) В первом графика была всегда, во втором её могло вообще не быть.
5) В первом всякие on error goto есть, во втором, вроде бы, не было.
6) Экранное редактирование: в первых оно было, в Ямахе вообще оно было максимально удобным и довольно сложным внутри (насколько я понимаю) - там очень сильный упор на интуитивное редактирование. Во втором его могло не быть вообще никакого. Нужно сменить один символ в строке - всю строку заного набирать нужно.
7) Предкомпиляция: у первой группы программа хранилась во внутреннем представлении и могла также быть сохранена на диск. Во второй группе на диске хранился только ASCII-вариант  программы. Вероятно и прекомпиляции тоже не было.

---=---

Ещё одна штука, тоже может быть интересной:
когда в ТГУ появились первые компы для научных сотрудников (это были ДВК, примерно в середине 80-х), был такой комп (редкий в наших краях) - ДВК-3М. У него был ГРАФИЧЕСКИЙ видеоконтроллер (отдельный от привычного текстового).
И работал он параллельно с текстовым (т.е. графика буквально накладывалась на аппаратный текстовый режим).

И вот под этот контроллер местные программеры доработали этот самый RT11-й бейсик.
При запуске он прямо по русски писал одну из фамилий "Жуков". Возможно, "Жуков & Паскаль".
Иван Паскаль - чел вообще легендарный в своих кругах, он в 90-е немало приложил усилий к руссификации FreeBSD, гугл до сих пор легко находит ссылки на него. Да и в переводных книжках по этой теме доводилось встречать его упоминание в списках литературы.

И вспоминается мне, что доработки там были довольно необычные по синтаксису.
И интересно, распространился ли этот бейсик за пределы ТГУ или нет ?
Есть у меня пара дискеток, где, возможно, всё это добро с примерами осталось, но там формат MX, его мне пока прочитать нечем.
Да и неясно, как насчёт эмуляции этого графконтроллера в нынешних эмуляторах.

3

Re: Бейсик и стандарты

Была еще промежуточная ветвь для PDP-11 совместимых :)
На БК-0010 и УКНЦ был Бейсик Вильнюс. У него было две отличительных черты:
1) синтаксис практически как у Майкрософтовского MSX Бейсика
2) перед запуском программа компилировалась в шитый код. В результате пустой цикл с целочисленной переменной цикла крутился со страшной (по Бейсиковым меркам) скоростью - почти 5000 итераций в секунду.

Что интересно, MSX Бейсик фактически описан в ГОСТ 27787-88.

4 Отредактировано Voldemar0 (29-11-2023 21:49)

Re: Бейсик и стандарты

Я видел БК в работе, но только несколько минут.
Как-то она мне досталась в полуразобранном металлистами состоянии, но всё же пыталась работать.
И тут же нашелся новый владелец.

У БК-шного бейсика свободное перемещение курсора по экрану в непосредственном режиме интерпретатора ?

-=-=-

Кусок проги на бейсике RT-11, да ещё и с графическим расширением для ДВК-3:

10 C$=CHR$(27)+"H"+CHR$(27)+"J"
20 L$=CHR$(15) \ R$=CHR$(14)
44 PRINT R$;"IMQ FAJLA";L$; \ INPUT F$
46 OPEN "DK:"+F$ FOR OUTPUT AS FILE #1
50 VECTI(1,0,142,399,142) \ VECTR(1,394,137)
60 VECTI(1,399,142,394,147) \ VECTI(1,199,285,199,0)
70 VECTR(1,194,5) \ VECTI(1,199,0,204,5)
75 VECTI(1,198,90,201,90)
80 POINT(0,202,7) \ FRMT(0,0) \ DIRECT(0)
90 DCHAR(1,"Y") \ POINT(0,393,150) \ DCHAR(1,"X")
100 PRINT C$
110 PRINT R$;"WWEDITE ";L$;"R";R$;" I <SIGMA>."
120 PRINT "DLQ OKON^ANIQ WWEDITE ";L$;"R= 0,";R$;" DLQ STIRANIQ GRAFIKA ";L$;"R= 1."
135 PRINT #1,R \ PRINT #1,S
140 IF R<>0 THEN 180
145 CLOSE 
150 PRINT R$;"GRAFIK OSTAWITX ";L$;"(Y/N)";
160 INPUT A$ \ IF A$="N" THEN GRAF(0,1)
170 PRINT C$;R$;"DOSWIDANIQ";L$ \ STOP
180 S=S*PI/180 \ X=R*COS...............................
................................................
Spoiler

Эта прога - какая-то часть на коленке написанного пакетика программ для расчёта перестраиваемых
интерференционных светофильтров. Я писал это классе в 7-8. Формулы не мои,
разумеется, я только кодером выступал :)
Но сами эти фильтры - вещь очень интересная. Пластинка, несколько мм толщиной,
в зависимости от угла падения света отражает только какую-то его узкую спектральную полосу.
Это получался очень компактный инструмент спектрального анализа. СФТИ ими занимался
в 90-е. Но не взлетело. Хотя были опытные приборы, использовавшие этот эффект.

5

Re: Бейсик и стандарты

Voldemar0 пишет:

У БК-шного бейсика свободное перемещение курсора по экрану в непосредственном режиме интерпретатора ?

Как в БК было - не помню, сам держал его в руках всего пару часов, пока видеовход в телевизоре знакомому делал. Зато класс УКНЦ у нас был на УПК. На УКНЦ курсор перемещается свободно. А после команды AUTO еще и строки автоматически нумеруются при вводе.