不妨默认debug=True, 然后在debug=False的情况下, 在编译时把print()语句编译掉?

不妨默认debug=True, 然后在debug=False的情况下, 在编译时把print()语句编译掉?

非常感谢你的建议,不过把 print() 编译掉并不是所有情况都适用。比如你要在程序开始时把命令行参数答疑出来。

不清楚传递命令行参数具体是指的什么情况, 执行py文件时传递命令行参数应该在py-scope吧, 而且在taichi-scope, 如果是开头的话, 应该可以用static_print吧… 如果你指的是编译信息和print编译成c++用的是相同函数, 那做词法分析的时候换个宏表示taichi-scope的print也可以吧,
我是没太听懂你说的到底是什么情景.

命令行参数的打印是在python scope。
static_print是编译时打印,只能打印编译时可以确定的信息。
按照你说的方法,用户想要release时候在taichi scope打印还是需要另外进行设置,这反而让初学者摸不着头脑。

不过,虽然我觉得这个提议有待商榷,但我可以征集一下各位开发者的建议。

如果不用这个设置, 通常也会在release时用两种方式来砍掉print提升taichi效率(当然主要是因为我没发现release后必须在taichi-scope保留print的情境):

一种自然是找到所有print然后注释掉;
另一种是用一个变量PRINT_ON控制 , 然后print的时候用下面代码来统一注释掉print.

PRINT_ON = True

if ti.static(PRINT_ON):
    print('xxxx')

第一种改起来麻烦, 第二种写起来麻烦, 恰好ti.init提供了Debug选项, 我不知道Debug默认是开启还是关闭的(好像是关闭的吧), 但是Debug开启的情况还正好提供了数组越界检查(是否还有更多功能我倒不是很清楚), 而且我发现PRINT_ON和Debug正好可以一起使用, 默认开启Debug也是比较合理的, 毕竟没谁能保证写代码的时候不出错.而把PRINT_ON和Debug一起使用, 可以把if ti.static(PRINT_ON)放到后台处理, 保证了代码简洁, 因此我给出了这个建议.