タグ

ブックマーク / qiita.com/taskie (2)

  • Rust の std::any::Any トレイトを用いて安全に動的型付けっぽいことをやる - Qiita

    概要 Rust の std::any モジュールには Any という名前のトレイトがあります(ここで boost::any を使ったことのある C++er は何かを察する)。Any トレイトはほとんどあらゆる型に実装されるため、すなわちほとんどあらゆる型の参照を &Any で受けることができます。 std::any - Rust std::any::Any - Rust Any は “A type to emulate dynamic typing” (動的型付けをエミュレートする型)と公式リファレンスで説明されています。これを用いることで「あらゆる型の参照が入る変数を定義する」「実行時の型によって処理を分岐させる」などといった動的型付けっぽいプログラミングが可能となります。しかもダウンキャスト(Any から指定の型への変換1)の結果は Option 型で返ってくるため、パターンマッチを使

    Rust の std::any::Any トレイトを用いて安全に動的型付けっぽいことをやる - Qiita
    mizdra
    mizdra 2019/01/04
  • Rust の struct, enum, &str, TraitObject などをバイト列として眺めてみる - Qiita

    はじめに Rust をやっていると「結局このデータはどんな感じでメモリ上に配置されているのか?」ということが気になってきたので、百聞は一見に如かずということでバイト列として眺めてみたい。 ソースコード use std::mem; fn get_raw_bytes_with_size<T: ?Sized>(p: &T, size: usize) -> Vec<u8> { let mut buf = Vec::with_capacity(size); let view = p as *const _ as *const u8; for i in 0..size { buf.push(unsafe {*view.offset(i as isize)}); } buf } fn get_raw_bytes<T>(p: &T) -> Vec<u8> { get_raw_bytes_with_size

    Rust の struct, enum, &str, TraitObject などをバイト列として眺めてみる - Qiita
    mizdra
    mizdra 2018/06/29
  • 1