On Tue, May 17, 2022 at 11:53 AM matsuand <michi****@gmail*****> wrote: > > matsuand です。 > > On Tue, May 17, 2022 at 8:44 AM ribbon <jm****@ribbo*****> wrote: > > > > 現状 > > > > When compressing, if more than I<timeout> milliseconds (a positive > > integer) has passed since the previous flush and reading more input > > would block, all the pending input data is flushed from the encoder > > and made available in the output stream. This can be useful if B<xz> > > is used to compress data that is streamed over a network. Small > > I<timeout> values make the data available at the receiving end with a > > small delay, but large I<timeout> values give better compression > > ratio. > > > > は > > > > 圧縮時に、前回分のフラッシュ処理が行われて次の入力読み込みがブロックさ > > れ、I<timeout> に指定されるミリ秒以上が経過すると、処理中断していた入 > > 力データがエンコード処理からフラッシュされて、出力ストリームでの利用が > > 可能になります。こういった処理は、B<xz> がネットワーク越しにストリーム > > されたデータを圧縮する際に活用されます。I<timeout> に小さな値を設定し > > ておくと、受信したデータの最終分を利用する際に、わずかな遅延を起こすも > > のとなります。もっともこの I<timeout> に大きな値を設定しておけば、高圧 > > 縮率が得られます。 > > > > なっていますが、最初の所は > > > > 圧縮時に、前回のフラッシュ処理からI<timeout>ミリ秒(正の整数)を超えて経過し、 > > それ以上の入力を読み取るとブロックされる場合、保留中のすべての入力データが > > エンコード処理からフラッシュされて、出力ストリームでの利用が可能になります。 > > > > でどうでしょうか。 flush and reading の and をどう訳するか、なのですけれど。 > > ご指摘箇所は誤訳であると納得します。and の並列を取り誤っていました。 > > ご提示の再訳なのですが、若干言い回しに難があるように > 聞こえます。「超えて経過し」は「以上経過し」で良いと感じます。 > また「読み取るとブロックされる場合」は、やや表現が不自然に感じます。 > > 再々訳として > 圧縮にあたって、前回のフラッシュ処理からI<timeout>ミリ秒(正の整数)以上 > を経過し、それ以上の読み取りがブロック [されると|されることになると]、・・・ > > 上文の最終表現は、would をどう訳すかにかかる話であり、 > ブロックする/されるという状況発生がそのうち起こることを表す > 助詞ではあるものの、仮定法であって、しかも書き手としては > 「そうは起きることがないことなんだけども、もし起きたとしたら」 > といったニュアンスを感じる "would block" です。 > 現実の処理ではどうなんでしょう? その実との兼ね合いで、 > 仮定的な表現を強めて訳したりしても良いとは思います。 > 解釈、判断、委ねていいですか? would block ですが、そのままにしておくと、ブロックが発生してしまう状況、 ということを言っていますね。 実際には、その前にフラッシュをしてその状況をロジックとして回避するので、 入力がブロックしてしまうことはない。実際には起こらないので、 仮定法の would が使われています。 「めったに起きないけど」というニュアンスではないと思います。 訳として、今の訳に近いですが、would のニュアンスを反映するなら、 「ブロックされるような場合」「ブロックされてしまう場合」 なども候補に入ると思います。 コードとしては、 read() で EWOULDBLOCK が返ってきたときに 前回の flush からのタイムアウトに達していれば、flush_needed が セットされるようなコードになっているようです。 (src/xz/file_io.c: io_read())