最近作った・メンテしたRustプロダクト
供養および近況報告
rustplotlib
Matplotlib の Rust バインディングが欲しいなぁと思っていたので勢いで作ったもの. Rust という言語の特徴を考えると必要となるケースはあまりない気がするが,作ってしまった以上便利なものであるとだけ言っておく.
使い方は,まず下のように Builder でグラフを構築した後,
extern crate rustplotlib; use rustplotlib::{Figure, Axes2D, Scatter, Line2D, FillBetween}; let x: Vec<f64> = (0..40).into_iter().map(|i| (i as f64) * 0.08 * PI).collect(); let y1: Vec<f64> = x.iter().map(|x| x.sin()).collect(); let y2: Vec<f64> = x.iter().map(|x| x.cos()).collect(); let ax1 = Axes2D::new() .add(Scatter::new(r"$y_1 = \sin(x)$") .data(&x, &y1) .marker("o")) .add(Line2D::new(r"$y_2 = \cos(x)$") .data(&x, &y2) .color("red") .marker("x") .linestyle("--") .linewidth(1.0)) .xlabel("Time [sec]") .ylabel("Distance [mm]") .legend("lower right") .xlim(0.0, 8.0) .ylim(-2.0, 2.0); let ax2 = Axes2D::new() .add(FillBetween::new() .data(&x, &y1, &y2) .interpolate(true)) .xlim(0.0, 8.0) .ylim(-1.5, 1.5); let fig = Figure::new() .subplots(2, 1, vec![Some(ax1), Some(ax2)])
Figure::apply(&mut backend)
を呼び出すことで実際の描画に反映させる.
use rustplotlib::Backend; use rustplotlib::backend::Matplotlib; let mut mpl = Matplotlib::new().unwrap(); mpl.set_style("ggplot").unwrap(); fig.apply(&mut mpl).unwrap(); mpl.savefig("simple.png").unwrap(); mpl.dump_pickle("simple.fig.pickle").unwrap(); mpl.wait().unwrap();
調子乗った名前をしている割には大した機能を実装できていないので,余裕が出来たら適宜機能を拡張していく予定…
rwm
なんかウィンドウマネージャ作ってみたくなったので作ったもの. といってもウィンドウマネージャを実装するための知識が皆無だったので,以下のサイトで紹介されている Standard ML の実装をベースに Rust に移植した.
現状はリサイズ時の処理に不具合があり,クリック場所が悪いと panic
してウィンドウマネージャが終了する.
rhq
以前作成した ghqrs
という ghq クローンを再度書き直したもの.
ghqrs
は元々 Bash on Windows で go build
が動かなくてムキーッとなって作ったという経緯があり, メンテナンスするのが面倒になった 実装の所々に気に入らない箇所が目立ったので作り直した.
おわりに
- 生きるの辛い
- Windows10 Creators Update で Rust が BashOnWindows でも動くようになるらしいですね(今も動いてない…?)
- ご意見,プルリクエストなどお待ちしています