学习Perl - 选择哪个版本?

10

我一直在考虑学习Perl。我应该学Perl5还是从Perl6开始?

5个回答

18

如果你需要CPAN、可接受的运行性能以及完整稳定的语言,那么Perl 5是一个不错的选择。如果你想要玩世界上最酷的玩具,那么可以选择Perl 6。

当然,它们并不相互排斥 - 我用Perl 5来写代码并从中获得报酬,也用Perl 5来进行大部分“严肃”的开源工作,并用Perl 6来娱乐。但我已经写了足够长时间的Perl了,以至于我已经对Perl 5非常熟悉,可以在业余时间切换到Perl 6来写代码。

但对于初学者而言,当然你想要专注于一门语言,而这门语言应该是Perl 5,因为它可以满足大多数实际需求。Perl 5不会在未来10年内消失,无论Perl 6取得多大的成功,尽管Perl 5和Perl 6是明显不同的语言,但你从Perl 5所学的很多东西仍然会帮助你开始学习Perl 6(如果你将来选择学习的话)。


评论我自己的帖子:希望有一天我们能够得到承诺的p5/p6互操作性,这样你就可以从Perl 6中使用整个Perl 5 CPAN,这将是两种语言的伟大时刻。但现在,我们仍处于非常早期的阶段 :) - hobbs

15

以下是来自Perl6网页的引用(重点是我的):

Perl 5和Perl 6是Perl家族中的两种不同谱系的语言。如果你正在寻找生产就绪的代码,请使用Perl 5。

Perl 5已经成熟稳定,而Perl 6仍在开发中。


6
值得强调的是,它们是不同的语言,而不是同一语言的不同版本。 - ysth

13

Perl5。

如果你愿意进行全新的开发,并且可以等待N年,直到Perl 6实际上发布,那么你可以学习Perl 6。但是,真正的选择是Perl5。

编辑以澄清:Rakudo Star是Perl 6的一个有用、可用的“早期采用者”分发版,最近引起了一些关注,但它并不完整或最终版本,也不适合在生产环境中使用。如果你在未来一到三年内正在寻找新工作,它不太可能帮助你获得这份工作。也许最重要的是,如果企业对Perl 6感兴趣,很可能它也有一些Perl 5基础设施,因此在学习Perl 6之前,最好先学习Perl 5及其限制,以更好地理解它。

如果你只是想寻找“乐趣”,你可能确实更喜欢Perl 6……或者你可能更喜欢Perl 5,因为它有更广泛的预打包模块可通过CPAN获得。

目前还没有Perl 6的发布日期。


1
昨天发布了可安装的Perl6 Beta版本。 - Alexandr Ciornii
哪个版本的Perl6?有很多分支在流传。 - vol7ron
5
Rakudo Star更像是技术演示程序,而不是测试版。在宣布正式版本之前,它还有很长的路要走,甚至包括alpha版本。http://rakudo.org/announce/rakudo-star/2010.07 - Schwern
1
@fennec:在发表这样的言论之前,请先了解一些相关知识。 - ysth
1
@ysth - 嗯,是哪些陈述?“还有N年才能真正发布Perl 6”?没有人知道什么时候会有官方版本的Perl 6发布。常见问题解答也承认了这一点。你可能会对我在区分像Rakudo这样的实验性/早期采用者软件和“真正发布”方面缺乏清晰度提出异议,但是要求“请有点头绪”似乎有点过于轻率。 - user240438
1
“N年”。我的评论与早期采用者版本无关。在我看来,它不到2年内不会发布的可能性微乎其微。 - ysth

5

推荐在学习Perl 6之前先学习Perl 5有几个原因。

  • 撰写Perl 5程序的书籍比Perl 6多得多。
  • 有关Perl 5编程的信息比有关Perl 6编程的信息更多。
  • Perl 6仍在设计过程中。这意味着您现在学习的一些内容可能以后不适用。
  • 有许多高质量的Perl 5模块,而Perl 6模块的数量相对较少。
    • CPAN
    • 目前大多数Perl 6模块只是Perl 5模块的重新实现。
  • Perl 5不会消失。
    • 当前版本的Perl 5语言中,大多数是在Perl 6规范启动之后发布的
    • 可以说Perl 6 拯救了 Perl 5。
推荐使用Perl 6而不是Perl 5的原因有几个:
  • 它被重新设计,使得不同的事物看起来不同,相似的事物看起来更加相似。
  • 并行性已经被设计到语言中。
  • 许多有争议的范式已经以某种方式结合在一起,感觉就像是整体的一部分。
  • 更好的默认对象系统
    (Perl 5中的Moose/Moo等也很好,并且已经被复制到其他语言中)
  • 特殊情况较少。
  • 有更多表达思想的方式,可以选择更容易阅读的一种。
  • 元操作符
  • 普通操作符只是子例程,这使您可以添加新的操作符并扩展现有操作符。
    (不要将现有操作符用于其未设计的事情,添加新操作符)

2

Perl6自2000年7月开始开发。您可以决定是否要等待它。

对于生产代码,仍建议使用Perl5,因为它拥有庞大的支持社区。尽管作为对Perl6的证明,如果您遇到问题,更可能是由于语言的新添加而不是Perl5中已有的内容。

一旦Perl6“发布”,Larry Wall和其他人创建了一个转换器,可将大多数(如果不是全部)Perl5代码转换为Perl6语法,如果这有助于您的决策。


3
尽管会有翻译员,但我怀疑他们的翻译能力是否足以可靠地翻译一个大型生产系统。而对于 XS,它已经很难理解、测试和文档化了,我不知道他们会如何处理。更可靠的方法是使用现有的 Perl 5 解释器。要么将 Perl 5 嵌入到 Perl 6 中,要么将 Perl 6 翻译成 Perl 5(也称为 6on5)。据我所知,这三种方法都正在推进。 - Schwern
3
我不知道你在第一句引用的是谁。2000年,Larry Wall 在一次会议上提出了重新设计 Perl 语言的想法,并开始接受 RFC 来规范它,但真正的实现开发直到大约5年后才开始。可能是语义上的区别,但 Rakudo 并没有开发了十年,如果这样想或未注意到区别,则会对其进展速度得出错误的结论。 - cikkle
@cikkle:自动引用符算吗? :) -- 你说得对,这门语言在2000年宣布,并且Larry从那时开始接受和分组RFC。我认为Masak的历史记录非常准确(http://use.perl.org/~masak/journal/40451)。像你一样,他将2005年作为事情开始的神奇日期,但实际上在那之前有一些推动,直到那个时候。尽管大部分代码已经重写,但开发一个已经成熟的语言需要很长时间。顺便说一下,这是一个与Perl历史无关的酷视频:http://www.youtube.com/watch?v=jl9HVEJl_-w - vol7ron
@Schwern 如果你能使用重新实现的最常用XS模块版本,进行5到6的转换,然后简单地标记其余部分为不支持,我不会感到惊讶,如果你能获得很多关注。但那将是一个比我们现在所处的阶段要晚得多的解决方案 :) - hobbs
2
@hobbs,我有模拟大型旧模块的经验(请参见DBIx::Class::CDBICompat),我可以告诉你,这永远不够好。即使您正确地获取了所有记录的功能,人们仍将在大型商业代码库中使用非常微妙的未记录功能。模拟像DBI和其所有驱动程序这样的东西是一个无望的前景。最终,它必须完美地工作,要么全部成功,要么风险对于大型项目来说太大而无法切换。请参阅Python 3一直存在的问题。 - Schwern

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接