问题标签 [ctfe]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
d - `typeof(expr)` 的效率如何?
typeof
处理复杂表达式时效率如何?
具体来说,在这两种情况下:
完全由常量部分组成的复杂表达式,不需要CTFE 进行评估
需要
mixin()
CTFE 字符串的复杂表达式。
我不知道这是否有根本的不同,但这是我关心的两种情况。
d - 从数组中定义的文件名导入内容
import
我可以像这样连接在编译期间读取的文件:
result
如果我在数组中有文件名,如何获得连接?
此代码返回错误Error: variable f cannot be read at compile time
。
函数式方法似乎也不起作用:
它返回相同的错误:Error: variable b cannot be read at compile time
d - 编译时函数的记忆
我想懒惰地评估功能。由于计算返回值的成本很高,所以我必须使用 memoization,尤其是对于被调用的子函数,否则计算的时间复杂度会呈指数级增长。我需要编译时的结果。(我正在编写一个库,它根据提供的字符串提供各种编译时模板。)简而言之,我需要在编译时进行记忆。
std.functional.memoize
CT不起作用,所以这是不可能的。DMD 和 LDC 不够聪明,无法记忆纯函数,至少这是我对简单纯函数的实验结果:我测试它是否缓存结果的方式:
使用简单的参数:
使用模板参数:
计时编译(调用 sumN 一次 vs 两次):
或者
当我在源代码中有两个枚举时,编译时间总是两倍。
有什么方法可以记忆 CT 功能吗?
d - 在 D 中实现 C 风格的 sizeof() 函数
我想在 D 中实现一个 C 风格的 sizeof() 函数。(我知道 .sizeof 的东西,但它有助于移植很多 C(C99)。)
我希望它能够在编译时运行,显然并将类型或表达式作为参数。理想情况下,如果可能的话,我希望它具有与 C 相同的语法,而不是使用独特的模板调用语法,因为这会大大增加它的实用性。这是可能吗?