Какой фреймворк я должен использовать для написания модулей?[закрыто]

StackOverflow https://stackoverflow.com/questions/73889

  •  09-06-2019
  •  | 
  •  

Вопрос

Какой фреймворк лучше всего подходит для написания модулей -- ExtUtils::Создатель (h2xs) или Модуль::Сборка?

Это было полезно?

Решение

ПРИМЕЧАНИЕ Этот совет устарел. Модуль:: Сборка была удалена из ядра Perl но продолжает работать как модуль CPAN.Плюсы и минусы все еще остаются в силе, и мое мнение о MakeMaker все еще остается в силе.


Как бывший сопровождающий ExtUtils:: MakeMaker, я хотел бы порекомендовать Module:: Build, потому что MakeMaker - это шоу ужасов.Module:: Build намного лучше собран воедино.Но это не ваши проблемы, и я представлю свой ответ "наименьшее количество хлопот для вас".

Краткое изложение:

Поскольку поддержка Module::Build не установлена на 100% во всем Perl, начните с MakeMaker.Если вы вообще хотите выполнить какие-либо настройки, переключитесь на Module::Build.Поскольку их базовая компоновка, опции и интерфейс практически идентичны, это будет безболезненно.Как бы соблазнительно это ни выглядело, избегайте Module::Install.

К счастью, Module::Build может эмулировать MakeMaker, что некоторым помогает, но не помогает, если вы собираетесь выполнять какие-либо настройки.Видишь Модуль::Сборка::Совместимость.

Для релизов CPAN использование Module::Build - это нормально.Теперь в CPAN достаточно материала Module::Build, поскольку все уже разобрались с его загрузкой.

Наконец, новый configure_requires опция позволяет командам CPAN знать, что нужно установить Module::Build, прежде чем они смогут начать сборку модуля.К сожалению, только последние CPAN-оболочки знают о configure_requires .

О, что бы вы ни делали, не используйте h2xs (если только вы не пишете XS-код...и уже потом подумайте об этом).

Профессионалы MakeMaker:

  • Поставляется с Perl и используется в Perl ядра (поэтому он активно ухоженные и останется им навсегда)
  • Все знают, что делать с a Makefile.PL.
  • Большая часть документации по разработке модулей будет касаться MakeMaker.
  • Использует make (те, кто знает make, могут отлаживать и исправлять процесс сборки )

Минусы MakeMaker:

  • Требуется make (думаю, Windows)
  • Трудно поддающийся настройке
  • Еще сложнее настроить и сделать кроссплатформенным
  • Трудно отлаживать, когда что-то идет не так (если вы не понимаете make)

Модуль:: Плюсы сборки:

  • Проще настроить / подкласс
  • Чистый Perl
  • Проще в отладке (это Perl)
  • Может эмулировать MakeMaker несколькими способами
  • Оболочка CPAN установит для вас Module::Build

Модуль:: Минусы сборки:

  • Сопровождающие модуля::Build (да и вообще всей банды Perl Toolchain) ненавидят это
  • Более старые версии клиентов CPAN (включая CPANPLUS) ничего не знают о Module::Build.

Модуль::Установить плюсы:

  • Гладкий интерфейс
  • Связывает себя, у вас есть известная версия
  • Все знают, как обращаться с Makefile.PL

Модуль::Минусы установки:

  • Требуется сделать
  • Всегда использует комплектную версию, уязвимую к внешним поломкам
  • Сложно настроить вне его интерфейса
  • Гадит с потрохами MakeMaker, так что новый релиз MakeMaker в конечном итоге сломает его.
  • Не знает, как сгенерировать МЕТА-файл, используя мета-спецификацию v2 (все чаще возникает проблема с новыми инструментами)

Другие советы

Здесь возникает два вопроса.

Во-первых, никогда не используйте h2xs.Это старая устаревшая гадость, хотя я полагаю, что если вы на самом деле пытаетесь превратить заголовочный файл в XS-код, это может быть полезно (сам никогда этого не делал).

обновление 2011 года:Я настоятельно рекомендую взглянуть на Dist::Зилла, особенно если вы думаете, что будете поддерживать более одного модуля.

Для создания нового модуля используйте Module::Starter.Он отлично работает и имеет несколько приятных плагинов для настройки выходных данных.

Во-вторых, вы спрашиваете, какую систему сборки вам следует использовать.Тремя претендентами являются ExtUtils::MakeMaker (EUMM), Module::Build (MB) и Module::Install (MI).

EUMM - ужасно неприятная штука, но она работает, и если вы вообще не настраиваете свой процесс сборки, работает просто отлично.

МБ - новичок, и у него есть свои недоброжелатели.Большим плюсом является то, что если вы хотите сильно настроить процесс установки и сборки, вполне возможно сделать это разумно (и кроссплатформенно), используя MB.Это действительно невозможно с помощью EUMM.

Наконец, MI - это, по сути, декларативная оболочка поверх EUMM.Он также упаковывается вместе с вашим дистрибутивом в попытке обойти проблемы, возникающие у пользователей, пытающихся установить модули со старыми модулями toolchain.Недостатком трюка с "упаковкой самостоятельно" является то, что если в самом MI есть ошибка, вам придется переиздать все свои модули, просто чтобы ее исправить.

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

Я только что загрузил Распределение::Плита в CPAN.Это то, что я использую для создания новых дистрибутивов.Самое приятное в этом то, что ваши дистрибутивы могут быть любыми, какие вам нравятся:вы просто готовите несколько шаблонов.Мне все равно, воспользуется им кто-нибудь или нет.Для меня это просто, низкотехнологично и не вызывает дополнительных проблем.

Вы могли бы начать с чего-то вроде Модуль::Стартер чтобы создать свои начальные шаблоны, добавьте свой собственный шаблон и любимый способ выполнения действий.Вы выбираете не только то, что вам нужно в каждом файле, но и то, какие файлы будут отображаться в дистрибутиве.Когда вы выясняете, как вам нравится что-то делать, вы просто обновляете свои собственные шаблоны.

Что касается Makemaker и модуля::Build, будущее за модулем::Build.Теперь только мы, старики, пользуемся Makemaker.:) Есть способы использовать и то, и другое (или притворяться, что используете оба) одновременно. Посмотрите на документы Module::Build, Module::Build::Compat и Module::Install.Module::Build был удален из Стандартной библиотеки Perl, и его будущее неопределенно.Это возвращение к Makemaker как системе сборки.

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

Возможно, вы также захотите взглянуть на Дист-Зилла это новый инструмент для создания дистрибутивов только для авторов.Поскольку он просто помогает создавать дистрибутив, он не поставляется вместе с вашим кодом и не выполняет никакой установки, он может выполнять множество мощных функций.

Единственная проблема с совместимостью в отношении Module::Build заключается в том, что пользователь пытается установить модули без обновления своего CPAN-клиента (CPAN.pm или CPANPLUS.pm ) Если они устанавливают ваш модуль из CPAN, они могут так же легко обновить свой клиент с того же зеркала.

Если ты не хочешь этого делать что угодно сложный процесс сборки, конечно:используйте EUMM.Но если у вас возникла проблема со сборкой на другой целевой платформе, вы можете попасть в Makefile, который отличается в каждой вариации make.

Module::Build предоставляет вам множество функций (все, что вы можете придумать, если вы расширите его) и полностью использует perl, так что вы никогда не заканчиваете отладкой makefile.Module::Install предоставляет вам функции, но вы должны объединить их, и в конце концов все заканчивается запуском через "make".

Я также рекомендую Module::Build и Module::Starter (с Плагин TT2).

Module::Build в любом случае лучше, но он поддерживается менее широко, чем ExtUtils::MakeMaker (более конкретно, более старые версии Perl не поддерживают его из коробки).Это зависит от ваших потребностей.

Лично я рекомендую Module::Install, как и многие мои знакомые - такие, как Catalyst и Moose, также используют его.

Вот небольшое разъяснение того направления, в котором, как я надеялся, будут развиваться ответы:

  • плюсы / минусы различных фреймворков
  • совместимость / установка базы фреймворков
  • пригодность для внутреннего (локального) применения по сравнениювнешние релизы (CPAN)
  • нет голые ответы "используй X"

Ответ Дейва есть хорошая информация "за" / "против". Ответ Леона ссылается на совместимость, но не является явным образом.Как брайан ди фой упомянул, только старые шляпы используют EUMM, но я не уверен, что MB - хороший фреймворк для вещей, предназначенных для CPAN, из-за того, что он не был частью ядра до версии 5.9.

И в том, и в другом есть свои плюсы и минусы.В эти дни я использую и рекомендую Module::Build и Module::Starter.

EU::MM по-прежнему кажется наиболее широко поддерживаемым и популярным, но Module::Build догоняет.Кроме того, ознакомьтесь Модуль::Стартер для модуля, который поможет вам начать работу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top