Привет всем!
В ANS есть слишком сильная увязка строк с файловыми функциями -- они
оперируют длиной в символах. А это значит, что при двухбайтных
символах нельзя прочитать/записать нечетное число байт. Второе, —
число базовых символов несет мало пользы в случае многобайтных
символов (кодировки, подобной UTF). Поэтому, я бы согласился с
предложением из работы [1] считать длину строк в единицах адреса. Так
же, по теме есть работа [2] (не вникнул в них еще, нашел постфактум).
Таким образом, предожение такое:
1) Длины строк исчисляется в единицах адреса. Слова C@ и С! оперируют
символом базового размера и могут дать лишь часть от полного символа
(актуально в случае UTF).
2) CHAR+ и CHAR- дают смещение на размер базового символа.
Соответственно, слова CHARS и >CHARS также подразумевают лишь базовый
символ.
3) Слова поиска подстроки учитывают базовый размер символа (чтобы
подстрока не могла попасть в середину двухбайтного символа, например).
4) В зависимости от реализации, допустимо требование выравнивать
строки на базовый размер символа, или на размер ячейки.
5) Файловые функции оперируют длиной в единицах адреса, и могут
оперировать блоками менее одного символа, если размер символа более
1 и это позволяет хост-система.
[1]
http://dec.bournemouth.ac.uk/forth/euro/ef98/pelcetal98.pdf Internationalisation - the user perspective
[2]
http://dec.bournemouth.ac.uk/forth/euro/ef99/pelcetal99b.pdf ANS Forth and large characters
--
Ruvim