1 名前:デフォルトの名無しさん [2005/08/11(木) 11:18:15 ] 前スレ pc8.2ch.net/test/read.cgi/tech/1021364372/
159 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 20:34:18 ] こぼらーってJavaっていう言語があること知ってるの?
160 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 22:01:30 ] >>158-159 コボラーにあやまれ! そこの現代コボラー!
161 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 22:15:19 ] コボラーってアトランティス人みたいなもんでしょ
162 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 22:38:27 ] コボラーってどんな言語?
163 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 22:44:53 ] コボラーって伝承とか伝説でだけ出てくる空想上の生物じゃね?
164 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 16:28:26 ] >>141 機能限定のラベル付きbreak、continueなら・・・
165 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 17:57:19 ] 高速電脳の斜向かいにある美容院の名前はコボル
166 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 01:37:16 ] コボルちゃん
167 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 17:48:22 ] >>158-159 Javaも書けるCOBOLプログラマはそもそもコボラーとは呼ばれない
168 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 18:02:11 ] >>167 そのJavaコードがコボルチックだったりするからコボラーと呼ばれる。 コボラーが書いたC言語のコード見たらすごかった。 全部グローバル変数にしてw
169 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 18:38:23 ] >>167 そりゃそうだ、現代コボラーと呼ばれるだけだから。 >>168 あるあるw
170 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 20:15:24 ] >>168 コボルにはローカル変数無いの? ちなみにおれ、コボル覚えられなかったんだよね…(´・ω・`) C系よりよほど難しいと思うんだが。
171 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 20:23:11 ] >>170 10年以上前にやったCOBOL85あたりではローカル変数って言う考え方は無かった アドレスとかポインタとか意識する必要が無いからCOBOLのほうが圧倒的に簡単だと思うがの
172 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 20:26:56 ] >170 >ちなみにおれ、コボル覚えられなかったんだよね…(´・ω・`) >C系よりよほど難しいと思うんだが。 ナカーマ( ・∀・)人(・∀・ ) 俺もC++ならtemplateもバッチリ使いこなせてメタプロもできるし、 アセンブラやスクリプト系の言語も問題なくこなせるんだが、 COBOLだけはダメっす。
173 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 23:47:19 ] cobolはデータ依存プログラミングができるから、ある意味非常に強力。 逆に、それを使わないとグローバル変数しかない非常に貧弱な言語になってしまう。
174 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 23:15:26 ] だから、商用システムなんかにはよく使われていた。 当時は、それが生産性が高かったんだよ。
175 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 23:23:27 ] 漏れのトコはエラー処理へすっ飛ばす時にgoto使ってるんだが。 goto完全毛嫌い派ってそこんとこどうなん?
176 名前:デフォルトの名無しさん mailto:age [2007/03/04(日) 16:11:26 ] >>175 あいつら馬鹿だから、もちろんそれも否定するよ。
177 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 16:29:08 ] たまに1関数1returnとか言い出す。
178 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 16:53:23 ] if( is_error( hoge, hoge ) ) { 10行ぐらいのエラー処理 return ERROR; } if( is_error( next, hoge ) ) { 上のと同じ10行ぐらいのエラー処理 return ERROR; } if( is_error( next_next, hoge ) ) { やっぱり同じ10行ぐらいのエラー処理 return ERROR; } 以下続く こんな感じの無残なコードは、何度も見かけたもんだがw
179 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 14:58:09 ] 例外キャッチしたら頭に戻ってやり直しってコードには躊躇なくgotoを使うな
180 名前:デフォルトの名無しさん mailto:sage [2007/03/29(木) 21:42:18 ] >>179 それって catch ブロックの中から try ブロックの中あるいはその前へ飛ぶの?
181 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 23:02:59 ] for(;;) try{ // 例外が起きそうな処理 break; } catch(e){ }
182 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 23:46:11 ] ダサッ
183 名前:デフォルトの名無しさん mailto:sage [2007/04/03(火) 01:25:49 ] 摩訶不思議
184 名前:デフォルトの名無しさん mailto:sage [2007/04/29(日) 03:54:13 ] 1関数1returnというのは「出口はひとつ」を誤解してるんだろうな。 returnが複数でも出口は一つだし。returnはある意味"goto 最後の}"だと 思えばいい。 本当の「出口が一つじゃない」というのはBASICの 100 GOSUB 200 110 PRINT "1" 120 PRINT "2" 130 END 200 INPUT A 210 IF A=1 THEN RETURN 110 220 RETURN 120 の210行と220行みたいな話を言っているはず。これはもはやreturnではなくて gotoだからな。
185 名前:デフォルトの名無しさん mailto:sage [2007/04/30(月) 03:33:13 ] じゃあ「入り口が一つ」については?
186 名前:デフォルトの名無しさん mailto:sage [2007/04/30(月) 20:37:51 ] 入り口も出口も複数 subroutine hoge(i, j, k, *, *) k = i + j entry huge(k, *, *) k = k - 1 if (k .ne. 0) return 1 return 2 end program main read(*,*) n1, n2 call hoge(n1, n2, i, *100, *300) 100 write(*,*) n1, ' + ', n2, ' - 1 = ', i i = 10 200 write(*,*) i call huge(i, *200, *300) 300 write(*,*) 'end' end
187 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 18:25:16 ] >>186 よーし、おじさんはCOBOLつかっちゃうぞ。 PERFORM xxx THRU yyyy
188 名前:デフォルトの名無しさん mailto:sage [2007/05/11(金) 20:53:36 ] goto 1;
189 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 00:08:15 ] goto\s+[\w\d]+;|^\s*[\w\d]+: をショッキングピンクにしてgoto使いまくりだな。
190 名前:デフォルトの名無しさん mailto:sage [2007/05/12(土) 18:15:53 ] 色々謎な正規表現だな
191 名前:デフォルトの名無しさん mailto:sage [2007/05/13(日) 11:32:44 ] 189の目を盗んでラベルの後に空白文字を入れてやるぜ。 goto fuck189 ; fuck189 :
192 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 19:14:32 ] 以下のケースってgotoしたくなる。 if(a && b && c){ 処理1 goto jmp; } else if(d){ 処理2 } if(a && b){ jmp: 処理3 }
193 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 20:37:51 ] 真理値表を書いてみよう。 a b c d 処理1 処理2 処理3 0 0 0 0 x x x 0 0 0 1 x o x 0 0 1 0 x x x 0 0 1 1 x o x 0 1 0 0 x x x 0 1 0 1 x o x 0 1 1 0 x x x 0 1 1 1 x o x 1 0 0 0 x x x 1 0 0 1 x o x 1 0 1 0 x x x 1 0 1 1 x o x 1 1 0 0 x x o 1 1 0 1 x o o 1 1 1 0 o x o 1 1 1 1 o x o なんだ、goto要らないじゃん。
194 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 10:55:01 ] で、バカを晒した>>192 はどこに行った? しかし、真理値表を書かないと結論が出ない>>193 も大概だがな。
195 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 20:10:20 ] >>194 if(a && b){ を省略したいってことじゃないかな。auto a,bだとして。 コンパイラにやって欲しい処理だ。
196 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 23:46:38 ] goto使ったら先輩にしつこくなじられるようになった うぜぇwwwwwgotoアレルギーうぜぇwwwwwww
197 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 21:33:37 ] >>196 もともと人間関係うまくいってなかっただけじゃね?
198 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 14:45:06 ] うちの下っ端で考え無しにgoto使ってるアホがいやがる うぜぇwwwww無能下っ端うぜぇwwwwwww って感じだろ
199 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 17:53:27 ] pc11.2ch.net/test/read.cgi/tech/1169473442/553-578 あたりの続き > 578 :デフォルトの名無しさん:2008/02/09(土) 17:20:17 > >>570 > >556 名前:デフォルトの名無しさん [sage]: 2008/02/09(土) 13:55:24 > >まぁさ、例外あるような言語ではgotoいらないかもしれないけど、 > >Cとかだと普通に使うよ? > >557 名前:デフォルトの名無しさん [sage]: 2008/02/09(土) 14:28:31 > >いや,普通には使わないわ(ww > > ここから始まった話題なので、 > 今に限ってはCのgotoの話をしている。pythonは今のトピックにおいて関係なし。 > Cは例外ないから>>558 がgotoなしで書けるという話も決着がついてない。 > ここで例外使えばいいという指摘自体が的外れ。 > まあ実際gotoは無くてもいいが、あると遥かリソース開放とかは便利。 > むろんGCとか例外とかがあればそっちのが便利だが。 存分にどうぞ。 あ、setjmp/longjmp使うからgoto使わないわ、というオチは禁止ね。
200 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 17:55:48 ] >>199 リソース解放のためにgotoって、、、不必要に汚ないコードができるだけだろ
201 名前:デフォルトの名無しさん [2008/02/09(土) 17:59:11 ] >>200 goto使わないともっと汚くなるんじゃない。
202 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:00:29 ] まぁgoto禁止の会社で、あらゆるコードが以下のように なってるのを見たとき、「素直にgoto使え」とオモタ。 do { if (hoge) { break; } } while (0);
203 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:05:49 ] >>199 で問題になってるコードを天災 はっきり言って呼び出し側で解放したほうがいい典型例。 呼ばれた側で解放したければ、この関数を呼んでから 解放するような関数を書けと言いたい。 > 558 名前:デフォルトの名無しさん [sage]: 2008/02/09(土) 14:35:39 > >>557 > > そう?ファンクショントレース埋め込むときとか、以下のように > エラーの場合、リソース開放して戻るときとか頻繁に使うなぁ。 > { > A *a = NULL; B *b = NULL; C *c = NULL; int result = E_UNKNOWN; > > if ((a = A_new()) == NULL) { > result = E_MEM; goto END_FUNC; > } > if ((b = B_new()) == NULL) { > ... > > END_FUNC: > if (a !=NULL && result != E_SUCCESS) { > A_free(a); > } > ... > }
204 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:07:55 ] continueもある場合は、gotoよりも明確になるように思う。 breakで外側のループを脱出するために、switchで書いたほうが良さげな 内側の多分岐がif/else if/else ifになってたりするとgoto使え、だな。
205 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:12:33 ] >>203 関数がエラーで返った場合、オブジェクトに変更が加えられていないことが 保証されるとする場合、それじゃだめやね。エラーが発生したら、まき戻す 処理が必要になる。
206 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:15:49 ] >>205 エラーの発生箇所によって巻き戻し方が違うんなら、どのみちgotoでは処理できん。 巻き戻し方が同じなら、goto先で巻き戻すのもreturn先で巻き戻すのも同じ。 と思うのだが。
207 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:19:37 ] >>206 >エラーの発生箇所によって巻き戻し方が違うんなら、どのみちgotoでは処理できん。 でもgoto使ったほうがスッキリかけるでしょ。 >巻き戻し方が同じなら、goto先で巻き戻すのもreturn先で巻き戻すのも同じ。 APIの使い勝手が大きく違うじゃない。
208 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:57:34 ] >>207 いや、だからさ、APIとしては呼び出す側は何もしなくていいの。 処理とリソース管理を分離して実装しましょう、ってだけの話。 なんで無理にgotoなんて使いたがるのか、ワケワカラン。
209 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 19:02:43 ] >>208 抽象論が多くてわかりにくい。具体的なコード書いて改善してみてくれ。
210 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 19:12:49 ] >>203 でコピペされてるコードも全然具体的じゃないけどな。
211 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 19:30:27 ] 巻き戻し処理って、本当に巻き戻すのか単にコピーをしておくのかどっちが多いの? transactional memoryって効率を求めるとすると、なにかしら約束事があったほうがよいんだろうけど。 完全に透過に見える実装にしたいならos側からアプローチしたほうが楽な気もする。
212 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 20:28:38 ] >>210 結局「gotoはダメ!って教えられたからダメダ!」で、思考停止したダケの人なのね。 >>211 >巻き戻し処理って、本当に巻き戻すのか単にコピーをしておくのかどっちが多いの? 場合による。例えば、ある処理が1,2,3,4の順番で実行することがきめられてる場合 (1を実行しないと、2が実行できない場合)、実際に実行して3でエラーが発生したら、 1,2を巻き戻す処理が必要だし。 OS側からのアプローチってどんなアプローチ?
213 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 20:34:39 ] gotoなんて設計に何の影響もない 同一関数内でしか影響のないものによくもまあそんなに熱くなれるなw これ眺める限りさほど奇天烈な使い方があるようにも思えないが。 www.google.com/codesearch?q=goto+file%3A%5C.c&hl=ja&btnG=%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%A4%9C%E7%B4%A2
214 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 20:43:49 ] >>213 >gotoなんて設計に何の影響もない gotoは設計に影響ないとしても、APIが保障するリソース管理の方針は 大いに影響がある。 下位のモジュールがエラーを返した場合、それ以下のリソースには影響 がなかったことが保障されるのであれば、モジュールは自身の管理する モジュールを開放すればよいことが保証される。 例外とデストラクタの伝播のようなもの。
215 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 20:44:26 ] んで、Cでそれを実装するには、gotoがいいよといってるわけで。
216 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 20:44:43 ] GCC の labels as value と computed goto を使うと結構豪快に遊べるけどなw
217 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 20:47:44 ] 嫌goto厨ってもしかして元N88ベーシッカーが多いのかねw
218 名前:デフォルトの名無しさん [2008/02/09(土) 20:49:13 ] コンパイラ言語で goto を使っても問題ない。 どうせ機械語のジャンプ命令に置き換わるだけなんだから。 ところがインタプリタ言語にとっては goto はパフォーマンスを低下させるやっかいもの。 10 FOR I=1 TO 100 20 FOR J=1 TO 200 30 PRINT "うんこ" 40 IF J=50 THEN GOTO 70 50 NEXT J 60 NEXT I 70 FOR J=1 TO 100 80 PRINT "しっこ" 90 NEXT J 仮にこのようなコードを実行するとしよう(細かいツッコミは無しね) インタプリタは 10行目で FOR 文に出会い、変数 I と 終了値 100 をスタックに積む 次に 20 行目で 変数 J と 終了値 200 をスタックに積む。 通常は NEXT に出会ったときに終了判定がなされ、終了値に達していれば FOR をスタックから捨てられる。 ところが 70行目で FOR〜NEXT ループの外に飛び出してしまったため スタックには先ほどの2つの FOR 変数 I と J が積まれたままになる。 さらに 70行目で FOR に出くわしたインタプリタはどういう振る舞いをするか。 スタックに FOR J が既に積まれていないかを検査し、もしあればそれを捨てる作業が必要になる。 実はインタプリタは FOR に出会うたびに、スタックをすべて検査して、重複していないか 確かめているのだ。 GOTO 文さえなければスタックをすべて検査する必要がなくなりパフォーマンスがいくらか上がるはずだな。 java が goto を目の敵にしているのは、このせい。インタプリタにとって goto は大敵なんか長文つかれた どうせ誰も読んでないだろなめんどくせぇもうやめたうんこちんちん!
219 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 20:52:59 ] >>207 こういう話ではないの? 別にどっち使ったからと言って使い勝手というかAPIが変わるとは思えない。 これだったら俺も1を選ぶけど。 //その1 void hoge() //外部に公開される関数 { void *p = malloc(65536); //ところどころでgoto END; END_FUNC: free(p); } //その2 static void hoge_impl(void *p) { //ところどころでreturn; } void hoge() //外部に公開される関数 { void *p = malloc(65536); if (!p) hoge_impl(p); free(p); }
220 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 20:57:27 ] うんこちんちん! まで読んだ。
221 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 20:58:35 ] >>212 ポカーン 自分では全然的確な例も出さずに認定かい
222 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 20:59:29 ] >>218 まだJavaをインタプリタ言語と呼んでる人がいるんだね。 正直驚いた。
223 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 21:06:34 ] 実際にバイトコードインタプリタだったとしても 機械語に翻訳されりゃasmリストのjmpと一緒じゃん。 jmp命令を使えないcpuって不便そう。
224 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 21:07:45 ] 結論 goto議論に熱中する奴は生産性が低い goto :eof
225 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 21:13:36 ] つーか、BASICのインタプリタと、 Javaのインタプリタのレベルを混同してるヴァカが現存してることに驚いた。 Javaのforでスタックなんか使ってねーっての。
226 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 21:24:38 ] >>219 その2のほうさ、管理するリソースが1つだけならまだマシだが、4つも5つも 管理している場合、そのためのサブ関数が4つも5つもできることに なるわけだが・・・。まぁgoto毛嫌いしている人には、そっちのほうが ウレピイのかもしれんが。
227 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 21:28:22 ] リソース管理なんてif文一発だろ。 お前らもっとでかいモニタ使えよ。 int ret = 0; if(init1()) { if(init2()) { if(init3()) { ret = execute(); fin3(); } fin2() } fin1(); } return ret;
228 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 21:45:05 ] >>227 そのコードは、俺の頭ではツライ。
229 名前:デフォルトの名無しさん [2008/02/09(土) 21:54:45 ] 意外にも java がインタプリタだという事を知らない人が複数いて驚いた。 「JIT」 について、もうすこし学びましょうね。
230 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 22:01:57 ] ほぉ。 Javaのバイトコードで、どういう風にforとスタックが関係するのか、 説明していただけますかね?
231 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 22:26:44 ] Code: Stack=3, Locals=2, Args_size=1 0: iconst_0 1: istore_1 2: iload_1 3: bipush 10 5: if_icmpgt 39 8: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream; 11: new #3; //class java/lang/StringBuilder 14: dup 15: invokespecial #4; //Method java/lang/StringBuilder."<init>":()V 18: ldc #5; //String line 20: invokevirtual #6; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 23: iload_1 24: invokevirtual #7; //Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder; 27: invokevirtual #8; //Method java/lang/StringBuilder.toString:()Ljava/lang/String; 30: invokevirtual #9; //Method java/io/PrintStream.println:(Ljava/lang/String;)V 33: iinc 1, 1 36: goto 2 39: return public static void main(String args[]) { for(int i=0; i<=10; i++) { System.out.println("line " + i ); } } なんというひねりのないコード。
232 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 22:31:52 ] インタプリタなのはJVMの方でJavaはコンパイラだろ。
233 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 22:32:23 ] public static void main(String args[]) { try { for(int i=0; i<=10; i++) { System.out.println("line " + i ); } } catch (Exception e) { System.out.println("boo."); } } にすると Exception table: from to target type 0 39 42 Class java/lang/Exception が追加されて、ジャンプ命令で例外処理の飛ぶ先が決まるんだな。 -ここまで同じ- 39: goto 51 42: astore_1 43: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream; 46: ldc #11; //String boo. 48: invokevirtual #9; //Method java/io/PrintStream.println:(Ljava/lang/String;)V 51: return ただしキャッチしなければパレントクラスに飛ぶというのは例外の普通の使い方。 やってる事自体はあまり変わらないけど、言語が持ってる機構は有効に使ったほうが綺麗になるって感じなのかな?
234 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 22:40:13 ] で、どのように、 BASICインタプリタで起きるようなFOR-NEXTの対応のズレの ようなことと、関係してくるんですか、と。 (BASICのFOR-NEXTは、FORを実行する時、NEXTにぶち当たったら 戻るためのポインタをスタックに積んでいるわけですが、それに 相当するコードはどこ?) それに、 あるインストラクションを実行する時点での、スタックトップは コンパイル時に確定できますよね? 仮にgotoで気ままに飛んだとしても、飛ぶ時に適宜調整すれば 問題ないわけで。
235 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 22:41:34 ] java byte code書いた人とスタック云々の人は別だよw
236 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 22:50:35 ] こりゃ失礼しました m(__
237 名前:デフォルトの名無しさん [2008/02/09(土) 23:26:01 ] CPUが java のバイトコードを直接実行していると勘違いしている人が多いですね。 javac ⇒ バイトコード ⇒ インタプリタが実行
238 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:36:27 ] よくもまあこんな前世紀的話題を得々と・・・
239 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:37:55 ] 今のSunのJVMってJITコンパイルしてないの?
240 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:40:09 ] >>238 まぁ、新しくプログラミングの世界に入ってくる人たちが、そういう疑問を持つことは 当然というか、ソウであって欲しいものナわけで。「先人達が行ってたから」といって 自分の思考を停止して妄信するよりははるかに良い。
241 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:40:59 ] ていうか、釣りだろw 釣りとしか思えないよこのインタプリタ厨。
242 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 12:29:30 ] 釣りだ。 gotoのスレでパフォーマンスの話をして、釣れると思っているね
243 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 14:58:54 ] そもそも、大域変数しか使えない言語で「変数をスタックに積むって」ありえるのか? 変数宣言なし&局所変数なしの言語の場合、変数管理表と戻り先(jump先)管理表を使うのが普通だろ?
244 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 18:24:27 ] >>243 > そもそも、大域変数しか使えない言語で「変数をスタックに積むって」ありえるのか? > > 変数宣言なし&局所変数なしの言語の場合、変数管理表と戻り先(jump先)管理表を使うのが普通だろ? BASICのFOR-NEXT制御の場合、変数名をタグとして、 FOR x IN ... 〜 NEXT x を対応させる処理系がある。 (NEXTのあとの変数名はreminderで、処理系は無視するものもある) >>218 が得意そうに解説してるBASIC処理系では、NEXT x の x の 変数名を見て、対応するFORの処理に戻るような処理系なんだろうが、 そのような場合、FORの場所だけでなく、変数名もフレームに覚えておく 必要がある。変数の値じゃなくて、変数名そのものか、ポインタかを タグとして書いておくわけやね。
245 名前:デフォルトの名無しさん [2008/02/10(日) 18:53:17 ] じゃあgotoを使うなって言われるのは、 単純にスパゲッティ化するのを防ぐだけじゃなく、 スタックを開放する作業を確実にやるためだったってことだな。
246 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 18:55:43 ] つか今時どうやったら制御構文完備な言語で goto使ってスパゲッチなコードを書けるんだよw
247 名前:デフォルトの名無しさん [2008/02/10(日) 19:02:49 ] 完備ってほどでもないと思うけど。
248 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 19:04:48 ] gotoは悪だ!という宣伝がコレまで続けられてきて、普通のプログラマ はgotoを使ったスパゲティコードに関して十分知っているわけでしょ。 そういう意味では、goto邪悪論の目標は達していると思う。 それなのに会社のコーディング規約でgotoを禁止するのは、どうみても 自社のプログラマを信用していないとしか思えない。 goto禁止したところで、do { if (hoge) break; } while(0)で、gotoに近いことを やろうと思えば出来てしまうわけだぜ。そういう会社がやるべきは、社員の 教育であってgoto撲滅では決してない。
249 名前:デフォルトの名無しさん [2008/02/10(日) 19:29:20 ] 条件分岐とループで複雑に作ってもわけ分からんしな。
250 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 19:30:07 ] ゴトーさんが泣いているぞ
251 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 19:35:51 ] おまえは、BLASの後藤か、CINTの後藤か、パラメトロンの後藤か、 なんちゃって。
252 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 19:49:17 ] >>226 その2のほうさ、管理するリソースが1つだけならまだマシだが、4つも5つも > 管理している場合、そのためのサブ関数が4つも5つもできることに > なるわけだが・・・。 >>219 の2のどこをどう考えればリソース毎にサブ関数が必要になると思えるのやら。 hoge()の中身が増えるだけだろ。 まさかhoge_implのほうがリソース管理してるとでも読んだのか?
253 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 19:51:00 ] >>248 goto邪悪論も有害だが、goto気軽に利用論はもっと有害だな。 あくまで汚ないことをやっているという自覚を持って使うべきだ。
254 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:06:09 ] 相変わらず曖昧論ばっかりだな
255 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:16:53 ] >>252 いや、そうだな。だがしかし4つも5つもリソースがあるばあいはどうすんの。 そもそもその手法じゃダメやん。
256 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:25:56 ] つまり>>227 のようになってしまうわけだし。依存関係あると。 そうじゃないなら、やっぱりサブ関数をわけて依存関係を チェインさせる?正気の沙汰じゃないな。
257 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:30:00 ] //その2 static void hoge_impl(void *p) { //ところどころでreturn; } void hoge() //外部に公開される関数 { void *p1 = malloc(65536); void *p2 = malloc(65536); void *p3 = malloc(65536); void *p4 = malloc(65536); if (p1 && p2 && p3 && p4) ret = hoge_impl(p); if (p1) free(p1); if (p2) free(p2); if (p3) free(p3); if (p4) free(p4); return ret } で何か?
258 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:34:55 ] >>257 mallocならいいが、 >例えば、ある処理が1,2,3,4の順番で実行することがきめられてる場合 >(1を実行しないと、2が実行できない場合)、実際に実行して3でエラーが発生したら、 >1,2を巻き戻す処理が必要だし。 この場合はどうする
259 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 20:38:03 ] hoge()の最後でretの中身に応じて必要な回復処理すればいいだけじゃねーの?