パスワードを忘れた? アカウント作成
140090 journal

okuの日記: そんなに trigraph って使われてるの? 4

日記 by oku

The C++ Standards CommitteeComment on Proposed Trigraph Deprecation (PDF 注意) より:

そんなに trigraph sequence って使ってる人いたんですかへ〜、ってところですか。 正直言うと、trigraph は既定で off 状態になっていて、#pragma か何かで on にできるのが嬉しいと思うんですけどねぇ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by doh (35450) on 2009年09月06日 3時24分 (#1635207) 日記

    正直言うと、trigraph は既定で off 状態になっていて、#pragma か何かで on にできるのが嬉しいと思うんですけどねぇ。

    n2910.pdfにあるIBMの主張によると、「pragmaで文字コードを設定するまで#が使えないので??=を使わないといけないから絶対に困る!」なので、#pragmaでは対処不可能です。大体文字コードによって#のコードポイントが違うなんてふざけたコード体系を作る方にそもそもの問題があると思うし、そんな特殊な環境であればコンパイラの拡張機能として提供し続ければ良いだけだと思うんですけどね。

    • by oku (4610) on 2009年09月06日 19時35分 (#1635281) 日記

      「pragmaで文字コードを設定するまで#が使えないので??=を使わないといけないから絶対に困る!」

      あ〜、そうか、鶏と卵になってしまいますね。 じゃあコンパイラのオプションということで。 ていうか、trigraph が既定で有効だと、

      const char filename_with_wildcard[] = "hoge????.txt";    /* ISO 9899/14882-ly incorrect. */

      ってのがとってもアレなんですけど...

      大体文字コードによって#のコードポイントが違うなんてふざけたコード体系を作る方にそもそもの問題があると思うし、そんな特殊な環境であればコンパイラの拡張機能として提供し続ければ良いだけだと思うんですけどね。

      "#"のコードポイントが異なるのは構わないんじゃないでしょうか (e.g. UK-ASCII)。 実際、"\"のコードポイントが異なっても気にしていない人々 (== 我々) が世界にはいるわけで。 :-) 問題になるのは「そもそも"#"がない」とか「"#"はあるけど、処理系が locale 依存なりコンパイルオプションなりで吸収する気がない」とか、そっちの方ではないかと。

      親コメント
      • by doh (35450) on 2009年09月10日 0時00分 (#1637232) 日記

        "#"のコードポイントが異なるのは構わないんじゃないでしょうか (e.g. UK-ASCII)。実際、"\"のコードポイントが異なっても気にしていない人々 (== 我々) が世界にはいるわけで。

        コードポイントは単なる数値だという認識なのですが違いましたかね?UK-ASCIIについては良く知らないのですが、日本で使われてきた文字コードでは円記号は"\"のグリフを変えただけあって、別のコードポイントに"\"を移動したわけではないですよね。同体系の文字コードであるにも関わらず、"#"という基本的な文字のコードポイントがxであったりyであったりするのは問題ではないかと思ったわけです。

        親コメント
        • by oku (4610) on 2009年09月10日 2時11分 (#1637273) 日記

          厳密に衒学的なことを言うと、日本には JIS X0208 があるので、

          putchar('¥n');

          ではなく、

          putchar('\n');

          と書くのが正しい... という主張もできなくはないです (私はそんなコード書きたくはありませんが :-)

          UK-ASCII については、私も英国在住なわけではないので実際に彼らがそういうコードを読み書きしていたかどうかは定かではないのですが、100% pure UK-ASCII (正確には BSI 4730?) 的には、

          £include <stdio.h>

          というコードが書かれていたはずです。 これはちょうど JIS X0201 の世界で ¥ が ∖ のコードポイントに対応しているのに似ています。 ISO 646 の national variant な領域に別の「#」があったらエラいことになっていたかも知れませんが、幸い、BSI 4730 には「#」が存在しない (ハズな) ので、我々同様 £ -> # の読み替えですんでいたのでしょう。

          一方、EBCDIC な人達の variant はそんなものではすまないでしょう (なんせ日本のメインフレームだけで何種類あるやら) が、「ソースコードを読むまでソースのエンコーディングが分からん」というのなら、

          • なぜ言語処理系を locale sensitive にしないのか (メインフレームの世界に locale があるのか寡聞にして知りませんが、確かコードページの概念はあったはず)
          • なぜコードページの異なるソースコードを一度にコンパイルしようとするのか (というかなぜ一つのソフトウェアプロジェクトでコードページを揃える気がないのか)

          というのが私の言いたいことだったりします。 まあ、あちこちの国の人達が書いたコードをまとめてビルドするからそんなことできん!という返事が返ってきそうな気はしているのですが...

          親コメント
typodupeerror

人生unstable -- あるハッカー

読み込み中...