Был ли когда-нибудь первый параметр для оператора CLEAR? - PullRequest
0 голосов
/ 08 декабря 2018

И в GW-BASIC, и в QuickBASIC операторам передаются аргументы, некоторые из которых являются необязательными и могут быть опущены в зависимости от оператора:

REM Move the text cursor to the specified column and row.
LOCATE row%, column%

REM Move the text cursor to the specified column without changing the row.
LOCATE , column%

В GW-BASIC оператор CLEAR имеет виддовольно необычно, поскольку его первый «аргумент» всегда опускается:

CLEAR , basicMem
CLEAR , basicMem, basicStack
CLEAR , , basicStack

В QuickBASIC параметр basicMem стал необязательным из-за того, что интерпретатор / среда выполнения управляют собственной памятью:

CLEAR , , basicStack

Что мне интересно, так это то, что первый «аргумент», использованный когда-либо для чего-то до GW-BASIC, то есть что-то вроде этого, действительно было полезно:

CLEAR missingArg, basicMem, basicStack
REM   ^^^^^^^^^^
REM      here

То есть был ли когда-либо целенаправленный-пустой аргумент перед первой запятой?

Если у кого-нибудь есть идеи, я бы хотел знать!

1 Ответ

0 голосов
/ 11 декабря 2018

Что меня интересует, так это то, что первый «аргумент» когда-либо использовался для чего-либо до GW-BASIC, то есть что-то вроде этого было действительно полезным:

CLEAR missingArg, basicMem, basicStack
REM   ^^^^^^^^^^
REM      here

То есть былкогда-либо целенаправленный непустой аргумент перед первой запятой?

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

Microsoft (первоначально Micro-Soft) создала Altair BASIC.В нем была команда CLEAR без аргументов, которая устанавливала все нулевые переменные программы.В версии 4K не было строк, поэтому не требовалось управлять строковым пространством.Однако версии 8K, Extended и Disk имели команду CLEAR, которая также принимала один аргумент в виде CLEAR x.Значение x указывает максимальный объем доступного пространства строки в байтах, при этом значение по умолчанию во время загрузки BASIC составляет 50 байтов в версии 8K и 200 байтов в расширенной и дисковой версиях до тех пор, пока оно не будет изменено [источник].Вот откуда появился пропущенный первый аргумент и для чего он использовался изначально.Однако в то время действовал только один аргумент.

Microsoft продолжала разрабатывать производную, называемую «BASIC-80», для нескольких систем, в частности для операционных систем Intel ISIS-II, CP / M и TEKDOS.системы.Была также создана версия BASIC-80 "Standalone Disk BASIC", которая могла бы работать на "практически на любом дисковом оборудовании на базе 8080 или Z80 без операционной системы". Не было версии 4K BASIC-80, поэтомуРазумно предположить, что все версии BASIC-80 имели доступные строки, как и версия 8K Altair BASIC.В результате этого строкового пространства необходимо управлять.Однако именно в BASIC-80 был добавлен второй аргумент :

CLEAR [expression![,address]]

expression! было выражением, определяющим объем пространства строки, как в 8K (Altair)BASIC, а address был максимальным адресом, доступным для BASIC, т. Е. Объемом памяти, доступным для BASIC, подобно аргументу сразу после первой запятой в GW-BASIC.

В конце концов, BASIC-80, выпуск 5.0, был отправлен в мир, и он имел нечетный синтаксис вместо :

CLEAR [,[expression1][,expression2]]

expression1 был максимальный объем памяти, доступный для BASIC, и expression2 был объем стекапространство. Приложение A: Новые функции в BASIC-80, выпуск 5.0 , объясняет, почему был сброшен первый аргумент:

Строковое пространство выделяется динамически, и первый аргумент в операторе CLEAR с двумя аргументами будет игнорироваться.

Другими словами, CLEAR strSpace!,maxMem будет игнорировать strSpace! аргумент в BASIC-80, выпуск 5.0, поэтому синтаксис стал CLEAR [,[maxMem][,maxStack]].

QuickBASIC в конечном итоге изменил синтаксис далее до CLEAR [,,stack].Смущает, что интерактивная справочная система QuickBASIC 4.5 гласит следующее:

 Note: Two commas are used before stack to keep QuickBASIC compatible
       with BASICA. BASICA included an additional argument that set the
       size of the data segment. Because QuickBASIC automatically manages
       the data segment, the first parameter is no longer required.

«Первый упомянутый параметр» - maxMem, поскольку BASICA (и GW-BASIC) использовали синтаксис, доступный в BASIC-80., Выпуск 5.0, а не отсутствующий параметр strSpace!, используемый в выпусках BASIC-80 до 5.0.

...