mOleg писал(а):
не понял, что вы хотели сказать, поясните.
Даже не знаю как пояснить-то.
Вот у нас был код
Код:
100000 VALUE TEMP-WL-SIZE
: TEMP-WORDLIST TEMP-WL-SIZE ALLOCATE THROW >R ....
;
Недостаток этого кода: изменяя переменную TEMP-WL-SIZE , можно в последствии сломать себе врем. словарь со всем фортом в придачу (недостаток хипа, слишком мелкий кодофайл и пр.). Но это в теории.
На практике же значение переменной TEMP-WL-SIZE изменяется очень редко (я вообще делал это 1 раз). Следовательно, зачем нужна эта переменная?
Но убрать её слишком просто. А вдруг расширяемость временного кодофайла понадобится?
Поэтому
можно2020.06.12 так
Код:
CREATE TEMP-WORDLIST
100000 , \ та самая переменная
DOES: \ аналог DOES> для режима интерпретации
@ ALLOCATE THROW >R
....
;
В результате значение переменной скрыто в единственной функции, которая её использует.
При этом мы можем "подменить" значение-переменную функции, если потребуется.
как-то так
Код:
10000 ( значение для "подмены")
SP@ ( указатель на значение)
' TEMP-WORDLIST >param ( пропускаем вызов слова CREATE)
@ ( получаем указатель на код DOES)
EXECUTE
Итог:
Из ядра убирается переменная, тем самым ненамного повышается понятность Новы
TEMP-WORDLIST становится словом, значение которого можно "подменять" без риска завалить все остальные словари.
В принципе, тут нет ничего особенного. В других языках тоже при определении функции можно задать значения по умолчанию.