<div dir="ltr">2008/10/12 watercloud <span dir="ltr">&lt;<a href="mailto:watercloud@xfocus.org" target="_blank">watercloud@xfocus.org</a>&gt;</span><br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div dir="ltr"><br>perl里最大的几个问题:<br>1. 语法太灵活。这是perl的优点,perl爱好者巨喜欢的,我就很喜欢,但这也是制约perl发展的最根本的原因。项目团队内解决方法,约定一套统一的编码、命名、注释规范。尤其是每个变量必须my声明,且标明内部结构如: my %user; # user { &#39;name&#39; : .. , &#39;groups&#39;:[ {&#39;groupname&#39; : .....</div>

</blockquote><div><br>真看不出来这是 perl 里才需要注意的问题。。。use strict; use warnings 早已是 perl common practice 了。至于动态数据结构的注释和文档,在其他语言中也是需要的。<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div dir="ltr">2. 多线程严重不稳定,win32下效率非常低,解决方法:用多进程。</div></blockquote><div><br>多线程支持对 perl 而言是一个 after thought,且这些年来始终是一个试验性的 feature,从未推荐在生产中使用,而且在 perl 解释器的 C 源码编译中默认是禁用的,只不过许多第三方的二进制发布中都启用了,包括 Win32 上非常流行的 ActivePerl 发布。<br>

&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div dir="ltr">3. 类声明语法很不自然。 class声明一般团队新手很难学会,解决方法: use&nbsp; cpan 上的perl6::classes,这样在perl5里就可以用人都能看懂的方法来声明类了:</div>

</blockquote><div><br>Perl6::* 多是使用很脆弱的 source filter,主流 Perl 程序员多不推荐在生产中使用。目前的 the state of the art 是使用 Moose. 比如 Prophet 等东东都大量应用了 Moose. (fayland 最近也在研究 Moose?)<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div dir="ltr"><br>class Person {<br>&nbsp; method function1 { .. }<br>&nbsp;}</div></blockquote><div><br>嗯,这是 Perl 6 里的写法。。。<br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div dir="ltr"><br>4. 函数无法指明参数,使得函数定义不自然,也不易阅读,解决方法:use cpan上的perl6::subs,然后就可以比较好的定义函数了 def function($age,$name) ...<br>
</div></blockquote><div><br>这也将在 Perl 6 中解决。。。<br><br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div dir="ltr">perl5本身除了以上几点外已经非常完美了,说实话我对perl6一点都不看好,因为:</div>

</blockquote><div><br>以上几点正是 Perl 6 要解决的问题,而且是 Perl 5 本身非常非常难解决的。事实上除此而外,Perl 5 有许多问题,最严重的问题是其内部极为凌乱极为复杂极为难以维护。<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div dir="ltr">a) perl5已经足够好,大家并没有使用perl6的动力,开发者也没有动力去开发perl6.我觉得这个才是perl6始终缓慢的根本原因。</div></blockquote><div><br>这不是根本原因。。。根本原因是绝大部分 p5p 和 perl 6 开发人员只能在自己的业条时间去做这些事情,而且一方面需要把 Perl 5 继续推向前进(perl 5.10.0 已经发布,perl 5.8.9 也即将发布),另一方面需要定义一个全新的语言 Perl 6,另一方面还要开发一个通用目的的虚拟机 parrot,另一方面还要开发 Perl 6 编译器的实现。<br>

<br>我们看到纯粹靠志愿者的业余工作去完成如此之多的艰巨而宏伟的工作,我们最值得做的是提供帮助,提供建设性的意见,毕竟在这些工作中我们自己又做出了多么的贡献呢?批评别人的工作总比自己做点儿什么要容易得多。。。而可惜经常不会给这个世界带来太多的好处。。。你觉得呢?<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div dir="ltr"><br>b)perl6会导致对perl5的不兼容,现在cpan上这么多模块不兼容是巨大的损失。<br></div></blockquote><div><br>事实上,按照设计,Perl 6 编译器可以运行所有的 Perl 5 代码,包括 CPAN 上带 XS 的那些。。。而且在 Perl 6 源代码中也可以随时在 v6 和 v5 两种语言之间切换,比如:<br><br>&nbsp;&nbsp;&nbsp; use v6;<br>&nbsp;&nbsp;&nbsp; # this is Perl 6<br>
&nbsp;&nbsp;&nbsp; ...<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; use v5;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # this is Perl 5 now...<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; # this is Perl 6 again...<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div dir="ltr"><br>我列出的perl主要4个问题,有3个都能得到解决,只有那个线程问题是个硬伤,尤其是现在cpu都向多核发展,多线程解决不好会更加限制perl的发展。如果perl6能很好的解决这个问题就是天幸了!<br>
</div></blockquote><div><br>Perl 6 中自然会很好地得到解决 :))<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div dir="ltr">当然python目前对多线程支持也极烂,同一时刻只能有一个线程使用解释器,这就导致无论多少个cpu同一时刻只能有一个线程在执行中,其他都在等待。<br>
</div></blockquote><div><br>多线程一般有两种用处,一是用来实现并发,一则是在多核硬件上实现真正的并行 :) 这里的模型可以实现前者,后者要实现一个 CPU 密集的程序在多核机上跑得更快还是比较 tricky 的,需要程序员做许多额外的工作,即使是像 Haskell 的 GHC 编译器也如此。。。<br><br></div></div>Cheers,<br>-agentzh<br><br></div>