なんか 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 なのか…
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 から消えたりはしないんじゃないかね。
#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