fukuoka.rs-vol.3
name: nasa
hoby: Elm で学習支援アプリケーションを書いてる
Twitter: @nasa_desu
GitHub: k-nasa
Rust で!
- Rspec は簡潔で読みやすいテストコードが書ける
- before,subject などのブロックで囲むだけで共通部分が抜き出せて良い
- Rust ではちまちま型を書くのがだるい,,,
の前に既存のがありそうなので調べた (モチベーションに関わるので)
あるにはあったけど、、、
- rspec
- speculate
名前からして完璧!!と思ったけど
記法がみびょい
全部クロージャを渡す形
いい感じだった。けど
ビルドできない(かった)
というか作った
- 手続き型マクロ
- 構文拡張
- コンパイラプラグイン
読み方いろいろ
- 構文の抽象化における究極の柔軟性を可能に
- 斬新な方法で Rust を効率的に使用するための可能性を提供
https://github.com/rust-lang/rfcs/blob/master/text/1566-proc-macros.md
[lib]
proc_macro = true
#[proc_macro]
pub fn ruspec(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
}
// # Expand
mod test_module_name {
#[test]
fn test_name() {
let context = 5;
assert_eq(context + 5, 10)
}
}
function macro
#[proc_macro]
pub fn hoge(TokenStream) -> TokenStream;
hoge!("hogehoge")
attribute macro
#[proc_macro_attribute]
pub fn hoge(Option<TokenStream>, TokenStream) -> TokenStream;
#[hoge(a, b, c)]
fn hogehoge() {}
custom derive macro
#[proc_macro_derive]
pub fn hoge_derive(TokenStream) -> TokenStream;
#[derive(Hoge)]
struct Foo;
- 昔の proc_macro は不安定
- AST ベースのため Rust を変更すると proc_macro が動かなくなる
- コンパイラの内部構造に依存
- proc_macro を保証できない or Rust を変更させられない
proc_macro2 から Token ベースになった
昨日談
speculate は古い ver を使っていた
nasa 「ほう。これは PR を出すしかありませんね。」
行動はお早めに
おしまい