【在主画面加入捷径】
       
【选择语系】
繁中 简中

技术杂谈:Perl 6 小感

【赞助商连结】

    Perl 6 是 Perl 家族的新成员,在 2015 年十二月发布了第一个正式版 (v6.c),代表其语言特性大抵上稳定了下来。在今年年初开始,陆续有数本 Perl 6 相关的书籍问世,代表 Perl 6 社群开始试着向外拓展。笔者最近利用一些时间学习 Perl 6 的核心特性,在此向各位读者分享一些心得,做为使用 Perl 6 的参考。

    The Good

    Perl 6 最值得称许的特性,就是内建一套完整的物件系统。原先 Perl 5 的物件系统相对简单,有许多开发者试图改善 Perl 5 的物件系统,反而造成 Perl 5 物件系统的混乱局面,直到引入 Moose 后,Perl 5 才有一个社群公认的物件系统。Perl 6 的物件系统支援不少特性,像是封装、继承、Role (类似 Java 8 的接口)、函式重载、运算符重载、多态等。

    Perl 家族的特长在于文字处理,而 Perl 6 也延续这个优良的传统。像是 Perl 6 内建一套完整的常规表示式引擎。此外,Perl 6 的 Grammer,将语法分析器 (parser) 内建在语言特性中,在程序语言中是相对少见的。透过 Grammer,可以用来处理常规表示式无法处理的问题,像是解析 HTML、XML 或其他复杂的文字文件。

    另外,Perl 6 的数字系统有特别处理过。像是 0.1 + 0.2 - 0.3 == 0.0 这种有理数的运算,在大部分的程序语言,都会有一些微小的误差而无法正确运算,而 Perl 6 可以得到正确的结果。目前 Perl 6 速度相对较慢,其数字系统是否足以用于实际情境,仍有待观察。

    Perl 6 仍然保留 sigil 这套变量字首,比起 Perl 6 则相对简化。针对不同类型的变量,像是纯量 (scalar)、数组 (array)、杂凑 (hash)、副常式 (subroutine) 等,不需要再频繁转换,同一种变量一律使用同一种 sigil 即可。对于 Perl 5 程序设计者来说,一开始会不太习惯,但一小段时间后,会发现新的守则更简单好用。

    Perl 6 对于复合数据结构的支援较先前改善,像是多维数组 (multi-dimensional array),不需要透过参考 (reference) 这种中介结构,可以直接调用,大幅简化了先前使用参考所需的特殊语法和观念。

    The Bad

    虽然 Perl 6 支援多重继承,但对于方法名称冲突却是使用特定算法自动处理,而无法人为介入。由于 Role 对于方法名称冲突会引发错误,但多重继承不会,笔者认为这项特性算是设计上的失误。在 Perl 6 正式版推出后,这个特性应该不太可能再大改,目前比较好的方法就是避免使用多重继承。

    Perl 6 大量使用特殊符号代替函式或方法调用,虽然语法比较简短,但是某种程度上会增加阅读的困难;即使笔者先前有使用 Perl 5 的经验,在读官方文件时,仍会对过多的符号产生排斥感。此外,特殊符号比较难透过搜寻引擎寻找相关文章,对于初学者来说也是相对不利。

    Perl 6 仍然相当灵活,甚至可以自订新的运算符,在某些情境下,这个特性有些帮助,像是数算运算等。但是,笔者认为这个特性要审慎使用,过多的特殊符号,会使得程序代码难以阅读和维护。

    The Ugly

    虽然 Perl 6 有丰富的语言特性,缺乏足够的套件,使得 Perl 6 难以推广。尤其,缺乏 Ruby on Rails 这种重量级软件 (killer application),更使得使用者不愿转换到新语言。虽然 Perl 6 这个计画拖了得久,但 Perl 6 在 2015 年十二月才发布第一个正式版,实际的年龄仍相当年轻。这方面只能依赖有心的社群成员持续努力。

    目前的时空背景和 Perl 当初问世时大不相同,使得 Perl 6 难以出头。Perl 刚问世时,好的高阶直译语言很少,由于 Perl 在文字处理的长处,使得 Perl 大量用于 CGI 网页程序。然而,现在至少有 Perl 5、Python、Ruby、Groovy 等数个成熟的语言生态圈,转换到 Perl 6 的动机相对薄弱。此外,近年来有数个易于撰写的编译语言,像是 Go 和 Crystal 等,更加压缩 Perl 6 的发展机会。

    The Future

    目前大部分 Perl 6 相关的学习资源多围绕在语言特性上,较缺乏实务面的运用,某种程度反映了 Perl 6 的现状。虽然 Perl 6 有丰富的特性,Perl 6 虚拟机器的速度仍需加强,这也使得程序设计者暂时不愿转换。Perl 6 语言本身和相关工具大抵上已经稳定,若能在套件和框架上加强,仍然大有可为。

    Postscript

    笔者在自己的网站放上了 Perl 6 的学习笔记,会于后续更新内容,若有需要的读者可前往参考。

    【赞助商连结】