问题标签 [rust-compiler-plugin]

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.

0 投票
0 回答
65 浏览

macros - 我可以构建一个带有后处理器的编译器插件来从以前收集的派生结构中生成代码吗?

据我所知,编译器插件的当前用法是定义编译器识别的属性,然后编译器将调用插件中定义和注册的代码。

我在想是否可以构建一个具有后处理器的编译器插件。我可以知道如何首先在插件内的数据结构中注册遇到的proc_macro_derive结构,然后后处理器可以根据之前填充的插件数据结构生成代码。

我的目的是生成一个符号表形式的派生结构,这样我就可以对 rust 中的动态类型进行一些实验。我不确定是否可以在编译时实现而无需在运行时手动注册它们。

0 投票
1 回答
1735 浏览

rust - 无法编译简单的 rust 程序

今天我决定学习并开始使用 rust 进行编码,因为它是一种非常有前途的语言。但是,我尝试在 rust 中编译并运行一个简单的 Hello world 程序,但由于某种原因我得到了这个错误。有人可以告诉我有什么问题吗?

这是我的锈代码:

这是错误消息:

错误:与cc失败:退出代码:1 | = 注意:“cc”“-m64”“-L”“/Users/moo7md/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib”“test.test. 7rcbfp3g-cgu.0.rcgu.o" "test.test.7rcbfp3g-cgu.1.rcgu.o" "test.test.7rcbfp3g-cgu.2.rcgu.o" "test.test.7rcbfp3g-cgu.3 .rcgu.o" "test.test.7rcbfp3g-cgu.4.rcgu.o" "test.test.7rcbfp3g-cgu.5.rcgu.o" "-o" "test" "test.5fi6c8ty3hqyycqf.rcgu.o " "-Wl,-dead_strip" "-nodefaultlibs" "-L" "/Users/moo7md/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib" "/Users /moo7md/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libstd-a5984f6fc2a4870f.rlib"

0 投票
1 回答
1348 浏览

rust - 如何在运行时解释或评估 Rust?

我一直在搜索,虽然这似乎是一个非常需要的功能,但所有搜索结果似乎至少有一年的历史。

这是什么现状?是否有在运行时评估任意 Rust 代码的好解决方案(如 Haskell 的提示)?

也许可以用Miri做点什么?

0 投票
0 回答
209 浏览

rust - 有没有办法在 Rust 中的每个函数调用之前和之后注入对用户函数的调用?

我们如何告诉 Rust 编译器在输入函数之前和之后内联一个特殊函数?

我正在尝试实现一种跟踪函数调用的方法,并且可能使用这种方法来跟踪借用引用的使用(很像一个简单的影子堆栈)。一种替代方法是使用宏,但我需要在#[xxx]任何地方添加。

我看到添加了拉取请求 57220-Z instrument-mcount

a.rs

编译它 ( rustc a.rs --emit asm -Z instrument-mcount) 产生:

mcount函数已翻译为_mcount,但我如何调用my mcount而不是一些默认实现?

它似乎设置在这里

GCC 中类似的事情是

0 投票
1 回答
238 浏览

gcc - 如何在 rustc 中使用 gcc 标志

我正在尝试在 powerpc 拱上运行 Rust 程序。

当我在 CI 中构建代码时,使用标志 -mlongcall。

我试图了解如何在我的 rust 版本中使用“-mlongcall”标志。一般来说,很高兴知道我是否可以在我的 Rust 构建中使用我从 gcc 中知道的标志。

0 投票
1 回答
76 浏览

rust - proc_macro_attribute 函数内部是否有一致的编译上下文?

举个例子:

尽管处理的订单属性可能不同,但每次的最终计数是否相同,例如:

  • 增量建筑
  • Registry crates 和本地 crates 共享相同的 proc_macro 库和版本
  • 编译器内部并行

一个实际用例(尤其是我的)是生成编译时伪静态变量内存布局,该布局将在静态链接的可执行文件中的多个内存管理器中重用。

0 投票
0 回答
135 浏览

rust - 如何删除 unsafe 块中的安全操作?

我的问题是如何在 Rust 中获得最精确的不安全块。目前,Rust 允许在不安全的块内进行安全操作。例如,以下代码来自 rust 的 stdlib Vec:

这里我们有 3 行不安全的语句。但是,正在执行增量的第三行实际上是安全的。

我的问题是如何获得精确的不安全块,例如:

或者是否有任何工具/库可能有帮助?

我可以想出一个直截了当的方法,在 syn crate 的帮助下逐渐缩小范围,只是想看看是否有更好的想法。

更新: 我终于通过对 rustc 编译器进行简单修改来解决这个问题。在 rust ( 1.55.0 )的最新版本中。你可以得到他们的支票

这就是 rustc 检查不安全块/函数的地方。通过修改require_unsafe函数,您可以记录源代码中执行不安全操作的所有位置。注意,通过这种方式,您可以获得最精确的不安全操作的原因。