问题标签 [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.
macros - 我可以构建一个带有后处理器的编译器插件来从以前收集的派生结构中生成代码吗?
据我所知,编译器插件的当前用法是定义编译器识别的属性,然后编译器将调用插件中定义和注册的代码。
我在想是否可以构建一个具有后处理器的编译器插件。我可以知道如何首先在插件内的数据结构中注册遇到的proc_macro_derive
结构,然后后处理器可以根据之前填充的插件数据结构生成代码。
我的目的是生成一个符号表形式的派生结构,这样我就可以对 rust 中的动态类型进行一些实验。我不确定是否可以在编译时实现而无需在运行时手动注册它们。
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"
gcc - 如何在 rustc 中使用 gcc 标志
我正在尝试在 powerpc 拱上运行 Rust 程序。
当我在 CI 中构建代码时,使用标志 -mlongcall。
我试图了解如何在我的 rust 版本中使用“-mlongcall”标志。一般来说,很高兴知道我是否可以在我的 Rust 构建中使用我从 gcc 中知道的标志。
rust - proc_macro_attribute 函数内部是否有一致的编译上下文?
举个例子:
尽管处理的订单属性可能不同,但每次的最终计数是否相同,例如:
- 增量建筑
- Registry crates 和本地 crates 共享相同的 proc_macro 库和版本
- 编译器内部并行
一个实际用例(尤其是我的)是生成编译时伪静态变量内存布局,该布局将在静态链接的可执行文件中的多个内存管理器中重用。
rust - 如何删除 unsafe 块中的安全操作?
我的问题是如何在 Rust 中获得最精确的不安全块。目前,Rust 允许在不安全的块内进行安全操作。例如,以下代码来自 rust 的 stdlib Vec:
这里我们有 3 行不安全的语句。但是,正在执行增量的第三行实际上是安全的。
我的问题是如何获得精确的不安全块,例如:
或者是否有任何工具/库可能有帮助?
我可以想出一个直截了当的方法,在 syn crate 的帮助下逐渐缩小范围,只是想看看是否有更好的想法。
更新: 我终于通过对 rustc 编译器进行简单修改来解决这个问题。在 rust ( 1.55.0 )的最新版本中。你可以得到他们的支票
这就是 rustc 检查不安全块/函数的地方。通过修改require_unsafe函数,您可以记录源代码中执行不安全操作的所有位置。注意,通过这种方式,您可以获得最精确的不安全操作的原因。