
クラシックでオブジェクト指向のコンパイラ型言語、おすすめは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のないヘッドレスアプリケーション)の容易さはそれぞれどの程度だろうか。
バズワード (スコア:2)
"object" みたいな抽象的な単語を含んだバズワードを
プログラミング言語の機能の説明に使うのはもう、やめるべきだ。
何とでも解釈できる言葉を分別なく、何にでも適用した
結果、生まれたのは混乱だけだ。
バズワードでは無い (スコア:1)
プログラミングは計算手順や計算対象を抽象化する作業です.
ですから,むしろ抽象的な単語や,抽象的な概念をつかうことに意味があります.
抽象化は,設計段階でも,実装段階でも必要になります
そして"object"単位で抽象化するのがオブジェクト指向です
"object"はバズワードではありません.混乱せず,ちゃんと理解しましょう :-)
Re:バズワードでは無い (スコア:1)
「単位」という言葉をつかうならば、その定義を示せば
いいのにそうしていない。
混乱しているのは、あなただよ。
Re:バズワードでは無い (スコア:1)
> オブジェクトという用語は常識的な人には共通理解があって、定義するようなものではないのです
> 共通理解が揺らいだときには「オブジェクトの本質とは」という議論が起きますが、結果としてまた共通理解に達し、定義はやはり不要なのです
新興宗教の独自用語についての問答だな。
Re:バズワードでは無い (スコア:1)
> ここで、無料の講座をやるのも微妙なんで、
何がどう微妙なの?
/.よりsStackOverflowで聞いたほうがいいんじゃないかなぁ (スコア:1)
コードを書く人たちばかりのところで聞いたほうがより現実に即した回答が得られると思う。
Re:/.よりsStackOverflowで聞いたほうがいいんじゃないかなぁ (スコア:1)
StackOverflowで議論はNGなので /. でいいと思う。
headless が ヘッドレスアプリケーションのタレコミを…… (スコア:1)
いや、何でもない。
これ、クロスプラットフォーム対応の言語フレームワークの質問だよなぁ。
本家のコメントどおり、Qtを採用してC++でいいと思う。実績もあるし。
Re:headless が ヘッドレスアプリケーションのタレコミを…… (スコア:1)
本題は「headless が ヘッドレスアプリケーションのタレコミをした」話です。
大事なことだから、2回言いました(ドヤァ)。
:
:
:
:
:
:
…・・・過去の話はともかく、「毛が生えたようなもの」というと、何かに「毛が生えたようなもの」ですが、
その「毛がない」ものが、hairlessアプリケーションだと思うのです。
ソフトウェアとは模倣に模倣を重ねた結果、モッサモサでフッサフサだったりモフモフしたり、
チクチクしたり、ちり毛っぽかったりする訳です。アプリケーション開発者はちり毛をはやし、
言語開発者はちり毛がボウボウになるのを食い止めようと、文法で毛を縛るわけです。
とはいえ、何もしないものはアプリケーションとは呼べない。何もしないアプリケーションは頭皮自体がないに等しい。
その中で、hairlessアプリケーションとは「毛がない」のですから、実に根源的なものです。
hairlessアプリケーションについて、こう色々と思い巡らせた結果、hairlessアプリケーションとは…・・・(ここで日記は終わってる)
その二択なら普通にC++じゃね? (スコア:0)
AppleがこれからもずっとObjective-Cを採用し続ける方に自分のキャリアを賭ける自信があるなら、話は別かも知れんが。
Re: (スコア:0)
プラットフォームを気にしてるくせにObjective-Cを選択肢に入れる意味がわからんよな
Re:その二択なら普通にC++じゃね? (スコア:2, おもしろおかしい)
元のタレコミは釣り(創作)でしょうね。
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ですよね
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ってコンパイラ型言語か? (スコア:2, 参考になる)
どっちのレスもよく分からない議論をしているように見える。
「コンパイラ型言語」なんて用語はないし、その定義はどう考えても曖昧。
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:Objective-Cってコンパイラ型言語か? (スコア:2)
たかが原稿用紙1枚分くらいで長文なの?
Cがいいぞ (スコア:0)
Cこそ至高。
マクロで言語を拡張してオブジェクト指向を取り入れるんだ
Re:Cがいいぞ (スコア:2)
> マクロで言語を拡張してオブジェクト指向を取り入れるんだ
そりゃ、C++ だ!!!
って突っ込んで欲しいのかな?
Re:Cがいいぞ (スコア:1)
X11というか、X toolkit(Xt)のことですか?
X Window System の最も基本なライブラリがXlib。Xのプロトコルに直結した描画機能だけを提供するレベルのライブラリで、ボタンなどの部品機能はないからXlibだけを使ってGUIを作るのは非常に手間がかかる。で、X11が最初期から標準で提供している「Xlib を使った GUIコンポーネントライブラリ」が Xt。
昔はXのアプリを書くならXtはほぼ必須でしたけど、今時GTK+もQtもXlibベースで作られてるので、そういう今時なX11アプリを作るぶんにはXtの出番はありません。
で、XtはC言語ベースでありながらもオブジェクト指向で作られてますが、データ(構造体)の取り扱いと関数体系がオブジェクト指向なだけです。言語仕様的にはC言語のままで特別なことは何もしてないので、Xtは「マクロで言語を拡張してオブジェクト指向を取り入れ」たものには該当しないでしょう。
Re:Cがいいぞ (スコア:1)
いや、話がずれてます。
Cこそ至高。マクロで言語を拡張してオブジェクト指向を取り入れるんだ [srad.jp]というコメントに対し、
X11のことでしょ [srad.jp]ってコメントが付いてたから、
Xtは純粋なC言語のライブラリであり「マクロで言語を拡張」なんかしてない、という突っ込みを入れたんです。
XtがC言語ベースでオブジェクト指向なライブラリであることに異存はありません。
Re:Cがいいぞ (スコア:1)
元コメントでは、Cのマクロでオブジェクト指向な言語拡張をしたらどうか、というネタが挙げられていますが
Xtはマクロで言語を拡張したものではないので、そのコメントに対する回答として不適切である、という話です。
マクロによる言語拡張ができるかどうか、
実際にそれをやっちゃった実例があるかどうか、
という点については何も言及していません。
Re:Cがいいぞ (スコア:1)
至高となればDelphiと言わねばならん。
今は知らんけど…
#本当は先代の…
Re:Cがいいぞ (スコア:1)
麿も意図的に誘導してるような気がします。
fpcはどうでしょう。
#とんとご無沙汰でしたが育っていますね
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が良いケースって、組み込みの一部ぐらいでは?
ビジュアルプログラミングマダ-? (スコア:0)
UE4のブループリントみたいなのでネイチヴアプリとかWeb画面作りたいんす
何がしたいんだか (スコア:0)
目的が決まっていれば手段もおのずと決まる。
質問者が何をしたいのかが明確でないから何をアドバイスしても決定打にはならんだろう。
Re:Javascriptでいい (スコア:1)
回答者のドヤ顔と裏腹に質問者が失望の苦笑を浮かべる姿が目に見えるようだ。
Re:その条件では、Lispでは? (スコア:1)
>現役で最古のプログラミング言語だし
FORTRAN は現役じゃないと……
Re:枯れた言語か (スコア:1)
X-codeのObjective-Cに複素数が無くて愕然とした。
the.ACount