文摘您现在的位置是:首页 > 博客日志 > 文摘

我构建了一个 Ruby 解析器

<a href='mailto:'>微wx笑</a>的头像微wx笑 2022-07-31文摘 2 0关键字: Ruby  解析器  

我构建了一个 Ruby 解析器抱歉,这篇文章读起来像“亲爱的日记”条目,而不是一些改变生活的HN值得指导。早在 2020 年 11 月,我几乎一时兴起就开始 为 Ruby 编程语言开发一个新

我构建了一个 Ruby 解析器evT无知

抱歉,这篇文章读起来像“亲爱的日记”条目,而不是一些改变生活的HN值得指导。evT无知

早在 2020 年 11 月,我几乎一时兴起就开始 为 Ruby 编程语言开发一个新的解析器 。在我开始从事编译器项目几乎整整一年之后 (我希望不久的将来能写一篇更长的文章),我对一个卑微的 C/C++ 程序员可以使用的 Ruby 解析器的状况感到沮丧,我决定看看会有多难。evT无知

彻底失败

实际上,故事开始于大约一个月前,当时我认为我可以使用 Parsing Expression Grammar 制作一个 Ruby 解析器,我制作 了一系列关于那个项目失败了。它很慢,有车……我的意思是非常有车。慢。几周后很明显,这还不够好。evT无知

不知何故,这种经历并没有阻止我。它只是帮助我意识到这个项目将超越我曾经做过的任何事情,而且我不能像我习惯做的那样“弄清楚”。evT无知

学习资料

然后我读了“用 Go 编写解释器”。evT无知

evT无知

在 Go 书籍封面中编写解释器evT无知


evT无知

这本书有一个关于解析的部分,它教会了我 普拉特解析 技术。尽管书中的示例是用 Go 编写的,而且我正在编写 C++,但这项技术很容易被继承下来,而且我能够在几周内获得似乎可以用于解析 Ruby 的东西。evT无知

我做了一些视频在接下来的几个月里,我断断续续地破解了我的解析器。evT无知

感觉不知所措

然后我就灰心了。前方的工作量让我感到不知所措,我不确定我是否能独自完成。evT无知

开源可能是一种孤独的爱好。在某些方面,我很享受在开源领域工作的孤独感。它充满了个人的挑战和胜利……也经常失败。没有人在你身边真的会让你想知道我为什么要这样做?evT无知

关闭 github 上的拉取请求evT无知

所以我把它搁置了一段时间,并在其他事情上工作。其他人共同热衷并有助于审查的功能。evT无知

evT无知

旁白:这种情况经常发生。我对某个特定的项目感到无聊、沮丧或不知所措,然后转向其他事情。但如果困难的事情是值得的,那么一些事情会让我重新开始工作。我认为,离开的时间对于获得观点很重要。evT无知

动机

然后我开始与Kevin Newton聊天,他是一名 Ruby 黑客,在 Shopify 从事 Ruby 内部工作,他帮助我再次对解析器项目感到兴奋。事实证明,确实需要更好的 Ruby 解析工具,他自己也在开发一些工具 。evT无知

我的项目不仅仅是一个虚荣项目!它有可能对整个 Ruby 社区有用。不知何故,这给了我上班所需的动力。evT无知

辛苦

所以,在接下来的六个月里,我每天都在研究解析器。在工作之前,我会喝咖啡,和我的狗坐在一起,然后在解析器上破解一个小时左右。evT无知


evT无知

狗和笔记本电脑evT无知


evT无知

其实很舒缓。知道那天我只有大约一个小时的时间来让一个功能正常工作,或者修复一个错误,或者可能只是一个编写的测试,这让我感到很自由。我不必完成这个项目——我只需要取得一些进展。evT无知

时间盒有效!(事实证明。)evT无知

所以我一点一点地取得了进步。就在几天前,在我允许自己缩小范围后,我的最后一个单元测试通过了,我发布了一个版本evT无知

它从这里走向何方?

这就是整个故事,到目前为止!我不知道这个项目从长远来看会走向何方。目前,解析器可以满足我的需要——它为 我们的 Ruby 编译器解析 Ruby ,而且 速度很快足以满足我们的需求,所以如果故事到此结束,那也很好!evT无知

如果故事到此结束,那么我做了一件我引以为豪的酷事。做它在锡上所说的东西,并且做得很好。evT无知

不仅如此,我还完成了我的遗愿清单上的一些事情——我很久以前就决定为那些经常阅读和学习的摇滚明星程序员和学者(当然不是我)——我写了一个解析器! 为了一门真正的语言!evT无知

我为自己感到骄傲。我希望你也能找到一些灵感来做你一直想做的那件困难的事情!evT无知

谢谢阅读!evT无知

原文:https://mpov.timmorgan.org/i-built-a-ruby-parser/ evT无知


evT无知

本文为转载文章,版权归原作者所有,不代表本站立场和观点。

很赞哦! () 有话说 ()