Rust で main 関数に一文字も書かずに宇宙に挨拶をする

どうも nasa です。

今回は Rust で main 関数に一文字も書かずに宇宙に挨拶をしていきたいと思います。

とりま cargo new hoge でプロジェクト作ろう!

main.rs はこれな

fn main() {}

cargo run!!

え。でない?

おれも出ねえわ、、、、

構文拡張

はい。 茶番は良いとして今回は Rust も構文拡張をやってみたのでメモメモしていきます。

まずは挨拶!

cargo.toml に rustc コンパイラプラグインを使う宣言をしときます。

[lib]
plugin = true

これないとエラーでちゃう

#![crate_type = "dylib"]
#![feature(plugin_registrar, rustc_private)]

extern crate rustc;
extern crate rustc_plugin;

#[plugin_registrar]
pub fn plugin_registrar() {
    println!("Hey, Universe!");
}

今回のメインです普通に main で挨拶したほうが早いですが、、、、 これを lib.rs に書いて main.rs にプラグイン読み込みを追加

#![feature(plugin)]
#![plugin(plugin_test)] //この流れでやってたらplugin_testのとこにはcrate名が入るヨン

fn main() {}

いざ cargo build!!

でた? 出たよね?

f:id:htilcs1115:20190306182011p:plain

まあ、実行時には出ないんだけどさ、、、

これでコンパイル時に plugin_registrar は走ってるのがわかりますね

ごめんなさい。これで終わりなのです、、、

構文拡張についてはいい感じのブログがどっかにある筈だからそれを読んでね。 確か、移り変わりが激しい箇所だから、なるべく新しいのを探すことをおすすめします。あと、英語でrust syntax extensionとかで調べるほうが良さそう。

公式はこれな

https://doc.rust-lang.org/beta/unstable-book/language-features/plugin.html

展望

クソ記事失礼しました。 こんなのをqiitaに上げたらまた初心者の記事の質が悪いだのどうだの言われちゃう(こわひ)のでひっそりとブログにあげていくスタイルをとってます。

ちょっと今後の展望なんですが、構文拡張やったこと無くて今はよく分かってないのですがrspecみたいな、describe,context,it,expectをつらつら書いていくだけでテストができるライブラリを作ろうかと思ってます。

名前は適当にruspecで、、、