🦁
Rust の println! は Windows 環境でも CR を出力しない
Rust の println!
マクロは、Windows 環境でも \n
のみを出力する。これはプラットフォーム非依存の動作であり、Rust の設計思想に基づいた一貫した仕様となっている。
リファレンスを読んでいるときに気がついた。
背景
Windows においては、伝統的に改行コードとして \r\n
(CR + LF)を使用してきた。一方で Unix 系(Linux や macOS)では \n
(LF)のみが改行として使用されている。多くの言語やランタイムは、この違いを抽象化し、OS に応じた適切な改行コードを自動的に出力するように設計されていることが多い。
しかし、Rust の標準出力マクロ println!
は、あくまで \n
のみを出力する。そのため、コード中で改行を書いた場合、次のようになる。
fn main() {
println!("Hello\nWorld");
}
このコードは Windows 上でも以下のように表示される。
Hello
World
Windows の標準コンソールは、近年(Windows 10 以降)では \n
のみでも正しく改行を解釈できるようになっており、そのため、Rust が \r\n
を明示的に出力しなくとも、大抵のケースでは問題なく動作する模様。
\r\n
を出力したい場合
明示的に どうしても CRLF(\r\n
)を明示的に出力したい場合は、自分で指定する必要がある。
fn main() {
print!("Hello\r\nWorld\r\n");
}
Discussion