木兰语言 0.0.17.4 发现依赖库风险、不支持 in;发布 Gitee Reward 首批悬赏任务
首先号外,刚在 Gitee Reward 发布了首批三个总值 ¥916 的悬赏任务,走过路过莫错过:
- ¥100 【新人优先】重现一个内置函数——bytes
- ¥128 【进阶】补完余下三十多个内置函数
- ¥688 【老手】木兰源码转换为 Python
依赖库风险
不知从何时开始,运行原始木兰的 逆向项目 时,就会报 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 悬赏榜,麻烦广而告之,多谢!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
高性能分布式文件系统 FastCFS V2.0.1 发布
FastCFS V2.0.1发布,主要改进如下: 1. 确保顺序写盘,调用writev实现批量写; 2. 设置线程名称用于性能调优; 3. 将配置文件servers.conf合并到cluster.conf; 4. 修复4个bug: 1)解决磁盘空间统计不准的问题; 2)修改skiplist实例创建方式,确保线程安全; 3)修复current_size整数溢出问题; 4)修复数据分组序号计算错误(没有减去基数)。 gitee项目地址:https://gitee.com/fastdfs100/FastCFS,FastCFS支持一键部署单机环境,欢迎体验。
- 下一篇
Kooder 1.0.beta4 已经发布,接口性能提升 4-5 倍
Kooder 1.0.beta4 已经发布,此版本更新内容包括: 大幅提升代码搜索时语法高亮的性能,从而提升页面和接口性能至少 4~5 倍,搜索结果页面的响应时间降至 20ms 左右 修复了当某些源码文件太大时的异常 重写了分词器,支持超大源码文件,避免了堆栈溢出的异常 修复了使用 redis 做队列时的 json 反序列化的异常 修复了使用 gitea 的一个空指针异常 详情查看:https://gitee.com/koode/kooder/releases/1.0.beta4
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Hadoop3单机部署,实现最简伪集群
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19