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

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

ストーリー 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" みたいな抽象的な単語を含んだバズワードを
    プログラミング言語の機能の説明に使うのはもう、やめるべきだ。

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

    ここに返信
    • プログラミングは計算手順や計算対象を抽象化する作業です.
      ですから,むしろ抽象的な単語や,抽象的な概念をつかうことに意味があります.

      抽象化は,設計段階でも,実装段階でも必要になります
      そして"object"単位で抽象化するのがオブジェクト指向です

      "object"はバズワードではありません.混乱せず,ちゃんと理解しましょう :-)

      • 「単位」という言葉をつかうならば、その定義を示せば
        いいのにそうしていない。

        混乱しているのは、あなただよ。

        • by Anonymous Coward

          オブジェクトという用語は常識的な人には共通理解があって、定義するようなものではないのです
          共通理解が揺らいだときには「オブジェクトの本質とは」という議論が起きますが、結果としてまた共通理解に達し、定義はやはり不要なのです
          つまり定義厨は社会性や常識に欠けているというだけですね

          • > オブジェクトという用語は常識的な人には共通理解があって、定義するようなものではないのです
            > 共通理解が揺らいだときには「オブジェクトの本質とは」という議論が起きますが、結果としてまた共通理解に達し、定義はやはり不要なのです

            新興宗教の独自用語についての問答だな。

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

    ここに返信
    • by Anonymous Coward

      StackOverflowで議論はNGなので /. でいいと思う。

      • by Anonymous Coward

        そうそう、ライセンスの話もオフトピックで強制クローズされてた。
        意外と知られてないけど。

  • いや、何でもない。

    これ、クロスプラットフォーム対応の言語フレームワークの質問だよなぁ。
    本家のコメントどおり、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

      Smalltalkのオブジェクト指向はGUI部品定義構文
      C++のオブジェクト指向はプリミティブ型定義構文

  • 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

          コンパイラ型言語の定義がないのは、そんなものを定義しても床屋談義以外には誰も何の得もしないからです

  • 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

        あんた同僚が書いた酷いC++のコードに苦しめられたことがないだろ

        • by Anonymous Coward

          その同僚がCで書いていれば苦しまずに済んだか?
          その同僚にリソース管理や文字列処理をCで書かせて大丈夫なのか?クラスを使えない言語を人が読めるように書けるのか?

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

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

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

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

    ここに返信
  • by Anonymous Coward on 2015年03月09日 0時30分 (#2774142)

    2015年現時点でC++かObject Cと言っている時点でほぼ時代遅れ。
    ほぼほぼすべてクロスプラットフォームで行けてしまうJavascriptをnodeやcordovaや他のフレームワークも含めて
    勉強するのが今現時点で一番正しいと思う。

    ここに返信
  • by Anonymous Coward on 2015年03月09日 0時44分 (#2774147)
    現役で最古のプログラミング言語だし、CLOSつかえばオブジェクト指向だし、関数はコンパイルできるし。
    ここに返信
typodupeerror

ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家

読み込み中...