yuk1ty / learning-systems-programming-in-rust

「Rustでもわかるシステムプログラミング」

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

2.8節をリプレースする

yuk1ty opened this issue · comments

節タイトル

2.8 問題。

対象コード

補足説明

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

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") のような動作のプログラムを作成するのはありだと思いますが、いかがでしょうか?

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

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

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