Rustでgemを書く際のハマりどころ in 2017

この記事は、Ruby Advent Calendar 2017の12/22の記事です。前日はTomoProgさんでした。

Rustという言語があります。 この言語の特徴は、一つは実行時のコストの低さ、もう一つは「所有権」システムにあると思います*1。所有権システムについては、2016年のRubyKaigiで発表されたGuildにインスピレーションを与えたことでもRuby界隈では知られているかと思います*2

が、今日の記事はRustについて記述することが目的ではないので、言語の特徴については細かくは触れないことにします。

RustによるRuby拡張の話題は、実はRubyKaigiでは2015年2017年の2度に亘ってセッションになっています。これは「型安全な」「実行が速い」言語で拡張を記述できるということに技術的関心が集まる、ということを表していると言えます。Rubyの特徴といえば「型がない」「実行が遅い」ですから、そうなるのも当然と言えるところはあると言えるでしょう。

というわけで実際にやってみたところ、そこそこハマりどころがあったので共有します。

*1:Rustをある程度学んだ人は皆この概念をRustの特徴として挙げると言われるくらい際立った特徴

*2:cf. http://rubykaigi.org/2016/presentations/ko1.html

続きを読む

Rustからposixとかlibcで使うような定数は割と簡単に参照できる

例えば、以下のコードはOSXではきちんと動く。

extern crate libc;

fn main() {
    println!("hoge = {}", libc::ENOMEM);
    println!("hoge = {}", libc::ENOENT);
    println!("hoge = {}", libc::EINTR);
    println!("hoge = {}", libc::ERANGE);
}

もちろんこれが独自ライブラリだと思うようにいかないので、適宜C実装してフォローしてあげる必要がありそうだけど。

なお、libcは当然のことながらプラットフォーム依存が強いので、ドキュメントはプラットフォームごとにある。
クロスプラットフォーム開発の時は、そこら辺も念頭に置いた方が良さそう。

夫婦で話し合う時間、どうやって確保していますか?

この記事は、妻・夫を愛してるITエンジニア Advent Calendar 2016 - Adventarの12/11日分の記事です。 前回はsyobochimさんでした。

10年。これが、カミさんとの結婚以来経過した時間です。

その頃から、夫婦で色々なことを話し合う時間を確保するのは、結構な苦労でした。
月250時間以上の稼働が長期間継続したことも幾度かあり、そういった時は、朝の挨拶くらいしか話す時間が取れないのもざらでした。

続きを読む