Подтвердить что ты не робот

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

Какая лучшая структура для написания модулей - ExtUtils::MakeMaker (h2xs) или Module::Build?

4b9b3361

Ответ 1

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


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

Резюме:

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

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

Для выпусков CPAN, использующих Module:: Build, все в порядке. Там достаточно модуля:: Создайте материал на CPAN теперь, когда все уже начали его загружать.

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

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

Преимущества MakeMaker:

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

MakeMaker Минусы:

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

Module:: Build Pros:

  • Легче настраивать/подкласс
  • Pure Perl
  • Легче отлаживать (это Perl)
  • Можно эмулировать MakeMaker несколькими способами.
  • В оболочке CPAN будет установлен модуль:: Build для вас

Module:: Build Cons:

  • Поддерживаемые модулем:: Build (и, действительно, все Perl Toolchain Gang) ненавидят его
  • Старые версии клиентов CPAN (включая CPANPLUS) ничего не знают о модуле:: Build.

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

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

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

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

Ответ 2

Здесь есть два вопроса.

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

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

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

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

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

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

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

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

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

Есть плюсы и минусы для обоих. В эти дни я использую и рекомендую Module:: Build и Module:: Starter.

Ответ 7

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

Ответ 8

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

Ответ 9

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

Ответ 10

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

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

Дэйв отвечает, есть хорошая информация о pro/con. Leon ответ ссылается на совместимость, но не является явным. Как отмечал brian d foy, только старые шляпы используют EUMM, но я не уверен, что MB является хорошей основой для вещей, предназначенных для CPAN из-за того, что он не является частью от сердечника до 5.9.

Ответ 11

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