编译为 wasm 时替代 ctor/inventory 的方法?

Jos*_*vin 7 rust webassembly rust-macros

ctor板条箱目前不支持 Web 程序集,尽管有关于如何解决此问题的积极讨论

尽管我很清楚与来自 C++ 的静态初始化相关的问题,但能够在启动时向工厂注册事物是一项非常方便的功能,并且在很多情况下是避免违反 DRY 原则所必需的。如果没有它,每次您想为工厂添加新的可能性时,您都必须向 中添加单独的代码main()行,如果您需要导入新函数,则可能会添加更多行。这很快就会变得乏味。

我想知道是否有可能使用过程属性宏和build.rs. 该宏将用于标记我想要注册的函数,它的实现会将"crate::your::registered_function"这些函数的模块路径 ( )保存到文件中某处的一侧,否则只是一个传递。然后build.rs将生成一个调用文件中列出的所有函数的函数,我将main()手动调用该函数。

  • 有没有不同的技巧可以代替?
  • 在我可以用作参考的地方是否已经存在这个实现?
  • 过程宏实际上如何为要调用的函数生成模块路径?有module_path!,但如果从程序宏的定义中调用它会给模块路径为宏,而不是与什么的TokenStream将会扩展到相关的模块路径。宏可以生成对 的调用,module_path!但要等到最终程序运行时才会进行评估。