前スレ
http://pc11.2ch.net/test/read.cgi/tech/1201567967/
探検
【肥大化】C++ を見捨てたヤシ 2人目【複雑化】
■ このスレッドは過去ログ倉庫に格納されています
2008/05/17(土) 21:07:51
331デフォルトの名無しさん
2008/06/08(日) 03:40:19 >>315
アンサガと違ってコレクターはいない。
アンサガと違ってコレクターはいない。
332デフォルトの名無しさん
2008/06/08(日) 05:20:31 俺はC++と心中するぜ
あばよ、達者でな
あばよ、達者でな
333デフォルトの名無しさん
2008/06/08(日) 05:33:57 無茶しやがって…
334デフォルトの名無しさん
2008/06/08(日) 10:25:10 >>330
大丈夫、まだC++0Aから0Fまで(ry
大丈夫、まだC++0Aから0Fまで(ry
335デフォルトの名無しさん
2008/06/08(日) 10:31:10 日本が独自に拡張を行ったC++平成がリリース
336デフォルトの名無しさん
2008/06/08(日) 14:04:35 EC++の再来か
337デフォルトの名無しさん
2008/06/13(金) 00:02:48338デフォルトの名無しさん
2008/06/13(金) 00:29:19 ほほう、面白いな。
でも、あまり古いコンパイラに束縛されるのも考え物だな。この辺は臨機応変かな。
でも、あまり古いコンパイラに束縛されるのも考え物だな。この辺は臨機応変かな。
339デフォルトの名無しさん
2008/06/13(金) 10:51:15 >>337
C++大好き派なんだけど、こういうのが逆に一番効くな(´Д`;)
これをもって、「こんなに制限されるなら、
初めからCで書いた方が良くね」って言われたら中々反論し難い・・・。
俺がC++の開発でいつもおかしいと思ってるんだけど、
何でC++ソースからネイティブバイナリに一気に変換するんだろうか・・・。
cfrontは例外が実装(Cのソースで妥当なオーバヘッドで)出来なくて
逝ったらしいけど、各プラットフォームのコンパイラが、
例外に対応した C+0.1 くらいの中間言語を用意すれば、
開発者PC上で C+0.1 までは変換しておける。
そうすればnamespace、テンプレート、実行時型情報、inline最適化などは、
開発者PC上のコンパイラ側の問題になる。
役割分担せずにフルスペックでやろうとするから、
こんなアホな状況になったと思うんだよな〜。
C++大好き派なんだけど、こういうのが逆に一番効くな(´Д`;)
これをもって、「こんなに制限されるなら、
初めからCで書いた方が良くね」って言われたら中々反論し難い・・・。
俺がC++の開発でいつもおかしいと思ってるんだけど、
何でC++ソースからネイティブバイナリに一気に変換するんだろうか・・・。
cfrontは例外が実装(Cのソースで妥当なオーバヘッドで)出来なくて
逝ったらしいけど、各プラットフォームのコンパイラが、
例外に対応した C+0.1 くらいの中間言語を用意すれば、
開発者PC上で C+0.1 までは変換しておける。
そうすればnamespace、テンプレート、実行時型情報、inline最適化などは、
開発者PC上のコンパイラ側の問題になる。
役割分担せずにフルスペックでやろうとするから、
こんなアホな状況になったと思うんだよな〜。
340デフォルトの名無しさん
2008/06/13(金) 11:09:03 表現が変だったので訂正。
各プラットフォーム用のフルスペックのC++コンパイラを用意せずに、
C+0.1 くらいの中間言語(禿げ達で策定)のコンパイラだけ用意すれば良い。
ってことね。
各プラットフォーム用のフルスペックのC++コンパイラを用意せずに、
C+0.1 くらいの中間言語(禿げ達で策定)のコンパイラだけ用意すれば良い。
ってことね。
341デフォルトの名無しさん
2008/06/13(金) 11:12:09 C++の実行形式作成には、
linkerもC++対応が必要なことは理解できてる?
あまりよく知らないcfrontの話は混ぜないで考えた方がいいよ。
linkerもC++対応が必要なことは理解できてる?
あまりよく知らないcfrontの話は混ぜないで考えた方がいいよ。
342デフォルトの名無しさん
2008/06/13(金) 11:18:34 具体的にどんなの?
名前マングリングとかの話なら、
必要最小限を中間言語で扱えばいいし。
リンカも含めても良いけど、
フルスペック実装しようとするのが間違いって俺は言ってる。
名前マングリングとかの話なら、
必要最小限を中間言語で扱えばいいし。
リンカも含めても良いけど、
フルスペック実装しようとするのが間違いって俺は言ってる。
343デフォルトの名無しさん
2008/06/13(金) 11:19:39 教えて貰う態度じゃないw
344デフォルトの名無しさん
2008/06/13(金) 11:27:41345デフォルトの名無しさん
2008/06/13(金) 11:54:40 マングルはリンカのC++協力必要ないだろ。
そのためにフラットな名前にマッピングしてるんだから。
そのためにフラットな名前にマッピングしてるんだから。
346デフォルトの名無しさん
2008/06/13(金) 20:04:02 C++に必要だったのはCのリンカやコンパイラ資産を使えること、
だから今言ってもしょうがない。
中間言語に変換するコストだって20年前なら馬鹿にならなかっただろうし、
そんな言語をもう一つ作るような手間のかかることしてたらISO規格になれず
マイナー言語で終わっていただろう(と言うような事をD&Eでは繰り返し述べている)。
つーか結局の所それなんてC++/CLI?ってことになるんじゃ。
だから今言ってもしょうがない。
中間言語に変換するコストだって20年前なら馬鹿にならなかっただろうし、
そんな言語をもう一つ作るような手間のかかることしてたらISO規格になれず
マイナー言語で終わっていただろう(と言うような事をD&Eでは繰り返し述べている)。
つーか結局の所それなんてC++/CLI?ってことになるんじゃ。
347デフォルトの名無しさん
2008/06/13(金) 21:09:13 >>346
流石に斜め読みし過ぎです・・・。
最初のC++コンパイラcfrontにとって
実質C言語を中間言語とするものだった。
でも例外を実装しようとしたとき、
スタック巻き戻しなどがC言語の表現では出来なかった。
(コスト度外視すればもちろん出来るけど)
そこで、直接ネイティブコードを作ることで
問題を解決したんだけど、
その方法でなく、C言語に必要最小限の拡張を加えたものを
「cfrontのために」用意する方法でも良かったんじゃないかと。
そうすればマイナーな環境において、
「完全なC++コンパイラ」を用意しなくても、
「ちょっと拡張されたCコンパイラ」を用意するだけで
済んだのでは、という話。
今何か言った所で現実が変わることは無いってのは
分かってるけどね。
あと、D&Eで書かれてたのは、
あの時代に理想の言語を作ろうとしてたら、の話だよね。
C++/CLIは現実主義ベースだと思うけど。
流石に斜め読みし過ぎです・・・。
最初のC++コンパイラcfrontにとって
実質C言語を中間言語とするものだった。
でも例外を実装しようとしたとき、
スタック巻き戻しなどがC言語の表現では出来なかった。
(コスト度外視すればもちろん出来るけど)
そこで、直接ネイティブコードを作ることで
問題を解決したんだけど、
その方法でなく、C言語に必要最小限の拡張を加えたものを
「cfrontのために」用意する方法でも良かったんじゃないかと。
そうすればマイナーな環境において、
「完全なC++コンパイラ」を用意しなくても、
「ちょっと拡張されたCコンパイラ」を用意するだけで
済んだのでは、という話。
今何か言った所で現実が変わることは無いってのは
分かってるけどね。
あと、D&Eで書かれてたのは、
あの時代に理想の言語を作ろうとしてたら、の話だよね。
C++/CLIは現実主義ベースだと思うけど。
348デフォルトの名無しさん
2008/06/13(金) 21:14:29 LLVM の C++ は一旦 C にコンパイル出来るみたいね
ストラウストラップには無理でも他の人間がやれば出来る
ストラウストラップには無理でも他の人間がやれば出来る
349デフォルトの名無しさん
2008/06/13(金) 21:22:32350デフォルトの名無しさん
2008/06/13(金) 21:23:11 何言ってんの?
351デフォルトの名無しさん
2008/06/13(金) 21:33:11 試したことないから、まるで実用にならないの知らないみたい。
352デフォルトの名無しさん
2008/06/13(金) 21:35:16 何言ってんの?
353347
2008/06/13(金) 22:02:14354デフォルトの名無しさん
2008/06/13(金) 22:21:24 >>351
専ブラどれ使ってるの?
専ブラどれ使ってるの?
355デフォルトの名無しさん
2008/06/13(金) 22:40:15356デフォルトの名無しさん
2008/06/13(金) 22:57:45 そういう話じゃないだろ
357デフォルトの名無しさん
2008/06/13(金) 23:05:30 例外を有効にすると壊滅的に遅いからデフォールトはオフ。> LLVM
巻き戻しポイントで常にsetjmp。
巻き戻しポイントで常にsetjmp。
358デフォルトの名無しさん
2008/06/13(金) 23:17:17359デフォルトの名無しさん
2008/06/13(金) 23:26:10 ちょっと疑問に思ったんだが、最初C++はCのトランスレータとして
誕生したよな。
そんで例外処理がCだけでは記述不可能なのでネイティブコン
パイラが作られたと聞いてるんだが、LLVMは例外処理をどのように
吐き出してるの?
誕生したよな。
そんで例外処理がCだけでは記述不可能なのでネイティブコン
パイラが作られたと聞いてるんだが、LLVMは例外処理をどのように
吐き出してるの?
360デフォルトの名無しさん
2008/06/13(金) 23:30:41361デフォルトの名無しさん
2008/06/13(金) 23:47:48362デフォルトの名無しさん
2008/06/14(土) 07:05:24 LLVMのC backendは、
Cへのトランスレータだけだった頃のcfrontと同じリンク時の問題抱えているよ。
LLVMは言語独自の機能のロードタイムサポート持ってるんだけど、
ネイティブコンパイラはcrt0.sなんかも使ってかなりトリッキーな事してるから。
しかしこの話題はスレ違いではw
Cへのトランスレータだけだった頃のcfrontと同じリンク時の問題抱えているよ。
LLVMは言語独自の機能のロードタイムサポート持ってるんだけど、
ネイティブコンパイラはcrt0.sなんかも使ってかなりトリッキーな事してるから。
しかしこの話題はスレ違いではw
363デフォルトの名無しさん
2008/06/14(土) 09:17:14 そんなに面倒という話を聞くと、Windowsが例外処理を直接提供するというのも頷ける。
364デフォルトの名無しさん
2008/06/14(土) 09:48:29 ネイティブ・コンパイラや
例外の機能を持っているC--を中間言語に使うなら何も問題ない。
例外の機能を持っているC--を中間言語に使うなら何も問題ない。
365デフォルトの名無しさん
2008/06/14(土) 11:04:32 デクリメントかよw
366デフォルトの名無しさん
2008/06/14(土) 11:20:59367デフォルトの名無しさん
2008/06/14(土) 20:48:15 環境に応じて言語が拡張していくものはすきじゃないな。
368デフォルトの名無しさん
2008/06/14(土) 21:22:57 環境って?
いや、言語が拡張ってことは、
所謂OSとか処理系とかのこととは違うのかなって思って。
いや、言語が拡張ってことは、
所謂OSとか処理系とかのこととは違うのかなって思って。
369デフォルトの名無しさん
2008/06/14(土) 21:31:32 >>367
環境に応じて拡張されるのはライブラリで、言語仕様は変更しない。C++はマジでそれを実践している。
文字列のクラスを例にすると、メモリが潤沢な環境ではstd::stringを使い、メモリの少ない組み込みでは社内ライブラリの文字列クラスを使うなど選択できる。
環境に応じて拡張されるのはライブラリで、言語仕様は変更しない。C++はマジでそれを実践している。
文字列のクラスを例にすると、メモリが潤沢な環境ではstd::stringを使い、メモリの少ない組み込みでは社内ライブラリの文字列クラスを使うなど選択できる。
370デフォルトの名無しさん
2008/06/14(土) 22:48:21 allocatorいじるとか。
371デフォルトの名無しさん
2008/06/14(土) 23:00:42 つきつめていくと、もう人が複雑雑多な文法を覚えて
ちまちまコード書くという、非生産的作業を繰り返す
のではなく、それは機械にやらせて人間は仕様だけ
考えるというようにならなきゃいけないんだろうな
ちまちまコード書くという、非生産的作業を繰り返す
のではなく、それは機械にやらせて人間は仕様だけ
考えるというようにならなきゃいけないんだろうな
372デフォルトの名無しさん
2008/06/14(土) 23:44:32373デフォルトの名無しさん
2008/06/15(日) 02:22:37 >>367
hosted / freestanding environmentのことかな?
hosted / freestanding environmentのことかな?
3741/2
2008/06/15(日) 09:47:18 昔々、Sunにとある厨が居た。
彼はC言語の研修でポインターでつまづくような無能で、無論C++など理解出来なかった。
プログラマーとしては全く使い物にならんということでネットワークエンジニアとして使われていた。当然役には立たなかったが、サーバー運びや配線や小間使いぐらいは出来た。
この世にポインターがあるから自分がそんな境遇に陥ったのだと不満を募らせた彼はポインターを憎悪し、ポインターの無い言語があればいいのに、と夢想するようになった。
彼はその夢想言語をJAVAと名付け陳腐な企画書を出したが、すべて無視された。
そんなある日、どうせ役には立たないんだからと、しつこいNetscape社の営業を追い払う仕事を任された。もちろん権限は一切なく、ただNetscape社の営業の話相手をし、すべてを断るだけの仕事だ。
彼は毎日のようにNetscape社の営業と無駄話をした。彼にとってそれは、愚痴や不平不満をこぼす絶好の機会だった。
Netscape社の営業は当然のように彼に同意した。彼の境遇に同情し、彼の才能を認め、褒め称えた。
そして誰も耳を傾けなかった夢想言語JAVAの話になるとNetscape社の営業は強い興味を持ち、ブラウザーに搭載したいと言い出した。当時のNetscape社は、動きのあるページを作る案を求めていた。
夢想言語JAVAが現実のものになる。彼は天にも昇る気持ちになり、全面的に協力を申し出た。が、やはり何の役にも立たなかった。すべての設計、策定、実装はNetscape社によって行われた。
Netscape社は、夢想言語JAVAを「何処でも全く同じに動く言語」としてブラウザーに搭載しようとしたのだ。
これを聞いて驚いたのはSunの役員達だ。直ちにNetscape社と交渉し、JAVAはそもそもSunのものであることを主張し始めた。
交渉の結果夢想言語JAVAの最初の実装はJavaScriptと改名することになり、SunのJAVAとは独立したNetscape社の言語となった。
彼はC言語の研修でポインターでつまづくような無能で、無論C++など理解出来なかった。
プログラマーとしては全く使い物にならんということでネットワークエンジニアとして使われていた。当然役には立たなかったが、サーバー運びや配線や小間使いぐらいは出来た。
この世にポインターがあるから自分がそんな境遇に陥ったのだと不満を募らせた彼はポインターを憎悪し、ポインターの無い言語があればいいのに、と夢想するようになった。
彼はその夢想言語をJAVAと名付け陳腐な企画書を出したが、すべて無視された。
そんなある日、どうせ役には立たないんだからと、しつこいNetscape社の営業を追い払う仕事を任された。もちろん権限は一切なく、ただNetscape社の営業の話相手をし、すべてを断るだけの仕事だ。
彼は毎日のようにNetscape社の営業と無駄話をした。彼にとってそれは、愚痴や不平不満をこぼす絶好の機会だった。
Netscape社の営業は当然のように彼に同意した。彼の境遇に同情し、彼の才能を認め、褒め称えた。
そして誰も耳を傾けなかった夢想言語JAVAの話になるとNetscape社の営業は強い興味を持ち、ブラウザーに搭載したいと言い出した。当時のNetscape社は、動きのあるページを作る案を求めていた。
夢想言語JAVAが現実のものになる。彼は天にも昇る気持ちになり、全面的に協力を申し出た。が、やはり何の役にも立たなかった。すべての設計、策定、実装はNetscape社によって行われた。
Netscape社は、夢想言語JAVAを「何処でも全く同じに動く言語」としてブラウザーに搭載しようとしたのだ。
これを聞いて驚いたのはSunの役員達だ。直ちにNetscape社と交渉し、JAVAはそもそもSunのものであることを主張し始めた。
交渉の結果夢想言語JAVAの最初の実装はJavaScriptと改名することになり、SunのJAVAとは独立したNetscape社の言語となった。
3752/2
2008/06/15(日) 09:47:49 Sunは直ちに「何処でも全く同じに動く言語」の現実性を調査し、仮想マシンを使うことで可能であることを検証した。
また夢想言語JAVAの詳細を厨に尋ね、規格をまとめ……ようとした。というのは、厨の頭の中には「ポインターを使わない」の他には支離滅裂な妄想以外何も無かったからだ。
役に立たない彼を「夢想言語JAVAを広める為の広報」に追い出し、夢想言語JAVAではなく現実的なJAVA言語の設計が行われた。
だが現実的設計にはいろいろと難があった。その度に開発部は厨に尋ね、その意向を可能な限り反映する努力を行った。しかし無能な厨の意向を反映することは困難を極めた。
その中で最も大きな障害となったのが、多重継承の禁止である。
未だにSunは公式に認めていないが、JAVAが多重継承を禁止する決断をさせたのは、実はMicrosoftの寄与するところが大きかった。
Microsoftは既にMFCとCOMによって多重継承が抱える問題を解決していたからである。
その後も厨は(何度出入り禁止を喰らっても)設計に口を出し、そして開発部はその意向を可能な限り反映する努力を行ない続けた。
特に厨が主張するコーディング規約は支離滅裂を極め、ゴスリンは「それまでに書かれたコードを書き直す量が最も少なくなるコーディング規約」をまとめる必要に迫られた。
この時にまとめられた何の意味も無いコーディング規約は後に、それを知らなかった企画部によって改めてまとめられJAVAの標準のコーディング規約として発表された。
ゴスリンはこの時の心境を「JAVAが最高だと生涯言い張り続ける覚悟を決めた」と述懐している。
厨は熱心に広報活動を行っていたが、役に立ったのは最初だけだった。すごい言語が出来る、ということを印象付けた後は、何の役にも立たなかった。
開発には近寄ることすら許されず、広報からは役立たずの烙印を押された。彼は再びネットワークエンジニアとして保守管理部に戻った。
今では彼は毎日何百ものLEDを見張って、消えたらそれに対応するハードディスクドライブを交換する仕事をしていると言われている。名前は記録されていない。
また夢想言語JAVAの詳細を厨に尋ね、規格をまとめ……ようとした。というのは、厨の頭の中には「ポインターを使わない」の他には支離滅裂な妄想以外何も無かったからだ。
役に立たない彼を「夢想言語JAVAを広める為の広報」に追い出し、夢想言語JAVAではなく現実的なJAVA言語の設計が行われた。
だが現実的設計にはいろいろと難があった。その度に開発部は厨に尋ね、その意向を可能な限り反映する努力を行った。しかし無能な厨の意向を反映することは困難を極めた。
その中で最も大きな障害となったのが、多重継承の禁止である。
未だにSunは公式に認めていないが、JAVAが多重継承を禁止する決断をさせたのは、実はMicrosoftの寄与するところが大きかった。
Microsoftは既にMFCとCOMによって多重継承が抱える問題を解決していたからである。
その後も厨は(何度出入り禁止を喰らっても)設計に口を出し、そして開発部はその意向を可能な限り反映する努力を行ない続けた。
特に厨が主張するコーディング規約は支離滅裂を極め、ゴスリンは「それまでに書かれたコードを書き直す量が最も少なくなるコーディング規約」をまとめる必要に迫られた。
この時にまとめられた何の意味も無いコーディング規約は後に、それを知らなかった企画部によって改めてまとめられJAVAの標準のコーディング規約として発表された。
ゴスリンはこの時の心境を「JAVAが最高だと生涯言い張り続ける覚悟を決めた」と述懐している。
厨は熱心に広報活動を行っていたが、役に立ったのは最初だけだった。すごい言語が出来る、ということを印象付けた後は、何の役にも立たなかった。
開発には近寄ることすら許されず、広報からは役立たずの烙印を押された。彼は再びネットワークエンジニアとして保守管理部に戻った。
今では彼は毎日何百ものLEDを見張って、消えたらそれに対応するハードディスクドライブを交換する仕事をしていると言われている。名前は記録されていない。
376デフォルトの名無しさん
2008/06/15(日) 10:38:46 ハイハイワロスワロス
〃∩ ∧_∧
⊂⌒( ・ω・)
\_っ⌒/⌒c
⌒ ⌒
〃∩ ∧_∧
⊂⌒( ・ω・)
\_っ⌒/⌒c
⌒ ⌒
377デフォルトの名無しさん
2008/06/15(日) 11:04:52378デフォルトの名無しさん
2008/06/15(日) 11:41:05379デフォルトの名無しさん
2008/06/15(日) 12:04:58380デフォルトの名無しさん
2008/06/15(日) 13:22:01 まぁポインターなんて使わなくて済むなら
そっちの方が良いにきまってる
そっちの方が良いにきまってる
381デフォルトの名無しさん
2008/06/18(水) 09:08:10382デフォルトの名無しさん
2008/06/18(水) 21:11:08 映画化決定
383デフォルトの名無しさん
2008/06/24(火) 17:48:09 C++って関数をオーバーライドするのにスーパークラスの許可が必要なんだな…
デフォルトでオーバーライド可能にすれば良かったのに、バランスの悪い言語だな
性能を気にし過ぎて不便極まりないわ
デフォルトでオーバーライド可能にすれば良かったのに、バランスの悪い言語だな
性能を気にし過ぎて不便極まりないわ
384デフォルトの名無しさん
2008/06/24(火) 18:28:05 C#にも言ってあげて下さい
385デフォルトの名無しさん
2008/06/24(火) 18:41:06 >>383
性能に拘ってなかったら、いっそうバランス悪いだけの言語になってた気もするけど
性能に拘ってなかったら、いっそうバランス悪いだけの言語になってた気もするけど
386デフォルトの名無しさん
2008/06/24(火) 18:42:58 確かに性能が悪かったら取り柄が無かったね
387デフォルトの名無しさん
2008/06/24(火) 18:55:27 それじゃ足りない!
もっと強力な燃料を!
もっと強力な燃料を!
388デフォルトの名無しさん
2008/06/24(火) 19:30:55 純粋仮想関数の定義方法が = 0 って、ちょっとふざけてただけだよね?
規格書にそのまま載っちゃうなんて予想外のミラクルだったんだよね?
規格書にそのまま載っちゃうなんて予想外のミラクルだったんだよね?
389デフォルトの名無しさん
2008/06/24(火) 20:16:55 >>383
C++プログラマからしたらデフォルトが仮想関数だったら不便極まりないよ
C++プログラマからしたらデフォルトが仮想関数だったら不便極まりないよ
390デフォルトの名無しさん
2008/06/24(火) 20:19:33 > デフォルトでオーバーライド可能
いかにも馬鹿が言いそうなキモ仕様w
いかにも馬鹿が言いそうなキモ仕様w
391デフォルトの名無しさん
2008/06/24(火) 20:21:27 自己紹介は不要
392デフォルトの名無しさん
2008/06/24(火) 21:09:39 脊髄反射はいいけど、整合性くらいとれw
393デフォルトの名無しさん
2008/06/24(火) 21:14:35 手間掛けるだけ無駄
394デフォルトの名無しさん
2008/06/24(火) 21:25:45 まぁ単に間違ってるだけだけどね
395デフォルトの名無しさん
2008/06/24(火) 21:31:17 十分だろ
396デフォルトの名無しさん
2008/06/24(火) 21:32:58 >>393
負け惜しみワロタ
負け惜しみワロタ
397デフォルトの名無しさん
2008/06/24(火) 21:35:57 下らん
398デフォルトの名無しさん
2008/06/24(火) 22:16:57 virtualじゃなくても良いならオーバーライドできるだろ。
399デフォルトの名無しさん
2008/06/24(火) 22:35:11 >>398
それは単なるHidingというんじゃない?
それは単なるHidingというんじゃない?
400デフォルトの名無しさん
2008/06/29(日) 17:35:34 >100
デフォルトだから
デフォルトだから
401デフォルトの名無しさん
2008/07/02(水) 18:15:30 Javaにポインタがないって誤解だろ。昔のことであまりよく覚えていないんだが、
どっかの怖い人がいるメーリングリストで罵倒されるような、そんな予感がする。
どっかの怖い人がいるメーリングリストで罵倒されるような、そんな予感がする。
402デフォルトの名無しさん
2008/07/02(水) 23:38:59 何故「誤解だろ」と断定口調なのですか?
403デフォルトの名無しさん
2008/07/03(木) 00:16:02 >>401
うーん。普通にJavaにはポインタは無いと思うけどな。
別に
((void (*)())0x12345678)();
とか書けないとか、んなことは言わねえけど。
Cなら例えばswap()はこう書く。
void swap(int *a, int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; }
Javaでswap()をどう書くの?
うーん。普通にJavaにはポインタは無いと思うけどな。
別に
((void (*)())0x12345678)();
とか書けないとか、んなことは言わねえけど。
Cなら例えばswap()はこう書く。
void swap(int *a, int *b) { int tmp; tmp = *a; *a = *b; *b = tmp; }
Javaでswap()をどう書くの?
404デフォルトの名無しさん
2008/07/03(木) 03:22:11 intの交換にtmpてどんな初心者だよ
405デフォルトの名無しさん
2008/07/03(木) 04:11:45 aとbが同じアドレスかどうかをチェックするぐらいなら汎用的な方法でいいと思う。
406デフォルトの名無しさん
2008/07/03(木) 06:06:10407デフォルトの名無しさん
2008/07/03(木) 06:56:38 このネタ定期的に見るな
定番過ぎて逆に知られてないのかね
定番過ぎて逆に知られてないのかね
408デフォルトの名無しさん
2008/07/03(木) 07:08:03409デフォルトの名無しさん
2008/07/03(木) 10:50:20 参照渡しがあれば、ポインタはなくともswap()は書ける
Javaにはポインタも参照渡しもないので、swap()すら書けない
Javaにポインタがあるなんて話はどっから出てきたんだ?
Javaにはポインタも参照渡しもないので、swap()すら書けない
Javaにポインタがあるなんて話はどっから出てきたんだ?
410デフォルトの名無しさん
2008/07/03(木) 12:50:42 javaにはアドレス演算子・間接演算子を含むポインタ演算関連はありません。
しかし、
//C++ ※説明のためdeleteは省略
struct A{ int n; A():n(){} };
struct B{ A* a; B(){ a=new A();} };
void f(){
B* b = new B();
f2(b);
}
void f2(B* b){ b->a->n = 10; }
//Java ※説明のためf()を含むクラスは省略
class A{ public int n; }
class B{ public A a; public B(){ a=new A();} }
void f(){
B b = new B();
f2(b);
}
void f2(B b){ b.a.n = 10; }
の上記2つは、ほぼ等価です。
Javaのオブジェクト変数が、
実質的に演算不可のポインタであることが分かると思います。
しかし、
//C++ ※説明のためdeleteは省略
struct A{ int n; A():n(){} };
struct B{ A* a; B(){ a=new A();} };
void f(){
B* b = new B();
f2(b);
}
void f2(B* b){ b->a->n = 10; }
//Java ※説明のためf()を含むクラスは省略
class A{ public int n; }
class B{ public A a; public B(){ a=new A();} }
void f(){
B b = new B();
f2(b);
}
void f2(B b){ b.a.n = 10; }
の上記2つは、ほぼ等価です。
Javaのオブジェクト変数が、
実質的に演算不可のポインタであることが分かると思います。
411デフォルトの名無しさん
2008/07/03(木) 15:06:44 >>410
> Javaのオブジェクト変数が、
> 実質的に演算不可のポインタであることが分かると思います。
そういうあやふやでいい加減な理解はドブに捨てたほうが良い。
A a = new A();
A b = a;
とするとき、
bはaを指しているのではない。bとaが同じオブジェクトを指しているだけだ。
Javaにはポインタは存在しないから、別の変数を参照する方法は存在しない。
Perlのリファレンスもポインタとは違うものだが、別の変数を指すことは出来る。
> Javaのオブジェクト変数が、
> 実質的に演算不可のポインタであることが分かると思います。
そういうあやふやでいい加減な理解はドブに捨てたほうが良い。
A a = new A();
A b = a;
とするとき、
bはaを指しているのではない。bとaが同じオブジェクトを指しているだけだ。
Javaにはポインタは存在しないから、別の変数を参照する方法は存在しない。
Perlのリファレンスもポインタとは違うものだが、別の変数を指すことは出来る。
412411
2008/07/03(木) 15:19:21 まあ、Javaのobject変数がobjectのinstanceへのポインタのようなものであり
そのように実装されている、というのは正しい。
ただしそれは言語の実装詳細であって、Javaという言語が、ポインタという道具を
仕様としてユーザに提供しているわけではない。
それどころかリファレンスすら提供していないし、参照渡しも無い。
だから、Javaのユーザはswap()すらも書けない。そういう言語だ。
Javaが裏方で実装にポインタを使っているからといって、だからどうしたんだ?
実装にポインタを使っていない言語なんて、それこそ存在しないだろ。
そのように実装されている、というのは正しい。
ただしそれは言語の実装詳細であって、Javaという言語が、ポインタという道具を
仕様としてユーザに提供しているわけではない。
それどころかリファレンスすら提供していないし、参照渡しも無い。
だから、Javaのユーザはswap()すらも書けない。そういう言語だ。
Javaが裏方で実装にポインタを使っているからといって、だからどうしたんだ?
実装にポインタを使っていない言語なんて、それこそ存在しないだろ。
413デフォルトの名無しさん
2008/07/03(木) 15:50:37 ぬるぽは別の言い方無かったのかな
414デフォルトの名無しさん
2008/07/03(木) 15:59:09 >>411
>>401は>>374-381の話を続けただけなんじゃない?
そうだとすると初めから裏方というか
概念の話をしてるんだと思うよ
あと、ポインタとポインタ演算をごっちゃにしてる気がする
ポインタは論理的な位置(を指す情報)の変数でしかないよ
http://ja.wikibooks.org/wiki/Java/クイックツアー
http://ja.wikipedia.org/wiki/ポインタ_(プログラミング)
>>401は>>374-381の話を続けただけなんじゃない?
そうだとすると初めから裏方というか
概念の話をしてるんだと思うよ
あと、ポインタとポインタ演算をごっちゃにしてる気がする
ポインタは論理的な位置(を指す情報)の変数でしかないよ
http://ja.wikibooks.org/wiki/Java/クイックツアー
http://ja.wikipedia.org/wiki/ポインタ_(プログラミング)
415デフォルトの名無しさん
2008/07/03(木) 16:15:54 >>414
えーと、どっからごっちゃにしてるという話が出てくるんだ?
別に論理的に任意な位置情報(無効なものを含む)を自由に指せないからとか
演算が出来ないからJavaにはポインタが無いと言ってるんじゃないよ。
単純に「他の変数を指す」方法を提供していないからポインタが無いと言ってるの。
それは実際にはポインタよりはstrictなリファレンスで出来ることだが、
要するにJavaはリファレンスすら提供していないのよ。
えーと、どっからごっちゃにしてるという話が出てくるんだ?
別に論理的に任意な位置情報(無効なものを含む)を自由に指せないからとか
演算が出来ないからJavaにはポインタが無いと言ってるんじゃないよ。
単純に「他の変数を指す」方法を提供していないからポインタが無いと言ってるの。
それは実際にはポインタよりはstrictなリファレンスで出来ることだが、
要するにJavaはリファレンスすら提供していないのよ。
416デフォルトの名無しさん
2008/07/03(木) 16:17:05 >>411
そういうあやふやでいい加減な理解は
ドブに捨てたほうが良いと思います。
A b = a;
とするとき、
aに入っているのがポインタとしての値だからこそ、
bとaが同じオブジェクトを指すようになるわけです。
そういうあやふやでいい加減な理解は
ドブに捨てたほうが良いと思います。
A b = a;
とするとき、
aに入っているのがポインタとしての値だからこそ、
bとaが同じオブジェクトを指すようになるわけです。
417デフォルトの名無しさん
2008/07/03(木) 16:19:11418デフォルトの名無しさん
2008/07/03(木) 16:25:17 繰り返すが、
言語内部の実装でポインタが使われていることと
言語仕様がポインタを提供していることは全く別の問題だ
Javaは言語仕様としてはポインタを提供していないし、
前者をもって、その言語がポインタを提供しているとは間違っても言えないし
言わない
そういうことで言うのなら、LISPにもBASICにもポインタはあるのだろうよ
言語内部の実装でポインタが使われていることと
言語仕様がポインタを提供していることは全く別の問題だ
Javaは言語仕様としてはポインタを提供していないし、
前者をもって、その言語がポインタを提供しているとは間違っても言えないし
言わない
そういうことで言うのなら、LISPにもBASICにもポインタはあるのだろうよ
419デフォルトの名無しさん
2008/07/03(木) 16:26:55 ポインタ=アドレス演算子ですか。そうですか。
アホですね。
アホですね。
420デフォルトの名無しさん
2008/07/03(木) 16:29:26 >>419
別にアドレス演算子である必要は無いだろ
抽象的には、リファレンスは束縛されている別の名前に対するエイリアスであれば
良い。つまり、メモリアドレスとは何の関係も無い話だ
そしてJavaはそのようなものを一切提供していない
別にアドレス演算子である必要は無いだろ
抽象的には、リファレンスは束縛されている別の名前に対するエイリアスであれば
良い。つまり、メモリアドレスとは何の関係も無い話だ
そしてJavaはそのようなものを一切提供していない
421デフォルトの名無しさん
2008/07/03(木) 16:29:47 >要するにJavaはリファレンスすら提供していないのよ。
http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#9317
>4.3 Reference Types and Values
http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html#9317
>4.3 Reference Types and Values
422デフォルトの名無しさん
2008/07/03(木) 16:36:14423デフォルトの名無しさん
2008/07/03(木) 16:41:06424デフォルトの名無しさん
2008/07/03(木) 16:47:11 見たいものしか見えないのな
425デフォルトの名無しさん
2008/07/03(木) 16:59:08 つまり、Javaのobject変数は、有効な object instanceを指すか、
「何も指さない」かの二択の、非常に限定されたreferenceなんだよ
「ポインタ」ではない
「何も指さない」かの二択の、非常に限定されたreferenceなんだよ
「ポインタ」ではない
426デフォルトの名無しさん
2008/07/03(木) 17:17:53 ポインタとポインタ演算の違いが分からない奴には、
何言っても無駄のようだな。
何言っても無駄のようだな。
427デフォルトの名無しさん
2008/07/03(木) 17:20:11 演算ができないだけでなく、
・別の名前(変数)を指せない(その程度のindirectionの手段するら提供していない)
・無効なものを指せない
こんなものを「ポインタ」と呼ぶことこそ強弁だろ
・別の名前(変数)を指せない(その程度のindirectionの手段するら提供していない)
・無効なものを指せない
こんなものを「ポインタ」と呼ぶことこそ強弁だろ
428デフォルトの名無しさん
2008/07/03(木) 17:27:19 >演算ができないだけでなく
演算が出来ないからだよ。
アドレス演算子も文字通り演算だ。
>無効なもの
null
演算が出来ないからだよ。
アドレス演算子も文字通り演算だ。
>無効なもの
null
429デフォルトの名無しさん
2008/07/03(木) 17:29:31 >>428
nullは「無効なものを指している」のではなく、「何も指していない」ことを
示しているんだよ
それと、C++やPerlのリファレンスぐらい知って語ってるのか?
アドレス演算子が無くとも別の名前に対するエイリアスは作れるだろうが。
Javaでは作れないけどな。
というか、エイリアシングの問題を避けるために、そのようなことは
出来ないようにしてある。
nullは「無効なものを指している」のではなく、「何も指していない」ことを
示しているんだよ
それと、C++やPerlのリファレンスぐらい知って語ってるのか?
アドレス演算子が無くとも別の名前に対するエイリアスは作れるだろうが。
Javaでは作れないけどな。
というか、エイリアシングの問題を避けるために、そのようなことは
出来ないようにしてある。
430デフォルトの名無しさん
2008/07/04(金) 02:08:53 なんか「Javaを見捨てた香具師」スレかと思たw
その争点がポインタってのも面白いな
いや煽り地味てしまったが、俺のような三下には興味深い話題です
その争点がポインタってのも面白いな
いや煽り地味てしまったが、俺のような三下には興味深い話題です
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 731部隊の新資料、中国が公開 「日本が細菌戦の罪を自白」と主張 ロシアが引き渡し [少考さん★]
- 【速報】「女芸人No.1決定戦 THE W」9代目女王にニッチェ! 7年ぶり3度目で悲願の優勝 [牛丼★]
- 中国・ロシア両軍の爆撃機が東京方面へ向かう「異例のルート」を共同飛行…核も搭載可能、連携して威嚇か ★8 [ぐれ★]
- 「おこめ券は米以外の食品も買える。効果的な活用を」 地元で農水相 [山形県] [少考さん★]
- 【芸能】『女芸人No.1決定戦THE W』 粗品が最後にバッサリ「優勝賞金1000万円にしてはレベル低い大会」 [冬月記者★]
- 東京の自販機そばに金塊4200万円分、何者かに持ち去られる…札幌の50代が8000万円振り込んだ後に上京して被害 [どどん★]
- 【実況】博衣こよりのえちえちダンガンロンパ4🧪
- ソープ行ったらお歳暮もらった
- 千晴!😡
- 🏡パン🍞つー✌まる👌見え👊😅👊
- 【悲報】日本人が散々ホルホルしていたオオスズメバチ、アメリカでいつの間にか根絶されていた [603416639]
- 【緊急高市朗報】WBC全試合、地上波完全生放送決定wmwmwmwmwmwmwmwmwmwmwmwmwmwmwmw [517459952]
