yuk1ty / learning-systems-programming-in-rust

「Rustでもわかるシステムプログラミング」
430 stars 23 forks source link

2.8節をリプレースする #6

Closed yuk1ty closed 3 years ago

yuk1ty commented 3 years ago

節タイトル

2.8 問題。

対象コード

補足説明

-

laysakura commented 3 years ago

@yuk1ty やりたいです。アサインお願いします 🙏

laysakura commented 3 years ago

2.8 Q2 はRustでの再現は難しいように思います。

似たようなフィルターとして、encoding/csv というパッケー ジがあります。 このパッケージを使って、標準出力やファイルに CSV データを出力してみましょ う。

(『Goならわかるシステムプログラミング』1版4刷 p.34 より引用)

encoding/csv パッケージを使うことがこの問の主題となっているため再現が難しいです。

Rust で encoding/csv 相当の struct を作ることも検討しましたが: 章の性質上 std::io::Write トレイトを実装し、 std::io::Write と同じインターフェイスで使えるものにしなければ意義が薄いと考えました。 しかし std::io::Write においては「CSVのカラム文字列を vec/slice/iterator... で 引数として取り、出力し、改行記号を勝手に出力する」という芸当ができません( write_vectored を使えば似たことはできますが、利用者側に IoSlice でCSVのカラム文字列を構成させるという謎の苦行を味わわせるものになります)。


もし上記同意頂ける場合、 2.8 Q2 は欠番であることをリポジトリ訪問者にわかってもらうために、 panic!("この問題無理!See: https://github.com/yuk1ty/learning-systems-programming-in-rust/issues/6#issuecomment-830365583") のような動作のプログラムを作成するのはありだと思いますが、いかがでしょうか?

yuk1ty commented 3 years ago

2, 3, 4 章は Go 特有の事情を説明する箇所が結構あり、対応が難しいところがありますね……

csv クレートを導入してしまうのはありかも、とは思いましたが、これを使用すると若干章の趣旨(std::io::Write ないし io.Writer を使ってみよう)から飛んじゃってますよね… https://crates.io/crates/csv

unimplemented にして、飛ばした理由を書いておいていただく、で大丈夫です!