やめるのだフェネックで学ぶネットミームの発生と変化

ここ数日、「フェネックやめるのだ」というネタが自分のTLで流行しており、色々と思うところがあるので、まとめておく次第である。以下の記述には、筆者の事実誤認や見落としがあるかもしれないが、筆者は知恵の象徴とかそういうのではないので容赦して欲しい。 続きを読む

雰囲気で並列プログラミングをやってみる

Haskell での並列プログラミングをマスターしたい、とは言わないが、「全然わからない、俺たちは雰囲気で並列プログラミングをやっている」程度のことは言えるようになりたい。

今回は「データ構造の各要素を並列で評価する」ことを目指す。以下の内容は筆者がいい加減な知識で書いているので、そういうつもりでテキトーに読んでほしい。 続きを読む

「結城友奈は勇者である」聖地巡礼 〜観音寺編〜

たまたま四国に旅行に行く機会があったので、アニメ「結城友奈は勇者である」の舞台である観音寺(かんおんじ)市に寄って聖地巡礼をしてきた。

(たまたま四国に行く機会があったから旅程に組み入れただけで、聖地巡礼が目的で四国に行ったわけではない) 続きを読む

C言語のワイド文字入出力

C言語にはワイド文字で入出力を行う関数が用意されている。

※ワイド文字:C言語のワイド文字 (wchar_t) とは、不憫な子である。Windows だと Unicode のコードポイント1個すら表せない16ビットだったり、Unix だとそもそも使われている気配があまりなかったり(もっぱら UTF-8 か UTF-16 が使われている印象がある)する。2010年代の後半にもなってワイド文字なんぞを真面目に扱うブログというのは時代錯誤も甚だしい。

ワイド文字で入出力と言っても、対象がファイルの場合は最終的にはバイト列を読み書きしているわけで、どこかの段階でバイト列とワイド文字列との変換が行われているはずである。この変換方法はどうやって決まっているのか。あるいは、ワイド文字の入出力関数とバイト列 (char) の入出力関数を混在させるとどうなるのか。

また、Visual C++ や glibc の場合は fopen の第2引数に ,ccs=UTF-8 みたいな文字列を設定できるという謎の仕様がある。これを指定した場合は何が UTF-8 になるのか。

こういった細かい仕様は、ワイド文字自体がオワコンなこともあり、あまり知られていないように思う。少なくとも筆者は知らなかった。というわけで、

  • ワイド文字による入出力について、C言語の規格ではどう定められているか
  • Visual C++ のランタイムライブラリ (MSVCRT) ではどう実装されているか
  • Linux 等で使われている glibc ではどう実装されているか
  • macOS 等で使われている BSD libc ではどう実装されているか

の4点について調べた。(ただし、 MSVCRT については別の記事に分割する) 続きを読む