[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 10/05 19:36 / Filesize : 259 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

「コンパイラ・スクリプトエンジン」相談室8



1 名前:デフォルトの名無しさん mailto:sage [2005/11/06(日) 19:45:18 ]
プログラミング言語処理系の開発に興味のある人達のスレッドです。

字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換,
CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン,
SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化,
JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。
意味論に関する話題も歓迎です。

前スレ
1 pc.2ch.net/tech/kako/981/981672957.html
2 pc2.2ch.net/test/read.cgi/tech/1021136715/
3 pc5.2ch.net/test/read.cgi/tech/1070089173/
4 pc5.2ch.net/test/read.cgi/tech/1100097050/
5 pc8.2ch.net/test/read.cgi/tech/1106129164/
6 pc8.2ch.net/test/read.cgi/tech/1115335709/
7 pc8.2ch.net/test/read.cgi/tech/1129287390/

関連リンクは多分 >>2-10 あたり


810 名前:デフォルトの名無しさん mailto:sage [2005/12/14(水) 17:53:38 ]
>>808
この業界では技術に保守的なだけでもクズだというのに、
ついにナショナリストまで登場しているのか(笑)

811 名前:デフォルトの名無しさん mailto:sage [2005/12/14(水) 17:59:31 ]
>>808
ネタのつもりなんだろうけど、そういうまるっきりウソ流し続けてると
コミュニティ過激派から訴えられるかも知れんぞ

812 名前:デフォルトの名無しさん mailto:sage [2005/12/14(水) 18:01:50 ]
おれは2が欲しい

813 名前:デフォルトの名無しさん mailto:sage [2005/12/14(水) 18:14:18 ]
おれはお前が欲しい

814 名前:デフォルトの名無しさん mailto:sage [2005/12/14(水) 19:13:58 ]
>>803
真相をお話します。
オーナーはご想像の通り、物忘れが酷い人物ですが慈悲深く、
ボーイもまた欲深いという欠点を持つ人物ですが、それでも
ボーイはオーナーの人格を信頼して付き従っておりました。
さて、実はこのホテルのシステムは後払い方式なのですが、
オーナーの物言いにボーイは素直に頷き、オーナーから
預かった5ドルを欲深さからそのまま着服しました。
翌日オーナーは例外なくそのことを忘れており、
チェックアウトした旅人へ謝罪し25ドルを受け取りました。
結局その時ホテルで5ドルの損失が発生したのですが、
オーナーはそれに気づかず運営を続け、やがて倒産してしまいました。
しかしその後ボーイは着服で貯めた金で大成し、
路頭に迷った元オーナーを雇ってあげたという話です。
経営者としてはボーイの方が格上だった、が正解です。

815 名前:デフォルトの名無しさん mailto:sage [2005/12/14(水) 19:42:02 ]
ヒソ(´д)(д`)ヒソ

816 名前:デフォルトの名無しさん mailto:sage [2005/12/14(水) 22:26:28 ]
3人の言語オタがおりました。
このスレを見つけて、そこの住人に最高と思う言語をたずねると、
「RubyとLisp以外です」と答えました。


817 名前:デフォルトの名無しさん mailto:sage [2005/12/14(水) 22:28:14 ]
eagerな言語は使う気がしない

818 名前:デフォルトの名無しさん mailto:sage [2005/12/14(水) 22:42:51 ]
クロージャまわりのメモリ管理ってどうやってます?
・基本はスタック上で、捕捉されたらヒープにコピー
・コンパイル時にスタックに置くかヒープに置くか決めて、コピーしなくて良いように
・めんどいので全部ヒープに取ってGCまかせ
・その他

と、ネタ投下してみる。




819 名前:デフォルトの名無しさん mailto:sage [2005/12/14(水) 23:13:26 ]
>>807
makimo.to/cgi-bin/search/search.cgi?q=%83R%83%93%83p%83C%83%89%81%40%83X%83N%83%8A%83v%83g&andor=AND&sf=0&H=&view=table&D=tech&shw=2000

820 名前:デフォルトの名無しさん mailto:sage [2005/12/14(水) 23:57:16 ]
>>818
全部ヒープでやってる。速度は今のところ考えてない。
いずれはスタック使いたいんだけどね。
とりあえず論文読み中。

www.cs.indiana.edu/~dyb/pubs/3imp.pdf

821 名前:デフォルトの名無しさん mailto:sage [2005/12/15(木) 01:12:12 ]
>>818
>・基本はスタック上で、捕捉されたらヒープにコピー
捕捉されたらとは?生成のこと?
>・コンパイル時にスタックに置くかヒープに置くか決めて、コピーしなくて良いように
クロージャの生成構文を別々に設けるということ?
これらの意味は?

おれの見解ではクロージャを使うだけであればスタック、
クロージャを生成する際、親フレーム以下があれば
ヒープに落としてフレーム参照を繋ぎかえる、
この時既にヒープに落ちていれば何もしない、
という戦略がスマートというか、一般的じゃないかと。
使用回数>生成回数という場合ね。
CPSやジェネレータみたいな使い方しかしない場合は
コピーが連続して不利になるけど、こんなことは
やろうと思わなければめったにない。

822 名前:807 mailto:sage [2005/12/15(木) 01:28:06 ]
>>819
どもありがと。さいこー

823 名前:デフォルトの名無しさん mailto:sage [2005/12/15(木) 02:53:00 ]
>>818ではないですが面白そうな話題ですね。

>クロージャの生成構文を別々に設けるということ?
エスケープ解析とか?

>おれの見解では(略
すまん、理解不能。
といってもクロージャ変換で実装したことしかない俺の知識が足りないだけ。
興味あるので「一般的」の参照をくれるとうれしい。

824 名前:デフォルトの名無しさん mailto:sage [2005/12/15(木) 04:31:04 ]
>>803
○○○○○.○○○○○/○○○○○.○○○○○/○○○○○.○○○○○ 最初に支払ったお金30ドル

●●●◎◎.○○○○○/○○○○○.○○○○○/○○○○○.○○○○○ 3ドル返す 2ドルくすねる
└┼┘└┤└───────────┬─────────────┘
  │   │                   └ 主人の手元に25ドル
  │   └ ボーイの手元に2ドル             
  │
  └ お客の手元に3ドル

支払ったお金は27ドル
  9×3=27 9ドルずつを3人で払った
  30−3=27 30ドル払って3ドル返してもらった
  25+2=27  主人に25ドル、ボーイに2ドル払った

ボーイがくすねたお金2ドルは、客が支払ったお金(25+2)の一部
だから支払った27ドルにさらに2ドルを足すことが間違い(25+2+2・・・×)

最初の金額30ドルを求めるには、実際に支払ったお金27ドルに 戻ったお金3ドルを足さなければならない

825 名前:デフォルトの名無しさん mailto:sage [2005/12/15(木) 04:51:17 ]
エスケープ解析というのを知らなかったのでぐぐってみたのですが、
関数等のスコープの中で定義した変数やクロージャの
利用がスコープの中だけで完結し、外には持ち出されないことを
調べるということでしょうか。

826 名前:デフォルトの名無しさん mailto:sage [2005/12/15(木) 13:44:56 ]
そうです。

827 名前:デフォルトの名無しさん mailto:sage [2005/12/15(木) 17:01:53 ]
>>783-784
おもしろい。長くてもいいからやってくれ。
くだらん短い書き込みより、長くてもおもしろいほうがいいや。
長いのがいやなら読まなきゃいいだけ。

>JavaはCが存在していて必要ならば使うことができることが前提だから
>比較的汎用指向の言語でありながら
>Cで書くことが適切であるようなハードウェアレベルの記述機能を
>潔くスッパリ切り捨てた設計ができている。

ここらへんはたぶん違ってて、Javaに低レベルの記述がないのは単にJavaがバイトコードインタプリタを採用したからであって、Cがあるから云々は関係ないと思う。
ポインタをなくしたのもGCを導入しやすくするためで、やっぱりCとは関係ない。


828 名前:デフォルトの名無しさん mailto:sage [2005/12/15(木) 18:15:07 ]
>>827
そのへんは、鶏が先か卵が先かみたいなもんじゃね?


>>780
>人の認知科学的な処理特性を無視することはできない。
認知科学的には、冗長だとミスが増える法則もあるので
トレードオフだよね。

>ユーザが把握しやすい動作モデルを提供する
同じ物でも「把握しやすさ」はユーザによって
ばらつきが大きいんだよね。
ここを意識しないと宗教戦争になる。




829 名前:デフォルトの名無しさん [2005/12/15(木) 21:03:36 ]
>>827
ポインタはあるよ。
論文ばかり読んでる○○研究者か?

830 名前:デフォルトの名無しさん mailto:sage [2005/12/15(木) 21:05:42 ]
>818
継続も使いたいから
>めんどいので全部ヒープに取ってGCまかせ
かね……

831 名前:デフォルトの名無しさん mailto:sage [2005/12/15(木) 21:35:49 ]
>>823
>興味あるので「一般的」の参照をくれるとうれしい。

図にすると下みたいなイメージだけど、その辺は「クロージャ」が
出てくる速い処理系のソースかドキュメントでも読んでよ。
今の所これ以外に速い実装は思いつかないが。

※ |****| はフレームの変数とかの中身
※ (矢印)はフレームポインタ

スタック |******親1******|(←)|******親2******|(←)| ★クロージャ生成直前
ヒープ     ヒープはまだ空の状態

↓ ヒープに落としてフレーム参照を繋ぎかえる

スタック |     親1    |(↓)|     親2    |(↓)| ★クロージャ生成完了
ヒープ  |******親1******|(←)|******親2******|(←)|

エスケープ解析までするなら特定の親のみしかヒープのコピーは発生しない。
例えば親1のフレームしか参照しないのであれば親2のフレームは
そのままスタックに残しても良い。

スタック |     親1    |(↓)|*******親2*****|(←)| ★クロージャ生成完了
ヒープ  |******親1******|(←)| ←─── 生成されたクロージャは直接親1を参照


832 名前:デフォルトの名無しさん mailto:sage [2005/12/15(木) 22:12:03 ]
>>829
参照のことをポインタだって言い張ってる人はいますね。

833 名前:デフォルトの名無しさん mailto:sage [2005/12/15(木) 22:43:17 ]
Javaでポインタがあるっていう人間は低脳。バイトコードの仕様書読み直してから来い

834 名前:818 mailto:sage [2005/12/16(金) 01:44:55 ]
>>821
>>・基本はスタック上で、捕捉されたらヒープにコピー
>捕捉されたらとは?生成のこと?
「生成されたクロージャが、
 子孫のスタックフレームでないフレームに捕まえられたら。」かな。
例えばforeach的な関数にクロージャを渡してそのまま捨てるような状況なら
コピーは要らないわけです。
これをやると破壊的な処理がやたらと高くついたり、
いざコピーとなったときにやたらと高くついたり、
その他色々と面倒なことになったりしそうですが。

>>・コンパイル時にスタックに置くかヒープに置くか決めて、コピーしなくて良いように
>クロージャの生成構文を別々に設けるということ?
コンパイル時に絶対にコピーが要らないとわかったときのみ、
フレームはスタック上に置いて、
それ以外は最初から親フレームはヒープに置いておこうと。
「関数aはクロージャを引数に取るが、それはどこにも保存されない」
ということになればa以外を呼ばない関数のフレームはスタック上に置いて良いでしょう。
が、やっぱり色々あって面倒なことになったりしそうです。

どっちもクロージャより親フレームが長生きなら問題ないよねという方針。

835 名前:デフォルトの名無しさん [2005/12/16(金) 18:53:57 ]
Javaでポインタが無いと信じているアフォども、
せいぜい、振り込め詐欺やワンクリ詐欺に用心しておくこったなw
言われてることを、そのまま単純に信じているようでは、
おまえらいい鴨だよ。


836 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 19:38:44 ]
個人的な主観かもしれないけど、
ポインタ演算が無いものは参照と呼ばないか?


837 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 20:21:09 ]
例えば、Cのポインタをタンイポと呼ぶように2006年から改正したら、
2006年からポインタが無いことになるぞ。
ポインタだのタンイポだのと言われてることが全て。

838 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 20:41:20 ]
ポインタをタンイポと呼ぶためには法改正が必要なわけだが、2006年からというのは早急すぎるな。
まずは有識者を集めた小委員会の設置を図った上で、再来年以降の国会提出でも十分だと思う。



839 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 20:44:35 ]
配列のイテレーターと参照と参照ポインタとメモリアドレスのポインタとを
一括してポインタと呼ぶべきでない。


840 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 21:04:11 ]
>>835
Javaでポインタが有ると信じているアフォども、
せいぜい、振り込め詐欺やワンクリ詐欺に用心しておくこったなw
言われてることを、そのまま単純に信じているようでは、
おまえらいい鴨だよ。

841 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 21:05:31 ]
え、ポインタと参照の違いは常識だと思ってたのですが。
またトンデモ本の誕生ですか。

842 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 21:06:01 ]
>>840
ほんたまですか?

843 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 21:06:22 ]
塗るタンイポえくせぷしょん

844 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 21:06:32 ]
懐かしい名前を出さないでください。せっかく忘れていたのに。

845 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 21:07:45 ]
Pascalのポインタは演算できないけどポインタと呼ぶな
だから正解は>>837

846 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 21:10:09 ]
でも一般的に見たら、参照とポインタの一般像みたいなもんはあるだろ。
Pascalは例外じゃないか?

847 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 21:12:33 ]
PascalはInc, Decができるじゃん。

848 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 21:12:34 ]
たしかにポインタの演算はできないけど数値にキャストできるから同じ事では。



849 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 21:21:12 ]
みんなそんなにボロカスに言うなよ。
Mさんが可哀想じゃないかw

850 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 21:22:33 ]
まあ少なくともJavaの参照はポインタではないことは確かだ。
名前が参照だから。

851 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 22:35:58 ]
そんなの実際どうとかじゃなくて、
設計者がどう定義したかと、その思想によるだろう。
だから>>850が正しい。

852 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 22:41:17 ]
名前はともかくとしても、実際の内容を素直に受け止めれば
いいと思うけど。なので >>835 が正解。

853 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 22:42:47 ]
>>835とか>>852は、ポインタと読んでCのポインタを連想した上で書いてるわけっしょ?
だったらやはりCの言葉の定義に(ry

854 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 22:44:40 ]
実際の所、Rubyにはポインタは存在するがLispには存在しない。


855 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 22:46:11 ]
>>853 ポインタという言葉の定義or使用はCが最初ですか?


856 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 22:48:01 ]
RubyもLispもPascalも、同じ太陽を感じ、同じ月を見て. 同じ空気を吸っているのだから
ポインタの有無くらいで区別するのはよくないと思います。

857 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 22:50:26 ]
しかし、ポインタの有無は実用性を大きく左右するんだよ。

858 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 22:51:20 ]
うむ。



859 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 22:52:51 ]
結局は宗教論争。
和平への道はアセンブラ原理主義しかない。

860 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 22:53:34 ]
>>855
ALGOL60にPOINTERという型は既に存在したらしいぞ
ttp://www.99-bottles-of-beer.net/language-algol-60-24.html


861 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 22:55:01 ]
Java ポインタ の検索結果 約 197,000 件中 1 - 10 件目 (0.03 秒)
www.google.co.jp/search?hl=ja&q=Java+%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF&lr=
Java 参照 の検索結果 約 2,830,000 件中 1 - 10 件目 (0.24 秒)
www.google.co.jp/search?hl=ja&q=Java+%E5%8F%82%E7%85%A7&lr=

この様にJavaポインタ派は、Java参照派と比較するとごく少数です。
どうやら集団で勘違いされているみたいです。


>>856
Rubyにはポインタはありません。
ポインタに相当する機能は持ってますが、
それはポインタではありません。

862 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 22:58:05 ]
実にくだらない話題に収束したな。

863 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 23:29:43 ]
ポインタ演算とか、インクリメントとかデクリメントとか、数値へのキャストとかそういうのを
わざと制限したものは普通、ポインタじゃなくて参照って言わない?

864 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 23:33:18 ]
>>857
同意。ポインタのある言語は領域破壊のバグが頻繁に紛れ込むが、
Javaのようにポインタのない言語はそうしたバグは非常に少なくなる。

865 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 23:33:48 ]
いわないね。
Delphiだと明確に区別されてるし。

866 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 23:34:56 ]
>>865
Delphiは言うじゃん。参照って。

867 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 23:37:26 ]
つまり、865は「ポインタとは言わない」と言いたいちゃうんかと。

868 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 23:40:25 ]
あぁ、863へのレスのつもりなのね。



869 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 23:52:19 ]
>>857
つまりLispは実用的でない証明ってこと言いたいわけ?w

870 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:05:20 ]
lispにポインタはありません。ポインタの無い言語は実用性で勝ります。864を参照。

871 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:10:12 ]
Cにはポインタがあります。ポインタのある言語は自由度と汎用性で勝ります。864参照。

872 名前:デフォルトの名無しさん [2005/12/17(土) 00:10:39 ]
Lispにポインタはあるが、そういえば、Lispのポインタって完全にJava、Rubyなどで言う参照だよな。
結局その言語でそれをなんと呼ぶかってことだな。

873 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:11:26 ]
>>871
確かにバグを出す自由度で勝りますねw

874 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:19:31 ]
ようやくLispが出てきたか

やっぱこのスレの主役はLispだよな!

875 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:20:01 ]
Lispこそがすべての源流であるということは認めざるを得ない。

876 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:23:32 ]
そもそも「Javaでポインタ」って話は、C++使いにJavaの参照を教えるときに「C++の参照と違ってポインタみたいなもんですよ」って説明するだけの話じゃなかったっけ?
それ以外の時に普通Javaの参照はポインタとは言わない罠。
まあ「何かを指し示す」って意味に限定すればJavaの参照とCのポインタは一緒だから「存在しない」とまでは言う気ないけど。
ポインタ演算ができるかどうかなんてポインタの本質じゃないでしょ。

877 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:25:38 ]
>>876
一般に参照とポインタの区別を云々する場合、ポインタ演算の有無こそが本質のうちの1つです。

878 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:26:56 ]
>>877
そうなの?ポインタキボンヌ。



879 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:27:45 ]
ポインタ演算があるのと無いのとではバグの量と種類に大きな違いが出るのだよ。

880 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:29:26 ]
Cのポインタは、演算によって「値をずらす」ことができるだろ。

int a;
int *p = a;

p += 1; //←これ


参照はそれができない。


881 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:30:15 ]
それはポインタ演算の有無の話であってポインタの有無の話ではないですね

882 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:31:08 ]
間違った。

int a;
int *p = &a; //アドレスを代入

p += 1; //←これ

*p = 1; // 任意のアドレスのデータを破壊

参照はこれができない。


883 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:32:00 ]
ポインタの有無の話ですよ。今や、それが出来ないものをポインタではなく参照とよぶことが多いんですから。

884 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:32:51 ]
ポインタは任意のハードウェア例外を引き起こす。

*(int *)(0) = 0; // 不正なアドレスへの書込み



参照ではこれはできない。

885 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:33:23 ]
これぐらいか?

●同じ点
Javaの参照もCのポインタも、どちらも間接参照を表すためのものである。

●異なる点
Javaの参照はヒープ上にあるオブジェクトしか指す事ができない。
Cのポインタはどこにあるオブジェクトも参照できる。

Javaで参照されているオブジェクトは決して消滅しない。
Cで指されているオブジェクトはいつの間にか消滅している可能性がある。
(そして、消滅したオブジェクトへの参照をたどった場合の動作は未定義である)

Javaの参照にはCのポインタ演算のような機能はない。
Cのポインタ演算は、配列の要素を指すポインタのみに使う事ができる。
それ以外の場合の動作は未定義である。

Javaの参照の動作はかなり厳密に定義されている。
Cのポインタに対する操作には「未定義である」という部分が多い。
それを利用して環境依存の色々な技が使えたりする。

886 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:34:20 ]
Cのポインタが安全性を保証してないだけの話じゃん

887 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:35:50 ]
クロージャの話しようぜ

888 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:37:11 ]
>>887
まずクロージャを定義してださい。



889 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:38:20 ]
ポインタは本来、「何かを指し示すもの」という意味でした。
この言葉は、アドレスやそれを格納した変数などにたいして用いられてきました。

しかし、時代が移り変わるにつれ、ポインタ演算によって、頻繁に深刻なバグが
発生することがわかってきました。ポインタ演算の有無が非常に重要だという
ことがわかってきたのです。

かくして、本来は本質でなかったポインタ演算の有無が、時代とともに重要視
され、ポインタの本来の意味が変わってきたわけです。

890 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:38:34 ]
ださいとかいうなや

891 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 00:42:25 ]
ポインタ演算を適用できる変数やアドレスの数値と、参照との区別を明確にするため、
前者のことを特にポインタと呼ぶようになったのです。
特に言語として、Cがダントツで有名になったこともこの背景にあります。

892 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 01:05:55 ]
・ポインタ演算を元に考えればJavaやその他の言語にポインタはない。
・そうでなければいわゆる参照(C++の参照を除く)はポインタみたいなもん。
ってことでFA?

893 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 01:12:47 ]
代入なんかをインスタンス化してしまう言語にはポインタがない、参照切れもない。

894 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 01:16:58 ]
>>892
あと、
・その言語がポインタと呼んでいないものは、その言語ではポインタではない。

895 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 01:18:08 ]
>>893
ポインタ演算ができないからでしょ。

>>894
そんなこと言ったらJavaScriptにはクロージャはないってことになるじゃん。

896 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 01:21:50 ]
いろんな言語のポインタ、いろんな言語やハードのアドレスは、それぞれ別のものを
別々に定義可能。
それらの用語の使い方は仕様によって異なる。
時々これらを混同して、「アドレスはポインタか?」とかの議論で、おかしな議論を
展開しちゃってる人がいるけど。

897 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 01:23:05 ]
>>895
クロージャを他の機能で代替してるだけなら、
厳密な意味ではクロージャはないんじゃないの?

898 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 01:25:39 ]
ECMAScriptの仕様書のP144にクロージャ出てきますが何か?



899 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 01:25:40 ]
厳密な意味ならね。

900 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 01:26:56 ]
>>896
禿同。
このスレは変な議論で盛り上がるよなw

901 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 01:26:57 ]
その言語がそれをクロージャと呼んでいないなら、クロージャじゃない。

902 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 01:29:06 ]
>>898訂正
×P144
○P132

903 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 01:32:05 ]
ああ、Cのポインタは実装によってマシンのアドレスと違うことがあるから、
アドレスはポインタではないとかいっちゃってる人いますね。
Cのアドレスとマシンのアドレスを混同しちゃってる例ですかね。

904 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 01:46:37 ]
要はどっちでもいいだろって話でしょ。
Javaの言語仕様に関する議論で「ポインタは〜」とか言ってたら指摘すべきだが、>>876みたいな文脈で「ポインタみたいなもん」って言ってるだけでつっこむとしたら揚げ足取り以外の何物でもない。

905 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 01:51:38 ]
ポインタをマシン語のアドレスと思ってあつかうと
マルチコア、マルチタスク、マルチキャッシュなCPUでは
競合が発生して、かなりわけわからんことになる昨今。

906 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 01:53:11 ]
>>888
では混乱を無くすために
クロージャ=Schemeのクロージャ(あるいはラムダ式、無名関数)
と定義するよん。他の言語も右に倣えだから意味論はほとんど同じ。

例えばクロージャのある言語ではnewのような特別な構文を
定義することなくオブジェクトの生成を記述できる。

(define new-point
 (lambda (x y) ;---メンバ変数に相当、隠蔽される
  (lambda (message . args) ;---this、selfに相当
   (case message
    ((getx) x) ;--- getter
    ((gety) y)
    ((setx) (set! x (car args)) x) ;--- setter
    ((sety) (set! y (car args)) y)
    (else (error "unknown method " message))))))

実際にやっていることはクロージャを生成するクロージャを
定義しただけ。それでも以下の様にオブジェクトとして扱える。

(define point (new-point 1 2))
;メンバ変数はどうやってもアクセサ経由でしか参照できない
(point 'getx) ;=>1
(point 'gety) ;=>2
(point 'setx 3)
(point 'getx) ;=>3


907 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 01:58:41 ]
燃料投下

Javaでは、NullPointerExceptionっていう言語定義された例外が存在するんですがwwwww

908 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 01:59:53 ]
NullPointerExceptionを考えた馬鹿を吊るし上げればいいだけだお^^



909 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 02:01:45 ]
>>906
なるほど
JavaScriptやlua、perlもそれと同じだね。

910 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 02:04:49 ]
>>907
Javaにポインタがあるとか言ってる奴の主張はそれじゃなくて
参照のことだろ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<259KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef