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

C言語は滅びるべきか 215

ストーリー by hylom
適材適所 部門より

ソフトウェアエンジニア/作家/ジャーナリストのJon Evans氏によると、「C言語は滅びるべき」だそうだ(TechCrunch。なお、この記事のタイトルは「C/C++に死を」だが、原文タイトルにはC++は含まれていない)。

C言語はさまざまなソフトウェアの開発に使われており、必要不可欠なものとなっているが、いっぽうで原始的なメモリ管理機能しか備えておらず、それが脆弱性や不具合を生む原因となっているという。氏は代替としてRust言語を勧めており、特にパーサーや入力ハンドラなどの部分から、徐々にCのコードをRustに入れ替えていくべきであると主張している。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by hetareDAIO (17407) on 2017年07月20日 7時11分 (#3247114) 日記

    C言語が悪いんじゃなくて、それを扱う人間のレベルが低いのが悪いということ、質を担保するためのコストがかなり高くなること、でしょう。

    かといって、そう簡単にレベルの底上げができたり質を担保するためのコストが下がるわけでもなく、危ないことがやりづらい・起きにくい環境を選びましょう、というのは同意できて、オススメとしてRustを挙げるのも同じではありますが。

    個人的な危惧として、未だにコンピュータを理解するにはC言語を知らないとだめだ、という原理主義者が結構いることです。そんなことないんだけどなぁ…。

    --
    ほえほえ
    • by manmos (29892) on 2017年07月20日 10時20分 (#3247238) 日記

      コンピュータを理解したいのなら一つくらいアセンブラを知ってほしいとは思う。

      理解のためだけでいいので古いのでいい。
      86系より68000系の方がコンピュータを理解するのはいいと思う。(個人の感想です。)

      その上でC言語を理解してほしい。そうすると他の言語の何が良くて何が悪いのかよくわかり、使用用途がはっきりする。

      #まあ、タレコミ時のタイトルのC++は死んでいいと思う。(個人の感想です。)

      親コメント
    • 何でもかんでも自分でやらなきゃいけない言語っつーか、
      細かいところの始末が個人レベルに委ねられすぎというか、
      だからこそもう少し高級言語使えや、となるのも理解はできる。

      自分は、C言語を使えますが、別に知らなくてもいいんじゃね、という気はしてます。
      C言語を使いこなすうえでの七転八倒は、確かに血肉となってますが、
      掛けなきゃいけなかったコストかというとスゲエ微妙。
      当時はそれしか選択肢がなかっただけで。いやTurbo Pascalとかはありましたけどね。
      親コメント
    • Re:言語のせいじゃない (スコア:2, おもしろおかしい)

      by Anonymous Coward on 2017年07月20日 9時17分 (#3247181)

      > 人間のレベルが低いのが悪いと
       
      つまり、滅びるべきは、人 間 !

      親コメント
    • by Anonymous Coward on 2017年07月20日 8時06分 (#3247138)

      > 未だにコンピュータを理解するにはC言語を知らないとだめだ、という原理主義者が結構いることです。

      「コンピュータを理解するにはC言語を知っているだけじゃダメだ」ならその通りでしょうけどC言語知らないとコンピュータを理解するのが厳しいのはその通りでしょう。

      親コメント
    • by Anonymous Coward on 2017年07月20日 11時32分 (#3247295)

      プログラミングができる人でコンピューターを理解したい・させたいならコンピューターの仕組みについて直接学ぶほうが早いだろう。その上で実際のプログラムの記述がコンピューターの動作の何になるのか考えていけばいい。
      どうせなら低級言語でやるほうが良い。CPUの仕様書なり解説書なりを読んだ後でコンパイラを作るのが良いんじゃないのかね。そこまでする必要があるのかそこまでしたいのかは人によるんだろうけど。
      道具の仕組みを知りたいなら道具を使うのではなく分解するほうが早い。

      親コメント
    • by Anonymous Coward

      >未だにコンピュータを理解するにはC言語を知らないとだめだ、という原理主義者が結構いること

      あと「C言語は万能で何でも出来る」という考えを実践するのもどうかと。
      確かにコンピュータ言語の中では比較的何でも出来る言語ではあるんだけど
      それは決して「どんなプログラムを書くのにも向いている」ではない。

      awkのワンライナーで済む処理をCで書いて半日潰してデバッグしてる人が
      隣にいたりすると「C氏ね」とか言いたくなる人がいるのもわからんでもない :-)

  • by mofuppo (47988) on 2017年07月20日 7時12分 (#3247115)

    C言語を学ぶと機械の気持ちが少しわかるよ

    小学生にシャーペン使わせないのとC言語を学ばせたい理由は似てると思う

    • by Anonymous Coward on 2017年07月20日 10時10分 (#3247225)

      他のもちっと高級な言語よりC言語が教育に適している所。
      「書いた通りにしか動かない」ってのを教えるのに良い。
      C言語よりもトラブルを起こし辛い言語も多く、そういう奴の方が実務では良いとも思う。
      が、バグって悩んでってのをトラウマとして刻み込むには、C言語が一番。
      最近のスマートなのはそんなのはカバーしてくれたりするからね。

      自分は昔々、無茶苦茶高額だった頃のHDDの制御ミスってHDDからデカイ音が出たのが未だにトラウマ。

      親コメント
    • by Anonymous Coward on 2017年07月20日 12時52分 (#3247342)

      それならアセンブラと機械語でいい。
      中途半端に機械の気持ちが判ってもしょうがない。

      親コメント
  • 新規プロジェクトではC++とかRustを考えたりできるでしょうが、
    Linuxカーネルとか既存のプロジェクトではCが多いし、
    C11や新しいライブラリを使えばモダンな書き方ができるので、
    滅びろ。とまで言わないと思います。

    #それと今後のプログラマーの職の確保のために。

  • by Anonymous Coward on 2017年07月20日 7時26分 (#3247119)

    と言ってるだけだな。
    Cの何が悪いかちゃんと理解できればC++できちんとしたコード書けるだろ。
    Windowsにはmanaged objectだとかもあるだろ。
    取り替えられるならとっくにやってる&あんたが知らないだけだと思われ。

    • by Anonymous Coward on 2017年07月20日 7時39分 (#3247126)

      GCが許容できない分野では今までまともな代替はなかったよ。

      親コメント
    • by Anonymous Coward on 2017年07月20日 8時13分 (#3247141)

      今のC++は複雑すぎるだろう。
      新しい言語の成果をどんどん取り入れるのはいいが、頑なに互換性を守るために歪な文法を強いられる。
      Cの良いところは、言語使用が小さく一行一行がどういう機械語に置き換わるか予想できるところ。
      モダンC++は a = b;とだけ書かれていても凡人には想像も及ばないことが行われていたりする。

      あと、C++のコミュニティが最悪だね。
      間違った理解やちょっと古臭いコードを書くと「そんなことも知らないんですか。勉強して出直してきてください」だもんな。

      親コメント
      • by Anonymous Coward on 2017年07月20日 11時11分 (#3247279)

        どこかで似たような話を読んだなぁと思ったらブックマークに残ってた。
        間違ったコードは間違って見えるようにする [joelonsoftware.com]

        一般的に言って、私はものごとを隠してしまうような言語機能には恐れを感じる。次のコード

              i = j * 5;

        ・・・を見れば、少なくともCであれば、j の値が5倍されて結果が i に格納されるということがわかる。

        しかしC++の場合では、同じスニペットから分かることは何もない。まったく。C++で本当に起こることが何か知るためには、ぜんぜん違う場所で宣言されているかもしれない i と j の型を見つける必要がある。それはjがoperator*をオーバロードしている型の変数かもしれず、かけ算したときにはなはだ気の効いたことをやってくれるかもしれないからだ。そして i はoperator=をオーバロードしている型の変数かもしれず、また型が異なるために暗黙の型変換関数が呼ばれることになるかもしれない。そして何が起るか知るためには変数の型をチェックするだけでなく、その型を実装しているコードを見つける必要があり、そして,神よ救いたまえ、どこかで継承が行われていれば、コードが実際どこにあるのか自分でクラス階層をたどる必要があり、そしてどこかにポリモーフィズムがあれば、あなたは本当に難儀することになり、それは i と j の型がどう宣言されているか知るだけでは不十分で、実行のその時点における型が何か知る必要があるからであり、それにはどれくらいの量のコードを調べなければならないかわからず、停止性判定問題のおかげで、あなたは決してすべてをチェックしたか本当に確信することはできないのだ。(やれやれ!)

        親コメント
      • by Anonymous Coward on 2017年07月20日 9時30分 (#3247196)

        > Cの良いところは、言語使用が小さく一行一行がどういう機械語に置き換わるか予想できるところ。

        最近はコンパイラの最適化がかなり進んだ代償として、Cでもどういう機械語に置き換わるか予想できないことがかなり増えたよ。

        親コメント
    • by Anonymous Coward

      >Cの何が悪いかちゃんと理解できればC++できちんとしたコード書けるだろ。

      まったくもってC++を理解してないな。
      「Cの何が悪いかちゃんと理解できれば」程度で「C++できちんとしたコード書ける」とはおこがましい。
      理解したと思ったらまだそこが入口だった、それがC++。
      C++できちんとしたコードが書ける、とは宇宙の真理を探るに等しい。

  • by Anonymous Coward on 2017年07月20日 7時16分 (#3247116)

    使われてると思うんだけど
    ゼロから作るのならともかくC言語が使われてるのって元のコードがC言語だからってのが大概なんじゃないの
    そこからわざわざ他の言語に移植するかって言ったらしないよね…
    とはいっても今ではC言語を使わなくてもいい場面が増えたのは喜ばしいこと

    • by Anonymous Coward on 2017年07月20日 8時56分 (#3247165)

      そもそも滅びるかどうかなんてのはべき論じゃないですよね。

      開発言語なんて人間の意志で自由に代替していけるものが
      結果としてRustなどへなかなか置き換わらずC言語は一向に安泰、
      もくろんでいた席が開かなくて目ざわりだから「老害、滅びろ」とは少々ヒステリー。

      親コメント
  • by Anonymous Coward on 2017年07月20日 7時19分 (#3247117)

    全然知らないけどOSやデバドラ書くのに使えるんですか?

    • by apt (28270) on 2017年07月20日 7時34分 (#3247121) 日記
      Redox OS [github.com]とか、Reenix [github.com] (論文) [github.io]とか、色々ありますね。

      このへん [github.com]に比較が載っています。

      親コメント
  • by Anonymous Coward on 2017年07月20日 7時34分 (#3247122)

    > この記事のタイトルは「C/C++に死を」だが、原文タイトルにはC++は含まれていない

    とはいうが、Cの方はリソースの厳しい組み込み向けなど、他で置き換えられないニーズがまだある。
    C++の方こそ、それが使われていた用途向けには今ではもっと洗練された言語がある。
    まあ放っておいても滅びそうだからあまりそういう話題にもならないのだろうけど。

    C言語の方は放っておいたら当分は滅びそうにないから「滅びるべき」という話が出てくるんだろうな。

    しかし、訳文にC++を勝手に追加した御仁は何の考えあってのことなのだろうか。

    • by Anonymous Coward

      リソース制限が理由でCは使えるのにC++が使えないことなんかあるの?

      • by Anonymous Coward on 2017年07月20日 7時54分 (#3247133)

        使えないじゃなくて必要が無い。
        オブジェクト指向ってのはそもそも、大規模で複雑なシステムを大勢で開発するようなケースで
        便利な方法として考えられたもの。
        リソース制限が厳しい環境はそもそも大きなプログラムを置けないので、C++を持ち出す必要もない。使ってもいいが。
        まあC++でC的な書き方もできるなんて屁理屈を捏ねだす奴もいるだろうけど。

        親コメント
        • by Anonymous Coward

          まあC++でC的な書き方もできるなんて屁理屈を捏ねだす奴もいるだろうけど。

          屁理屈じゃなくて普通に書けるけど。

          リソースの制限だって、C/C++ってそんなに変わらないと思う。
          ライブラリも不要ならリンクの必要なものだけリンクすればいい。

          C/C++のメリットって、言語以外の関連知識が充実すればするほど、
          その辺の開発環境に依存しない使い方が生きてくるところでしょ。

          • 「プログラミング言語C++」なんかを読めばわかりますが、初期のC++に関するStroustrup氏の設計思想としては、「従来のCコードは、C++でもオーバーヘッドなく使える」というベターCとして設計してるんですよね。

            今時の肥大化したC++は置いといて、仮想関数とかテンプレートは使わない、その当時のレベルのC++で「クラススコープによる隠蔽と名前空間の分離」ができるだけでも、Cに比べて記述コードは格段に分かりやすくなるし保守しやすくなる。それぐらいならCに比べてオーバーヘッドはありません。

            で、たぶん、実際に組み込みでC++を使っている、一番メジャーなプラットフォームは「Arduino」でしょう。
            Arduinoの開発言語は自称Arduino言語となってますが、その中身はC++(gccベース)で独自のライブラリを載せたものになってます。
            専用のクラスライブラリを作っただけあって、それなりに省メモリというかオーバーヘッドのないものになってますので、
            標準的な環境(ATmega328pなど)ではROM(プログラム)32kB・RAM8kBぐらいですが、
            ROM8KB・RAM512Byteってレベルのマイコンチップでも動かすことができたりします。

            #4バイトなintをガンガン使ってるのだけはツッコミを入れたいですが…

            親コメント
          • by Anonymous Coward

            いやだから、C言語的な書き方をするなら、わざわざC++を持ち出す必要が無いだろうという話だよ。
            オブジェクト指向を使ったプログラミングをしたいからC++の存在価値があるんだろう。
            そしてオブジェクト指向と言う点では、今日もっとましな言語がある。

    • by Anonymous Coward

      わたしたちのC++言語

    • by Anonymous Coward

      原文タイトル [techcrunch.com]にはC++は含まれていない

      タイトルは "Death to C, ++" なので
      "C++" は含まれてはないですね

typodupeerror

吾輩はリファレンスである。名前はまだ無い -- perlの中の人

読み込み中...