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

クラシックでオブジェクト指向のコンパイラ型言語、おすすめはObjective-C?それともC++? 117

ストーリー by headless
比較 部門より
Ask Slashdot: Which Classic OOP Compiled Language: Objective-C Or C++?

私は90年代初めからある、クラシックでオブジェクト指向のコンパイラ型プログラミング言語を選択しようとしているが、なかなか決めることができない。C++は常に選択肢の一つだが、Objective-Cもちょっと気になっている。Mac OS Xアプリを開発して収入を得たいなら当然Objective-Cを選択すべきだが、私がやりたいことに関していえば、どちらでもすべてのプラットフォームで満足のいく選択となるだろう。私はx86 Linux上で始めたいと思っているが、メインの開発プラットフォームとして使用することにもなる。他の言語を数多く知っているというわけではないが、FOSSとの結びつきが強く、広く使われているコンパイラ型言語を身に着けたい。その点に関してはObjective-C、C++のいずれも申し分ない。皆さんはどちらがおすすめだろうか。これら2つのプログラミング言語をどのように比較すればいいだろう。また、クロスプラットフォームでの開発(主としてGUIのないヘッドレスアプリケーション)の容易さはそれぞれどの程度だろうか。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by CowardDuck (25674) on 2015年03月09日 0時08分 (#2774136)

    "object" みたいな抽象的な単語を含んだバズワードを
    プログラミング言語の機能の説明に使うのはもう、やめるべきだ。

    何とでも解釈できる言葉を分別なく、何にでも適用した
    結果、生まれたのは混乱だけだ。

  • コードを書く人たちばかりのところで聞いたほうがより現実に即した回答が得られると思う。

  • いや、何でもない。

    これ、クロスプラットフォーム対応の言語フレームワークの質問だよなぁ。
    本家のコメントどおり、Qtを採用してC++でいいと思う。実績もあるし。

  • by Anonymous Coward on 2015年03月08日 19時25分 (#2774034)

    AppleがこれからもずっとObjective-Cを採用し続ける方に自分のキャリアを賭ける自信があるなら、話は別かも知れんが。

    • by Anonymous Coward

      プラットフォームを気にしてるくせにObjective-Cを選択肢に入れる意味がわからんよな

      • by Anonymous Coward on 2015年03月08日 20時14分 (#2774057)

        元のタレコミは釣り(創作)でしょうね。
        90年台から悩んでるっていうのでもうなんか呆れたよ。

        親コメント
        • これは誤解。
          90年代から悩んでるわけではなく、90年代にはすでにある言語を選びたい(つまり、新しすぎるのはいらない)、という意味。
          もっとも、そのこだわりに何の意味があるかはわかりませんが。

          親コメント
        • by Anonymous Coward

          元のタレコミは釣り(創作)でしょうね。
          90年台から悩んでるっていうのでもうなんか呆れたよ。

          完璧に同感。
          休日に垂れ込まれるAsk Slashdotってこんなのばっかり。
          盛り上げたいのにスベってる感。

      • by Anonymous Coward

        > 私はx86 Linux上で始めたいと思っているが、メインの開発プラットフォームとして使用することにもなる。他の言語を数多く知っているというわけではないが、FOSSとの結びつきが強く、広く使われているコンパイラ型言語を身に着けたい

        この条件じゃどう考えてもC++だよね
        背中を押して欲しいだけなんじゃないだろうか

    • by Anonymous Coward

      微妙に使いにくいというか古臭い設計のObjective-Cを使うくらいなら同じように古臭いところがあるC++のほうがいいや

  • by Anonymous Coward on 2015年03月08日 19時38分 (#2774039)

    どうせ次はgccとClangどっちがいい?とか
    EclipseとIntellij IDEAとVisual StudioとXcodeはどれが最強?とか
    SVNかGitかMercurialかVSSか?とか、果ては{}は省くか省かないかなんてことまで、
    いくらでも悩むネタは転がってるんだからな。

    さっさと始めとけば、そんなのはどれを選んだって
    大した違いがない問題だって気づくはずだってのに。

  • by Anonymous Coward on 2015年03月08日 19時58分 (#2774047)

    そもそもオブジェクト指向の明確な定義はあるのか?

    • by Anonymous Coward

      無い

    • by Anonymous Coward

      あるよ
      その言語の作者がこの言語はオブジェクト指向だと言い張ればその言語はオブジェクト指向だよ

    • by Anonymous Coward

      オブジェクト指向言語だったら、それはSmalltalkですよね

  • by Anonymous Coward on 2015年03月08日 20時08分 (#2774054)

    Javaは JITもあるけどコンパイラ型言語か?
    というのと同じレベルで
    Objective-Cってコンパイラ型言語だろうか?
    一部の動的なポリモルフィズムって、コンパイラではなくランタイムじゃなかったっけ?
    Objective-CってC++とJavaの中間という認識なんだけど・・・

    • C++がコンパイラ言語じゃなかった時期を知ってます…。
      親コメント
    • by Anonymous Coward

      Javaのソースをバイトコードに変換するのがコンパイルじゃなかったら何なの?
      Javaは問われるまでもなくコンパイラ型言語でしょ…。
      それと同じレベルの疑問って言われたら、「お前が定義して答えを決めろ」と答えるしかない。

      • by Anonymous Coward on 2015年03月08日 21時21分 (#2774085)

        どっちのレスもよく分からない議論をしているように見える。

        「コンパイラ型言語」なんて用語はないし、その定義はどう考えても曖昧。
        Java がソースをバイトコードに変換するからコンパイラ型言語だと言うなら、
        Python だってバイトコードにコンパイルするんだから Python もコンパイラ型言語と言えるけど、
        私たちの常識は、トピック主はPythonを除外しているだろうと思うはず。

        そもそも、プログラミング言語というのは、コンパイラ型・インタープリタ型という区別から独立している。
        ある言語がコンパイラ型かインタープリタ型かは、その言語の処理系によって変わるから。

        さらに、トピック主が、
        ネイティブコードへのAOTコンパイルを行うものを「コンパイラ型言語」と言っているのか、
        実行時eval() が容易にはできないような処理系を「コンパイラ型言語」と言っているのか、
        それらとはまた別の感覚で定義しているのか、
        境界線は曖昧。

        > Objective-Cってコンパイラ型言語だろうか?
        っていう意見は分からなくもない。
        ObjCというのはC言語にSmalltalk-80ランタイムをくっつけて、
        Smalltalkのメッセージ送信およびクラス定義を行う特別構文を用意しただけのような言語。
        じゃあSmalltalkってコンパイラ型言語かというと、
        普通のSmalltalk-80処理系はバイトコードにコンパイルするけど、
        恐らく普通は含まれない。

        とはいえ、トピック主はObjCを「コンパイラ型言語」の候補としてあげてるんだから、
        そういう定義なんだと思って話を進めよう。
        # ぶっちゃけ、ObjCは常識的にはコンパイラ型言語に含まれると思う。
        その上で、Java は含まれるのか、
        C言語にトランスレートしてからネイティブコードにコンパイルする処理系 Chicken は
        Schemeの処理系だけどもSchemeも含まれるのか(今回のケースでは、
        Schemeはクラシックなオブジェクト指向言語と言えないから無視できるけど)、
        となると、曖昧と言わざるをえない。

        結論:
        コンパイラ型言語の定義は曖昧だから、
        『じゃなかったら何なの?』とか言ってないで、ちゃんと議論して共通了解していきましょ。

        ちなみに、「クラシックでオブジェクト指向のコンパイラ型言語」と聞いて、
        自分は Eiffel と Smalltalk/X (Smalltalk -> C トランスレータ) を思い浮かべたんだけども‥‥。
        誰も求めてませんね、はい。

        親コメント
        • by Anonymous Coward

          そんな難しく考えずに、実行時に”手動で”コンパイルする必要があるかどうかっていいんじゃね?

          もしくは、型チェックがあるかどうか(コンパイル時に)とか
          バグがあった時に、ソースの該当箇所を教えてくれるとか

          ちなみに、PHPだって今では内部ではJITで中間言語にコンパイルしてから実行してたと思うけど、コンパイラ型言語っては言わないかなw

  • by Anonymous Coward on 2015年03月08日 20時08分 (#2774055)

    Cこそ至高。
    マクロで言語を拡張してオブジェクト指向を取り入れるんだ

    • by CowardDuck (25674) on 2015年03月09日 0時56分 (#2774151)

      > マクロで言語を拡張してオブジェクト指向を取り入れるんだ

      そりゃ、C++ だ!!!

      って突っ込んで欲しいのかな?

      親コメント
    • by minemo (41273) on 2015年03月08日 20時18分 (#2774061) 日記

      至高となればDelphiと言わねばならん。
      今は知らんけど…

      #本当は先代の…

      親コメント
    • by Anonymous Coward

      > Cこそ至高。

      同感です。

      > マクロで言語を拡張してオブジェクト指向を取り入れるんだ

      GUI部分のプログラミングがいらないなら、オブジェクト指向はいらないと思います。

      • by Anonymous Coward

        Linuxカーネルのソースでも読んでみるといいのでは?関数ポインタをガリガリ使ってオブジェクト指向を取り入れていますよ。

        • by wolf03 (39616) on 2015年03月08日 21時41分 (#2774091) 日記
          組み込み用で関数ポインタをテーブルにして、テーブルからどの関数呼ぶか決定ってのはやりました。
          親コメント
        • by CowardDuck (25674) on 2015年03月09日 0時48分 (#2774149)

          関数ポインタは関数ポインタであって、オブジェクト指向という言葉が
          流行る前から使われていた明瞭な機能だ。

          別にオブジェクト指向なんて言葉を導入する必要はない。

          親コメント
        • by Anonymous Coward

          関数ポインタを使うとオブジェクト指向なのですか?

          構造体メンバに関数持たせるとソースコードがクラスオブジェクトを
          使っているっぽい見た目になる、と言うのは解りますが。

          • by Anonymous Coward

            オブジェクト指向を低レベルで実現する方法の一つとして関数ポインタを使う方法があるという感じ。
            C++によるオブジェクト指向は関数ポインタによるオブジェクト指向で実現されるのが普通だしね。

            それがオブジェクト指向であるかどうかは、書いた奴がどういうパラダイムに基づいていたかの問題。
            オブジェクト指向を意識していたのならオブジェクト指向だろうし、そうでないならそうではない。どっちだろうね?

          • by Anonymous Coward

            構造体のメンバーに関数ポインタを使うと、
            継承やポリモーフィズムを使ったoopが出来るよ。
            c++では普通にclass宣言すればいいので
            関数ポインタをこの用途に使うのは見たことないな

    • by Anonymous Coward

      Linux上の開発を前提としているなら、Cの資産が多くあるので勉強するメリットはある。クロスプラットフォームという視点だと微妙かも。

      C++だと、QtがGUI以外の部分でも、移植性のあるコードが書けるので悪くない選択肢だと思う。(本家でも同じコメントがある)

      Objective-Cは、使ったことないから知らない。

    • by Anonymous Coward

      半分同意
      マクロとか使わんでもある程度以上は言語よりも書き方の問題だと思う

    • by Anonymous Coward

      OSを作るのならともかく、アプリケーションを作るのにC++よりもCが良いケースって、組み込みの一部ぐらいでは?

  • by Anonymous Coward on 2015年03月08日 20時36分 (#2774069)

    UE4のブループリントみたいなのでネイチヴアプリとかWeb画面作りたいんす

  • by Anonymous Coward on 2015年03月08日 21時03分 (#2774078)

    目的が決まっていれば手段もおのずと決まる。
    質問者が何をしたいのかが明確でないから何をアドバイスしても決定打にはならんだろう。

typodupeerror

「科学者は100%安全だと保証できないものは動かしてはならない」、科学者「えっ」、プログラマ「えっ」

読み込み中...