前端之家收集整理的这篇文章主要介绍了
红宝石 – MRI如何解析`|| =`运算符?,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
今天我试图向同事解释:|| =在MRI中不是线程安全的.我想我会看看
Ruby的源码,看看我是否可以指出Ruby调度程序可以切换线程上下文的位置,但是我无法浏览
代码.我希望有更多经验的人可以让我通过被击中的
文件.
到目前为止,我知道Bison采用parse.y并生成一个调用一些基本功能的parse.c文件.我看到||被解析为torop,但后来发生了什么,我有点迷失
还有一些像Ripper这样的工具,我可以用来使这个过程更容易一些吗? (在这个说法上,如果有人可以指出我在哪里定义了Ripper源代码,这将是有帮助的)
忘记解析器,如果您查看
代码
in compile.c here,您将看到如何
生成指令来处理分配或操作.每次
调用ADD_INSNL会发出一条指令.在4553行,您可以看到一个if条件,该条件在通过
调用第4546行的COMPILE宏发出的
代码读取之后测试LHS的值,以便决定是否分配新值.在此期间,另一个线程可以监督并更改已读取的值,因此,当不应该进行分配(或未完成)时.
至于如何创建NODE_OP_ASGN_OR,请参阅函数new_op_assign_gen()中从parse.y调用的对NEW_OP_ASGN_OR(在node.h中定义)的调用.
希望行号不会太快改变,并使这些URL无效.
原文链接:https://www.f2er.com/ruby/272997.html