我知道Perl 5.学习Perl 6有什么好处,而不是转向Python?

ral*_*ldi 23 python perl comparison perl6 raku

来自Perl 5背景,迁移到Perl 6或Python有什么好处?

编辑:如果你认为这只是因为你认为它只是火焰棒,请阅读下面的答案.他们不是在争论; 他们写得很好,讨论了每种语言的优缺点.为Stack Overflow社区提供一些功劳.

Bry*_*ley 24

从Perl切换到Python没有任何好处.从Python切换到Perl也没有任何好处.他们都有同样的能力.根据你所知道的和你想要解决的问题来选择你的工具,而不是某种观念,即某种方式本质上比另一方更好.

唯一真正的优势是,如果您从不熟悉的语言切换到您知道的语言,在这种情况下,您的工作效率可能会提高.

  • 你说,"根据你所知道的和你想要解决的问题选择你的工具",但目前,我既不懂语言,也不知道我要解决的问题的哪些方面是适合哪种语言.这基本上就是我问这个问题的原因. (2认同)

mas*_*onk 16

Perl 6比python有一些很棒的功能.我认为这些都是Python 3没有的功能:

  • 可扩展但可选的类型系统
    • 包括多方法调度和类型检查
    • 甚至对于内置和"运营商"
    • 与子集类型
  • 角色:代码重用的非实例化类(aka mixins)
    • 与大多数mixin相比具有一些额外的优势:
    • 编译时方法名称冲突检查,
    • 能够在角色定义中要求在主机类中存在某些方法,然后在角色的实现中调用主机类的方法.
  • 语法(返回结构化数据的正则表达式的组合)
  • 强大的扩展正则表达式.比python的内置正则表达式功能更加出色.
  • 连接点和类型连接点
  • Metaoperators
  • 定义circumfix,postcircumfix,infix,prefix和postfix运算符的能力.
  • 从理论上讲,能够将AST作为结构化数据使用.(Aka:lisp宏)
  • 阻止范围
  • 用于从任何表达式生成闭包的*术语
  • 隐式并发构造([] meta,junctions)
  • 声明性并发构造(超级)
  • MAIN子函数将其函数签名转换为命令行界面和命令行使用指南.
  • 懒惰列表(但您可以使用生成器自行滚动)

它与Python共享以下优于Perl 5的优势:

  • "类"的概念,类关键字和相关的糖**:
    • self关键字
    • getter/setter sugar与私人数据的概念
  • 一个定义良好,可访问的元对象协议
  • 很棒的unicode支持
  • 内置的日期/时间支持
  • 一般来说,"包括电池" - 许多内置功能
  • 默认情况下,非全局范围的变量

Perl6的实现不是100%完成,或者已经足够调整以用于"性能敏感"应用程序的某些值.但是,在95-99%的用例中,80-90%的规范在Rakudo中已经完成,现在*

*一个明显的遗漏是异步I/O的任何规定.该规范的那部分是不断变化的.

**虽然流行的Moose项目在Perl 5中提供了这个功能.


pi.*_*pi. 13

Python没有连接点.事实上,我认为到目前为止只有Perl有连接点.:-)

  • Perl 6中的连接可以做更多的事情.您的交叉点可以自动穿线吗? (4认同)
  • 连接点主要不是关于速度,而是关于可读性. (3认同)

Kir*_*ser 12

在我看来,Python的语法更清晰,更简单,更一致.您可以在任何地方定义嵌套数据结构,无论您是计划将它们传递给函数(还是从一个函数返回)或直接使用它们.我非常喜欢Perl,但只要我学会了足够的Python来"获取"它,我就再也没有回头了.

根据我的经验,Python的随机片段往往比Perl的随机片段更具可读性.差异实际上归结为每种语言的文化,Perl用户通常喜欢聪明,而Python用户更喜欢清晰.这并不是说你不能有明确的Perl或狡猾的Python,但那些不太常见.

两者都是优秀的语言,解决了许多相同的问题.我个人倾向于Python,如果没有其他原因,它似乎正在获得动力,而Perl似乎正在失去用户的Python和Ruby.

注意上面的丰富的黄鼠狼词.老实说,它真的会归结为个人偏好.

  • 问题是Python的随机片段有时不起作用,因为它们被粘贴的地方没有正确保留空白 (5认同)

Mar*_*ett 7

对于快速单行,Perl通常比python更好,特别是涉及文本/正则表达式
http://novosial.org/perl/one-liner/


mor*_*itz 5

Python有一个巨大的优势:它已实现,有一个相当稳定的编译器.

Perl 6是一种颇具远见的语言,而且还没有足够的稳定性来生产.但它有一系列非常酷的功能,其中包括:联结,语法(是的,你可以使用Perl 6"regexes"编写完整的解析器),在字形级别处理unicode,懒惰列表和强大的宏.

在您了解Perl 5的特定情况下,您将非常快速地熟悉Perl 6语法.

有关Perl 6具有哪些酷炫功能的更全面列表,请参阅常见问题解答.


Sea*_*lan 5

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,这是一个不错的选择。