Closed higumachan closed 3 years ago
@laysakura @yuk1ty
一旦、WithCancel
をGoの実装をある程度模倣して実装してみました。
ほかでもよく利用するならlibに実装したほうがいいかもしれないですね。
@higumachan 最新のcommitが
Contextは実装していない部分があるのでdead_codeが存在する。
で状況がちょっとわかっていないですが、review readyでしょうか?
Descriptionも古いので更新いただければと思います。
ほかでもよく利用するならlibに実装したほうがいいかもしれないですね。
Goの標準ライブラリにあるようなものを実装した場合には(他で使うか否かにかかわらず) lib に置いて良いと思います。 ただし lib に置くからには最低限 doc test か unit test はほしいところです。
@laysakura
で状況がちょっとわかっていないですが、review readyでしょうか?
libへの分割を横においておくならば、review readyな状態です。
Goの標準ライブラリにあるようなものを実装した場合には(他で使うか否かにかかわらず) lib に置いて良いと思います。 ただし lib に置くからには最低限 doc test か unit test はほしいところです。
unit testとかはWithValue
とかの他のコンテキストも実装してからやったほうが良さそうだと思います。
一旦このPRはこのコードでマージして頂いて別PRでlibへの分割しようかと思うのですがどうでしょうか?
lib移しは別PRで、了解です。その形でレビューしていきます。
description更新と
の更新ボタン押してのレビューリクエストは随時行っていただけるとレビュワー的に助かります。
そんな機能あったんですね知らなかったです。 了解しました!
@laysakura
現状の方針ではMutex周りだけは unwrap
を利用しています。(他スレッドでpanicになったときは今回はただちにpanicで良いかと考えています。)
@yuk1ty
Context
トレイトにまつわる実装は、ちょっと実装が長くなってきてしまっているのと、別ファイルで細かく実装の意図/場合によっては簡単な利用例をコメントとして欲しいかなと思いました。コメントやdocは日本語でよいですー!Goの標準ライブラリにあるようなものを実装した場合には(他で使うか否かにかかわらず) lib に置いて良いと思います。 ただし lib に置くからには最低限 doc test か unit test はほしいところです。
unit testとかは
WithValue
とかの他のコンテキストも実装してからやったほうが良さそうだと思います。 一旦このPRはこのコードでマージして頂いて別PRでlibへの分割しようかと思うのですがどうでしょうか?
こちらで、一旦PRをマージしたあとに別PRで分割しようかと考えていたのですが、このPRでやったほうが良いでしょうか?
こちらで、一旦PRをマージしたあとに別PRで分割しようかと考えていたのですが、このPRでやったほうが良いでしょうか?
了解です、では、別PRで行きましょう!!🙂
@yuk1ty からreview requestもらいましたが、 @higumachan もう review ready でしょうか? readyになったら遠慮なくrequestボタン押してください 👍
@laysakura まだ、コメントを付けている途中ですのでもう少々お待ち下さい。
本日中にreadyにします。
@laysakura
readyになりました。(pending状態だと再度はrequestボタン押せないみたいです。)
また、今回
コンテキストの key/value 機能 コンテキストがツリーを構成する機能・親が子にキャンセルを伝播させる機能 は使ってないように思います。
これらの処理はコードから削除し、libに移す際に(テストやexampleと共に)追加するのもありだと思います。
こちらなんですが、難しい判断だと思いますが、そこまで削除してしまうと現状の実装している理由がわからなくなる(treeにしてる理由とか)気がするので一旦ここらへんはそのままでいこうかと思います。
@laysakura
レビュー依頼出させてもらいました。
主な変更点は
trait HasContextTree
をtrait TreeContext
としてtrait Context
のsub traitとしあくまでtrait Context
の1実装として強調する用に整理長い間お疲れさまでした😃 ありがとうございましたー! goroutine の箇所は tokio で問題なさそうですね!
以前やり取りしたとおり、他にも取り組む必要がある内容がある認識ですので、こちらはもうマージしてしまいますね。引き続き、修正等できそうでしたらよろしくお願いします。
28
の実装を行いました。
goroutineのコードの置き換えの方針は以下で行っています。
go func() {}
tokio::spawn(async {})
chan T
(tokio::sync::mpsc::Receiver<T>, tokio::sync::mpsc::Sender<T>)
ch <- value
tx.send(value)
value <- ch
rx.recv()
このPRでメインのコントリビューターのAcceptがあった場合に #40 の議論が収束する認識でいます。