C1X

なんか tgmath.h について調べてて、 GCC 拡張にある type generic macro をサポートする機能を C に入れてはどうすかという提案があることに気付きました。

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1404.htm

でなんか C1X ってどういう感じなのかなーと眺めてみました。

http://en.wikipedia.org/wiki/C1X

http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1425.pdf

ぱーと眺めると面白そうなのは、

  • 新キーワード _Thread_local に threads.h と stdatomic.h あたりのスレッドサポート系
  • 他の増えるキーワードは alignof と _Align と _Static_assert らしい。どれも字の如く的な機能っぽい。
  • uchar.h でさらば wchar_t
  • fmemopen とか asprintf とかが標準化 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1337.pdf
  • bounds checker サポートを extension として。 stdio.h とかそのへんの標準関数が増えまくる (fopen_s とか strcpy_s とかそいうノリ) から extension らしい。 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1225.pdf
  • Wikipedia によると gets 消えるそうなんでゴルファー死去。 getline とか getdelim がかわりに入るから、って話?

まぁとにもかくにも thread かなーという印象。

というか id:RiSK さんが色々書かれてるみたいだった。

http://d.hatena.ne.jp/RiSK/searchdiary?word=%2A%5BC1X%5D

あとは適当に documents とかをチラ見してた。

http://www.open-std.org/jtc1/sc22/wg14/www/documents

面白そうだったものを適当に

Block Proposal

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1451.pdf

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1457.pdf

要はラムダ。 Apple の人が提案してて GCD を持ってきた感じだと思う。

Floating-point to int/_Bool conversions: NaN を _Bool にキャストすると 1 なのか…

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1391.htm

General support for type-generic macros

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1441.htm

冒頭の type generic macro がどうこうの具体的なやつ。

#define cbrt(X) _Generic(X, long double: cbrtl, default: cbrt, float: cbrtf)(X)

とか書けたらいいんじゃねということらしい。

Memory Model Rationale

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1411.htm

Boehm による C のメモリモデルの rationale 。基本は C++0x のやつらしい。

On The Removal of gets()

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1420.htm

gets 消えるってことだけど、「いつも通り、コンパイラやらライブラリは標準を拡張していいわけだから、実際のところ legacy code サポートするために gets があるかもねー」的な感じっぽいので、まぁ実際 GCC から消えたりはしないんじゃないかね。

Vectorized types for C

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1408.pdf

GCC とかにある vector 型。

#macro proposal

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1410.pdf

#for とか #endfor とか #macro (プリプロセッサ時関数) とかを足そうとの話。いかにも通らなさそう。

Thread Unsafe Standard Functions

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1371.htm

thread unsafe な関数に追記をしていこう的な話だと思う。

Support for Conditional Inclusion of Headers

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1348.htm

ヘッダがあるか無いかの確認をプリプロセッサでできればいいね的な。

    #if include(<foo.h>)  // tries to #include <foo.h>
      // ...
    #else
      // ...
    #endif

とかできればいいでしょというような話らしい。いいと思うんだけど。

Encoding and Decoding Function Pointers

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1332.pdf

クラッカーが関数ポインタテーブル書き換えて好きなところに飛ばすってのをよくやりやがるので、 encode_pointer とか作ってポインタを暗号化した状態でメモリに置いておけるようにしようぜって話。なるほどなぁ。

Unicode and Raw String Literals

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1333.pdf

C++0x コンパチな raw string literal 入れようぜと。

Extensions to the C1X library to enhance security

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1339.pdf

fopen のフラグに x を入れて exclusive な open ができるようにしようぜとかそういう話。ていうか x って glibc に既にあるんだなぁ。

感想

飽きてきたので中断。私としては C++0x と感想は同じで stacktrace をくれと言いたい。

次ながめる時のためにこの間のタイトルを読んだよとメモ。

http://www.open-std.org/jtc1/sc22/wg14/www/docs/Post%20Florence.htm

http://www.open-std.org/jtc1/sc22/wg14/www/docs/pre-delft.htm

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h