Open4

Rustメモ

おるとろおるとろ

とある依存クレートが型のアノテーション不足でビルドが通らなくて、これぐらいなら自分で治そうかなと思ったが、ローカルの .cargo の中にある該当クレートを直接編集すると競合とかで良くない。
こういうとき、依存クレートを編集する方法がわからず、いろいろ検索していたんだけど、RustのSlackで教えてもらった。

.cargo の中にある該当クレートのソースコードをいじるのはよくないですね。
私は以下のようにしています。

  1. 依存クレートのソースコードリポジトリーは大抵GitHubかGitLabにあるのでforkする。
  2. forkしたリポジトリーをローカルにcloneする。
  3. あとでpull requestを出しやすいように、トピックブランチを作ってcheckoutする。
  4. 自分のクレートのdependenciesを クレート名 = "x.y" から クレート名 = { path = "cloneへのファイルパス" } に変更する。
  5. forkのコードを修正して、自分のクレートから問題なく使えることを確認する。
  6. 修正内容をcommitし、リモートリポジトリー(自分のfork)へpushする。
  7. 自分のクレートのdependenciesを次のように変更する。クレート名 = { git = "リモートリポジトリのHTTP URL", branch = "ブランチ名" }
  8. 再度、自分のクレートから問題なく使えることを確認する。
  9. 余力があれば、fork元のリポジトリーに対してpull requestを提出する。

RustのSlackコミュニティで( @tatsuya6502 )さんに教えていただいた内容を転記

おるとろおるとろ

構造体の一部のメンバを可変にしたいとき、構造体そのものも可変にしないといけない。
でも、そういう現象が構造体をメンバにもつ構造体で起こると、子や孫の構造体のたった一つのメンバを可変にしたいだけなのに、構造体すべてを可変にしなければならない。

そういう時に、可変にしたい一部のメンバだけポインタを作ってやることで、構造体すべてを可変にしないでもよくなる。
Cellを使ったパターン。

TODO:コードを追記

おるとろおるとろ

RustAudioの話題でvTableとCOMについての話題が出た。何もわからないので、調べてみる。

まずCOMで検索すると
https://github.com/microsoft/com-rs
が見つかった。

そこに書いてあることを簡単に読む

What is COM?
COM is a platform-independent, distributed, object-oriented system for creating binary software components that can interact.

COM has been superseded by WinRT which builds on COM to provide even more guarantees about the binary interface. As such, if you're not sure if you need to use COM, you probably shouldn't.

要するに

  • プラットフォームに依存しない
  • オブジェクト指向のシステム
  • WinRTっていうもっといいのがあるので、COMを直接触る必要がなければ使うべきではない