我知道Perl5. 学习Perl 6而不是学习Python的好处是什么?

时间:2020-03-06 14:38:05  来源:igfitidea点击:

来自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中提供了此功能。