2010-03-30 7 views
5

Başarımın ilk büyüsünü yaparken (örn. Tanımı "standart Perl sözdizimine çevirerek") karşılaştığı MooseX :: Declare kullanılarak gerçekleştirilen performans isabetli midir? yani, derleme ve başlangıç ​​çalışma zamanı kurulumu tamamlandıktan sonra, bir MooseX :: Declare yöntemini, geleneksel deklarasyon yoluyla tanımlanan bir yönteme benzetmede bir performans farkı var mıdır?Başarım sırasında esas olarak karşılaşılan MooseX :: Declare kullanılarak gerçekleştirilen performans mı?

+2

make_immutable adımının belirttiğiniz hız vuruşu. MXD kullanıp kullanmadığınıza bakılmaksızın yavaş olur; MXD'de varsayılan olarak gerçekleşir. – jrockway

cevap

8

Cevap evet ve hayır. MooseX :: Declare, parametre açma ve onaylama parametrelerini yapmak için MooseX::Method::Signatures'u kullandığı için, parametrelerin hiç doğrulanmamasıyla karşılaştırıldığında bir çalışma süresi başı vardır.

Ama "geleneksel beyanı" senin fikrin senin parametre sayısını ve türünü doğrulayarak içeriyorsa (ve bunu sağlam kod isterseniz gerekir) daha sonra doğrulama MXD/MXMS herhangi olacağını olmadığını düşünmek için hiçbir neden yok Doğrulamadan daha yavaş, kendiniz yaparsınız.

+1

Cevabınız için teşekkürler. Tipik olarak bazı parametrelerin doğrulanmasını yapıyorum, ancak bir dereceye kadar değil - Sanırım diğer Perl geliştiricilerinin Perlish yaklaşımını kullanıyorum. MooseX hakkında ne düşündüğümü tahmin ediyorum: Dectax sözdiziminin okunabilirliği her şey kadar artırıyor olması. –

2

MooseX :: Declare, deklarasyon sözdiziminin "gerçek" Perl koduna derlenmiş bir zaman dönüşümüdür. Tüm yükü derleme zamanında.

Sözünü ettiğiniz çalışma zamanı yükü, Moose tipi doğrulama ve zorlama olur. Bunların ikisi de isteğe bağlıdır: bir tür niteleyici belirtmeniz gerekmez ve is coerce belirtmeniz gerekmez. Ne de kullanırsanız, çalışma zamanı performansınız MooseX :: Declare'nin sihri olmadan ne olacağına çok yakın olmalıdır.

Çalışma zamanı koşullarında, kazan/kazan. Sadece kullandığınız özellikler için ödeme yaparsınız. Tip doğrulama, manuel olarak yapmak zorunda olduğunuz bir şeydir ve kesinlikle bir performans isabeti olsa da baskılama, argüman bazında etkinleştirilir.