Почему 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] тег, прежде чем вы хотите конец строки. Похоже, ты еще не в этом месте...:)

Другие вопросы по тегам