パスワードを忘れた? アカウント作成
12817267 story
プログラミング

Microsoft、C言語を拡張した「Checked C」をオープンソース化 57

ストーリー by headless
後回しにして結局有効にしないパターン 部門より
C言語を拡張して安全性を高めた「Checked C」をMicrosoftがオープンソース化した(InfoWorldの記事Softpediaの記事Microsoft Research — Checked C)。

Checked CはC言語にポインタの境界チェック機能を追加したことが名前の由来となっている。チェックに対応する新しい種類の配列型やポインタ型が追加されており、スコープを指定してチェックを強制することもできる。チェック機能を使用しない既存のCプログラムもそのまま使用できるため、後で徐々にチェックを有効にしていくことも可能だという。

現在、Checked CはLLVM/clangをフォークして実装されており、いずれはアップストリームへのマージも計画しているという。ソースコードはGitHubのChecked C clangリポジトリおよびChecked C LLVMリポジトリから入手可能だ。ライセンスはイリノイ大学/NCSAオープンソースライセンスとなっている。
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by aji-oh (17247) on 2016年06月19日 19時25分 (#3032292)
    Checked C言語でChecked Cコンパイラが実装できること :-) #古き善き(?)ネタ。
    • by Anonymous Coward

      で、配布されたコンパイラには「自分のソースをコンパイルすると、ソースツリーのどこに書かれていない、バックドア作成機能を自分自身のオブジェクトファイルに埋め込む」機能が実装済みと。

      これは古き悪しきネタ。

  • by Anonymous Coward on 2016年06月19日 17時33分 (#3032247)

    すでに境界チェックを行っているマネージコードでは意味がないし、
    Win32アプリをビルドできない程度のオモチャだったらFail-Safe C [developers.srad.jp]とかと比べて何が新しいのかもよくわからない。MSらしく独自拡張で実現しているあたり?

    • by Anonymous Coward

      InfoWorld の記事を今ちらっと読んだけど、確かに新しくわざわざ作った経緯がよくわからない。
      しかしMSとしてもまったく意味が無い物を、流石にわざわざ作ったり、ましてそれを発表したりもしないと思うので、
      (良くも悪くも意味が無いので)
      もうちょっと・・・特徴より経緯を掘り下げないとわからない。

      個人的にはC++がベースになってくれると嬉しかったが、そういう事じゃないと思うのでそこは不問。

      • by Anonymous Coward on 2016年06月19日 18時50分 (#3032282)
        Fail-Safe C って Visual Studio のデバッグビルド並みの実行時メモリチェック機構を Windows 以外でも使えるようにしたいって物。

        こっちは C とは別の C互換の言語を作って、開発時に開発者が明示的な利用範囲を書いて、明示的なメモリチェックをやるってコンセプトだから、再発明どころか似たようなものですらない。
        親コメント
      • by Anonymous Coward

        まあ、最大手が車輪の再発明をしたらあかん、ってな決まりがあるわけでもないですし。

        言語が広く使われるようになるかどうかも、その言語自体が優れているかのほかに、
        背後に誰が付いているかとか、どこでどう使われようとしているかというような意味を含めての将来性とか、
        ライブラリがどのぐらい出揃うかの実用性とか、そんなことにも強く依存しますし。

        • by Anonymous Coward

          大手っていうか余裕があるところは使わない前提で作るだけ作ってそこから得た知見をほかで活用することもあるからな。あとは社員教育?

    • by Anonymous Coward

      普及させるなら、最終的に.net frameworkでも使えるようにするのではないかい。

      • by Anonymous Coward

        .Netってクラスライブラリでないの?オブジェクト指向言語でないC言語からは使い辛いんでないの?

  • by Anonymous Coward on 2016年06月19日 17時58分 (#3032258)

    俺が知らないだけだろうけど、Better Cといえば、C++だったり、さらにそれから派生したJavaはあるけど、オブジェクト指向に走らずに、Cと同じコンセプトのBetter Cって提案されているんだろうか。
    Modula-2とか?

    今回のChecked CはCと互換性があるみたいだけど、互換性のないBetter Cも見てみたかったり。

    • by Anonymous Coward

      RustとかGoとかSwiftとか。MSは新言語ではなくCの拡張で行くつもりなのかもしれない

    • by Anonymous Coward

      MFCとかのフレームワーク見ると継承とかポリモーフィズムとかを意識して
      コードいじらないといけないOOP臭ぷんぷんなんだけど、
      最近のC++1xとかboostとかはOOPの機能は使われているんだけどOOP臭がしない。

      C++はOOP以外の何かに進化しつつある。

      • by chromoly (46484) on 2016年06月19日 20時54分 (#3032327)

        オブジェクト指向は並列処理に向かないからなぁ、C++のクラスは組み込み型定義構文というのが近い
        スレッド単位の並列ならスレッドと対応したアクターモデル、データ単位の並列ならSoA(配列の構造体)
        全てがオブジェクトなオブジェクト指向よりも、アクター(処理の主体)とデータ(処理の対象)を明確に分離した方が効率がいい。

        親コメント
        • by Anonymous Coward

          オブジェクトを排他制御の単位とすべきかメソッド単位にすべきか明示的にすべきかについては昔から議論されていたが、どうでもいいというのが結論だった気がする
          とくにimmutableなデータ構造の重要性が認識されている今日では

      • by Anonymous Coward

        STLが世に出てから一体何年経っていると…
        C++はずっと昔から先に行っていたよ。

      • by Anonymous Coward

        はっきり言ってC++はOOPを目的とはしているとは言えない。
        割合で言えばOOPのための言語仕様は一部に過ぎないし、
        OOP論者からはOOP言語としては否定されることも多かった。

        • by Anonymous Coward
          C++ は、速くなる or 楽になる という要件を満たすならば、貪欲に取り込むからね。
          開発者は、利用したい部分を利用すればよくて、言語側から強制されるものがほとんどない。
          OOPに限らないけど、純粋さを綺麗とする考え方とは真逆

          このあたりの思想って C# もガッチリ受け継いでるよな。
    • by Anonymous Coward

      Modula-2を嫌がって(?)C言語風のスパイスをまぶしたModula-3を作った人たちがいるくらいだから、今更Modula-2は受けないでしょう
      Pascal系の言語のクラシックな処理系はarrayの境界チェックがデフォルトでオンになってたりするけど、モダンな(?)処理系ではオーバヘッドを嫌ってそういうチェックはしない流儀

  • by Anonymous Coward on 2016年06月19日 18時46分 (#3032279)

    組み込みシステムだと需要はあるのでは。
    オブジェクト指向があるとその処理が複雑になるが、C言語だと記述した流れがそのまま機械語になる。
    組み込みC言語の仕事はまだまだ減らないだろう。
    だけどバグやらハッキングやらを避けたいのでセキュリティだけ改善してみた、って考えれば合理的。

    そうだとすると、Microsoftがなんで作ったのかという問いが出てくる。
    ユビキタスな仕事に手を出そうとしているとか。

    • by Anonymous Coward on 2016年06月19日 22時30分 (#3032374)

      MSといっても、Microsoft Research ですからね。本体の営業政策とは独立に、いろいろ手を出しているのだとおもいます。

      親コメント
    • by Anonymous Coward

      IoT Coreっちゅうものがありましてね。

    • by Anonymous Coward

      組込み屋の自分は、静的にコンパイルできてC++よりマシなモダンな構文のOO言語が欲しい。

      組込みもクラス指向のOO使いたいんだよ。特に画面があると。

      だけどRAMが少ない環境なのでインスタンスをホイホイ使い捨てる言語は苦しい。
      RubyやPythonが使えたら素晴らしいけど、4kRAMのマイコンではさすがに使えない。
      リアルタイムなのでGCが走るのも困る。

      • スパコン←「2位じゃダメなんですか?」
        マイコン←「Cじゃダメなんですか?」

        • by Anonymous Coward

          スパコン←「2位じゃダメなんですか?」

          話になりません

          マイコン←「Cじゃダメなんですか?」

          駄目じゃないけど...

  • by Anonymous Coward on 2016年06月19日 18時47分 (#3032280)

    サーバサイドではrubyかnode.jsかscalaか
    クライアントアプリでもswiftやJavascriptオンリー。AndroidアプリならまだJavaだっけ?
    気づけば人類はもはや素のC言語を必要としなくなってるんだなあと思った
    もう少し、Objective-Cの資産が残ってる程度かな

    このChecked Cはどこで使うんだろうか?
    工場の古くて小さなコンピュータの延命とか?

    • by Anonymous Coward on 2016年06月19日 18時54分 (#3032283)

      速度を出すためだと思いますがnode.jsだとパッケージによってはCのモジュール使っているやつがありますね。
      他人のマシンに環境構築しようとしたらパッケージがビルドできなくて面倒な目にあった。

      親コメント
    • by Anonymous Coward on 2016年06月19日 19時34分 (#3032298)

      組み込みソフトを忘れないで~
      何だかんだでかゆいところに手が届くC言語は便利なのですよ。

      親コメント
    • by Anonymous Coward on 2016年06月19日 19時40分 (#3032299)

      このストーリーでMSのリンク先を読んでるやつは俺以外に一人しかいないのかよ

      > The extension is designed to be used for existing system software written in C.

      とか

      > Most system software is written in C or C++, which is based on C. System software includes operating systems, browsers, databases, and programming language interpreters. System software is the “infrastructure” software that the world runs on.

      とか

      > The Checked C extension will let programmers add checking to their programs to detect these kinds of errors when a program runs or while it is being written. Existing system software can be modified incrementally in a backwards-compatible fashion to have this checking.

      親コメント
      • by Anonymous Coward

        よし、その調子で翻訳もしてくれ

        • by Anonymous Coward

          英語くらい読めよ バカ

    • by Anonymous Coward on 2016年06月19日 20時54分 (#3032328)

      夏のWindows 10 Anniversary UpdateでWindows Subsystem fo LinuxというLinux向けのプログラムをそのままWindows10に提供する予定があります。
      多くのプログラムはCで書かれているので、Windows向けにビルドするついでに、より安全にすることができるはずです。

      親コメント
      • by Anonymous Coward

        > Windows向けにビルドするついでに
        Windows Subsystem for LinuxはUbuntus向けにビルドしたELF64バイナリをそのまま動かす思想だから的を外してる感

    • by Anonymous Coward

      アプリはそうでもVMとかOSとかは別なんじゃないの?
      まあAndroidでもNDKならCもあるからフリーとは言い切れないけど。

    • by Anonymous Coward

      デバイスドライバや共有ライブラリなど、OSに近い部分叩く所では、まだCも出番ありそう。

    • by Anonymous Coward

      井の中の蛙、人類を語る

      すっかり囲い込まれたその環境は何で作られてるんだろうね?

    • by Anonymous Coward

      組み込みでないのに素のCばかりでプログラム書いていますが何か?
      C言語は言語仕様で安全性を担保してくれていないこともさることながら、現代のプログラミング言語の持つライブラリとして貧弱。また、C言語で書くプロジェクトは車輪の再発明的なライブラリの作成を期待されることも多いのはいかがなものか

    • by Anonymous Coward

      サーバサイドではrubyかnode.jsかscalaか
      クライアントアプリでもswiftやJavascriptオンリー。AndroidアプリならまだJavaだっけ?
      気づけば人類はもはや素のC言語を必要としなくなってるんだなあと思った

      rubyやその他は人類以外の神か何かが作ってるという認識かな?

    • by Anonymous Coward

      そのSwiftやJSのランタイム自体ってネイティブコードで作られてるんじゃないの?

    • by Anonymous Coward

      そこらへんの言語で書かれた動作速度に不満が無ければそれでいいんじゃない?

  • by Anonymous Coward on 2016年06月19日 18時50分 (#3032281)

    AddressSanitizerをWindowsでも動くようにしてくれよ
    互換性のないC言語モドキを書く奴がどれだけ居るんだよ

  • by Anonymous Coward on 2016年06月19日 21時15分 (#3032338)

    従来方式で書いた場合は保護できないし
    新方式だと互換性が無いしで中途半端な印象
    いっそC言語を適当な仮想マシンのコードにコンパイルするほうがマシなんじゃ

    • by Anonymous Coward

      いっそC言語を適当な仮想マシンのコードにコンパイルするほうがマシなんじゃ

      どういう理屈かサッパリわからん。

    • by Anonymous Coward

      valgrind 「呼んだ?」
      https://ja.wikipedia.org/wiki/Valgrind [wikipedia.org]

    • by Anonymous Coward

      標準関数を考えなしで使ってオーバーフロー引き起こすのが主だろうから
      ユーザーコードにリターンする前にライブラリ側が判断してabort返す必要があるて事はC標準関数を低コストに呼べない・呼んだら黙阿弥、互換性もくそもない
      スタックに作る配列チェックは自前コード内ならメタマクロで十分対応できるし
      ヒープは壊れても平気ではないけどマズ攻撃には使えんし

      このC言語もどきの生きる道はどこにあるんだろうね

  • by Anonymous Coward on 2016年06月19日 21時53分 (#3032358)

    ポインタや配列の安全な取り扱い、
    スコープに基づくポインタの管理
    どちらもRustがやってる

    一応、Cのほうがずっと前から普及してて、書き換えるコストは低い、という点を指摘してる記事もあるけど、
    今からChecked Cが普及するのか
    Rustに書き換えるよりは楽だろうけど
    結局、古いC言語のまま使われるような気がする

    • by Anonymous Coward
      全面的に書き換えたり、乗り換える必要もないんじゃないですかね。

      既存のコードもそのまま動くわけだから、バグが出たときに関連しそうな所だけチェック構文追加して、動かしてみて、原因わかれば、バグ治すのと、チェック用の構文は削除してしまって、元のコンパイラで動かしてもいいわけですよ。
  • by Anonymous Coward on 2016年06月20日 10時33分 (#3032522)
    Checked Cや最近のVisual StudioはC99サポートしてるのかな。

    MicrosoftからC99開発者へ: ISO C++を使え
    https://www.infoq.com/jp/news/2012/05/vs_c99_support
typodupeerror

私は悩みをリストアップし始めたが、そのあまりの長さにいやけがさし、何も考えないことにした。-- Robert C. Pike

読み込み中...