Our great sponsors
quote | syn | |
---|---|---|
3 | 19 | |
1,219 | 2,667 | |
- | - | |
7.3 | 9.6 | |
11 days ago | 4 days ago | |
Rust | Rust | |
Apache License 2.0 | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
quote
-
C++ vs. Rust Build Times
A surprising source of slow compile times can be declarative macros in Rust [0].
I believe the core of the problem is that it has to reparse the code to pattern match for the macro.
One egregious patter is tt-munchers [1] where your macro is implemented recursively, requiring it to reparse the source on each call [2].
In one of my projects, someone decided to wrap a lot of core functions in simple macros (ie nt tt-munchers) to simplify the signatures. Unlike most macros which are used occasionally and have small inputs, this was a lot of input. When I refactored the code, I suspect dropping the macros is the reason CI times were cut in half and a clean `cargo check` went from 3s to 0.5s.
[0]: https://nnethercote.github.io/2022/04/12/how-to-speed-up-the...
[1]: https://veykril.github.io/tlborm/decl-macros/patterns/tt-mun...
[2]: https://github.com/dtolnay/quote/blob/31c3be473d0457e29c4f47...
-
Is generating code from JSON a good macro use case?
In the build.rs, call your code generation function (probably in a separate crate added in build-dependencies). This function will read your input files, and use something like quote to generate code.
-
Any good resources for learning Rust macros?
Or you can pair them with crates like syn, and quote for quasi-quoting, and then it's easy to make transformations on the AST of Rust input code. A lot of libraries do this for code-generation and hiding away a lot of complexity (example wasm-bindgen).
syn
- 对 RTIC 框架的探索
-
Launch HN: Diversion (YC S22) – Cloud-Native Git Alternative
[2] https://github.com/dtolnay/syn/issues/782
- syn v2.0.0 released
-
How to replicate inheritance (kinda) in Rust?
It looks to me like you are trying to make a syntax tree generic over arities. I suggest you take a look at the Expr enum in syn, its variant structs, and the ast_enum_of_structs_impl macro, which is a macro that implements a trait over different Expr variants with different fields.
-
Rust AST Explorer
Rust makes this project easy by providing the syn crate (parsing and formatting) and WASM (for interactivity). Source code lives at https://github.com/CarlKCarlK/rust-ast-explorer. Contributions welcome.
- Parser for Rust Source Code
-
Rust language parsers? Do you have any recommendations?
Perhaps there should, but if you look at the commit history you'll see that syn is maintained almost entirely by dtolnay (https://github.com/dtolnay/syn/graphs/contributors). Furthermore, with Rust continually adding new syntax that needs to be supported, syn can't be easy to maintain and most of the effort probably goes into making it work at all rather than optimisations.
- Syn - Parser for rust source code
- Syn – Parser for rust source code
What are some alternatives?
cargo-expand - Subcommand to show result of macro expansion
rust-fsm - Finite state machine framework for Rust with readable specifications
proc-macro-workshop - Learn to write Rust procedural macros [Rust Latam conference, Montevideo Uruguay, March 2019]
explaine.rs - An interactive Rust syntax playground
Bytecode - A Rust proc-macro crate which derives functions to compile and parse back enums and structs to and from a bytecode representation
prae - prae is a crate that aims to provide a better way to define types that require validation.
component-keycloak - Commodore Component for Keycloak
negate - Attribute macro that generates negated versions of`is_something` functions
darling - A Rust proc-macro attribute parser
hickory - Command line tool for scheduling Python scripts
astexplorer - A web tool to explore the ASTs generated by various parsers.