Pregunta

¿Cuál es el mejor marco para escribir módulos? ExtUtils::MakeMaker (h2xs) o Módulo::Construir?

¿Fue útil?

Solución

NOTA Este consejo está desactualizado. Module::Build ha sido eliminado del núcleo de Perl pero sigue vivo como un módulo CPAN.Los pros y los contras siguen vigentes, y mis opiniones sobre MakeMaker siguen vigentes.


Como antiguo mantenedor de ExtUtils::MakeMaker, me gusta recomendar Module::Build porque MakeMaker es un espectáculo de terror.Module::Build está mucho mejor armado.Pero esas no son sus preocupaciones y le presentaré mi respuesta "menos complicada para usted".

Resumen ejecutivo:

Debido a que el soporte de Module::Build no está 100% implementado en todo Perl, comience con MakeMaker.Si desea realizar alguna personalización, cambie a Module::Build.Dado que su diseño básico, opciones e interfaz son casi idénticos, esto será sencillo.Por más seductor que parezca, evite Module::Install.

Afortunadamente, Module::Build puede emular MakeMaker, lo que ayuda un poco, pero no ayuda si vas a realizar alguna personalización.Ver Módulo::Construir::Compat.

Para versiones de CPAN, usar Module::Build está bien.Hay suficientes elementos de Module::Build en CPAN ahora que todos ya se han ocupado de arrancarlo.

Finalmente, el nuevo configure_requires La opción permite a los shells CPAN saber que deben instalar Module::Build antes de que puedan comenzar a construir el módulo.Lamentablemente, sólo los shells CPAN más recientes conocen configure_requires.

Oh, hagas lo que hagas, no uses h2xs (a menos que estés escribiendo código XS...y aun así pensar en ello).

Ventajas de MakeMaker:

  • Viene con Perl y usado por el núcleo de Perl (por lo tanto, se mantiene activamente y permanecerá tan para siempre)
  • Todo sabe qué hacer con un Makefile.PL.
  • La mayoría de la documentación de creación de módulos cubrirá MakeMaker.
  • Usos Make (aquellos que saben que pueden depurar y parche el proceso de compilación)

Desventajas de MakeMaker:

  • Requiere make (piense en Windows)
  • Difícil de personalizar
  • Aún más difícil de personalizar y hacer multiplataforma
  • Difícil de depurar cuando algo sale mal (a menos que entiendas make)

Módulo::Construcción Pros:

  • Más fácil de personalizar/subclase
  • Perla pura
  • Más fácil de depurar (es Perl)
  • Puede emular MakeMaker de varias maneras.
  • El shell CPAN instalará Module::Build para usted

Módulo::Construcción Contras:

  • Los mantenedores de Module::Build (y de hecho todos los miembros de Perl Toolchain Gang) lo odian
  • Las versiones anteriores de los clientes CPAN (incluido CPANPLUS) no saben nada sobre Module::Build.

Módulo::Instalar Ventajas:

  • Interfaz elegante
  • Paquetes en sí, tienes una versión conocida.
  • Todo sabe cómo lidiar con un Makefile.PL

Módulo::Instalar Contras:

  • Requiere hacer
  • Siempre utiliza la versión incluida, vulnerable a roturas externas.
  • Difícil de personalizar fuera de su interfaz.
  • Es un desastre con las agallas de MakeMaker, por lo que una nueva versión de MakeMaker eventualmente lo romperá.
  • No sabe cómo generar un meta archivo utilizando el metaespec de V2 (cada vez más un problema con las herramientas más nuevas)

Otros consejos

Hay dos preguntas aquí.

Primero, nunca uses h2xs.Es una vieja maldad obsoleta, aunque supongo que si realmente estás intentando convertir un archivo de encabezado en código XS, podría ser útil (nunca lo he hecho yo).

Actualización de 2011:Recomiendo encarecidamente echar un vistazo a Distrito::Zilla, especialmente si cree que mantendrá más de un módulo.

Para crear un nuevo módulo, utilice Module::Starter.Funciona muy bien y tiene algunos complementos interesantes para personalizar la salida.

En segundo lugar, te preguntas qué sistema de compilación deberías utilizar.Los tres contendientes son ExtUtils::MakeMaker (EUMM), Module::Build (MB) y Module::Install (MI).

EUMM es un trabajo horrible y desagradable, pero funciona, y si no personalizas tu proceso de construcción en absoluto, funciona bien.

MB es el chico nuevo y tiene sus detractores.Su gran ventaja es que si desea personalizar en gran medida su proceso de instalación y compilación, es muy posible hacerlo de manera sensata (y multiplataforma) usando MB.Realmente no es posible usar EUMM.

Finalmente, MI es básicamente un contenedor declarativo además de EUMM.También se empaqueta junto con su distribución, en un intento de solucionar los problemas con los usuarios que intentan instalar módulos con módulos de cadena de herramientas antiguos.La desventaja del truco del "paquete propio" es que si hay un error en MI, tienes que volver a publicar todos tus módulos solo para solucionarlo.

En lo que respecta a la personalización, existen algunos complementos para MI, pero si desea ir más allá de ellos, volverá al problema de lidiar con Makefiles y crear herramientas en más de una docena de plataformas, por lo que realmente no ayudará. Eres demasiado en ese ámbito.

acabo de subir Distribución::Cocina al CPAN.Es lo que uso para hacer nuevas distribuciones.Lo bueno de esto es que tus distribuciones pueden ser las que quieras:solo estás cocinando algunas plantillas.No me importa si alguien lo usa.Para mí es simple, de baja tecnología y no causa problemas adicionales.

Podrías comenzar con algo como Módulo::Iniciador para crear sus plantillas iniciales, luego agregue su propio modelo estándar y su forma favorita de hacer las cosas.Tú eliges no sólo lo que quieres en cada archivo, sino también qué archivos aparecen en la distribución.A medida que descubras cómo te gusta hacer las cosas, simplemente actualiza tus propias plantillas.

En cuanto a Makemaker y Module::Build, el futuro es Module::Build.Ya sólo somos nosotros, los viejos, los que usamos Makemaker.:) Hay formas de utilizar ambos (o pretender utilizar ambos) al mismo tiempo. Mire los documentos Module::Build, Module::Build::Compat y Module::Install..Module::Build fue expulsado de la biblioteca estándar de Perl y su futuro es incierto.Volvemos a Makemaker como sistema de construcción.

Aunque esta es una respuesta un poco evasiva, intente usar cada uno solo para obtener un poco de experiencia con cada uno.

Quizás también quieras mirar Dist-Zilla que es una nueva herramienta exclusiva de autor para crear distribuciones.Debido a que simplemente ayuda a construir la distribución, no viene con su código ni realiza ninguna instalación, puede hacer muchas cosas poderosas.

El único problema con la compatibilidad con respecto a Module::Build es cuando un usuario intenta instalar módulos sin actualizar su cliente CPAN (CPAN.pm o CPANPLUS.pm). Si están instalando su módulo desde CPAN, pueden actualizar su cliente con la misma facilidad. del mismo espejo.

Si no quieres hacer cualquier cosa complicado en su proceso de construcción, seguro:utilizar EUMM.Pero si tiene un problema de compilación en una plataforma de destino diferente, es posible que termine en el Makefile, que es diferente en cada variación de make.

Module::Build te ofrece muchas funciones (cualquier cosa que se te ocurra si lo amplías) y es todo Perl, por lo que nunca terminarás depurando un archivo MAKE.Module::Install te ofrece funciones, pero tienes que agruparlas y todo termina ejecutándose a través de 'make' al final.

También recomiendo Module::Build y Module::Starter (con el Complemento TT2).

Module::Build es mejor en cualquier sentido, pero tiene menos soporte que ExtUtils::MakeMaker (más específicamente, las versiones anteriores de Perl no lo admiten de fábrica).Depende de tus necesidades.

Personalmente, recomiendo Module::Install, al igual que mucha gente que conozco; gente como Catalyst y Moose también lo usan.

Aquí hay una pequeña aclaración de la dirección que esperaba que tomaran las respuestas:

  • Pros y contras de varios marcos.
  • compatibilidad/base de instalación de frameworks
  • idoneidad para uso interno (local) vs.Comunicaciones externas (CPAN)
  • no respuestas simples de "usar X"

la respuesta de dave tiene buena información a favor y en contra. la respuesta de leon alude a la compatibilidad pero no es explícito.Como Brian D Foy mencionó, solo los viejos usan EUMM, pero no estoy convencido de que MB sea un buen marco para cosas destinadas a CPAN debido a que no forma parte del núcleo hasta 5.9.

Ambos tienen pros y contras.Actualmente uso y recomiendo Module::Build y Module::Starter.

EU::MM todavía parece ser el más popular y con mayor soporte, pero Module::Build se está poniendo al día.Además, echa un vistazo Módulo::Iniciador para obtener un módulo que le ayudará a empezar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top