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


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

gotoを恐れず使う兵共がfinallyや多重breakを語るスレ



1 名前:デフォルトの名無しさん [2005/08/11(木) 11:18:15 ]
前スレ pc8.2ch.net/test/read.cgi/tech/1021364372/

454 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 00:01:22 ]
>>451
情報感謝。そういえば、そういうのも何か使ったことはあった。
ただ、そのプロジェクトだと単にビルド時に出していただけで、
それがどう使われていたのか知らない。値が高くても低くても特に何もなかった。

その値に適当な閾値を決めてレビューとかやればいいのか?
実際にプロジェクトでどういう運用がされていて、効果がどうだったのかとか、
そういう感想もあれば是非

455 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 00:05:25 ]
これ以上ないくらいスレ違いだな

456 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 00:07:52 ]
>>454
閾値はあるていどキビシ目にきめたほうがいいが、実際にレビューするか
どうかは、閾値が異常な値を示しているコードがバグを良く出すとか、
新規作成のものであるかとかいう事情を加味して考慮したほうがいい。

安定して動作しているモジュールを閾値より外れているから、といって
リファクタリングしたところで新たな不具合を生み出すだけ。
目的を見失わないようにしながら、やればいい。

しかし複雑度の計測もマダマダであって、あくまで一つの参考にしか
ならないが。

457 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 00:45:08 ]
こないだ、goto文が使われているコードを
昔作ったものから持ってった。 キー入力の評価だから
これ以上重たくしたくもない・・・というところ。

select 文二重+if文の底から出るのに breakを掛けるのは・・・

458 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 00:48:03 ]
世の中のプロジェクトは、まだまだ、リーダーとかマネージャとか上司とかの
「コーディング規約」(訳:俺の理解できない しんきのう は使うな)
が支配的なのな。

459 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 00:53:03 ]
分野によるが、多人数が関る(新人やアホが混じりやすい)プロジェクトでは必須
MISRA-Cとか

460 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 00:59:27 ]
MISRA-Cってどの程度使われてるのかね

それはさておき、MISRA-Cを適用するような分野に
新人やアホが混じってるというのはガクブルだな

461 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 01:18:15 ]
MISRA-Cは、新人やアホがまじらないための基準という意味では
まぁ有効だが、そういうやつがいない現場にとっては、無駄な
足かせにしかなっていないという矛盾がある。そして、そういうやつ
が混じらないようにする努力というのは経営陣の仕事であって、現場の
規約を固めるのはあまり意味がない。

ミスを防ぐための基準が、よけいに複雑なコードを生み出して、
逆にミスを生み出してしまうような矛盾が今のMISRA-Cにはある。

462 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 01:56:39 ]
そういうやつがいない現場の数のほうが少ない



463 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 07:33:58 ]
結局、まじめに処理構造を見直すのがマンドクセからgoto使うんでしょ。
gotoマンセ君は多人数での開発経験がないんじゃねーの?

464 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 08:11:19 ]
C覚えて2-3年程度のアマチュアが「goto、ヤベーw」とはしゃいでるだけ。

465 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 11:30:23 ]
>>463
gotoを使ったほうが可読性が高い場合に遭遇したことが無いね?

466 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 12:30:26 ]
基本文献はクヌースのStructured Programming with go to Statementsですかね。
あと、このへんで、
ttp://www.cmagazine.jp/src/kinjite/c/coding.html#index32
gotoと同じくらいダメとされている手を、gotoを避けるためだけに
使ってないか? というのは良い指標かと思う。

467 名前:463じゃないが mailto:sage [2008/02/12(火) 17:17:23 ]
>>465
もちろんあるけど、しっかり考えれば考えるほど少なくなっていくよ。

468 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 17:37:19 ]
>>466
break, continueがだめって書いてあるやつ、
使わなかったとしたらどう書く?
ちょっと想像つかない。


469 名前:デフォルトの名無しさん [2008/02/12(火) 17:41:08 ]
ちなみにこういうやつ書いたんです。
エラーはエラーなんだけどエラーの種類によって動作を変えるってやつ。
コードの参照は>>469


for i = 0 to 2
IE.navigate(str)
REPEAT; sleep(0.1); UNTIL !IE.busy AND IE.readystate = 4

// エラーページチェック
errortitles[4] = Status(ID, ST_TITLE)
for e = 0 to 4
ifb 1 <= Pos(errortitles[e], errortitles[4]) Then
select e
case 4 // エラーがなければ続行する。
break 2
case 0 // 接続エラーなら規定回数試行する。
sleep(2)
continue 2
default // その他エラーならエラー終了する。
SendSTR( メモ帳, errortitles[e] + "<#CR>", 1, false, false )
IE.navigate("about:blank")
result = false
exit
selend
endif
next
// ここには来ないはず
msgbox("エラー判定ミス")
exitexit
next

470 名前:デフォルトの名無しさん [2008/02/12(火) 17:43:44 ]
ちなみに>>469のエラーチェックを関数化したやつもあるけど、
エラーの種類ごとに動作を変えるとしたら、
結局呼び出し元でswitchでそれぞれの動作をしないといけない。


471 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 17:50:14 ]
>>468
breakやcontinueの乱用がだめという話で、
きちんと制御構造がわけるような書き方なら問題ないのでは。
実際List37の例はひどいものだし。

472 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 19:13:37 ]
>>461
ベテランプログラマだけのユートピアを作るのが経営陣の仕事だぁ?

アホか。



473 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 21:57:54 ]
アセンブラ上がりのPGだが、JMP系述語+スタック使わないで
処理できて速い方法とか、日々そんなことばかり考えてる。
メンテナンス性以前に、論理的整合性が失われて美しくないから
なんて話は、俺の頭には何のことかさっぱりわからない。

474 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 22:26:11 ]
ルール:ソースは美しくなければならない

475 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 22:35:59 ]
美しくなくとも。簡潔で軽妙ならば

476 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:14:11 ]
>>472
新人は情報学科出身で、かつ優秀じゃなきゃイラネ

477 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:38:18 ]
>>469
何段抜けるかを数字で書く多段breakって糞じゃね?

478 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:46:47 ]
>>469
こんなソースを新人が書いたら、確実に書き直させるな。

479 名前:デフォルトの名無しさん mailto:sage [2008/02/12(火) 23:55:08 ]
まずもって文法が意味不明なのでとりあえず C 風に書き下してみた。

for (int i = 0; i < 2) {
 IE.navigate(str);
 do {
  sleep(0.1);
 } while (IE.busy || IE.readystate != 4);
 errortitles[4] = Status(ID, ST_TITLE);
 for (int e = 0; e < 4; e++) {
  if (1 <= Pos(errortitles[e], errortitles[4])) {
   switch (e) {
   case 4:
    goto BREAK;
   case 0:
    sleep(2);
    goto CONTINUE;
   default:
    SendSTR(メモ帳, errortitles[4] + "<#CR>", 1, false, false);
    IE.navigate("about:blank");
    result = false;
    exit;
   }
  }
 }
 msgbox("エラー判定ミス");
 exitexit;
CONTINUE:
}
BREAK:


480 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:01:50 ]
>>479
途中で、読む気がうせた

481 名前:デフォルトの名無しさん [2008/02/13(水) 00:03:19 ]
VBでもないし何かと思ったらUWSCって何だ
厨房スクリプト言語?

482 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:19:17 ]
ひとまずコード*だけ*読んで、前提条件あんま読んでないけど

>for (int i = 0; i < 2) {
「2回」ループする意図が良くワカラン。下のコード読めばわかるかと思って、
読もうとしたが、途中で挫折。

> IE.navigate(str);
> do {
>  sleep(0.1);
> } while (IE.busy || IE.readystate != 4);
IE.readystate==4だけじゃだめなのかな。IE.busyじゃないときだけ、readystate
が有効になるのか。ならIE.readystateが-1ならbusyとかしたほうが、
"while(IE.readystate!=4)"だけですむしわかりやすい。

> errortitles[4] = Status(ID, ST_TITLE);
errortitles配列の、5番目にいきなり代入してるのが、なんじゃらほい。0〜4番目は、
どうなったのだろう?

> for (int e = 0; e < 4; e++) {
>  if (1 <= Pos(errortitles[e], errortitles[4])) {
このへんと、下をちょっと見た段階でギブアップ



483 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:22:21 ]
余計なものを全部省いて構造だけ残すと、たぶんこう。

void f() {
 while (some_condition()) {
  something();
  for (int e = 0; e <= 4; e++) {
   if (some_condition(e)) {
    switch (e) {
    case 4:
     goto BREAK;
    case 0:
     goto CONTINUE;
    default:
     return;
    }
   }
  }
  exit(-1);
CONTINUE:
 }
BREAK:
 something();
}

484 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:30:02 ]
>>483
やっぱりだめだ・・・こういう感覚を説明して理解してもらえるかわからないが、
そのコードは「普通」じゃない。読むのがすごいシンドイ。

485 名前:483 mailto:sage [2008/02/13(水) 00:32:42 ]
で、俺ならこう書く。
頭の中でしか動かしていないので合ってるかどうかは自信ないが。

void f() {
 int state = 0;
 while (state == 0 && some_condition()) {
  something();
  state = check_state();
 }
 if (state == 4) {
  something();
 }
}

int check_state() {
 for (int e = 0; e <= 4; e++) {
  if (some_condition(e)) {
   return e;
  }
 }
 exit(-1); // not reached
}

486 名前:デフォルトの名無しさん [2008/02/13(水) 00:35:50 ]
まだ、java はインタプリタじゃ無い、って言ってるヤツがいるみたいだけど。
中には、インタプリタじゃ無い、ヴァーチャルマシンだ、とか
もっとひどいのになると、エミュレータだ、とか、もうメチャクチャ言いたい放題・・・
ちょっと呆れたな。
これって、「モモヒキじゃ無い、スパッツだよ!」って言ってるオバサンと同じじゃん。

487 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:38:14 ]
>>485
あぁなんとか理解できる。サンクスw

488 名前:483 mailto:sage [2008/02/13(水) 00:52:25 ]
せっかくだから俺からも一つネタ投下。
>>485 のf()と下のコードはどっちが良いと思う?

void f() {
 while (some_condition()) {
  something();
  switch (check_state()) {
  case 0:
   break;
  case 4:
   goto END_WHILE;
  default:
   return;
  }
 }
END_WHILE:
 something();
}

489 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 00:57:07 ]
>>488
俺は>>488のほうがわかりやすいw

490 名前:デフォルトの名無しさん [2008/02/13(水) 01:40:46 ]
>>488
case 4:でsomething呼び出して
returnしてしまえばもっと見やすいと思うが。

491 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 01:44:51 ]
(ノ∀`) アチャー

977 デフォルトの名無しさん[sage] 2008/02/13(水) 00:31:00
forループのネスト構造(2重)から一気に脱出したい時に、breakだと1重しか脱出できないので困ってます。
PHPではbreak 2;みたいに書くと2重のループから脱出できるみたいなんですが、C++で同じことができる方法はありますか?
goto文はなるべく使いたくないので……。

980 デフォルトの名無しさん[sage] 2008/02/13(水) 00:50:26
>>978
ググった時に「大域脱出するとき例外処理で〜」とか書いてあるのを見たのですが、それでしょうか。

>>979
表を描くために座標をネスト構造で回しているのですが、
描画する要素がなくなったら外に出すっていうようにしたいんです。
大人しくflagにしたほうが良いですね……。ありがとうございました。

492 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 01:50:32 ]
>>491
コピペもウザイが、意図もよくわからんぞw



493 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 02:05:31 ]
(ノ∀`) アチャー

984 名前:デフォルトの名無しさん[sage] 投稿日:2008/02/13(水) 01:55:45
>>981
後で困りそうですがもっと単純に解決させました。
ループ部分だけクラス内で別のメンバ関数にして飛ばして、抜けたい所でreturnさせました……。

494 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 02:36:14 ]
>>479
× for (int e = 0; e < 4; e++) {
○ for (int e = 0; e < 5; e++) {

>>482
> 「2回」ループする意図
ADSLで瞬間的に切断される場合、数秒後に再度アクセスしたら接続される場合があるので。

>IE.readystate==4だけじゃだめなのかな。
やり方をググってまねしただけなんで。

>5番目にいきなり代入してるのが、なんじゃらほい。
終了フラグです。
まあいいやり方じゃないけどエラーを拾う判定がちゃんと働くかテストにもなるしと入れてみた。
代入してるのはウィンドウタイトル。
あと、ループはループだけ、判断は一箇所にすると、制御が単純でわかりやすいなと思ったんだけど、
forを抜けて「ここには来ないはず」と書いた場所でbreakすればいいだけだった。

もともとが長いスクリプトだったからdefaultをexitで抜けてなかったんで
そんときのループ構造が頭にあって。
やっとすっきりしたと思ったんだけど見直せばもっとシンプルになるもんだね。


495 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 06:20:53 ]
>>486
釣りいいかげんうざい。
あのね、じゃあ具体的にあんたが主張するBASICのようなコードを
JavaVMのバイトコードで示してみやがれっての。できなきゃ去れ。
二度と来るな。

496 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 07:13:52 ]
>>486
せめてJavaVM実装の書籍を1冊でいいから読破してから言え、マヌケ。

497 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 07:30:44 ]
まあ多重break/continueは可読性を落とすね。gotoのほうがナンボかマシ。
多重break/continueもgotoも無いのがベストつーか常識だけどw

498 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 07:53:56 ]
>>494
> やり方をググってまねしただけなんで。

やっぱりね…
そういう姿勢だからbreakでもgotoでも汚ないコードになるんだよ。

499 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 07:55:56 ]
JavaVMのハードウェア実装を知らないんだろうな、>486は。

500 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 08:11:16 ]
JVMについて盛り上がっている人がいるようだが、
どのJVMのことだ?sunか?

501 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 08:12:39 ]
>>500
特定の実装の話じゃないと思うが。つーか、吊りか?

502 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 08:30:34 ]
ハードウェア実装?



503 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 08:43:59 ]
荒らしはスルーで > 兵共

504 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 08:53:16 ]
picoJava のことじゃまいか<ハードウェア実装

505 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 08:58:45 ]
Jazelleとか。
一部ソフトウエアで実行するけど。

506 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 09:05:28 ]
いずれにせよBASICインタプリタとは大分違う罠

507 名前:デフォルトの名無しさん [2008/02/13(水) 09:16:38 ]
>>498
勝手な思い込みで変更する馬鹿よりましだよ。

ぐぐったら出てくるけど、作業をしているか通信をしているかをチェックするんだって。
通信が完了してから作業をするだろうけど、作業が新しい通信を要求するかもしれないだろ。
どんな流れになるかはWebサイトの作り次第だし、テストするには通信帯域を制限したり・・・

コードの流用するならそれが確かに動くかテストするべきだが、
自分でテストできないなら基本的には信用することが必要だ。


508 名前:デフォルトの名無しさん [2008/02/13(水) 09:25:01 ]
busyだけだとフレームのページで途中で抜けちゃうって話がどっかにあった。
まあレイアウトが自由にできる今はフレームなんか使ってないだろうけど。
ReadyStateだけの場合は↓。
つまり両方のチェックが必要。

hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi?print+200510/05100089.txt
IEオブジェクトで読み込み完了まで待たせるのに以下のコードで待たせてますが、
ちゃんと読み込み完了まで待ってくれません。

どのようにすれば確実に待たすことができますか?

Do While IE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Sleep 1
Loop

これならうまくいきました。
Do While IE.Busy = True Or IE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Sleep 1
Loop


509 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 10:21:31 ]
>>507
> コードの流用するならそれが確かに動くかテストするべきだが、
> 自分でテストできないなら基本的には信用することが必要だ。

唖然・・・
おまえみたいのはgotoを絶対に使うべきじゃないし、
そもそもプログラミングをするべきじゃない。

510 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 10:24:35 ]
同意

511 名前:デフォルトの名無しさん [2008/02/13(水) 10:25:49 ]
>>509
なに俺様は完璧とか言ってんの?

512 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 10:58:49 ]
そもそもコードは、誰が書いたものでも信用できない。



513 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 11:10:41 ]
自分自身が書いたコードすら信用できないorz


514 名前:デフォルトの名無しさん [2008/02/13(水) 14:29:42 ]
「try 〜 catch」 を使おうが、「for/while 〜 break ラベル」 を使おうが、
汚いスパゲッティ・コードはいくらでも書ける。
たとえば、フラグ変数作って、break break break break 連発するヤツがいい例。
goto 使うやつに比べれば、「do 〜 while (false)」 や 「switch 〜 break」 を使うなど、
トリッキーなコード書いて得意満面になってるキチガイよりよっぽどマシだ。

要するに、「コードの美しさ・汚さ」と、「goto 使うな」 論は無関係。プログラミングの芸術的センスの問題だよ。
java、php、ruby そのた、言語によって大域脱出の仕方が違うのは
どの方法が正しい・優れているという基準が無いからで、どの言語作者も頭を悩ませている問題なんだろう。

goto の何が問題なのかと言えば、インタプリタやコンパイラの内部処理の都合上、
パフォーマンスを低下させる要因になっているから。
特に while(・・・) {・・・} みたいに { } ブロックを多用する言語は、goto で ”あらぬ方向” へ脱出される事を極端に嫌う。
これは { } によって確保したスタックの管理がくずれるから。
ここらへんは実際に目には見えない部分なので、なかなか理解が難しいと思う。
自分でインタプリタやコンパイラを作ってみれば経験できる事なのだが、いまどき、そこまでするヤツはおっとまた
字数制限がうざいなもっと長文書ければいくらでも語れるんだが続きはまた暇なときにでも。うんこちんちん!

515 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 14:33:20 ]
長文とかどうでもいいからベンチの結果ひとつでも(張|貼)ってくれ

516 名前:デフォルトの名無しさん [2008/02/13(水) 14:39:27 ]
無茶言うなよ。java と basic と php とベンチで比べて何の意味がある?

517 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 14:43:13 ]
>>514
> これは { } によって確保したスタックの管理がくずれるから。

今時、そんなソースコードにべたべたのインタプリタなんて珍しいわ。

コンパイラや、ソースコードを一回全部なめて、内部構造に
するようなインタプリタなら、ローカル変数のアクセスのために、
処理系はスタックの現在のオフセットを常にわかっている必要がある。

だから、ジャンプ元とジャンプ先でスタックのオフセットがずれるなら、
そのぶんをジャンプの直前か直後に調整して終わり。難しい話じゃない。

Javaのバイトコードを示していただきたいなぁあなたにも。

(あ、Rubyのブロックはクロージャだから別物ね)

518 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 14:47:17 ]
gotoでforループの中に飛び込もうとするコードを
はじめて見たときはびっくりしたわ

519 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 14:51:06 ]
というかスタックの奴等こっちでやれ。goto関係ないし。
pc11.2ch.net/test/read.cgi/tech/1188688416/l50

520 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 15:05:50 ]
>>514はN88BASICでブイブイ言わせているビルゲイツ

521 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 15:10:52 ]
MS-DOS版N88日本語BASIC(86)コンパイラー

ナゲー

522 名前:デフォルトの名無しさん [2008/02/13(水) 17:02:48 ]
このすれは「どうして1たす1は2なの?どうして?どうして?」って言いそうな連中ばかりだな。



523 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 17:07:13 ]
コンピュータの気持ちになってみると 1 + 1 は 10 です

524 名前:デフォルトの名無しさん [2008/02/13(水) 17:15:51 ]
>>523

ここでコンピューターの気持ちで会話してきてください。
できれば↓のスレの書き込みの翻訳してくれるとありがたい。

1101011 1100001 1101001 1110111 1100001
pc11.2ch.net/test/read.cgi/prog/1201423463/


525 名前:デフォルトの名無しさん [2008/02/13(水) 17:56:17 ]
goto師はどこいった

526 名前:デフォルトの名無しさん [2008/02/13(水) 18:30:05 ]
回線の問題というか、pingでtimeoutでまくり

527 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 19:08:23 ]
>>518
コーヒーふいたじゃねーかw

どんなコードかちょっと気になるw

528 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 19:25:24 ]
直接gotoを使ってはいないが、
ループの中にswitch-caseで飛び込むコードって奴があるな。
Duff's device でググると出てくる。
(CGの人ならPorter-Duff operatorのDuff氏とか言うと、へーとか思うはず)

529 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 19:40:41 ]
do {             /* count > 0 と仮定 */
 *to = *from++;       /* to がインクリメントされていないことに注意 */
} while (--count > 0);

これを、下のようにして最適化か。こう書いてコンパイル通る
ことすら知らなかったわw

しかし昔memcpy実装させられたとき、条件判定へらす努力したり
ワード単位でコピーしたりしたんだが、標準で用意されて
いたARMのlibcに速度が遠くおよばなくて愕然とした記憶があるなw

switch (count % 8)  /* count > 0 とする */
{
 case 0:     do { *to = *from++;
 case 7:        *to = *from++;
 case 6:        *to = *from++;
 case 5:        *to = *from++;
 case 4:        *to = *from++;
 case 3:        *to = *from++;
 case 2:        *to = *from++;
 case 1:        *to = *from++;
         } while ((count -= 8) > 0);
}

530 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 20:15:51 ]
どのみち、天才の考えることは凡人には理解できないのでメンテ不可ですわ。

531 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 20:21:51 ]
>>514
いいからJavaVMの実装本を読めって。
自分がどんなに時代遅れな発言をしているか
よーくわかるから。

532 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 20:34:59 ]
>>514
> goto 使うやつに比べれば、「do 〜 while (false)」 や 「switch 〜 break」 を使うなど、
> トリッキーなコード書いて得意満面になってるキチガイよりよっぽどマシだ。

日本語に訳すと、
1+1を3と言うやつに比べれば、2+3を6と言う奴や3+1を2と言って得意満面に
なっているキチガイよりよっぽどマシだ。

といったところか。そんな>>514に良い言葉を教えてあげよう。
目糞鼻糞、どっちも糞。



533 名前:デフォルトの名無しさん [2008/02/13(水) 20:50:16 ]
今老舗特集やってるけど、昔からの技術をそのまま受け継いで応用することで普通の工業機械では作れないものを作れてるってさ。
確かに技術は進歩してるし、クソなコードは多いが、よい結果を出しているものはよい方法かもしれない。

紙すきのでやってたけど、手作業を機械でやることで品質の安定したものを大量に低コストにやってるが、
技術の開発は道具こそ工夫するものの人間が手でやっている。

プログラミングで自動化機械といえば、ソースコードのコンパイルとかスクリプトでの作業。
機械設備はコーディングをサポートしてくれる開発環境とかライブラリ。
そういうのを駆使して効率よく新しいものを作るのがプログラマの仕事。

決まりきったやり方が正しいのか最適なのかたまには見直してみるのもいいが、
基本はそれをまねしてやることだ。

何もかも完璧に分かってないといけないとか言ってたら時代の波に飲まれておしまいだ。


534 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 20:59:14 ]
>>533
先人のコードをまねることは大切だ。
だが、自分のプログラムに応用する時には
そのコードをしっかり読んで動作を理解してから。
これができない奴はプログラムを書くべきではない。

535 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 21:00:03 ]
つーか、>>494、かなり必死だなw

536 名前:デフォルトの名無しさん [2008/02/13(水) 21:04:10 ]
>>534
習うより慣れろだ。
正しいか間違ってるかは、うまくいくかいかないかで判断しろ。


537 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 21:08:24 ]
ひょっとして、>>469がうまくいってる例だと思ってる? まさかな。

まあ、少なくとも元のコードの動作を理解できるまでは、
それを使ったコードを人様に見せるのは止めたほうがいい。

538 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 21:09:18 ]
>>536
> 習うより慣れろだ。
> 正しいか間違ってるかは、うまくいくかいかないかで判断しろ。

仕様に照らして、な。
「実は実装依存」なコードを量産されるよ?

539 名前:デフォルトの名無しさん [2008/02/13(水) 21:09:43 ]
>>529
そりゃmemcpyがコンパイラに組み込まれてたんじゃね?
そういう場合、libcのmemcpyは関数ポインタ取るためだけに用意されている。

540 名前:デフォルトの名無しさん [2008/02/13(水) 21:18:43 ]
>>537
しっかり動いてますが何か。
テスト済みですが何か。

541 名前:デフォルトの名無しさん [2008/02/13(水) 21:29:23 ]
論破されて窮地に追い込まれると、
「関係ない話は別のスレでやれ」 とか
「〜の本を読め」 とか言って相手を囲いの外に追いやろうとする
典型的な厨房の集うスレはここですか?

542 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 21:46:36 ]
>>539
コピーするサイズに応じて、最適なコードをそれ専用に生成するってこと?



543 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 21:56:02 ]
>>540
動けばいいと公言する奴のコードに限って実は動かないんだよ。
どうせ自分で何回か使ってみただけなんでしょ?
これだから、ゆとり世代は・・・

544 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 21:58:53 ]
>>540
まさかとは思ったが、本気で>>469がうまくいってる例だと思ってるのか。
このスレのgotoを恐れずに使う兵共にとっても>>469は糞コードだぞ。

545 名前:デフォルトの名無しさん [2008/02/13(水) 22:00:21 ]
>>543
「動く」と胸を張っていえるからリリースするもんだろ。
それが動かなくなるのがバグだろ。
バグに遭遇したことないやつが存在するんなら確かにそういえるかも知れんな。

546 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 22:05:31 ]
gotoの弊害はむしろ保守性の低さだろ

自分だけが使う書き捨てのプログラムなら別に>>469の糞コードでも良し

547 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 22:07:59 ]
>>545
それがさあ、「動けばいい」って奴はロクなテストやってないのが相場なの。
大抵、自分の手元の環境で数回から数十回動かしてエラーが出なきゃOKって程度のテスト。

特に最近のゆとり君は適当にググってきたコードをコピペするからひどい。
何故動くのか理解しないまま数回動かしただけで「動きました」とか言い出す。
もうアフォかと。

548 名前:デフォルトの名無しさん [2008/02/13(水) 22:30:31 ]
>>547
テストしてないのを問題視するのはいいとして、テストもせずに駄目出しするのもどうかと思うが。

549 名前:デフォルトの名無しさん [2008/02/13(水) 22:32:06 ]
>>547
テストしてないのを問題視するのはいいとして、テストもせずに駄目出しするのもどうかと思うが。

550 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 22:35:55 ]
>>548 テストしていないものは駄目出しされて当然だろう

551 名前:デフォルトの名無しさん [2008/02/13(水) 22:38:01 ]
>>550
テスト済みと書いてる字が読めないならプログラム組むな

552 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 22:42:02 ]
>>551
へー、どんなテストしたの?
ちゃんと異常系までテストした?



553 名前:デフォルトの名無しさん [2008/02/13(水) 22:44:15 ]
>>552
どんな異常だよ

554 名前:デフォルトの名無しさん mailto:sage [2008/02/13(水) 22:47:37 ]
例えば
>>494
> > 「2回」ループする意図
> ADSLで瞬間的に切断される場合、数秒後に再度アクセスしたら接続される場合があるので。

のあたり、実際に切断された場合の回復処理で正常にアクセスできたことを
切断時間などを変えながら複数の状況でテストしたのかい?
切断された後、一旦回復してすぐまた切断される状況は?






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

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

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