如何判断代码中是否要加 go 语句

写代码中遇到go,go之前的全部要执行完,后面用到前面变量的才能识别到。所以要选择特定的位置加go,那go之前哪些是动态注册的变量或函数我都要找出来吧?怎么判断是否为动态注册?其他语言没遇到这种机制。

请先 登录 后评论

1 个回答

veryOrdinary

一般来说需要执行这个函数才能注册的对象,比如share函数里注册一个共享表(是函数不是share 语句),比如runScript 里执行的 script 有注册一个对象,再比如 undef 函数取消一个变量定义,这种需要执行这个函数内部的对象才能注册或者取消定义,且下文可能用到内部注册的对象的,都需要用 go 隔开。

一般场景都是部分函数传入一些字符串脚本或者字符串对象,这种需要执行后,字符串对象或者脚本中设计的变量定义和函数定义才能被注册。比如 share(t, `st), 这个参数 st 是以字符串的形式传入的,如果被下文引用,中间没加 go 就会报错。但是如果是 share t as st,这种就不需要加 go,系统可以直接在解析过程中把 st 注册为一个变量。

手册上给了一部分需要用 go 的场景的例子都有给到,如果文字不是非常理解,可以看一下例子。https://docs.dolphindb.cn/zh/help/200/ProgrammingStatements/go.html

部分脚本语言是逐句解释执行,C++等高级语言:编译,链接,执行,DolphinDB把2种结合了一下,这种方式的好处一是在解析阶段可先发现一些错误,避免脚本长时间执行后,执行到后面有语法错误、参数不对等,导致前功尽弃。二是大部分语言都有变量,通常变量通过字典执行,即通过变量名找value。dolphindb中没采用字典的方式,而是在解析阶段确定变量编号,在执行阶段通过变量编号去找变量值,这样不需要通过搜索去确定变量位置,执行速度会快一点。​

请先 登录 后评论
  • 1 关注
  • 0 收藏,298 浏览
  • Polly 提出于 2023-12-01 11:32