Welche Rahmenbedingungen sollte ich verwenden, um Module zu schreiben? [geschlossen]

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

  •  09-06-2019
  •  | 
  •  

Frage

Was ist der beste Rahmen für das Schreiben von Modulen - ExtUtils :: Makemaker (h2xs ) oder Module :: Build-?

War es hilfreich?

Lösung

Hinweis Diese Beratung ist veraltet. Module :: Build wurde aus dem Perl-Kern entfernt aber lebt als CPAN-Modul auf. Die Vor- und Nachteile immer noch stehen, und meine Meinungen über Make still stehen.


Als ehemaliger Betreuer des ExtUtils :: Makemaker, Ich mag Module empfehlen :: bauen, weil Make eine Horrorshow ist. Module :: Build ist so viel besser zusammen. Aber das sind nicht Ihre Anliegen und ich werde meinen „am wenigsten Aufwand für Dich“ Antwort präsentieren.

Executive Summary:

Da Module :: Build-Unterstützung nicht zu 100% an Ort und Stelle durch alle Perl ist, mit Make starten. Wenn Sie irgendeine Anpassung an alle tun wollen, wechseln Modul :: Build. Seit ihrer grundlegenden Layout, Optionen und Schnittstelle fast identisch sind, dies schmerzlos. So verführerisch wie es aussieht, Modul vermeiden :: Installieren.

Zum Glück Module :: Build kann Make emulieren, die einige hilft, aber nicht hilft, wenn Sie irgendeine Anpassung tun werden. Siehe Module :: Build :: Compat .

Für CPAN Versionen mit Module :: Build ist in Ordnung. Es gibt genug Module :: Build-Material auf CPAN jetzt, dass jeder behandelt ist mit bekommen es Bootstrap bereits.

Schließlich ist die neue configure_requires Option können CPAN Schalen kennen installieren Module :: bauen, bevor sie beginnen können, um das Modul zu bauen. Leider nur die neuesten wissen CPAN Schalen über configure_requires.

Oh, was auch immer Sie tun, nicht verwenden h2xs (es sei denn, Sie XS Code schreiben ... und selbst dann darüber nachdenkt).

Make Vorteile:

  • Kommt mit Perl und Perl-Kern verwendet (daher ist es aktiv gehalten und wird so für immer bleiben)
  • Alles weiß, was mit einem Makefile.PL zu tun.
  • Die meisten Modul-Authoring-Dokumentation wird Makemaker abdecken.
  • machen Verwendet (diejenigen, die machen wissen, können die Build debuggen und Patch Verfahren)

Make Nachteile:

  • machen Benötigt (man denke Windows)
  • Schwierige anpassen
  • noch schwieriger zu gestalten und Cross-Plattform machen
  • Schwer zu debuggen, wenn etwas schief geht (es sei denn, Sie verstehen)

Module :: Build-Pro:

  • leichter anpassen / Unterklasse
  • Reine Perl
  • einfacher zu debuggen (es ist Perl)
  • Kann Make auf verschiedene Weise emulieren
  • Die CPAN-Shell wird Module installieren :: bauen für Sie

Module :: Build-Cons:

  • Die Module :: Build-Maintainer (und in der Tat alle von dem Perl-Toolchain Gang) hate it
  • Ältere Versionen von CPAN Kunden (einschließlich CPANPLUS) wissen nichts über Module :: Build.

Module :: Install Pro:

  • Slick-Schnittstelle
  • Bundles selbst, Sie haben eine bekannte Version
  • Alles weiß, wie man mit einem Makefile.PL
  • beschäftigen

Module :: Install Nachteile:

  • Benötigt machen
  • verwendet immer gebündelte Version, anfällig für externen Bruch
  • Schwierige außerhalb ihrer Schnittstelle
  • anpassen
  • Mucks mit den Eingeweiden von Make so ein neuen Make Release wird es schließlich brechen.
  • weiß nicht, wie eine META-Datei zu erzeugen, das v2 Meta-spec mit (Zunehmend ein Problem mit neueren Tool)

Andere Tipps

Es gibt zwei Fragen hier.

Zuerst nie h2xs verwenden. Es ist alt veraltet Bösartigkeit, obwohl ich nehme an, wenn Sie tatsächlich sind versucht, eine Header-Datei in XS-Code zu drehen, könnte es sinnvoll sein (nie selbst getan).

2011 Update: ich empfehlen, einen Blick auf Dist :: Zilla , vor allem, wenn Sie denken, Sie‘ ll werden mehr als ein Modul beibehalten wird.

Für ein neues Modul erstellen, verwenden Sie Module :: Starter. Es funktioniert großartig und hat einige nette Plugins für die Ausgabe anpassen.

Zweitens, Sie zu fragen, was System bauen Sie verwenden sollten. Die drei Anwärter sind ExtUtils :: Makemaker (EUMM), Module :: Build (MB) und Module :: Install (MI).

EUMM ist ein schreckliches hartes Stück Arbeit, aber es funktioniert, und wenn Sie nicht Ihren Build-Prozess an allen Anpassen funktioniert gut.

MB ist das neue Kind, und es hat seine Kritiker. Es ist großes Plus ist, dass, wenn Sie stark anpassen mögen Ihre Installation und Build-Prozess, ist es durchaus möglich, diese sanely zu tun (und in einer plattformübergreifende Art und Weise) mit MB. Es ist wirklich nicht möglich EUMM verwenden.

Schließlich MI ist im Grunde eine deklarative Wrapper auf der EUMM. Es packt mich auch mit Ihrer Distribution zusammen, in einem Versuch, Probleme zu arbeiten, um mit den Nutzern versuchen, Module mit alter Toolchain-Module zu installieren. Der Nachteil des „Paket selbst“ Tricks besteht darin, dass, wenn es ein Fehler ist in MI selbst, müssen Sie wieder loslassen alle Module nur um es zu beheben.

Was Anpassung geht, gibt es einige Plugins für MI, aber wenn man über sie gehen möchten, müssen Sie das Problem wieder mit Makefiles des Umgangs und Build-Tools über ein Dutzend + Plattformen, so ist es wirklich nicht gehe zu helfen, zu viel Sie in diesem Bereich.

ich hochgeladen gerade Verteilung :: Herd CPAN. Es ist, was ich neue Distributionen machen verwenden. Das Schöne daran ist, dass Ihre Distributionen sein können, was Sie wollen: Sie sind nur einige Vorlagen zu kochen. Ich interessiere mich nicht, wenn jemand es verwendet. Für mich ist es einfach, Low-Tech, und verursacht keine zusätzlichen Probleme.

Sie können mit so etwas wie Module :: Starter Ihre Starter-Vorlagen machen dann Ihren eigenen Text und beliebte Art, Dinge zu tun hinzuzufügen. Sie wählen nicht nur, was Sie in jeder Datei wollen, aber welche Dateien in der Distribution auftauchen. Wie Sie herausfinden, wie Sie die Dinge tun, geben Sie einfach Ihre eigenen Vorlagen aktualisieren.

Wie für Makemaker und Module :: Build, ist die Zukunft Module :: Build-. Es ist nur uns alte Jungs mit Make mehr. :) Es gibt Möglichkeiten, beide zu verwenden (oder so tun, als beide zu verwenden) zugleich. am Modul Schauen :: Bauen, Module :: Build :: Compat und Module :: Install docs . Module :: Build wurde aus Perl-Standard Library getreten und es ist Zukunft ungewiss ist. Es ist wieder zu Make als Build-System.

Dies ist zwar ein bisschen eine Antwort Cop-out ist, versuchen jede mit nur ein wenig Erfahrung mit jedem zu erhalten.

Sie können auch unter Dist-Zilla dem ein neu Autor-only-Tool-Distributionen zu erstellen. Da hilft es nur um die Verteilung zu bauen, ist es nicht mit Ihrem Code versenden oder eine Installation tun, kann es eine Menge mächtiger Dinge tun.

Das einzige Problem mit der Kompatibilität in Bezug auf Module :: Build ist, wenn ein Benutzer Module zu installieren versucht, ohne ihre CPAN Client aktualisieren (CPAN.pm oder CPANPLUS.pm) Wenn sie das Modul aus dem CPAN installieren, sie können genauso einfach aktualisiert ihre Kunden aus dem gleichen Spiegel.

Wenn Sie nicht tun wollen alles kompliziert in Ihrem Build-Prozess, sicher: Verwendung EUMM. Aber wenn Sie ein Build-Problem auf einer anderen Zielplattform haben, können Sie in der Datei Makefile am Ende, die auf jeder Variation von Make unterschiedlich ist.

Module :: Build gibt Ihnen viele Features (alles, was man sich vorstellen kann, wenn man es erweitern) und ist alles in Perl, so dass Sie nie eine Make-Datei Debuggen beenden. Module :: Installieren Sie gibt Ihnen Funktionen, aber Sie haben es zu bündeln und alles endet läuft durch ‚make‘ am Ende.

I Modul auch empfehlen :: Bauen und Module :: Starter (mit der TT2 Plugin ).

Module :: Build ist mit irgendwelchen Mitteln besser, aber es ist weniger breit unterstützt als ExtUtils :: Makemaker (insbesondere ältere Versionen von Perl unterstützen es nicht aus der Box). Es hängt von Ihren Bedürfnissen.

Ich persönlich empfehle Module :: Install, wie viele Leute kenne ich - etwas wie den Katalysator und Moose Leute auch verwenden.

Hier ist eine kleine Klärung der Richtung, die ich die Antworten gehofft würden:

  • Vor / Nachteile der verschiedenen Frameworks
  • Kompatibilität / Installationsbasis von Frameworks
  • Eignung für interne (lokale) gegenüber externen (CPAN) Freisetzungen
  • nicht blank "use X" Antworten

Daves Antwort hat einige gute Pro / con info. Leon Antwort verweist auf Kompatibilität ist aber nicht explizit . Wie brian d foy erwähnt, nur die alten Hüte verwenden EUMM, aber ich bin nicht davon überzeugt, dass MB ein guter Rahmen für die Dinge für CPAN bestimmt ist wegen es nicht Teil des Kerns bis 5,9 zu sein.

Es gibt Vor-und Nachteile für beide. In diesen Tagen Ich benutze und empfehlen Module :: Build und Module :: Starter.

EU :: MM scheint immer noch die am häufigsten unterstützten und beliebt zu sein, aber Module :: Build aufholt. Auch Besuche Module :: Starter für ein Modul, das Ihnen helfen, loszulegen .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top