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

C言語は滅びるべきか」記事へのコメント

  • > この記事のタイトルは「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

              標準的な環境(ATmega328pなど)ではROM(プログラム)32kB・RAM8kBぐらいですが、

              RAMは2kB [arduino.cc]だぞ。

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

              avrgccのintは2バイト [gnu.org]だし、ライブラリ中ではuint8_tの変数が積極的に使われてるぞ。

              # よくIDでこんなトンチンカンな投稿するなあ

            • by Anonymous Coward

              あれ?2バイトじゃなかった?

            • by Anonymous Coward

              テンプレートも実行時オーバーヘッドなしかつ型安全にマクロを置き換えるためにガンガン使えるのでは

              • by Anonymous Coward

                テンプレートをガンガン使うとコードサイズの肥大化著しいので「オーバーヘッドなし」とは言い難い。

              • by Anonymous Coward

                さらに不用意にSTL使うと例外を引き連れてくるので
                時間に厳しい局面ではステップ数見切る根性無く利用を断念。

                例外切っても、じゃぁそんときどうなるのよ?を見る手間をかけられず利用を断念。

          • by Anonymous Coward

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

            • by Anonymous Coward

              C++の代わりになる言語なんて今でもRustぐらいしかないでしょ。

        • by Anonymous Coward

          ROM数kバイト、RAM500バイトみたいな組込みやっててもオブジェクト指向は使いたいよ。
          もう構造体に関数ポインタならべてディスパッチするのはやりたくない。

          静的型付けでGCがなくて今風の構文を押さえた小さい言語があるといいんだけど。

          • by Anonymous Coward

            オブジェクト指向って基本的に「他人の作ったものを『安全簡単』に使いまわし」するのに便利な手法じゃないの?
            小規模なものを自分で1から10まで再利用無しで作る場合は、オブジェクト指向にしたところで
            大して楽にはならないと思うけど。

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

              過去の自分は十分他人になりえるだろ
              規模がどんなに小さかろうがオブジェクト指向を利用するよ
              そのほうが楽で簡単だからな

              親コメント
              • by Anonymous Coward

                そうか。自分なら「ROM数kバイト、RAM500バイト」に収まるプログラムなど、
                ソースコード1行1行読みなおした方が話が早い感じだけど。

              • by Anonymous Coward

                俺は嫌だな。
                少しでも楽したいし、早く帰りたいし、無用のトラブルは避けたい。

            • by Anonymous Coward

              大規模開発とかいってるけど普段どんな規模のプログラム書いてるのか聞きたいな
              ソースが1000行ポッチ越える程度の個人開発でもはるかに有用
              200越えるくらいの極小規模でも私なら採用する

              ひょっとして、その程度のプログラムから中規模・大規模なのか?

              • by Anonymous Coward

                大規模というのはチーム組んで取り掛かるような案件。とても銘々が他人の書いたコードの中身を
                1行1行読んでいくことなど出来ないというような場合に、オブジェクト指向は役に立つ。

                1000行程度の自分で書いたものなら、オブジェクト指向も何も、中身全部細かく把握できてるんじゃないの?
                とりわけややこしいところにはコメントをつけるくらいで、昔のものを掘り出して使うのにも別に困ったことは無い。
                クラス設計の手間や無用に汎用化させるための記述の増加など、手間が増えることの悪影響の方が多いように思える。

              • by Anonymous Coward

                人の多さなんてOOPにはなんの関係もない
                困らないだとか、一行一行読むどうこう何て発言がプログラマから出るのが悲しすぎる。

                困るとか出来るじゃなくて、便利で効率が良いの
                何で楽するために努力しないんだ?

                クラス設計して記述が増えるコストよりはるかにメリットがあるの
                チューリング完全なプログラム同士なら出来るなんて当たり前なの

              • by Anonymous Coward

                > 大規模というのはチーム組んで取り掛かるような案件。とても銘々が他人の書いたコードの中身を
                > 1行1行読んでいくことなど出来ないというような場合に、オブジェクト指向は役に立つ。

                これがIT土方の限界か。

              • by Anonymous Coward

                オブジェクト指向設計に「しない」ほうが手間が増えるんですよ。

            • by Anonymous Coward

              > オブジェクト指向って基本的に「他人の作ったものを『安全簡単』に使いまわし」するのに便利な手法じゃないの?

              違います。
              オブジェクト指向は「データと、それを処理する関数群を、一体のもの(オブジェクト)として捉える」ということ。
              継承もカプセル化も、それに付随するものでしかない。

              calc_hoge(hoge);
              print_hoge(hoge);

              とするより、

              hoge->calc();
              hoge->print();

              と捉え方を変換しましょうよ、ってだけのこと。
              だから、規模とかは関係ないのです。

              • by Anonymous Coward

                違うのは、
                 君は「オブジェクト指向とは何か」を説明している。
                 私は「オブジェクト指向はなぜ必要とされるのか」を説明している。
                というところだよ。

              • by Anonymous Coward

                「他人の作ったものを『安全簡単』に使いまわし」

                これが本当に安全ならどんなに楽か・・

                些細な改修の話が
                継承しまくった肥大なobjectという何かの大元に
                ちょっとした間違いがあったせいで
                工数が莫大に増えた事なんて珍しくない

                難易度までカプセル化しやがる

              • by Anonymous Coward

                オブジェクト指向をオブジェクト指向が必要とされるところ以外に使っちゃいけない理由もないです。
                むしろ使ったほうが便利ならば使いましょう。

              • 「他人の作ったものを『安全簡単』に使いまわし」

                これが本当に安全ならどんなに楽か・・

                低品質なコードはオブジェクト指向では救えません。
                ちゃんとテストしてくださいとしか言いようがありません。

                オブジェクト指向だと、オブジェクトを間違った使い方を「させない」ことができるから「安全」なのです。
                間違った引数を受け取らない。外部からの不正な操作をさせない。これがカプセル化です。

                オブジェクト指向が楽と言っている人は、このようなカプセル化はしていないんでしょう。
                構造化プログラミングをオブジェクトで実現しているだけ。

                親コメント
              • by Anonymous Coward

                カプセル化するほうが「楽に」コーディングできるんです。
                使用したいインスタンスがどんなパラメタを持っているか、パラメタは書き換えていいかどうかなどを使用する側が意識する必要がなくなるのですから。使用する側は、ただインスタンスにメッセージを投げればいいだけです。

              • publicスコープとprivateスコープの使い分け程度ならば、
                オブジェクト指向というより、構造化プログラミングの範疇であり、
                C言語でもよく使われる書き方です。

                親コメント
              • publicスコープとprivateスコープ

                厳密にいえば、public、protected、private はスコープじゃなくて、アクセスコントロールなんだけど。つまり、親のプライベートは見られるけどアクセスできない。

                親コメント
            • by Anonymous Coward

              継承による差分プログラミングでオブジェクト指向が注目されたことがありましたが、前世紀中に否定的な結論が出てたと思います。
              今は設計手法としてオブジェクト指向を活用しているところが多いのではないでしょうか。

あつくて寝られない時はhackしろ! 386BSD(98)はそうやってつくられましたよ? -- あるハッカー

処理中...