タグ

ブックマーク / qiita.com/qnighy (5)

  • Rustで相互参照: ノーガード戦法編 - Qiita

    RustはトレースGCを持たずRAIIと所有権に基づくメモリ管理を行います。これには様々な利点がある一方、相互参照をもつデータの扱いが他のプログラミング言語より難しいという困難があります。記事では、あまり一般的ではないが特定の限られた用途では有用と思われる方法を紹介します。 標準的な方法 まずは相互参照が起きないように設計を再考するのがいいでしょう。特に「子データから親データを参照する」といったユースケースでは、必ずしも子データ自体が親データへの参照を持たなくてもいいことがあります。以下ではこれに当てはまらない例、典型的にはグラフの表現を念頭に置いて記述します。 Rustで相互参照を扱う最も標準的な方法は、typed_arenaなどのアリーナアロケーターと RefCellなどの内部可変性コンテナを組み合わせる方法です。これについては私のブログ記事などを参考にしてください。 またRust

    Rustで相互参照: ノーガード戦法編 - Qiita
    komlow
    komlow 2020/08/08
  • Cの可変長引数とABIの奇妙な関係 - Qiita

    printf に関する以下のツイートが流行っていました。 上のツイートでは割とあっさり説明されていますが、amd64 SysV ABIでこの現象が起こる理由にはもっと深遠なものがあると思うので、可変長引数とからめて説明してみたいと思います。 前提条件として「ABI」「可変長引数」「non-prototyped関数」の知識が必要なのでそこから説明します ABIとは ABI (Application Binary Interface) とは、機械語レベルでのインターフェースのことです。 機械語そのもののルールはISA (Instruction Set Architecture) によって規定されていますが、たとえばC言語の「関数呼び出し」などの概念を機械語でどのように表現するかについては規定していません。そのルールを定めたのがABIです。したがって、ISAとABIはおよそ1対多の関係にあります

    Cの可変長引数とABIの奇妙な関係 - Qiita
  • Rustの依存関係の信頼性を検証する (crev) - Qiita

    cargo-crevとは 最近、複数のRubyライブラリにバックドアが発見されました。このような事件はnode/npmPython/PyPIなどでも発生しています。これらは正当な作者のアカウントがハックされてアップロードされているケースや、はじめから悪意のある作者が公開しているケースなどがありますが、いずれのケースでも公開されているライブラリバージョンの安全性が検証されていないことが問題であるといえます。 これに対してRustのcrates.ioに関してもコミュニティーから懸念が表明されています (URLO18860, URLO29989) が、その中でdpc氏が提案しているのが分散コードレビューによる信頼性の担保です。これを実際に実装したのがcargo-crevというツールです。 (なお、RustSecチームがcargo-auditというツールを公開していますが、これは既知の脆弱性デー

    Rustの依存関係の信頼性を検証する (crev) - Qiita
  • Rustのasync/awaitをスムーズに使うためのテクニック - Qiita

    RustのFutureとasync/awaitは、「時間のかかる処理」をするときに、「処理が終わるまでOSスレッドをブロックする(同期Rust)」のではなく、「当該処理を中断して、そのOSスレッドを別のタスクの処理に使う(非同期Rust)」ことで、スレッド数よりも多くの処理を同時に行う仕組みです。 同期Rustと非同期Rustには以下のようなアナロジーが成立します。 同期Rust 非同期Rust

    Rustのasync/awaitをスムーズに使うためのテクニック - Qiita
    komlow
    komlow 2019/08/05
  • Rustのasync/awaitの特徴4つ - Qiita

    async/awaitの最小限の機能が、 Rust 1.38.0 リリースを目標に準備されています。Rust1.36.0のリリースが2019-07-04で、Rustは6週間ごとにリリースされるので、順調にいけば 2019-09-26 頃にリリースされると思われます。もちろんnightlyではすでに試せます。 さてこのasync/awaitですが、他の言語のasync/awaitと基コンセプトは近いものの、いくつか異なる点があります。個人的には以下のことを把握しておくとよいと思いました。 後置await構文 戻り値型 (内部戻り値型・実装ごとに異なる型) 駆動 (awaitまたはspawnしないと進まない) キャンセル (awaitポイントは中止ポイント) 稿は現象の説明にとどめ、そうなっている理由には基的に言及しませんが、どれもきちんと理由があってそうなっています。その点はご承知おき

    Rustのasync/awaitの特徴4つ - Qiita
    komlow
    komlow 2019/07/08
  • 1