加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

红宝石 – MRI如何解析`|| =`运算符?

发布时间:2020-12-16 20:15:14 所属栏目:百科 来源:网络整理
导读:今天我试图向同事解释:|| =在MRI中不是线程安全的.我想我会看看 Ruby的源码,看看我是否可以指出Ruby调度程序可以切换线程上下文的位置,但是我无法浏览代码.我希望有更多经验的人可以让我通过被击中的文件. 到目前为止,我知道Bison采用parse.y并生成一个调用
今天我试图向同事解释:|| =在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无效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读