Почему newLISP ограничивает строковые литералы до 2048 символов?
Я пытаюсь написать инструкцию по использованию для этого newLISP
Программа, которую я сделал, но она продолжает жаловаться на слишком длинную строку.
ERR: string token too long : "$$$$$$$$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"
Я провел десять минут, ругаясь newLISP
и придумывать такие параноидальные теории, как, возможно, у вас не должно быть кавычек в строке, или, возможно, это сработает, когда я буду использовать необработанные строки ({}
), пока я не начал рубить строку. Дошло до того, что сообщение исчезло, оставив сообщение помощи очень бесполезным. Оказывается newLISP
не любит строки, которые имеют более 2048(2^11)
персонажи. Soo,
Зачем ограничивать количество символов в строковом литерале?
Почему 2048 символов?
Увеличение ячейки памяти до 128MB
(увидел это руководство) ничего не меняет. Единственное решение, которое работает сейчас (хакерское решение), - это разбить строку справки на две строки, каждая под 2048
персонажи затем объединяют их с string
,
Другая странная вещь в том, что любая строка, которая имеет 2048+
символы печатаются по-разному в repl:
> (dup "&" 2048)
[text]&&&&&&&&&&&&&& .....
......
&&&&&&&&&&&&&&&[/text]
> (dup "&" 2040)
"&&&&&&&&&&&&&&&&&&& .....
.....
&&&&&&&&&&&&&&&"
1 ответ
Есть три способа сделать строки:
- в кавычках - обрабатываются escape-символы - ограничено 2048 символами
- в фигурных скобках - не обрабатываются escape-символы - ограничено 2048 символами
- в тегах - никакие escape-коды не обрабатываются - неограниченная длина
Из руководства:
Строки в кавычках не могут превышать 2048 символов. Более длинные строки должны использовать разделители тегов [text] и [/text]. newLISP автоматически использует эти теги для вывода строки длиной более 2048 символов.
Строки могут быть довольно длинными:
> (quiet (set 's (dup "&" 10E8))) ; don't bother to show the string :)
> (length s)
1000000000
> (10000 20 s)
"&&&&&&&&&&&&&&&&&&&&"
>
Единственная проблема, с которой вы столкнетесь, - это когда вы хотите обработать исходный код в строках, которые могут содержать [/text]
тег, прежде чем вы хотите конец строки. Похоже, ты еще не в этом месте...:)