クラシックでオブジェクト指向のコンパイラ型言語、おすすめは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のないヘッドレスアプリケーション)の容易さはそれぞれどの程度だろうか。
バズワード (スコア:2)
"object" みたいな抽象的な単語を含んだバズワードを
プログラミング言語の機能の説明に使うのはもう、やめるべきだ。
何とでも解釈できる言葉を分別なく、何にでも適用した
結果、生まれたのは混乱だけだ。
バズワードでは無い (スコア:1)
プログラミングは計算手順や計算対象を抽象化する作業です.
ですから,むしろ抽象的な単語や,抽象的な概念をつかうことに意味があります.
抽象化は,設計段階でも,実装段階でも必要になります
そして"object"単位で抽象化するのがオブジェクト指向です
"object"はバズワードではありません.混乱せず,ちゃんと理解しましょう :-)
Re:バズワードでは無い (スコア:1)
「単位」という言葉をつかうならば、その定義を示せば
いいのにそうしていない。
混乱しているのは、あなただよ。
Re: (スコア:0)
オブジェクトという用語は常識的な人には共通理解があって、定義するようなものではないのです
共通理解が揺らいだときには「オブジェクトの本質とは」という議論が起きますが、結果としてまた共通理解に達し、定義はやはり不要なのです
つまり定義厨は社会性や常識に欠けているというだけですね
Re:バズワードでは無い (スコア:1)
> オブジェクトという用語は常識的な人には共通理解があって、定義するようなものではないのです
> 共通理解が揺らいだときには「オブジェクトの本質とは」という議論が起きますが、結果としてまた共通理解に達し、定義はやはり不要なのです
新興宗教の独自用語についての問答だな。
Re:バズワードでは無い (スコア:1)
> ここで、無料の講座をやるのも微妙なんで、
何がどう微妙なの?
/.よりsStackOverflowで聞いたほうがいいんじゃないかなぁ (スコア:1)
コードを書く人たちばかりのところで聞いたほうがより現実に即した回答が得られると思う。
Re: (スコア:0)
StackOverflowで議論はNGなので /. でいいと思う。
Re: (スコア:0)
そうそう、ライセンスの話もオフトピックで強制クローズされてた。
意外と知られてないけど。
headless が ヘッドレスアプリケーションのタレコミを…… (スコア:1)
いや、何でもない。
これ、クロスプラットフォーム対応の言語フレームワークの質問だよなぁ。
本家のコメントどおり、Qtを採用してC++でいいと思う。実績もあるし。
本当の三日坊主とは、それが苦痛すぎて三日で髪の毛がすべて抜け落ちた者のことを言う。
その二択なら普通にC++じゃね? (スコア:0)
AppleがこれからもずっとObjective-Cを採用し続ける方に自分のキャリアを賭ける自信があるなら、話は別かも知れんが。
Re: (スコア:0)
プラットフォームを気にしてるくせにObjective-Cを選択肢に入れる意味がわからんよな
Re:その二択なら普通にC++じゃね? (スコア:1)
元のタレコミは釣り(創作)でしょうね。
90年台から悩んでるっていうのでもうなんか呆れたよ。
Re:その二択なら普通にC++じゃね? (スコア:1)
これは誤解。
90年代から悩んでるわけではなく、90年代にはすでにある言語を選びたい(つまり、新しすぎるのはいらない)、という意味。
もっとも、そのこだわりに何の意味があるかはわかりませんが。
Re: (スコア:0)
元のタレコミは釣り(創作)でしょうね。
90年台から悩んでるっていうのでもうなんか呆れたよ。
完璧に同感。
休日に垂れ込まれるAsk Slashdotってこんなのばっかり。
盛り上げたいのにスベってる感。
Re: (スコア:0)
> 私はx86 Linux上で始めたいと思っているが、メインの開発プラットフォームとして使用することにもなる。他の言語を数多く知っているというわけではないが、FOSSとの結びつきが強く、広く使われているコンパイラ型言語を身に着けたい
この条件じゃどう考えてもC++だよね
背中を押して欲しいだけなんじゃないだろうか
Re: (スコア:0)
微妙に使いにくいというか古臭い設計のObjective-Cを使うくらいなら同じように古臭いところがあるC++のほうがいいや
どっちでもいいよ (スコア:0)
どうせ次はgccとClangどっちがいい?とか
EclipseとIntellij IDEAとVisual StudioとXcodeはどれが最強?とか
SVNかGitかMercurialかVSSか?とか、果ては{}は省くか省かないかなんてことまで、
いくらでも悩むネタは転がってるんだからな。
さっさと始めとけば、そんなのはどれを選んだって
大した違いがない問題だって気づくはずだってのに。
オブジェクト指向って何? (スコア:0)
そもそもオブジェクト指向の明確な定義はあるのか?
Re: (スコア:0)
無い
Re: (スコア:0)
あるよ
その言語の作者がこの言語はオブジェクト指向だと言い張ればその言語はオブジェクト指向だよ
Re: (スコア:0)
オブジェクト指向言語だったら、それはSmalltalkですよね
Re: (スコア:0)
Smalltalkのオブジェクト指向はGUI部品定義構文
C++のオブジェクト指向はプリミティブ型定義構文
Objective-Cってコンパイラ型言語か? (スコア:0)
Javaは JITもあるけどコンパイラ型言語か?
というのと同じレベルで
Objective-Cってコンパイラ型言語だろうか?
一部の動的なポリモルフィズムって、コンパイラではなくランタイムじゃなかったっけ?
Objective-CってC++とJavaの中間という認識なんだけど・・・
Re:Objective-Cってコンパイラ型言語か? (スコア:2)
Re:Objective-Cってコンパイラ型言語か? (スコア:2)
Re: (スコア:0)
Javaのソースをバイトコードに変換するのがコンパイルじゃなかったら何なの?
Javaは問われるまでもなくコンパイラ型言語でしょ…。
それと同じレベルの疑問って言われたら、「お前が定義して答えを決めろ」と答えるしかない。
Re:Objective-Cってコンパイラ型言語か? (スコア:1)
どっちのレスもよく分からない議論をしているように見える。
「コンパイラ型言語」なんて用語はないし、その定義はどう考えても曖昧。
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 トランスレータ) を思い浮かべたんだけども‥‥。
誰も求めてませんね、はい。
Re: (スコア:0)
そんな難しく考えずに、実行時に”手動で”コンパイルする必要があるかどうかっていいんじゃね?
もしくは、型チェックがあるかどうか(コンパイル時に)とか
バグがあった時に、ソースの該当箇所を教えてくれるとか
ちなみに、PHPだって今では内部ではJITで中間言語にコンパイルしてから実行してたと思うけど、コンパイラ型言語っては言わないかなw
Re: (スコア:0)
コンパイラ型言語の定義がないのは、そんなものを定義しても床屋談義以外には誰も何の得もしないからです
Re:Objective-Cってコンパイラ型言語か? (スコア:2)
たかが原稿用紙1枚分くらいで長文なの?
Cがいいぞ (スコア:0)
Cこそ至高。
マクロで言語を拡張してオブジェクト指向を取り入れるんだ
Re:Cがいいぞ (スコア:2)
> マクロで言語を拡張してオブジェクト指向を取り入れるんだ
そりゃ、C++ だ!!!
って突っ込んで欲しいのかな?
Re:Cがいいぞ (スコア:1)
至高となればDelphiと言わねばならん。
今は知らんけど…
#本当は先代の…
Re: (スコア:0)
> Cこそ至高。
同感です。
> マクロで言語を拡張してオブジェクト指向を取り入れるんだ
GUI部分のプログラミングがいらないなら、オブジェクト指向はいらないと思います。
Re: (スコア:0)
Linuxカーネルのソースでも読んでみるといいのでは?関数ポインタをガリガリ使ってオブジェクト指向を取り入れていますよ。
Re:Cがいいぞ (スコア:2)
Re:Cがいいぞ (スコア:2)
関数ポインタは関数ポインタであって、オブジェクト指向という言葉が
流行る前から使われていた明瞭な機能だ。
別にオブジェクト指向なんて言葉を導入する必要はない。
Re: (スコア:0)
関数ポインタを使うとオブジェクト指向なのですか?
構造体メンバに関数持たせるとソースコードがクラスオブジェクトを
使っているっぽい見た目になる、と言うのは解りますが。
Re: (スコア:0)
オブジェクト指向を低レベルで実現する方法の一つとして関数ポインタを使う方法があるという感じ。
C++によるオブジェクト指向は関数ポインタによるオブジェクト指向で実現されるのが普通だしね。
それがオブジェクト指向であるかどうかは、書いた奴がどういうパラダイムに基づいていたかの問題。
オブジェクト指向を意識していたのならオブジェクト指向だろうし、そうでないならそうではない。どっちだろうね?
Re: (スコア:0)
構造体のメンバーに関数ポインタを使うと、
継承やポリモーフィズムを使ったoopが出来るよ。
c++では普通にclass宣言すればいいので
関数ポインタをこの用途に使うのは見たことないな
Re: (スコア:0)
Linux上の開発を前提としているなら、Cの資産が多くあるので勉強するメリットはある。クロスプラットフォームという視点だと微妙かも。
C++だと、QtがGUI以外の部分でも、移植性のあるコードが書けるので悪くない選択肢だと思う。(本家でも同じコメントがある)
Objective-Cは、使ったことないから知らない。
Re: (スコア:0)
半分同意
マクロとか使わんでもある程度以上は言語よりも書き方の問題だと思う
Re: (スコア:0)
OSを作るのならともかく、アプリケーションを作るのにC++よりもCが良いケースって、組み込みの一部ぐらいでは?
Re: (スコア:0)
あんた同僚が書いた酷いC++のコードに苦しめられたことがないだろ
Re: (スコア:0)
その同僚がCで書いていれば苦しまずに済んだか?
その同僚にリソース管理や文字列処理をCで書かせて大丈夫なのか?クラスを使えない言語を人が読めるように書けるのか?
ビジュアルプログラミングマダ-? (スコア:0)
UE4のブループリントみたいなのでネイチヴアプリとかWeb画面作りたいんす
何がしたいんだか (スコア:0)
目的が決まっていれば手段もおのずと決まる。
質問者が何をしたいのかが明確でないから何をアドバイスしても決定打にはならんだろう。
Javascriptでいい (スコア:0)
2015年現時点でC++かObject Cと言っている時点でほぼ時代遅れ。
ほぼほぼすべてクロスプラットフォームで行けてしまうJavascriptをnodeやcordovaや他のフレームワークも含めて
勉強するのが今現時点で一番正しいと思う。
その条件では、Lispでは? (スコア:0)