木兰语言 0.0.17.4 发现依赖库风险、不支持 in;发布 Gitee Reward 首批悬赏任务

栏目: 软件资讯 · 发布时间: 4年前

内容简介:首先号外,刚在 Gitee Reward 发布了首批三个总值 ¥916 的悬赏任务,走过路过莫错过: ¥100 【新人优先】重现一个内置函数——bytes ¥128 【进阶】补完余下三十多个内置函数 ¥688 【老手】木兰源码转换为 Py...

首先号外,刚在 Gitee Reward 发布了首批三个总值 ¥916 的悬赏任务,走过路过莫错过:

依赖库风险

不知从何时开始,运行原始木兰的 逆向项目 时,就会报 rply 警告 ParserGeneratorWarning: Token '|=' is unused 而且任何求值都报错 “IndexError: list index out of range”。

一直没细究,本周才发现是因为木兰语法中的 “|” (位或)操作符在 rply 0.7.8 中成为了保留字,详见此 issue,就是在今年一月 rply 发布了 0.7.8 后就有此问题。

具体说,木兰逆向中有 @pg_.production('bin_expr : expr | expr') 这一语法规则,也就是表达式的位或运算,而在 rply 0.7.8 中包含了 这个 PR,将 | 作为语法规则的“或者”,也即 BNF 中 | 的原始语义。导致木兰的位或语法规则不能再识别。

为此问题 跟帖 尚未得到社区回应,想得到几种解决方案:

  • 限定用户安装 0.7.7 版本的 rply
  • 向 rply 提 PR,通过转义等方法使语法规则重新支持 | 字符
  • 另开 rply 分支并自行发布版本,可以回退问题 PR

限定 rply 版本的问题是,0.7.7 并没有这个错误定位信息的修正,影响调试和试用,如果两个 rply 版本在本机共存的话会增加开发测试的复杂度。

从之前的几次交流看,感觉 rply 社区已不大活跃,也许该早日考虑自行维护发布版本。

__contains__ 代替 in

去年挺早时候 就发觉木兰不支持 Python 中的 in 关键词,一直没发现比 __contains__ 更通用的变通办法,但还未死心。本周在重现 ast 生成木兰的这部分功能时,发现 Python 的 'a' in d 会被转换为木兰的 (d.__contains__('a')),原可执行文件也确认了。看来在这个版本中,木兰并无更好的 in 替代语法。可惜!

类似地,Python 中的链式比较比如 'a' in 'ab' in d,会转换为木兰的“且”表达式 ('ab'.__contains__('a') and d.__contains__('ab'))。个人感觉这个 Python 的链式语法并不像 in 那样常用,易用性问题似乎没那么大。

最后,还请各位看看 Gitee Reward 悬赏榜,麻烦广而告之,多谢!


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

高可用MySQL

高可用MySQL

)Charles Bell Mats Kindahl Lars Thalmann / 宁青、唐李洋 诸云萍 / 电子工业出版社 / 2011-10 / 98.00元

《高可用mysql:构建健壮的数据中心》是“mysql high availability”的中文翻译版,主要讲解真实环境下如何使用mysql 的复制、集群和监控特性,揭示mysql 可靠性和高可用性的方方面面。本书由mysql 开发团队亲自执笔,定位于解决mysql 数据库的常见应用瓶颈,在保持mysql 的持续可用性的前提下,挖潜各种提高性能的解决方案。本书分为三个部分。第一部分讲述mysql......一起来看看 《高可用MySQL》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具