我有一个学校项目,旨在静态键入一些 Ruby 代码。所以,我的输入只是一个.rb文件,我应该能够输入程序中分配的每个变量。
现在,我打算做的是:
我只接受一些非常基本的 Ruby 作为输入(= 不调用外部库,只是 ruby 的核心 + 文件中定义的方法)
我的问题是:您如何看待我的方法?是否有任何 gem/现有程序可以帮助我?
您的方法在技术上是正确的,但是您如何使用它听起来很奇怪。这:
现在,我打算做的是:
- 使用 Parser 库获取文件的 AST
- 将各种节点放入容器对象中
- 实现访问者模式以递归方式遍历程序
- 尝试从那里推断出一些东西(我正在考虑以某种方式从核心的方法中创建一个可能的输入和输出类型的表)
听起来有点像你想像这样去火星:
现在,我打算做的是:
- 拿一支铅笔
- 拿一张纸
- 得到一张桌子
- 坐在办公桌前,用我的笔和纸设计一个太空发射系统和火星着陆器
换句话说,你列出了三个完全微不足道的点,对于一个有经验的程序员来说,这可能是一个小时的工作,然后是第四个,这是多年的工作,值得攻读博士学位。
我所知道的关于 Ruby 静态类型推断的最高级工作是Diamondback Ruby (DRuby)(不要与分布式 Ruby 标准库 aka dRb / dRuby 混淆)。然而,Diamondback Ruby 现在被放弃了,因为作者放弃了 Ruby 的静态类型推断。
Diamondback Ruby 背后的主要研究人员之一现在正在研究一个名为RDL的新项目。Diamondback Ruby 和 RDL 之间的主要区别是:
Steep是另一个类似的项目。它也依赖于动态检查和注释,此外实际上并不争取类型正确性。
IDEA 的 Ruby 类型推理完全重新思考了 JetBrains 计划如何在其 IDEA / RubyMine IDE 中处理 Ruby 的类型推理。这确实使用类型推断,但它使用动态类型推断,而不是静态的。
所以,你可以看到,对Ruby静态类型推断是这么辛苦,没有人甚至尝试它,谁的家伙做了尝试就放弃了它,现在所做的与明确的类型注释动态类型检查来代替。
Robert Mosolgo 博客上的Ruby Type Checking Roundup很好地概述了当前 Ruby 类型的最新技术。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句