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

GCC開発におけるC++の利用が承認される 72

ストーリー by hylom
g++の話ではない 部門より

あるAnonymous Coward 曰く、

GNU Compiler Collection(GCC)メーリングリストへの投稿によると、GCC開発におけるC++の利用をGCC Steering CommitteeおよびFree Software Foundationが承認したとのこと(本家記事SourceForge.JP Magazine記事)。

GCCはCで書かれているが、今回の決定により今後はC++での開発が可能になる。現時点ではどのサブセットを利用するかは未定とのこと。

この件をメーリングリストに投稿したCodeSourceryのMark Mitchell氏によると、C++の採用はより良いコンパイラを作るためとのことで、C++の利用それ自体が目的ではないという。同氏はC++に精通していない開発者を考慮し、当初は利用できるC++の機能を「Cプログラマーに理解し易く、かつC++初心者が間違い難い」ものに制限したほうが良いと提言している。

また、今後はC++の開発ガイドラインやコーディング規約を確立する必要があるとして協力者を募っているとのことだ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2010年06月03日 9時39分 (#1773863)

    昔、サンプルプログラムをもらったんですが、メモリ確保にmalloc関数使っていたけど
    どこにもメモリ開放している箇所がないので、
    「サンプルなのでメモリ開放省いているですか?」とたずねたら、
    「C++だから自動的に開放されるんですよ」といわれた。
    「えっ?そんなことはない、はずですよ」と答えたら
    「そんなこともしらないんですか?CじゃなくてC++ですよ、拡張子がcppになってるでしょ」って、
    いくら私がC++を理解していないからって思ったがひょっとしたらそういった
    C++もあるのかなと思いそれ以上聞かなかった。
    ありますか?

  • by gonta (11642) on 2010年06月03日 5時04分 (#1773814) 日記

    C言語の話をしていたら、変数を関数の最初で宣言せず、途中で宣言し利用してもいいとのこと。

    なんとC99から追加された機能なんだと。これから、C99が普通になっていくのかな?

    と考えたとき、C++の細かい文法仕様・互換性は怖いと思った。それが長年使われなかった理由かな?とも想像した。

    --
    -- gonta --
    "May Macintosh be with you"
    • Re:あらびっくり (スコア:3, すばらしい洞察)

      by kusanagi (3927) on 2010年06月03日 16時11分 (#1774084)

      >と考えたとき、C++の細かい文法仕様・互換性は怖いと思った。それが長年使われなかった理由かな?とも想像した。
      C90がC99に変わるまでにどれぐらい時間がかかっているかという証明ですね。
      C99でさえそうなんですからC++に変わるにはもっと時間がかかるでしょう。

      と、言うかC99コンパイラを使っているのに言語規約を把握していないとはまりますよ。
      たとえば定数の型はC90とC99で違うことがまれにあります。
      memologueさんが詳しい。
      http://d.hatena.ne.jp/yupo5656/20070204/p1 [hatena.ne.jp]

      --
      kusanagi shin
      親コメント
  • by Anonymous Coward on 2010年06月02日 21時02分 (#1773607)
    コーディング規約はたぶんMozilla.orgのC++ Portability Guide [mozilla.org]あたりを基にするんだろうな。
    • by Anonymous Coward on 2010年06月02日 21時08分 (#1773611)

      「例外を使わない」
      「実行時型情報を使わない」
      「namespace 機能を使わない」
      … 中略 …
      そして「C++ を使わない」という規約ができるんですね。

      親コメント
    • コーディング規約のドラフト http://gcc.gnu.org/wiki/CppConventions [gnu.org]
      親コメント
    • by Anonymous Coward

      C++のガイドライン

      1. 多重継承は甘え
      2. namespaceは甘え
      3. テンプレートは甘え
      4. 例外は甘え
      5. 実行時型情報は甘え

    • by Anonymous Coward

      書いたコードを色々なコンパイラでコンパイルできるようにしようと思うから
      やれ例外を使うなRTTIを使うなnamespaceを使うなと面倒な話になるんだろう。
      GCCなんてGCCでコンパイルできりゃいいんだろうから使える物は好きに使えばいい。

      • by Anonymous Coward
        >GCCなんてGCCでコンパイルできりゃいいんだろうから

        GCCが無い環境上でGCCをコンパイルするにはどうしたらいいのん?
        • GCCがすでにある環境で、クロスコンパイル環境を作ってコンパイルする、ってのがいまどきの正解では?
          親コメント
          • by taka2 (14791) on 2010年06月03日 13時05分 (#1773999) ホームページ 日記

            「ccを使ってgccをコンパイルする」のは過去の話になった
            というか、それを捨ててもいいと判断したってことなんでしょうねぇ。

            SunOS5(Solaris2)に標準でccが付かなくなったのに匹敵するショックかも。

            古いC言語版のgccを別途用意しておけば、ccからスタートして、

            stage 1. ccでC版gccをコンパイルして、
            stage 2. ccでコンパイルしたC版gccでC版gccをコンパイルして、
            stage 3. gccでコンパイルしたC版gccでC版gccをコンパイルしてコンパイルを検証
            stage 4. C版gccでC++版gccをコンパイルして、
            stage 5. C版gccでコンパイルしたC++版gccでC++版gccをコンパイルして、
            stage 6. C++版gccでコンパイルしたC++版gccでC++版gccをコンパイルしてコンパイルを検証

            …6ステージあればC++版gccが作れますね。

            親コメント
  • 地味に想い出す過去ストーリ
    「オブジェクト指向言語でオブジェクト指向っぽいプログラミングをしない」のはNG?
    http://srad.jp/developers/article.pl?sid=10/05/06/0923253 [srad.jp]

    件のブログ主氏は、実はこういう感じの事を主張したかったのかもしれないなぁ
    みたいな事を思ったり、思わなかったり

  • by Anonymous Coward on 2010年06月02日 23時44分 (#1773722)
    何でC++なんか使うのだろう。
    コンパイラとか低レベルなものはCだけの方が、
    サイズが小さい上に保守性も上がっていいと思うんだけど。。。

    それに、最近は例外とエラーを区別できない人がおおくて何でも例外投げるし。。
    多態は関数のポインタで処理を書くようなものだから、いまいちトレースが難しくなるしで
    C++は業務系アプリだからこそメリットのあるものだと思うんだけどな~
    • by Anonymous Coward

      gccは実質、Cで書いたLisp処理系で実装されている風な仕組みだという話らしいので、
      なるほど、ならばいくらでもマクロ的に拡張できるだろう、と
      勝手に妄想合点してたんだけど・・・違うみたいだな。
      LLVMとかに対抗するために、抜本的に書き直すきっかけにしたいのかな。

    • by Anonymous Coward

      え?
      普通エラーが発生したら例外投げるんじゃないの?

    • by Anonymous Coward
      > それに、最近は例外とエラーを区別できない人がおおくて何でも例外投げるし。。

      例外的ではないエラーに関しては、例外を放つなということでしょうか。まぁ、

      私は、エラー処理を書くぐらいなら、例外を使う方がむしろコードはわかりやすくなると思っています。エラー処理のバケツリレーとか、見ていると馬鹿馬鹿しくなるので。
      まぁ、一般ユーザーにNullPointerExceptionとかいう謎のエラーを表示するプログラムが良いとは思いませんが、落としどころは結構難しいのではないですかね。
  • by rain (37487) on 2010年06月03日 0時37分 (#1773747)
    Ian Lance Taylor氏が中心となって取り組んでいたgcc-in-cxxの成果の芽が出たということなのか
    http://gcc.gnu.org/wiki/gcc-in-cxx [gnu.org]
    RMSはgccの開発にはC++は適切でないといって反対していた。
    http://www.airs.com/blog/ [airs.com]
    • by kusanagi (3927) on 2010年06月03日 16時22分 (#1774089)

      ページにあるGCCSummitでのスライド(http://airs.com/ian/cxx-slides.pdf)の最後のほうに

      >Why not C++?
      >

      > The FSF doesn't like it!
      > → The FSF not writing the Code.

      ワロタwww

      --
      kusanagi shin
      親コメント
  • by Anonymous Coward on 2010年06月02日 20時48分 (#1773600)
    *YOU* are full of bullshit.
    C++ is a horrible language.うんたらかんたら
  • by Anonymous Coward on 2010年06月02日 20時57分 (#1773606)

    様々な型の動作を記述するわけだからテンプレートとかポリモフィズムが便利そうな気がするけれど、使えないんだろうなあ。
    そうなったら変に規則を定義し直すよりもEmbedded C++ [wikipedia.org]でいいんじゃないかと思うわけですが。

  • by Anonymous Coward on 2010年06月02日 21時42分 (#1773630)

    CとC++は似て異なるものです。

    少しでもC++を使うのなら、C++を完璧にマスターし完全なコーディングをしなければ、ぱっと見はわからない落とし穴を無意識のうちに掘りまくることになります。

    ちなみに、例外を使わない、というのは大変ですよ。

    私、

    コンパイラの設定で例外をdisableし、
    newが失敗したときに例外をthrowする代わりにNULLを返すように設定

    すればいいと思っていたんですが、

    class foo ;
    void func1(foo arg) {
    // 中略
    }
     
    void func2(void) {
        foo one ; // これは成功
        func1(one) ; // oneをコピーするときにメモリが足りず失敗したとき、どうなる?
    }

    ポインタをNULLチェック・・・しようにもポインタないじゃん、と。

    • by DrCaligari (29778) on 2010年06月03日 1時44分 (#1773778)

          func1(one) ; // oneをコピーするときにメモリが足りず失敗したとき、どうなる?

      そもそもclassを値渡しにする理由はなんでしょうか?
      値渡しを止めて、コンストラクタをpublic公開を止めてfooを生成するstaticのメンバ関数を用意するのではだめでしょうか?

      親コメント
    • by Anonymous Coward

      むしろクラスを使わずに、better Cとして使うって事じゃないかと。

    • by Anonymous Coward

      この例でメモリが足りなくなる場合というのはすなわちスタックオーバーフローですので、普通の処理系では単にsegfaultして終了だと思います。私はこのような状況で例外を飛ばすように仕込まれたコンパイラを見たことがありません。

      C++の規格でもこの場合に例外を飛ばすことは要求していなかったと思います。

    • by Anonymous Coward

      そのコードはnewしていないですよ
      Cと同じようにスタックオーバーフローするだけじゃないですか?

      • Re:混ぜるな危険 (スコア:1, おもしろおかしい)

        by Anonymous Coward on 2010年06月03日 9時20分 (#1773853)

        おまいら、なに釣られてるんだよ。

        元記事は

        > 少しでもC++を使うのなら、C++を完璧にマスターし完全なコーディングをしなければ、ぱっと見はわからない落とし穴を無意識のうちに掘りまくることになります。

        の例を己の身を犠牲にして示してるんだよ。讃えてやれよ。

        親コメント
    • by Anonymous Coward

      void func1(foo arg) {

      設計の悪さを感じるのは、私だけ? "const foo& arg" でないとすると、 arg は func1 内で作業用に使われるということだから、 それってスタイル的にどうなのかなぁ、と。

      • by Anonymous Coward

        同感。
        foo がレジスタに乗るほどの大きさなら良いけど、
        もし乗らないほど大きいとしたら、値渡しするのは筋の悪い設計だと思いますね。

    • by Anonymous Coward
      oneはスタック変数で、それをfunc1に値渡し(スタック変数)するんですか?
  • by Anonymous Coward on 2010年06月02日 22時44分 (#1773675)
    C++ですよ。
    • by Anonymous Coward

      いや、早く滅んでくれC++

      • by Anonymous Coward
        御意。まともなオブジェクト指向の言語がごまんとあるので、オブジェクト指向"風"超高級アセンブラの存在意義なんて無いよね。C++って冗談で作った言語だって話しもあるし。
        • by Anonymous Coward
          ネイティブコードをはくまともなオブジェクト指向言語ってそんなにあるん?
        • by Anonymous Coward

          > まともなオブジェクト指向の言語がごまんとあるので、オブジェクト指向"風"超高級アセンブラの存在意義なんて無いよね。

          C++はマルチパラダイム言語だから、「まともなオブジェクト指向の言語」とC++のオブジェクト指向的な
          部分だけ比較しても意味ないと思うけど。

      • by Anonymous Coward

        C++自体よりも、C++をまともに使えないくせに
        C++案件に入ってくるプログラマが滅んで欲しい。

        # プロといえないプログラマが多すぎる。
        # だめなプログラマが、仕事の規模を無駄に膨らましてる感じ。

  • by Anonymous Coward on 2010年06月02日 23時57分 (#1773727)
    ここはGNU goを大改造してだな
    • by Anonymous Coward

      >ここはGNU goを大改造してだな
      投了してよい?(Y/N/Go)

typodupeerror

「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常

読み込み中...