タグ

ブックマーク / laysakura.github.io (7)

  • Rustの std::sync::RwLock はLinuxでwriter starvation問題を起こす (macOSなら平気)

    まとめ: std::sync::RwLock::{write(), try_read()} を併用した場合には「書き込みロックを最優先」という挙動は必ずしも期待できない (LinuxではNG) Pthread の規約が挙動に自由度をもたせており、Linuxにおけるデフォルト実装では writer starvation が発生する Rustにおいて writer starvation を回避しつつ readers-writer lock を使うには parking_lot::RwLock を使うと良い 目次 背景: Readers-writer lock とは? 背景: Rustにおける readers-writer lock 背景: RwLock::write() と RwLock::try_read() 再現コード 原因分析 修正: parking_lot::RwLock を使う おわり

    Rustの std::sync::RwLock はLinuxでwriter starvation問題を起こす (macOSなら平気)
  • トヨタの3.5ヶ月のソフトウェアエンジニア(研究開発)生活を振り返る

    前回の転職エントリから3.5ヶ月、すなわちトヨタに入社してから3.5ヶ月が経ちました。 3.5ヶ月間とても気持ちよく働けたので、振り返り記事を書いていきます。座右の銘は「後ろを振り返らない」だったのに、歳を取ると振り返りがちになるんでしょうか。 インターネットの向こうの皆様にもぜひ弊社に興味を持っていただきたいので、弊社の良いなと思うところを書きます。嘘で興味持ってもらっても誰も得しないので、嫌だなと思うところもちゃんと書きます。 目次 前提: 所属とか経歴とか よかったこと1: 機会がめちゃ多い よかったこと2: 分散データ処理屋にとっては最高の戦場では? よかったこと3: 伸び伸び研究開発させてもらえる よかったこと4: 偉い人はすごい びっくりしたこと1: 同じ会社に知らない部署がすごいある びっくりしたこと2: 組織をまたいだディレクションがすごく緩い チョット嫌なこと1: コミュ

    トヨタの3.5ヶ月のソフトウェアエンジニア(研究開発)生活を振り返る
  • Rustの2種類の 'static

    /// Returns some reference to the boxed value if it is of type `T`, or /// `None` if it isn't. pub fn downcast_ref<T: Error + 'static>(&self) -> Option<&T> { ... } 「・・・2つめのなんだっけ?」 という人はぜひ読んでみてください🦀 この記事では、Rustの2種類の 'static 、 'static ライフタイム 'static ライフタイム 境界 を解説します。 目次 'static ライフタイム 'static ライフタイム 境界 おまけ: 'static じゃないライフタイム境界 記事を書いた背景 'static ライフタイムあまり難しくないです。 'static ライフタイムは、 プログラムが走っている間ずっと有効な値

    Rustの2種類の 'static
  • ぼくのかんがえたさいきょうの CircleCI 設定 for Rust

    あまり見ない気がするので書きました。特徴は、 lint, testなどの各ジョブが並列に動く(ジョブ実行数を多くしてないとdocker containerの立ち上げ分むしろ全体時間はロスになることもあるが…)。 Travis CI のマトリクスビルド に近いことを、 parameters: を使ってやっている。 rust-toolchain ファイル に書かれたバージョンと、 .circleci/config.yml に書かれた MSRV (Minimum Supported Rust Version) の2つでビルドしている。 cargo-readme を使ってrustdocとREADMEを比較し、どちらかがメンテされていない場合にエラーにする(お好みで)。 キャッシュ使う。 あたりです。見慣れなさそうなところはインラインコメント付けましたので参考にしてください 💁‍♀️ 更新履歴 2

  • 自作CPU & 自作OSをやっていく (2) - 64ビットRISC-Vの "Hello World" をRustで作った

    2020年1月から、趣味エンジニアリング活動として自作CPUと自作OSをやっていく。 今回は、64ビットRISC-V (RV64I) の “Hello World” をRustで作ったので、そのリポジトリの紹介。 自作CPU & 自作OS タグで、この前後の進捗とか目指しているもの(初回記事)とかを追えるようにしている。 冒頭にも貼ったが、 のリポジトリに公開している。READMEに全部書いてあるが、特徴を抜粋すると Dockerfile を書いているので、面倒なコンパイラツールチェインなどのインストールを自前でしないで良い。 64ビットなRISC-Vターゲットへコンパイルされる(世のサンプルは32ビット版が多いのでちょっと参考になるかも)。 RustのStableビルドを使う。Nightlyビルドは使わない。 xargo を使わず cargo を使う。 Visual Studio Cod

  • 二分探索木 - Rustではじめるデータ構造とアルゴリズム(第2回)

    Rustの特徴のひとつは、所有権(ownership)・移動(move)・借用(borrow)の概念です。これらがコンパイル時に厳格にチェックされることにより、古くから未定義挙動でプログラマを悩ませてきたダングリングポインタなどの問題がなくなり、メモリ安全性がもたらされます。 しかし一方で、自分で多少複雑なデータ構造を定義しようとする場合にはコンパイルを通すだけでもかなりの知識・力量が要求されます。 この(不定期)連載では、 Rustではじめるデータ構造とアルゴリズム と題し、プログラミングコンテストなどでよく見かける基礎的なデータ構造とアルゴリズムを、できるだけシンプルにRustで実装していきます。 &, &mut, Box, Rc, Cell, RefCell などの使い分けや、なぜそれを使う必要があるかの解説を、実例を通して行います。 今回第2回では、 二分探索木 を取り扱います。値

    二分探索木 - Rustではじめるデータ構造とアルゴリズム(第2回)
  • 二分木 - Rustではじめるデータ構造とアルゴリズム(第1回)

    Rustの特徴のひとつは、所有権(ownership)・移動(move)・借用(borrow)の概念です。これらがコンパイル時に厳格にチェックされることにより、古くから未定義挙動でプログラマを悩ませてきたダングリングポインタなどの問題がなくなり、メモリ安全性がもたらされます。 しかし一方で、自分で多少複雑なデータ構造を定義しようとする場合にはコンパイルを通すだけでもかなりの知識・力量が要求されます。 この(不定期)連載では、 Rustではじめるデータ構造とアルゴリズム と題し、プログラミングコンテストなどでよく見かける基礎的なデータ構造とアルゴリズムを、できるだけシンプルにRustで実装していきます。 &, &mut, Box, Rc, Cell, RefCell などの使い分けや、なぜそれを使う必要があるかの解説を、実例を通して行います。 第1回は、最もシンプルな木構造である 二分木 を

    二分木 - Rustではじめるデータ構造とアルゴリズム(第1回)
  • 1