perl解释器的代码和用perl写出来的代码一样难看

闲得蛋疼想看看几种主流脚本语言的解释器是怎么工作的。我是最早看过陈儒那本讲Python解释器的书才萌生此想法。虽然此书行文风格我厌恶至极,但它确实给了我一些启示。上次京东做活动满200减50,于是买了Programming Perl的最新影印版,研究一下perl internal自然提上日程。


初一看Perl的代码简单不塂入目,满屏的宏定义,完全无法跟踪。官网上有一些解释internal的文章,但不是很系统地介绍,内容也相当有限。从零开始探索未知代码(及风格,惯例)真令人担心啊。平时只能业余看一下,我估计这个工作不会持续长久。姑且看看吧。


从使用者的角度去看内部实现,最简单的方式是将使用的场景与内部解释的场景对应起来。而最容易捕捉到对应的时候是出错的时候。比如:

# perl -e '@a +1 =3'
Can't modify addition (+) in scalar assignment at -e line 1, at EOF

可惜这只是编译错误,运行时的对应就不这么好捕捉了。在源代码里搜一搜这个字符串,无结果。估计这种话是格式化成的,只搜前两个单词,结果能找出点东西。最后的结果是,这句话是在Perl_op_lvalue_flags里报出来的。


这个函数的原型:

Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags)


跳了好几次才搞清楚,原来pTHX_OP多加了个无使用的参数。尼玛,这种让C语言看起来不像C语言的风格,我都无力吐槽了,


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值