Перейти к основному содержанию
Тема: Почему имена исходных файлов нечеловекочитаемые? (Прочитано 1595 раз) предыдущая тема - следующая тема

Почему имена исходных файлов нечеловекочитаемые?

Вопрос:
Цитата
I installed Perl6 with rakudobrew and wanded to browse the installed files to see a list of hex-filenames in ~/.rakudobrew/moar-2018.08/install/share/perl6/site/sources as well as ~/.rakudobrew/moar-2018.08/install/share/perl6/sources/.

E.g.

> ls ~/.rakudobrew/moar-2018.08/install/share/perl6/sources/
09A0291155A88760B69483D7F27D1FBD8A131A35  AAC61C0EC6F88780427830443A057030CAA33846
24DD121B5B4774C04A7084827BFAD92199756E03  C57EBB9F7A3922A4DA48EE8FCF34A4DC55942942
2ACCA56EF5582D3ED623105F00BD76D7449263F7  C712FE6969F786C9380D643DF17E85D06868219E
51E302443A2C8FF185ABC10CA1E5520EFEE885A1  FBA542C3C62C08EB82C1F4D25BE7B4696F41B923
522BE83A1D821D8844E8579B32BA04966BAB7B87  FE7156F9200E802D3DB8FA628CF91AD6B020539B
5DD1D8B49C838828E13504545C427D3D157E56EC

The files contain the source of packages but this does not feel very accessible. What is the rational for that?


Ответ: https://stackoverflow.com/a/52609220/1577548

Цитата
In Perl 6, the mechanism for loading modules and caching their compilations is pluggable. Rakudo Perl 6 comes with two main mechanisms for this.

One is a file-system based repository, and it's used with things like -Ilib. This resolves modules simply using paths on disk. Whenever a module loaded, it first has to check that the modules sources have not changed in order to re-compile them if so. This is ideal for development, however such checks take time. Furthermore, this doesn't allow for having multiple versions of the same module available and picking the one matching the specification in the use statement. Again, ideal for development, when you just want it to use your latest changes, but less so for installation of modules from the ecosystem.

The other is an installation repository. Here, specific versions of modules are installed and precompiled. It is expected that all interactions with such a repository will be done through the API or tools using the API (for example, zef locate Some::Module). It's assumed that once a specific version of a module has been installed, then it is immutable. Thus, no checks need to be done against source, and it can go straight to loaded the compiled version of the module.

Thus, the installation repository is not intended for direct human consumption. The SHA-1s are primarily an implementation convenience; an alternative scheme could have been used in return for a bit more effort (and may well be used in the future). However, the SHA-1s do also create the appearance of something that wasn't intended for direct manipulation - which is indeed the case: editing a source file in there will have no effect in the immediate, and probably confusing effects next time the compiler is upgraded to a new version.

Гуглоперевод:
Цитата
В Perl 6 механизм загрузки модулей и кэширования их компиляций является подключаемым. Rakudo Perl 6 поставляется с двумя основными механизмами для этого.

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

Другой - это репозиторий установки. Здесь устанавливаются и предварительно компилируются определенные версии модулей. Ожидается, что все взаимодействия с таким репозиторием будут осуществляться через API или инструменты, использующие API (например, zef locate Some::Module). Предполагается, что после установки определенной версии модуля он становится неизменяемым. Таким образом, нет необходимости проверять исходный код, и он может сразу перейти к загрузке скомпилированной версии модуля.

Таким образом, установочный репозиторий не предназначен для непосредственного потребления человеком. SHA-1-это в первую очередь удобство реализации; альтернативная схема могла бы быть использована в обмен на немного больше усилий (и вполне может быть использована в будущем). Тем не менее, SHA-1 также создают видимость чего - то, что не было предназначено для прямых манипуляций-что действительно так: редактирование исходного файла в нем не будет иметь немедленного эффекта и, вероятно, приведет к путанице при следующем обновлении компилятора до новой версии.