我知道Perl5. 学习Perl 6而不是学习Python的好处是什么?
来自Perl 5的背景,迁移到Perl 6或者Python有什么优势?
编辑:如果我们认为这只是火焰诱饵而对此投票否决了,请阅读以下答案。他们不是在争吵。他们是对每种语言的利弊的精心撰写的讨论。给予Stack Overflow社区一些荣誉。
解决方案
对于快速的一个内衬,Perl通常优于python,尤其是涉及文本/正则表达式的情况
http://novosial.org/perl/one-liner/
从Perl切换到Python没有任何好处。从Python切换到Perl也没有任何好处。他们都同样有能力。根据我们所了解的知识和要解决的问题选择工具,而不是根据某种观念固有地优于另一种观念的想法进行选择。
唯一的真正优势是,如果我们从一种不懂的语言切换到一种我们知道的语言,在这种情况下,工作效率可能会提高。
在我看来,Python的语法更加简洁,一致。我们可以在任何地方都定义相同的嵌套数据结构,无论是计划将它们传递给一个函数(或者从一个函数返回)还是直接使用它们。我非常喜欢Perl,但是一旦我学会了足够的Python以"获取"它,我就再也没有回过头。
以我的经验,Python的随机代码片段比Perl的随机代码片段更具可读性。真正的区别在于每种语言的文化,Perl用户经常喜欢聪明,而Python用户更喜欢清晰。这并不是说我们无法拥有清晰的Perl或者狡猾的Python,但这并不常见。
两者都是很好的语言,可以解决许多相同的问题。我个人倾向于Python,如果没有其他原因的话,它似乎正在发展,而Perl似乎正在失去使用Python和Ruby的用户。
请注意上面的鼬鼠单词的丰富性。老实说,这实际上取决于个人喜好。
Python没有结点。实际上,到目前为止,我认为只有Perl具有Junctions。 :-)
Python具有一个巨大的优势:它已实现,并且有一个相当稳定的编译器。
Perl 6是一种非常有远见的语言,还没有足够稳定的版本可供生产。但是它具有一组非常酷的功能,其中包括:交集,语法(是的,我们可以使用Perl 6" regexes"编写完整的解析器),字素级的Unicode处理,惰性列表和强大的宏。
在特定情况下,当我们了解Perl 5时,我们会很快熟悉Perl 6语法。
有关Perl 6的酷功能的更全面列表,请参见FAQ。
我们还没有说过为什么要离开Perl *。如果我的水晶球今天能正常工作,那是因为我们不完全了解该语言,所以这使我们感到沮丧。
坚持使用Perl并很好地学习语言。如果我们这样做,那么有一天我们将成为专家,并且知道为什么问题无关紧要。寻求启发的人来了。
- 我们将其称为" Perl5",但没有这种语言。 :P
Python具有一个主要优势,即可以以现成的格式使用。
如果需要与Java或者.net clr紧密合作,则Python具有Jython和IronPython。
Perl 6的优点是基于与Perl(1-5)相同的原理;如果我们喜欢Perl,出于同样的原因,我们会喜欢Perl 6. (有多种方法可以实现,等等。)
Perl 6还具有仅部分实现的优点:如果我们想破解语言内部结构或者帮助定义标准库,那么这是开始使用Perl 6的好时机。
编辑:(2011)仍然是入侵Perl6内部的好时机,但是现在有一个更加成熟,可用的Perl6发行版Rakudo Star。如果我们想今天使用Perl6,那是一个不错的选择。
IMO python的正则表达式,尤其是。当我们尝试在s / whatever / somethingelse / e
中表示像perl的/ e运算符之类的东西时,它变得很慢。因此有疑问,我们可能需要继续使用Perl5 :-)
Perl 6与python相比具有一些很棒的功能。我认为这些都是Python 3不具备的功能:
- 甚至对于内置对象和"操作员"
- 与子集类型
- 编译时方法名称冲突检查,
- 在角色定义中要求某些方法存在于宿主类中,并随后在实现角色时调用宿主类的方法的能力。
- 语法(返回结构化数据的正则表达式的组成)
- 强大的扩展正则表达式。比python内置的regex功能更好。
- 结点和类型结点
- 元运算符
- 定义后缀,后缀,中缀,前缀和后缀运算符的功能。
- 从理论上讲,可以将AST作为结构化数据使用。 (又称:Lisp宏)
- 区块范围
- 用于从任何表达式中生成闭包的*术语
- 隐式并发构造([]元,结点)
- 声明式并发构造(超级)
- MAIN子菜单将其功能签名转换为命令行界面和命令行使用指南。
- 懒惰列表(但我们可以使用生成器滚动列表)
与Python相比,它具有与Perl 5相比的以下优点:
- 带有私有数据概念的消气剂/去糖剂
- 定义明确,可访问的元对象协议
- 强大的unicode支持
- 内置强大的日期/时间支持
- 通常,"包含电池"-许多内置功能
- 默认情况下非全局范围的变量
Perl6的实现不是100%完整的,或者没有进行足够的调整以用于某些"性能敏感"应用程序的值。但是Rakudo目前已完成了95-99%用例所需的80-90%规范*
*一个明显的遗漏是异步I / O的任何设置。规格的那部分是不断变化的。
**尽管流行的Moose项目在Perl 5中提供了此功能。