2009年6月23日星期二

[PerlChina] Re: 求类似Class::Accessor的推荐模块

On 6/22/09, Don Qin <icefishc@gmail.com> wrote:
>
> 试验了一下 真的很快. 比手工写的accessor都要快很多。
> 去看看能不能从中学到些什么~~~

Class::XSAccessor 生成的是 getter/setter 的 C 实现,呵呵,自然比 perl 代码编译成的 optree 的计算要高效:

http://cpansearch.perl.org/src/SMUELLER/Class-XSAccessor-1.03/XSAccessor.xs

其中的 setter 和 getter 函数在功能和实现上都很像 Class::Accessor 的 set 和 get 方法:

http://cpansearch.perl.org/src/KASEI/Class-Accessor-0.33/lib/Class/Accessor.pm

但是前者是纯 C 版本的 :) 确实非常帅,哈哈!至于 Class::Accessor::Fast 不过是取消了对 set/get
方法的一次调用,直接生成 getter/setter 的 closure,然后注册到包的符号表里。在最后一步上,前面三者是一样的 :)

Cheers,
-agentzh

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 求类似Class::Accessor的推荐模块

呵呵,其实 runtime 的开销在大多数情况下比较有价值,另外,你代码中有个地方有问题,可能是你最近改的时候出的问题,你第一版给我的时候我没发现
------

my $accessor_code = q!unuse(qr/^Class\//);eval {package FooC;use base "Class::Accessor";__PACKAGE__->mk_accessors(qw/x y/);}!;

------
注意这儿的红色 eval { , 应该改成 eval q{ , 不然的话,和其他 code 比就不公平了
eval {} 后面是block, 只在 runtime 解析一次,而 eval q{} 后面这个 expr 每次都解析,直接导致了 $accessor_code 测试结果更快更好。

另外,你贴的结果中:
------

 Class::Accessor       50000/s 27233%             1917%                  450%              --

----
应该是有些问题,可能是你运行测试脚本的时候,$accessor_code 的 eval 中存在某个语法错误导致测试结果如上所示。
但是你给出的 http://agentzh.org/misc/accessor_bench.pl 却是修正后的脚本,所以我猜你自己再运行一遍得到的结果肯定不会是
50000/s :-)

类似 App::Benchmark::Accessors 的 runtime 结果: http://is.gd/1bxSq


2009/6/24 agentzh <agentzh@gmail.com>
On 6/22/09, Don Qin <icefishc@gmail.com> wrote:
一直以为Moose很慢。 今天作了个benchmark 发现速度还是相当不错的 快于Class::Accessor 比Class::Accessor::Fast稍慢。 
测试基于Class::Accessor中自带的那个example

呃。。。你没有晒出你的 benchmark 脚本,所以不太确定你测试的是 BEGIN time 的还是 runtime 的性能,呵呵。

Moose 的运行时性能是极好的,因为它把 sugar 都尽可能“编译”成了 perl runtime 中的 primitive,所以我看到你的结果并不感到吃惊。于是我着重测试了一下 BEGIN time 即加载启动时的开销:

                          Rate  Moose Class::XSAccessor Class::Accessor::Fast Class::Accessor
 Moose                  41.1/s     --              -92%                 -100%           -100%
 Class::XSAccessor       539/s  1209%                --                  -94%            -98%
 Class::Accessor::Fast  8824/s 21344%             1538%                    --            -62%
 Class::Accessor       23077/s 55985%             4185%                  162%              --

这一组测试同时考虑了 use 本身的开销,测试脚本在这里:

    http://agentzh.org/misc/accessor_bench.pl

这里 Moose 最慢,我不感到意外,但其他 3 项的顺序似乎和我期望中的刚好反置了,哈哈!欢迎大家指正我评测本身的错误 :P

如果将脚本中的 $ENABLE_UNUSE 变量置为 0,即不包含 use 本身的开销的话,结果是类似的(主要变化是大家一起变快了,因为都只需要 use 一次了):

                          Rate  Moose Class::XSAccessor Class::Accessor::Fast Class::Accessor
 Moose                   183/s     --              -93%                  -98%           -100%
 Class::XSAccessor      2479/s  1255%                --                  -73%            -95%
 Class::Accessor::Fast  9091/s  4870%              267%                    --            -82%
 Class::Accessor       50000/s 27233%             1917%                  450%              --

各模块的版本号:

 Class::Accessor 0.33
 Class::Accessor::Fast 0.33
 Class::XSAccessor 1.03
 Moose 0.83

perl 版本 5.10.0.
 
当然,对于那些长驻于内存中运行很长时间的应用来说,启动速度不是那么重要了,呵呵 :)

Cheers,
-agentzh





--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 求类似Class::Accessor的推荐模块

On 6/24/09, Fayland Lam <fayland@gmail.com> wrote:
try App::Benchmark::Accessors

Well, it tests against runtime performance only. For example, it first constructs everything up here without benchmark:

http://cpansearch.perl.org/src/MARCEL/App-Benchmark-Accessors-0.06/lib/App/Benchmark/Accessors.pm

Then it times the reading/writing of the accessors, which my script (intentionally) exclude. For instance:

http://cpansearch.perl.org/src/MARCEL/App-Benchmark-Accessors-0.06/t/get.t (reading)

or

http://cpansearch.perl.org/src/MARCEL/App-Benchmark-Accessors-0.06/t/set.t (writing)

Except that, nice module though :)

Thanks!
-agentzh


--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 求类似Class::Accessor的推荐模块

try App::Benchmark::Accessors
http://search.cpan.org/~marcel/App-Benchmark-Accessors-0.06/lib/App/Benchmark/Accessors.pm

agentzh wrote:
> 2009/6/24 agentzh <agentzh@gmail.com <mailto:agentzh@gmail.com>>
>
> 这一组测试同时考虑了 use 本身的开销,测试脚本在这里:
>
> http://agentzh.org/misc/accessor_bench.pl
>
> 忘了提及的是,我使用下面的命令来运行此脚本:
> perl -X accessor_bench.pl
> 即抑制所有警告. 如果进行 reuse 操作的话,会报大量的 redefined
> subroutine 的警告,而我又懒得去清 perl 包的符号表了,呵呵.
> Cheers,
> -agentzh
>
>
> >


--
Fayland Lam // http://www.fayland.org/
Foorum based on Catalyst // http://www.foorumbbs.com/


--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 求类似Class::Accessor的推荐模块

2009/6/24 agentzh <agentzh@gmail.com>

这一组测试同时考虑了 use 本身的开销,测试脚本在这里:

    http://agentzh.org/misc/accessor_bench.pl

忘了提及的是,我使用下面的命令来运行此脚本:
 
   perl -X accessor_bench.pl
 
即抑制所有警告. 如果进行 reuse 操作的话,会报大量的 redefined subroutine 的警告,而我又懒得去清 perl 包的符号表了,呵呵.
 
Cheers,
-agentzh


--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 求类似Class::Accessor的推荐模块

On 6/22/09, Don Qin <icefishc@gmail.com> wrote:
一直以为Moose很慢。 今天作了个benchmark 发现速度还是相当不错的 快于Class::Accessor 比Class::Accessor::Fast稍慢。 
测试基于Class::Accessor中自带的那个example

呃。。。你没有晒出你的 benchmark 脚本,所以不太确定你测试的是 BEGIN time 的还是 runtime 的性能,呵呵。

Moose 的运行时性能是极好的,因为它把 sugar 都尽可能“编译”成了 perl runtime 中的 primitive,所以我看到你的结果并不感到吃惊。于是我着重测试了一下 BEGIN time 即加载启动时的开销:

                          Rate  Moose Class::XSAccessor Class::Accessor::Fast Class::Accessor
 Moose                  41.1/s     --              -92%                 -100%           -100%
 Class::XSAccessor       539/s  1209%                --                  -94%            -98%
 Class::Accessor::Fast  8824/s 21344%             1538%                    --            -62%
 Class::Accessor       23077/s 55985%             4185%                  162%              --

这一组测试同时考虑了 use 本身的开销,测试脚本在这里:

    http://agentzh.org/misc/accessor_bench.pl

这里 Moose 最慢,我不感到意外,但其他 3 项的顺序似乎和我期望中的刚好反置了,哈哈!欢迎大家指正我评测本身的错误 :P

如果将脚本中的 $ENABLE_UNUSE 变量置为 0,即不包含 use 本身的开销的话,结果是类似的(主要变化是大家一起变快了,因为都只需要 use 一次了):

                          Rate  Moose Class::XSAccessor Class::Accessor::Fast Class::Accessor
 Moose                   183/s     --              -93%                  -98%           -100%
 Class::XSAccessor      2479/s  1255%                --                  -73%            -95%
 Class::Accessor::Fast  9091/s  4870%              267%                    --            -82%
 Class::Accessor       50000/s 27233%             1917%                  450%              --

各模块的版本号:

 Class::Accessor 0.33
 Class::Accessor::Fast 0.33
 Class::XSAccessor 1.03
 Moose 0.83

perl 版本 5.10.0.
 
当然,对于那些长驻于内存中运行很长时间的应用来说,启动速度不是那么重要了,呵呵 :)

Cheers,
-agentzh


--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 海书城附近的计算机专业书店叫什么,地址在哪?

   现在只能靠上海书城了, 就是不打折而已
 
 
一般学校旁边这种书多


 
2009/6/22 Havel Zhang <havel.zhang@gmail.com>
是的,好像两三年前就搬走了,大概是福州路那里地价太贵吧:)我去的时候贴了一张告示说搬走了。具体地址我忘了,好像是在普陀区的沪太路和延长中路口,那里在延长中路上有个新华书店,那个清华电脑书店就在旁边的图书大楼里。
去年的时候我去过,可惜是晚了,他们下午四点半关门,我问了旁边的那个新华书店的员工,他们都说图书大楼里有那个清华电脑书店,只是关门很早。
挺怀念那个清华电脑书店的,里面书很全,不过现在因为太远了,再说在淘宝上买又那么方便,所以就不去了:)

张鹏

2009/6/22 万朝伟 <wanmyome@gmail.com>
上海福州路的上海书城附近,计算机专业书店,记忆中叫什么清华什么什么的,记得不太清楚


我去逛过一次,然后再也找不着了

有知道具体位置或电话、网站的告诉我一下,谢谢了





--
真理使你自由



--
           Yours Sincerely
                   Zeng Hong

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---