Модуль не найден при извлечении документации

Я согласен с ответом от zacherates.

Но вы можете сделать вызов intern () в ваших нелиберальных строках.

Из примера zacherates:

// ... but they are not the same object
new String("test") == "test" ==> false 

Если вы ставите нелитеральное равенство строки, это правда

new String("test").intern() == "test" ==> true 
6
задан uzlxxxx 10 March 2019 в 02:46
поделиться

1 ответ

TL; DR Я думаю, это предназначено для обеспечения безопасности. Сообщение об ошибке LTA . Комментарии к вашему вопросу объясняют, что вам нужно сделать. Этот ответ дает то, что я считаю обоснованием.

Я думаю, что этот вопрос, возможно, следует обсудить дополнительно с целью улучшения одного или нескольких сообщений об ошибках, документации P6, p6doc и / или компилятора P6.

Я буду изучать исходный код компилятора, чтобы лучше понять, что происходит, и планирую обновить этот ответ позже.


Аббревиатура / слово «pod» было придумано для оригинальной серии Perl и означало «простая старая документация». В P6 это стало Pod (обратите внимание на скорректированное соглашение правописания, чтобы отличить его от оригинального p5 pod / POD). Pod выглядит как pod / POD, но это другой формат.

В частности, он больше не простой и не старый - это код. Предположим, это означает «производит оптимальную документацию» или что-то подобное.

Согласно документации P6 для Pod это:

Простой в использовании язык разметки для документирования модулей и программ Perl

] Imo довольно легко читать в исходном виде и довольно легко писать . (Хотя, как и большинство из нас, я привык к уценке, которую я использую, чтобы написать это ...)

Но наиболее существенная характеристика imo Pod, по крайней мере, в контексте с использованием [1116 ] это то, что это код. Так что его так же легко использовать, как и код. Иными словами, это не обязательно просто, учитывая проблему вредоносного кода и функции безопасности, которые обеспечивают безопасность.

SO, начинающийся с «Документация в программах на Perl 6, использующих Pod 6 DSL, фактически анализируется как часть кода» - это шаг к ясности в этом вопросе. Но важно понимать, что он не только анализируется, но и компилируется и что компиляция включает в себя запуск компилятора, а в P6 может даже включать запуск кода в компилируемой программе.

Это связано с природой синтаксиса и семантики P6.

На странице Википедии о языках разметки они представляют собой систему для:

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

Но синтаксис (и семантика) P6 могут быть динамически изменены модулями. Это имеет убедительные преимущества 1 , но это также означает, что код P6 должен быть скомпилирован для того, чтобы компилятор определил, как его анализировать.

1137 И это включает в себя выяснение того, что такое Pod и как его анализировать. Кроме того, Pod может вызывать код P6 во время компиляции. Таким образом, Pod (и любой код, который он вызывает) также должен быть скомпилирован, и для его определения может потребоваться запустить , чтобы выяснить, каковы окончательные данные Pod.

Конечно, вы можете читать Pod на месте, используя инструменты просмотра текста. Он специально разработан для того, чтобы его было довольно легко прочитать в необработанном виде.

Но если вы используете p6doc, вы компилируете код P6. (На самом деле, p6doc является очень простой оболочкой для компилятора .)

И поскольку в компиляцию P6 может входить работающий код , те же политики безопасности, которые один относится к запуску кода в целом должен применяться к использованию p6doc для извлечения P6 Pod.

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

Когда вы пишете p6doc foo/bar, вы, как считается, говорите p6doc, что все в порядке, чтобы скомпилировать foo/bar и запустить любой код, который является частью компиляции этого кода.

Но прагма use lib намеренно игнорируется, когда компилятору предоставляется опция --doc. Отсюда и ответ на ваш SO в комментариях к нему.

Сноски

1 Это делает P6 способным к неограниченным мутациям, как в рамках одной программы, так и в качестве языка, развивающегося со временем. Как с любым полным языком тьюринга, что означает, что почти все из них, если это возможно, P6 может сделать это. В отличие от почти на всех языках, если вы делаете это и чувствуете, что он принадлежит языку, а не модулю, вы можете настроить язык P6, чтобы он впитался в вашу копию P6. И если люди P6 хотят, чтобы ваш языковой трюк впитался в каждый P6, ваш твик может стать частью будущего языка. Таким образом, P6 позволяет легко модифицировать сам P6 и максимально открыт для будущего улучшения языка и по существу устраняет одну из вещей, которая может тратить много времени и энергии, а именно борьбу за то, что характерно для языка.

0
ответ дан raiph 10 March 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: