[Brasil-PM] Perl 5.22 não terá mais Module::Build no core

breno breno em rio.pm.org
Terça Maio 28 20:38:25 PDT 2013


Calma, não se desesperem :-)

tl;dr: o Module::Build não vai morrer, só vai sair do core. Em 2015.
Hoje, todos os clientes do CPAN já são capazes de fazer bootstrap do
Module::Build automaticamente no sistema via "configure_requires"
antes do Build.PL rodar, então essa remoção não fará nenhuma diferença
prática para distribuições usando o Module::Build - apenas deixará o
core do Perl mais enxuto, leve, e livre de preocupações associadas ao
Module::Build. É um ganha-ganha para todos.


---------[ versão "garu" ]---------

Como você provavelmente já sabe, o ciclo de desenvolvimento atual do
Perl 5 é de uma nova versão estável por ano. Esse mês, a versão 18 do
Perl 5 foi lançada. Quase ao mesmo tempo, como de costume, foi lançada
a 5.19, primeiro release de desenvolvimento do novo ciclo. Ao ser
marcado para remoção, o Module::Build que vem no core do 5.19 emitirá
um warning sobre isso, e esse warning continuará até a versão 5.22 -
em 2015 - quando ele finalmente será completamente removido do core.
Não do CPAN, apenas do core.

"Mas peraí", você diz. "O Module::Build não é usado pra instalar
módulos sem o 'make'? Não é um dos builders mais usados? O próprio
Michael Schwern, criador do ExtUtils::MakeMaker, não disse pra todo
mundo migrar do EUMM pro Module::Build? WTF?"

De fato, o Module::Build foi *fundamental* para uma série de inovações
que aconteceram no mundo Perl na última década(!), especialmente no
que se refere ao toolchain para instalação e configuração de módulos.
Entre outras, ele formalizou a especificação do Build.PL, foi o
primeiro a permitir build e instalação de módulos usando apenas Perl
em vez de criar Makefiles, inventou e popularizou o META.yml (que
evoluiu para a especificação META oficial do CPAN), permitiu a
instalação automática em diretórios personalizados de forma fácil e
intuitiva (efetivamente abrindo caminho para iniciativas como
local::lib e carton), tornou extremamente fácil a instalação de
módulos "Alien" como o SDL e o wxWidgetse, e trouxe insights
importantíssimos para a criação de uma série de soluções avançadas, do
Module::Install ao Dist::Zilla.

No entanto, o Module::Build em si também tem vários problemas - a
maioria deles ligados à manutenção. São mais de 4K linhas de código
misturadas em um arquivo só (Module::Build::Base), código super
acoplado e difícil de acompanhar, depurar e extender. Por exemplo, o
Build.PL executado serializa os resultados em alguns arquivos que são
usados ao longo da execução do "Build" para reconstruir o objeto
original, com montes de meta-opções e potenciais subclasses
interferindo no processo como um todo. Uma série de features
supérfluas e/ou raras foram adicionadas diretamente em seu núcleo,
prejudicando ainda mais o bom entendimento e depuração do processo de
montagem e instalação das distribuições. Seu sistema de dependências
nunca foi realmente satisfatório, e sua geração automática de
Makefile.PL trouxe como consequência a necessidade de manter
compatibilidade de features (e, em muitos casos, de bugs) com o EUMM
para sempre.

Isso não quer dizer que o Module::Build seja um builder ruim - tanto
que muitos projetos de sucesso usaram-no e continuam com ele até hoje.
Mas todas as questões acima culminaram no Module::Build nunca se
tornando o sucessor efetivo e incontestado do EUMM, como havia sido
previsto quando ele foi colocado no core. A decisão faz parte de uma
estratégia maior de remoção de módulos do core, para deixar a
manutenção mais fácil e permitir que os desenvolvedores gastem seu
tempo criando novas features e cuidando de bugs importantes, em vez de
mantendo módulos que não são realmente essenciais. Ela foi possível
graças aos avanços nos clientes de CPAN (cpan, cpanplus, cpanm) que
hoje suportam o bootstraping do Module::Build via
"configure_requires". Quando o cliente detecta que precisará do
Module::Build, ele vai baixá-lo e instalá-lo pra vc automaticamente,
antes de rodar o Build.PL. Isso já é feito quando o requisito é uma
versão mais recente do M:B que a que foi instalada no core da sua
versão do Perl 5. Daqui a dois anos, será a regra.

Para mais detalhes (em inglês), incluindo links da discussão associada:
http://www.dagolden.com/index.php/2140/paying-respect-to-modulebuild/


[]s

-b


Mais detalhes sobre a lista de discussão Brasil-PM