Какая разница между -I. и -Илиб в Perl6? - PullRequest
9 голосов
/ 13 апреля 2019

У меня есть локальный дистрибутив, который выглядит следующим образом:

.
├── META6.json
└── lib
    └── Foo.pm6

Оба perl6 -I. -e 'use Foo;' и perl6 -Ilib -e 'use Foo;' компилируются и запускаются, поэтому какой из них использовать и почему?

1 Ответ

14 голосов
/ 13 апреля 2019

Еще один способ задать этот вопрос: «В чем разница между -I $ dir-with-meta6-file и -I $ dir-without-meta6-file?».В этом ответе -I. будет технически означать -I $dir-with-meta6-file, а -Ilib будет означать -I $dir-without-meta6-file.Также обратите внимание, что use lib '.' и use lib 'lib'

Разница между -I. и -Ilib может быть кратко суммирована:

  • -I. будет выглядетьна META6.json для каких файлов / пространств имен и их версии / api / auth

  • -Ilib предоставляет все существующие файлы и отображает их в предсказуемое пространство имен (Foo/Bar.pm6 -> Foo::Bar) и будет соответствовать любой версии / api / auth

Обычно -Ilib используется при разработке, особенно при запуске, потому что это проще, чем вручную добавлять / удалять записи вфайл META6.json.Если вы пишете локальное приложение или что-то, что не предназначено для установки, это в основном нормально.

Однако!-I. предпочтительнее, если для распространения создан файл META6.json.Это может быть немного больше работы, чтобы поддерживать вручную, но у этого есть несколько преимуществ:

  • Это обеспечивает некоторую базовую гарантию, что это будет установлено;Обычная проблема, которую я вижу, состоит в том, что модули проходят свои тесты, но не могут быть фактически установлены, поскольку прекомпиляция при установке имеет доступ только к файлам, перечисленным в файле META6.json.

  • Это позволяет отображать несколько пространств именв один файл (я не поощряю это).

  • Вы можете иметь файлы Perl .pm рядом с файлами Perl6 .pm6 как тип двухязыкового распространения, так как выможет явно указать Perl6, какие файлы использовать.-Ilib должен рассматривать все файлы .pm и .pm6 как Perl6, и это не совместимо с этой идеей.

...