代码之家  ›  专栏  ›  技术社区  ›  raldi

我知道Perl5。学习perl 6而不是转向python有什么好处?[关闭]

  •  21
  • raldi  · 技术社区  · 16 年前

    从Perl5的背景来看,迁移到Perl6或Python有什么好处?

    编辑: 如果你因为觉得这只是火上浇油而投了反对票, 阅读下面的答案。 他们不是胡言乱语,而是对每种语言的利弊进行了详尽的讨论。给堆栈溢出社区一些信任。

    9 回复  |  直到 6 年前
        1
  •  24
  •   Bryan Oakley    16 年前

    从perl切换到python没有任何好处。从python切换到perl也没有好处。他们都有同样的能力。根据你所知道的和你试图解决的问题来选择你的工具,而不是基于某种观念,即其中一个在某种程度上天生就比另一个好。

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

        2
  •  16
  •   masonk    14 年前

    与python相比,perl 6有一些很好的特性。我认为这些都是python 3没有的特性:

    • 可扩展但可选的类型系统
      • 包括多方法调度和类型检查
      • 甚至对于内置设备和“操作员”
      • 具有子集类型
    • 角色:用于代码重用的不可实例化类(aka mixins)
      • 与大多数混音相比还有一些额外的优势:
      • 编译时方法名冲突检查,
      • 在角色定义中要求某些方法存在于宿主类中,然后在角色实现中调用宿主类的方法的能力。
    • 文法(返回结构化数据的正则表达式的组成)
    • 强大的扩展正则表达式。比python内置的regex功能更出色。
    • 接头和类型接头
    • 元运算符
    • 定义外接符、后接符、中缀符、前缀和后缀运算符的能力。
    • 理论上讲,将ast作为结构化数据使用的能力。(又名:lisp宏)
    • 区块范围界定
    • 从任何表达式生成闭包的*术语
    • 隐式并发构造([]元,连接)
    • 声明性并发构造(hyper for)
    • 主子系统将其函数签名转换为命令行界面和命令行使用指南。
    • 惰性列表(但是你可以用生成器滚动自己的列表)

    它与python共享以下优于perl 5的优点:

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

    perl6的实现并不是100%完成的,或者没有调整到足以用于“性能敏感”应用程序的某些值。但是95-99%的用例所需的80-90%的规范现在已经在rakudo完成了*

    *一个明显的遗漏是对异步I/O的任何规定。规范的这一部分在不断变化。

    **尽管流行的moose项目在perl 5中提供了这个功能。

        3
  •  13
  •   pi.    16 年前

    python没有 Junctions . 事实上,到目前为止,我认为只有perl有连接。-)

        4
  •  12
  •   Kirk Strauser    16 年前

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

    根据我的经验,python的随机片段比perl的随机片段更容易阅读。这种差异实际上归结于每种语言周围的文化,在这种文化中,perl用户通常欣赏聪明,而python用户通常更喜欢清晰。这并不是说你不能拥有清晰的Perl或狡猾的Python,但是这些并不常见。

    两者都是很好的语言,解决了许多相同的问题。我个人倾向于python,如果没有其他原因的话,因为它似乎正在增长,而perl似乎正在将用户流失到python和ruby。

    注意上面的黄鼠狼语。老实说,这要看个人喜好了。

        5
  •  7
  •   Peter N. Steinmetz    13 年前

    perl通常比python更适合于快速的一行程序,特别是涉及文本/正则表达式
    http://novosial.org/perl/one-liner/

        6
  •  5
  •   brianegge    16 年前

    python有一个巨大的优势:它是实现的,有一个相当稳定的编译器。

    Perl6是一种相当有远见的语言,目前还不足以稳定地投入生产。但是它有一组非常酷的特性,其中包括:连接、语法(是的,您可以用perl 6“regex”编写完整的解析器)、在图形级别的unicode处理、惰性列表和强大的宏。

    在您的特定情况下,当您了解Perl5时,您将很快熟悉Perl6语法。

    有关Perl6的酷特性的更全面的列表,请参见 the FAQ .

        7
  •  4
  •   Mr. Muskrat    16 年前

    您还没有说明为什么要离开Perl*。如果我的水晶球在今天起作用,那是因为你不完全懂语言,所以它让你感到沮丧。

    坚持Perl,好好学习这门语言。如果你这样做了,总有一天你会成为一个大师,知道为什么你的问题无关紧要。光明降临到那些寻求它的人身上。

    • 你称之为“perl5”,但没有这样的语言。P
        8
  •  4
  •   Sean McMillan    14 年前

    python的一个主要优点是现在可以以生产就绪的格式提供。

    Python有Jython和IrPython,如果您需要与Java或.NET CLR紧密合作。

    Perl6的优点是基于与Perl(1-5)相同的原则;如果您喜欢Perl,您也会出于同样的原因喜欢Perl6。(有不止一种方法,等等)

    Perl6还有一个优点,就是只能部分实现:如果您想深入了解语言内部或帮助定义标准库,现在是开始使用Perl6的好时机。

    编辑 (2011)现在仍然是破解Perl6内部结构的好时机,但现在有一个更成熟、更可用的Perl6发行版, Rakudo Star . 如果你今天想用perl6,那是个不错的选择。

        9
  •  3
  •   user502515    14 年前

    imo python的regexing,特别是当您试图表示类似perl的/e操作符时 s/whatever/somethingelse/ e ,变得相当慢。所以在怀疑中,你可能需要和perl5呆在一起:-)