Domanda

Qual è il miglior framework per scrivere moduli? ExtUtils::MakeMaker (h2xs) o Modulo::Costruisci?

È stato utile?

Soluzione

NOTA Questo consiglio non è aggiornato. Module::Build è stato rimosso dal core Perl ma continua a vivere come modulo CPAN.I pro e i contro restano validi, così come le mie opinioni su MakeMaker.


Come ex manutentore di ExtUtils::MakeMaker, mi piace raccomandare Module::Build perché MakeMaker è uno spettacolo horror.Module::Build è molto meglio metterlo insieme.Ma queste non sono le tue preoccupazioni e presenterò la mia risposta "meno fastidio per te".

Sintesi:

Poiché il supporto Module::Build non è attivo al 100% in tutto Perl, iniziare con MakeMaker.Se vuoi eseguire qualsiasi personalizzazione, passa a Module::Build.Poiché il loro layout di base, le opzioni e l'interfaccia sono quasi identiche, questo sarà indolore.Per quanto sembri seducente, evita Module::Install.

Fortunatamente, Module::Build può emulare MakeMaker, il che aiuta alcuni, ma non aiuta se si intende eseguire qualsiasi personalizzazione.Vedere Modulo::Build::Compat.

Per le versioni CPAN l'utilizzo di Module::Build va bene.C'è abbastanza materiale per Module::Build su CPAN ora che tutti si sono già occupati del bootstrap.

Infine, il nuovo configure_requires L'opzione consente alle shell CPAN di sapere di installare Module::Build prima che possano iniziare a creare il modulo.Sfortunatamente solo le ultime shell CPAN conoscono configure_requires.

Oh, qualunque cosa tu faccia, non usare h2xs (a meno che tu non stia scrivendo codice XS...e anche allora pensarci).

Pro di MakeMaker:

  • Viene fornito con Perl e utilizzato dal core Perl (quindi è attivamente mantenuto e rimarrà così per sempre)
  • Tutto sa cosa fare con un Makefile.PL.
  • La maggior parte della documentazione relativa alla creazione di moduli riguarderà MakeMaker.
  • Usa make (coloro che sanno fare possono eseguire il debug e patchat il processo di build)

Contro di MakeMaker:

  • Richiede make (pensa a Windows)
  • Difficile da personalizzare
  • Ancora più difficile da personalizzare e rendere multipiattaforma
  • Difficile eseguire il debug quando qualcosa va storto (a meno che tu non capisca make)

Modulo::Crea Pro:

  • Più facile da personalizzare/sottoclasse
  • Perla pura
  • Più facile da eseguire il debug (è Perl)
  • Può emulare MakeMaker in diversi modi
  • La shell CPAN installerà Module::Build per te

Modulo::Costruisci Contro:

  • I manutentori di Module::Build (e in effetti tutta la Perl Toolchain Gang) lo odiano
  • Le versioni precedenti dei client CPAN (incluso CPANPLUS) non sanno nulla di Module::Build.

Modulo::Installa Pro:

  • Interfaccia intuitiva
  • Bundles stesso, hai una versione conosciuta
  • Tutto sa come comportarsi con un Makefile.PL

Modulo::Installa Contro:

  • Richiede marca
  • Utilizza sempre la versione in bundle, vulnerabile a rotture esterne
  • Difficile da personalizzare al di fuori della sua interfaccia
  • Fa schifo con il coraggio di MakeMaker, quindi una nuova versione di MakeMaker alla fine lo romperà.
  • Non sa come generare un meta file utilizzando V2 Meta-Spec (sempre più un problema con gli strumenti più recenti)

Altri suggerimenti

Ci sono due domande qui.

Innanzitutto, non usare mai h2xs.È una vecchia cattiveria obsoleta, anche se suppongo che se stai effettivamente cercando di trasformare un file di intestazione in codice XS, potrebbe essere utile (non l'ho mai fatto io).

Aggiornamento 2011:Consiglio vivamente di dare un'occhiata Dist::Zilla, soprattutto se pensi di mantenere più di un modulo.

Per creare un nuovo modulo, utilizzare Module::Starter.Funziona benissimo e ha alcuni plugin carini per personalizzare l'output.

In secondo luogo, ti stai chiedendo quale sistema di compilazione dovresti utilizzare.I tre contendenti sono ExtUtils::MakeMaker (EUMM), Module::Build (MB) e Module::Install (MI).

EUMM è un lavoro orribile, ma funziona e, se non personalizzi affatto il processo di creazione, funziona perfettamente.

MB è il nuovo arrivato e ha i suoi detrattori.Il grande vantaggio è che se desideri personalizzare fortemente il processo di installazione e creazione, è del tutto possibile farlo in modo sensato (e in modo multipiattaforma) utilizzando MB.Non è davvero possibile utilizzare EUMM.

Infine, MI è fondamentalmente un wrapper dichiarativo sopra EUMM.Inoltre si impacca insieme alla distribuzione, nel tentativo di risolvere i problemi con gli utenti che tentano di installare moduli con vecchi moduli della toolchain.Lo svantaggio del trucco del "pacchetto autonomo" è che se c'è un bug nell'MI stesso, devi rilasciare nuovamente tutti i tuoi moduli solo per risolverlo.

Per quanto riguarda la personalizzazione, ci sono alcuni plugin per MI, ma se vuoi andare oltre, ti ritroverai di nuovo al problema di gestire Makefile e creare strumenti su una dozzina di piattaforme, quindi in realtà non aiuterà sei troppo in quel regno.

Ho appena caricato Distribuzione::Fornello al CPAN.È quello che uso per creare nuove distribuzioni.La cosa bella è che le tue distribuzioni possono essere qualunque cosa tu voglia:stai solo cucinando alcuni modelli.Non mi interessa se qualcuno lo usa.Per me è semplice, a bassa tecnologia e non causa ulteriori problemi.

Potresti iniziare con qualcosa del genere Modulo::Avviatore per creare i tuoi modelli iniziali, quindi aggiungi il tuo standard e il tuo modo preferito di fare le cose.Scegli non solo ciò che desideri in ciascun file, ma anche quali file verranno visualizzati nella distribuzione.Man mano che capisci come ti piace fare le cose, aggiorni semplicemente i tuoi modelli.

Per quanto riguarda Makemaker e Module::Build, il futuro è Module::Build.Siamo solo noi vecchi che usiamo ormai Makemaker.:) Esistono modi per usarli entrambi (o fingere di usarli entrambi) contemporaneamente. Guarda i documenti Module::Build, Module::Build::Compat e Module::Install.Module::Build è stato espulso dalla libreria standard di Perl e il suo futuro è incerto.Torniamo a Makemaker come sistema di compilazione.

Anche se questa è una risposta un po' azzardata, prova a usarli solo per fare un po' di esperienza con ciascuno.

Potresti anche voler dare un'occhiata Dist-Zilla che è un nuovo strumento riservato all'autore per creare distribuzioni.Poiché aiuta solo a costruire la distribuzione, non viene fornito con il codice né esegue alcuna installazione, può fare molte cose potenti.

L'unico problema di compatibilità relativo a Module::Build è quando un utente tenta di installare moduli senza aggiornare il proprio client CPAN (CPAN.pm o CPANPLUS.pm). Se sta installando il modulo da CPAN, può aggiornare altrettanto facilmente il proprio client dallo stesso specchio.

Se non vuoi farlo nulla complicato nel processo di creazione, certo:utilizzare EUMM.Ma se hai un problema di compilazione su una piattaforma di destinazione diversa, potresti finire nel Makefile, che è diverso per ogni variante di make.

Module::Build ti offre molte funzionalità (tutto ciò a cui puoi pensare se lo estendi) ed è tutto perl, quindi non finirai mai per eseguire il debug di un makefile.Module::Install ti offre funzionalità, ma devi raggrupparle e alla fine tutto finisce per passare attraverso "make".

Raccomando anche Module::Build e Module::Starter (con il file Plug-in TT2).

Module::Build è migliore in ogni caso, ma è meno ampiamente supportato di ExtUtils::MakeMaker (più specificamente, le versioni precedenti di Perl non lo supportano immediatamente).Dipende dai tuoi bisogni.

Personalmente, consiglio Module::Install, come fanno molte persone che conosco: lo usano anche quelli del calibro di Catalyst e Moose.

Ecco un piccolo chiarimento sulla direzione che speravo prendessero le risposte:

  • pro/contro dei vari framework
  • compatibilità/base di installazione dei framework
  • idoneità per interni (locali) vs.rilasci esterni (CPAN).
  • non semplici risposte "usa X".

La risposta di Dave ha alcune buone informazioni pro/contro. La risposta di Leone allude alla compatibilità ma non è esplicito.COME ha menzionato Brian D Foy, solo i vecchi cappelli usano EUMM, ma non sono convinto che MB sia un buon framework per cose destinate a CPAN poiché non fa parte del core fino alla 5.9.

Ci sono pro e contro per entrambi.In questi giorni utilizzo e consiglio Module::Build e Module::Starter.

EU::MM sembra ancora essere quello più ampiamente supportato e popolare, ma Module::Build sta recuperando terreno.Inoltre, controlla Modulo::Avviatore per un modulo che ti aiuterà a iniziare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top