> When it gets interesting is when different objects of different types interact, and have locking rules etc. And at that point, trying to encapsulate some "object interface" is absolutely the wrong thing, because it's not about a single object any more.
Linus氏の見解の日本語訳 (スコア:0)
taro-nishinoの日記: Linus氏のC++に対する最近の否定的見解
http://srad.jp/~taro-nishino/journal/509450/ [srad.jp]
Linus氏のC++否定論は、C++というよりも、オブジェクト思考言語全般に当てはまります。読まずに批判・評価する人は、まず読みましょう。
例えば、Linus氏はこういうことを言っています。
「良いコード設計は、いかにデータが移動するか、いかにデータを秩序立てるか、いかにデータを見つけ、他のデータと関連付けるか、について考えが次々と思い浮かぶ。
だが、OO言語は、オブジェクトが重要であり、オブジェクトに関連付けられたメソッドを持つべきだという手段を考える傾向にある。まさに馬鹿げた話だ。一つのオブジェクト(又は、ある型のオブジェクトの当り前なコレクション)が本当の関心事ではない。
関心すべきは、異なる型の異なるオブジェクトが相互作用し、ロッキングルールを持つ等々の時なのである。その時点で、重要なのは一つのオブジェクトではもうないのだから、"オブジェクトインターフェイス"を隠蔽しようとするのは絶対に間違っている。」
Re:Linus氏の見解の日本語訳 (スコア:1)
本来のオブジェクト指向のオブジェクトは、メッセージの送受信により処理を定義するものなので、プロセスやスレッドに近い。
オブジェクト=スレッドを明確にしたのが並列処理のアクターモデル。
大抵のオブジェクト指向言語のオブジェクトはメソッドが定義できる抽象データ型で、f(obj)をobj.f()として書けるシンタックスシュガーのようなものだから、
オブジェクト指向的な設計を行っても、メッセージ送信が関数呼び出しなので、手続き的に密結合になって、並列処理との相性が良くない。
Re:Linus氏の見解の日本語訳 (スコア:2)
この「本来のオブジェクト指向」というのと
「大抵のオブジェクト指向言語」がどうこうという
話が発生して今宇野は「object」という言葉が
解釈の幅の広い単語であるのが原因。
それぞれ別に適当な用語を使って説明して
スッキリさせたほうがいい。
Re:Linus氏の見解の日本語訳 (スコア:2)
× 発生して今宇野は
○ 発生してしまうのは
失礼しました。
Re: (スコア:0)
でもオブジェクト指向信者は「オブジェクト」の定義は自明であり不要って言ってたよ
Re:Linus氏の見解の日本語訳 (スコア:1)
リーナスにしろ、ストールマンにしろ、なんでこう攻撃的で過激なことを言っちゃうんだろう。
コンピュータの自由を守るためには、これくらいの攻撃性は必要なのだろうか?
Re: (スコア:0)
リーナス&c++については「linuxでc++を」的なリクエストを散々聞かされたからとかじゃね?
Re: (スコア:0)
この世界じゃ普通でしょ。信者同士の争いとかで皆過激な発言するじゃない。
カリスマ的存在だって例外じゃないって事だよ。
Re: (スコア:0)
ストールマンは本質的には伝道家だから、教義にちょっとでも外れるものは猛攻撃する。リーナスは、単に言いたいことをオブラートに包むのがめんどくさいんだろう。
Re: (スコア:0)
>"オブジェクトインターフェイス"を隠蔽
これは何を言いたいのかさっぱりわからん。
インターフェイスは隠蔽すべきでないし、むしろ積極的に明確にするのが普通。隠蔽すべきは、実装などの詳細部分。
Re:Linus氏の見解の日本語訳 (スコア:2)
> インターフェイスは隠蔽すべきでないし、
Linus の言っている "オブジェクトインターフェイス" というのは
オブジェクト指向プログラミング言語なるものが
オブジェクトなるものを扱うためのメモリ管理機構等に
対するインターフェースのことでしょ。
で、"隠蔽" というのはオブジェクト指向プログラミング言語では、
こういった管理機構が暗黙のうちに機能するように言語仕様が
設計されていることをいってんだろうと思う。
Re: (スコア:0)
言ってることが逆だよね。
OOはオブジェクトそのものが重要ではなく、インターフェースやオブジェクト同士の関係が重要となっている。
OO (正確にはADT)より前は、データの中身やその表現方法などが重要だった。というか、インターフェースなどの上位層とその層を明確に分離できてなかった。
Re:Linus氏の見解の日本語訳 (スコア:1)
リファクタリングの話のときにもあったけど、
Cだと
をオブジェクト志向だと、
にするのが気に入らないってことでしょ。コンパイラにとってはともかく、カプセル化することによって、わかったようなわからないような感じになる。
Re: (スコア:0)
並列プログラミング時代に重要なのはデッドロックを防ぐためのロッキングルール(AB-BAデッドロックを防ぐためのロック階層)を正しく保つことにあります。
オブジェクト指向の問題は、振る舞いの隠蔽によってロッキングルールの守られているかが見えにくくなっていくことにあります。
Re: (スコア:0)
とても良くわかる解説ありがとう。
そういう手続き的な何かをOO的な何かに入れ込んで保証しまおうとすると
偉い大変でむちゃくちゃになるというのはわかる。
それをOOの人は適切に判断できないということかな。
Re: (スコア:0)
つ鏡
Re: (スコア:0)
そりゃ、西野さんの言う通り、(Linusさんと比べるなら特に)ここで書き込みしてる人なんて雑魚もいいとこでしょう。あなたも、私も。
その雑魚レベルの人間が、「私見では、ここまででまともなコメントは(私自身のを除けば)これ一つしかありません」なんて「さも一流家のように振舞」ってるのは言っちゃ悪いけど滑稽ですよ…。
Re: (スコア:0)
Linusさんレベルの実績がある人と話をしたいなら、スラドみたいな場所を覗くのはやめましょうよ。
特にACは実績以前に匿名ですから、経験や熟慮に欠けるコメントをしても個人の能力を責められることはないですからね。
結果的に、ごく少数の見識あるAC以外はスルーするしかない。
親コメ [developers.srad.jp]は、興味深く拝見させて頂きましたが、システムプログラミングの経験、C/C++の実務経験がないと理解が難しい内容ですね。そういう経験のある人は少数でしょうし、ざっと見た感じ(Linusさんは丁寧に説明しているものの)どうしてそういう主張になるのか分からず困惑するようなコメントが大半で
Re: (スコア:0)
人々を罵倒するLinusさんの攻撃性に憧れて自己同一化しちゃって、
あたかも自分が人々をやっつけられているような気になってるから、
(英語を読むことで一線を画し見下したはずの)凡百の日本人が
Linusさんに日本語で意見を言ってるのを見ると許せないわけでしょ。
Re: (スコア:0)
私は雑魚ですがlinusの発言の原文をすべて読みましたので、読んでいない雑魚以下の人たちを侮蔑することができます
Re: (スコア:0)
何も考えずに尻馬に乗るしかできない奴が、未熟かもしれないが自分で考えてるやつを侮蔑・・・?
自分で考えてない奴が「まとも」ってそれはねーわ。
Re: (スコア:0)
あなたたちがカスみたいな人間なのはあなたたち自身の問題であって、誰に指摘されるのかは関係ありません
なぜ読まずに考えるのですか
読まずに考えてまともな結論が出ると思っているのですか
原文を読む能力がないのを恥じて、それゆえ読む必要がないと思いたいのですか
それのどちらが愚かなことかすらわからなくなっているのですか
Re: (スコア:0)
この記事ではlinusは目新しいことを言っているわけではないので、主張の内容よりも「実績のある人間の知見」が価値になります
ですから批判するのならちゃんと読んで文脈を理解してその上でおこなわないといけませんし(批判が間違っていても的外れでなければよい)、
そうしないで勝手なことを言うから雑魚以下呼ばわりされるのです
Re: (スコア:0)
Linus氏のような巨人が何故このようなフォーラムに乗込んで、氏から見れば雑魚を相手にするのか
Linus氏の読めない日本語でこういうことを書くのは卑怯なんじゃなかったの?
しかしこの人、英語のフォーラムを読んだ程度のことに随分と選民意識を持ったもんだなあ。普通に読むよ、そのくらい。
Re: (スコア:0)
同意です。技術的議論に感情論を持ち出したり、浅はかな知識を持ち出す人が多すぎです。
並列プログラミングは未だに一般化していないということでしょうかねぇ。
Re: (スコア:0)
技術レベルは様々な場で適当に声を上げたら、そりゃ適当な応答を返す人が大勢いるでしょうよ。
全員がその道のエキスパートなんてことはない。
並列プログラミングなんて分かっているけど、感情論でコメントする人の相手をなんてしているから、
議論に値しないレベルのまま失速する羽目になる。そんな議論に割って入るのは不毛です。
このスレッドにIDの書き込みが少ないのは、そういうことだと思います。
Re: (スコア:0)
> When it gets interesting is when different objects of
different types interact, and have locking rules etc. And
at that point, trying to encapsulate some "object interface"
is absolutely the wrong thing, because it's not about a
single object any more.
「オブジェクトインターフェイス」"を"ではなく、"に""へ""で"隠蔽といったところでしょう
Re: (スコア:0)
どこに付けるか迷いましたけど
Linus氏のいう所のオブジェクトは(C++は詳しくないので)Javaでいう所のインスタンスの事です、多分。
Cより粒度の荒い中途半端なクラスしか作れないくせに、メモリ上で直接操作できないようになっている、
そして言語仕様でクラスやその他の構文によって意味的には記述できても機能的にはよく分からない事をしている。
だからシステム記述言語としては相応しくないと。
それ以外の事に使うのならVM系言語である機能が無いのでCもどきであるC++である必要は無いので有り得ない。
という話だと思われます。
Re: (スコア:0)
>Cより粒度の荒い中途半端なクラスしか作れないくせに、メモリ上で直接操作できないようになっている、
どういうこと?
Re: (スコア:0)
クラスやテンプレート、継承の構成をバイナリレベル(ポインタ)で弄る事が出来なくて言語仕様化してるとこ
クラス内の関数や変数のアドレスを置き換えるって多分出来ないですよね
日本語訳を見るとオブジェクト指向が悪いというよりは全てを実装出来ていない中途半端なオブジェクト指向で
結局は規定のクラス群の組み合わせだから、何でも出来るC言語でいいだろという主張に見て取れる
その方が分かり易く問題も少ないという話だと
Re: (スコア:0)
いくらでもちゃぶ台返しが出来る終身独裁官ならC言語でしょうけれど、
せいぜい、ほぼなにも覆せない十人隊長にくっついていた人間にしてみると
オブジェクト指向の方が好ましく見える。
「上に政策あれば、下に対策あり」なだけで、いいんじゃないですかね?
Re: (スコア:0)
だからC++である必要は無いよねって話だと
Re: (スコア:0)
あらゆる分野でC++が無用って言ってるぽいよ
Re: (スコア:0)
ああ、すみません。
>(C++は詳しくないので)
元コメのここ読み落としてました。
納得しました。
Re: (スコア:0)
どう納得したのか聞きたいですね
Re: (スコア:0)
C++を知らないのに想像で書いてるからトンチンカンな事になってるんだなと。
関数置き換えもテンプレートや継承使ったクラスのメモリを直接操作も出来るよ
学べば解ることなのに想像で語っちゃうぐらいC++に興味無いだろうからここで詳細な解説は無意味だからしないけど
Re: (スコア:0)
class a{
int a;
void b(){};
}
とあった場合に
a c;
c.b=関数のポインタという感じで置き換えられるの??
Re: (スコア:0)
classはデフォルトprivateだからそういう風にアクセスできないというのをおいておいたらstd::function使えば
Re: (スコア:0)
確かに便利だけど、逆に言えばそれ以外の場合は制限されているという事
多分全てを実装できないと嫌だとLinus氏は主張してるんではないかと
マシン語使うなら処理系依存は出来るだけ少ない方がいい
増やすならVM系やスクリプトなどマシン語と非互換なものを使えと
Re: (スコア:0)
>「良いコード設計は、いかにデータが移動するか、いかにデータを秩序立てるか、いかにデータを見つけ、他のデータと関連付けるか、について考えが次々と思い浮かぶ。
これが、作った人にしか思い浮かばないから、OOPを使うんだと思うけどな。
Re: (スコア:0)
Linusの主張はむしろこれと同じ
http://local.joelonsoftware.com/wiki/%E9%96%93%E9%81%95%E3%81%A3%E3%81... [joelonsoftware.com]
Linusは実行パスがわからなくなるからポリモーフィズムが嫌いで、しかもオブジェクト指向はロックのように何か一つに責任を押し付けられないような場面では役に立たないと言ってる
ただしあくまでシステムプログラミング上での話で、ほかのコメントではgoに興味をお持ちの様子
Re: (スコア:0)
元コメのリンク先の翻訳を見ると、最後の方ではCによるポリモーフィズムも可能だしやっている(ただし醜い)と書いている。
というか全体的にポリモーフィズムやOOPじゃなくて暗黙のあれこれが嫌い(というかカーネルでは有害)と言ってる感じだね。
カーネルとか低レベルのあれこれ触るならCとアセンブリ言語の組み合わせが無難って考え方はよく分かる。
それ以外のケースではGCと並列性サポートが大事だと考えているようだけど、
C++では十分なサポートがされてないから中途半端で価値がないという考え方らしい。
その辺が十分サポートされていそうであれば新言語はなんだっていいのかもしれない。
それ以外はちょっと頑なに嫌いすぎてる感があるが…カーネルでC++採用を求める意見が多くて嫌になったんかな。
糖衣構文だのOOPの為の機能だのは本質ではないから不要云々言ってるけど労力減らしてるのは確かだし、
醜いとか言いつつGCC拡張という形でその手の拡張は受け入れているんだから。ダブスタというかなんというか。