パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

リーナス・トーバルズ氏、Linuxカーネルの開発を「C89」から「C11」に移行方針へ」記事へのコメント

  • by annoymouse coward (11178) on 2022年03月07日 13時26分 (#4211008) 日記

    C89からC11だと間に C99があります.

    C99で標準化された機能でカーネルコードに影響がありそうなものは
    - 可変引数マクロ. __VA_ARGS__ 使うやつ
    - designated の初期化. struct A { int hoge; int fuga}; A a = { .hoge = 1, .fuga= 2}; って書けるやつ
    - 可変長配列
    - サイズゼロ配列
    - for (int x=0; x<10; ++x) って感じでローカル変数が宣言できるやつ
    などがあります.

    最後の for文内でローカル変数が宣言できる機能が,今回のC89からC11に移行するきっかけになった新機能です.
    LKMLの議論だと,全部のメールを読んだわけではありませんが流し読みした感じでは
    C89からC99に移行しようと言う話になって,どうせならC11にしたら?って流れになってました.

    ただし上記のC99機能は以前からgccなどたいていのコンパイラでは実装済みになっていて(確か GCC 5.0あたりで実装された)
    例えば,サイズゼロ配列や designated 初期子は既存のlinuxカーネルでも多様利用されています.
    ですから厳密にはC89だけではlinuxカーネルはコンパイルできません.

    次にC11で標準化された機能でカーネルコードで役に立ちそうなのは
    - _Generic キーワード.c++ でいうtemplate関数みたいなtype genericなマクロが書ける
    - stdalign.h .アラインメントを指定する修飾子が使える
    です.

    特に _Genericキーワードはかなり強力で,よりセキュアで実行速度が速いコードが簡単に実装できるようになります.今後の展開が楽しみです.

    • by Anonymous Coward

      まともに追いかけていない門外漢だけど、linuxってgcc固有機能もあちこちで使っている印象だったので
      今でも(建前上は)C89縛りだったんかい!という感じ

      • by Anonymous Coward on 2022年03月07日 14時05分 (#4211038)
        建前上はGNU拡張入りのC89では(gcc -std=gnu89)
        C99の新機能はライブラリの機能ばっかりでカーネルのコード書くときは関係ないよねというのがC89にとどまってた理由
        親コメント
        • by Anonymous Coward

          で、今回ついに-std=gnu89では使えないコア言語の機能(for文内でローカル変数を宣言できる機能)が問題になったと

      • by Anonymous Coward

        なんか以前移行を試みたときはgcc 4.x系のバグを踏んで断念したらしい

    • by Anonymous Coward

      組み込みに使えないコードとか吐き出してこないのかだけ心配

      • by Anonymous Coward

        どういうののこと言ってんの?

      • by Anonymous Coward

        ベンダが対応するだろ多分。i386見たくメインストリームからバッサリ切られるかもしれないけど。

    • by Anonymous Coward

      C99からのジャンルの統合ありますのでご注意を
      え?コミケじゃない?

    • by Anonymous Coward

      GCC拡張のサイズゼロ配列は使ってるとこあるだろうけど、C99のは使ってるとこある?
      同機能別文法のものが使われてるって言いたいのかもしれんが。

    • by Anonymous Coward

      C99からC11の変更点。
      ・VLAがオプションになった。
      不思議。サポートしないコンパイラがあるようには思えないけど。

      しかしなぜC18ではないのか。新しすぎか。

    • by Anonymous Coward

      gccとc99でinlineの仕様が微妙に変わってなかったっけ?
      確かextern inlineとinlineの意味が入れ替わった。

一つのことを行い、またそれをうまくやるプログラムを書け -- Malcolm Douglas McIlroy

処理中...