カテゴリ:ソフト開発日誌
関連ページ
GNU coreutils が rust uutils に置き換えられそうという話題 rust uutils を build する rust uutils を試す その1 rust uutils を試す続き、引き続き ~/git/uu-coreutils/target/release/coreutils function ... は rust uutils を使った場合を示す。試した環境は lubuntu 24.04 x86_64 だ。一応 Raspberry Pi OS 64bit GNU/Linux bookworm で 2 重チェックしている。 md5sum を試す。GNU coreutils md5sum の方は読めないファイルがあっても止まらない。rust uutils md5sum の方は読めないファイルがあると止まってしまう。使い方によっては不完全な結果になってしまう。rust の書式出力機能は libc の printf よりも優れているのにどのファイルが読めないのか情報を出さないのはなぜ?(というか、完全互換であるべき)。 cd ~/Documents mkdir -p test-md5sum cd test-md5sum seq 3 | while read; do echo ${REPLY} > ${REPLY}; done md5sum 1 2 3 b026324c6904b2a9cb4b88d6d61c81d1 1 26ab0db90d72e28ad0ba1e22ee510510 2 6d7fce9fee471194aa8b5b6e47267f03 3 md5sum 1 2 x 3 b026324c6904b2a9cb4b88d6d61c81d1 1 26ab0db90d72e28ad0ba1e22ee510510 2 md5sum: x: No such file or directory 6d7fce9fee471194aa8b5b6e47267f03 3 ~/git/uu-coreutils/target/release/coreutils \ md5sum 1 2 3 b026324c6904b2a9cb4b88d6d61c81d1 1 26ab0db90d72e28ad0ba1e22ee510510 2 6d7fce9fee471194aa8b5b6e47267f03 3 ~/git/uu-coreutils/target/release/coreutils \ md5sum 1 2 x 3 b026324c6904b2a9cb4b88d6d61c81d1 1 26ab0db90d72e28ad0ba1e22ee510510 2 md5sum: failed to open file: No such file or directory ln を試す。どちらも排他的な挙動になっているのは良さそうだ。エラーメッセージの出力が GNU と rust で一致しない。 cd ~/Documents mkdir -p test-lns cd test-lns touch abcdef ln -s abcdef ABCDEF-lns ln -s abcdef ABCDEF-lns; echo $? ln: failed to create symbolic link 'ABCDEF-lns': File exists 1 ~/git/uu-coreutils/target/release/coreutils \ ln -s abcdef ABCDEF-lns; echo $? ln: Already exists 1 mv を試す。さて、排他制御に使えるだろうか? rust uutils mv は排他制御に使えない仕様だ。危ない。-i オプションを指定しない場合は、mv に失敗しても 0 (成功ステータス) を返す。 cd ~/Documents mkdir -p test-mv cd test-mv touch a b mv -n a b ; echo $? mv: not replacing 'b' 1 ~/git/uu-coreutils/target/release/coreutils \ mv -n a b ; echo $? 0 ls a b mv -i a b; echo $? mv: overwrite 'b'? n 1 ~/git/uu-coreutils/target/release/coreutils \ mv -i a b ; echo $? mv: overwrite 'b'? n 1 ls a b dd を試す。rust uutils dd は direct IO (O_DIRECT) が使えないのか。予想はしていた。多分 page align した領域を用意していない?生々しい kernel とのやり取りは嫌っている様子だったし。 cd ~/Document mkdir -p test-dd cd test-dd sudo dd if=/dev/sda of=dev-sda.bin \ bs=512 count=16 iflag=direct [sudo] password for furuta: 16+0 records in 16+0 records out 8192 bytes (8.2 kB, 8.0 KiB) copied, 0.132819 s, 61.7 kB/s sudo ~/git/uu-coreutils/target/release/coreutils \ dd if=/dev/sda of=dev-sda.bin \ bs=512 count=16 iflag=direct dd: IO error: Invalid input もう少し慎重に GNU coreutils の仕様意図、実装、挙動を研究して rust uutils を実装して欲しいと思う。 パフォーマンスも見ている。色々と言いたいことはある。遅くなったら謙虚に rust では遅くなりますとか、メモリを大量に使いますとか、示していけば信頼されると思う。 お気に入りの記事を「いいね!」で応援しよう
最終更新日
2025.03.25 12:44:50
コメント(0) | コメントを書く
[ソフト開発日誌] カテゴリの最新記事
|
|