07/07/19 00:50:51
LISPだと自己書き換えってどういう感じに捉えられているんだろう?
401:仕様書無しさん
07/07/19 01:00:31
すべてがS式なんだから、コード書き換えもアリとは思う。
けど、アルゴリズムとしてトリッキーに過ぎる感はあるな。
で、そういう感覚もっていることは、PGとしては大事。
402:仕様書無しさん
07/07/19 01:11:23
longjumpで書き換えまくるのは普通だし
今でもそうゆうコード書いてる。
書くなって言われるけどなんでって思う
403:仕様書無しさん
07/07/19 01:18:32
テクニックとしては面白いんだけどな。バッファオーバーラン攻撃の基本だし。
だからといって、製品の中に自己書き換えを組み込むのは勘弁。動的に書き換わるコードは追跡が難しすぎる。
動的コード生成にしても、機械語直接生成よりもスクリプトを吐く方が簡単に済みそう。
404:仕様書無しさん
07/07/19 01:26:53
>>402
longjmpは自己書き換えしなくても作れるだろう。
ものすげー変なCPUまで把握してないが。
405:仕様書無しさん
07/07/19 02:18:03
コード書き換えはマルチタスクで動かせないだろ
406:仕様書無しさん
07/07/19 06:58:17
iTRON準拠のマルチタスク環境では動いていたというか動かしていたよ。
407:仕様書無しさん
07/07/19 10:06:50
>>405
>コード書き換え
と
>マルチタスク
に、まるで相関がない。
408:仕様書無しさん
07/07/19 15:50:24
自己書き換えはすたれてるけど、コード生成自体は ATL のサンクとか
JIT コンパイラ的技法とかで必要に応じて使われているよね。
409:仕様書無しさん
07/07/19 18:43:12
HaskellのコンパイラがDEP(データ実行防止)に引っかかった。
HaskellはHaskell自身で書かれているらしいから、どうもコード生成or自己書き換えしてるっぽい。
まだまだ現役だな。
410:仕様書無しさん
07/07/19 19:24:16
>>409
>>408
>JIT コンパイラ的技法
411:仕様書無しさん
07/07/19 22:37:16
ふとリコンフィギュラブルを思い出した。
URLリンク(www.atmarkit.co.jp)
412:仕様書無しさん
07/07/19 23:57:15
ふとりプリキュアに見えた
413:仕様書無しさん
07/07/20 00:28:50
>>412
病みすぎ
414:仕様書無しさん
07/07/20 14:03:15
うーん。「自己変更コード」とか「自己書き換えコード」とか呼ばれているけど。
誰も「自己改竄コード」とは呼ばないな。
415:仕様書無しさん
07/07/20 14:08:29
普通は悪用目的の書き換えを指すんじゃまいか?改竄て。
416:仕様書無しさん
07/07/20 23:08:58
進化するコード
417:仕様書無しさん
07/07/20 23:32:27
>>414-416
だんだんウィルスになってないか?
418:仕様書無しさん
07/07/21 00:35:34
暴走してウィルス化するなんていかにも漫画的なシチュエーションだ
419:仕様書無しさん
07/07/21 01:11:30
ソースが貼られず自称上級者の醜い言い争いばっかりじゃねーか
もっとトンデモソースで俺を癒してくれよ
420:仕様書無しさん
07/07/21 03:18:33
switch( cValue ) {
case 0:
hogehoge( );
break;
case 1:
・・・
case 255:
hugahuga( );
break;
default:
ASSERT( False );
break;
}
421:仕様書無しさん
07/07/21 05:19:36
これでcValueがucharなら笑えるな
422:仕様書無しさん
07/07/21 08:40:07
関数名が func0()~func255() じゃないってことは、コボラーじゃないのか....
423:仕様書無しさん
07/07/21 09:22:02
while( flg == TRUE){
switch( hoge){
case 1:
hage1();
hoge = 2;
break;
case 2:
hage2();
hoge = 5;
break;
・・・・・
case 25:
hage25();
hoge = 10;
break;
}
}
こんな感じのswitch文が3つあってループの関数は1000行くらいある。
当然コメントも仕様書もマニュアルも何もない。あるのはソースだけ。
VC++1.52でコンパイルするのだが、改変して行数が増えるとコンパイラがコンパイルしてくれない。
case12 とかで hoge = 0 とかしてるのと、あっちこっちジャンプしながら
最終的にcase12にたどり着くので無限ループにはなっておらず、しょっちゅうトラブるが、大抵はなんとなく動いている。
だけど何で動いているのか分からない上に、改造しようにも手がつけられない。
424:423
07/07/21 09:24:38
あ、case 12ではhoge=0じゃなくてflg=FALSEだった。
ま、5年ほど前に面倒見させられたソースです。
その部分はごっそり書き直したけどね。
425:仕様書無しさん
07/07/21 09:25:14
>>423
コードの意味がわからないってのはわかるが、
改変して行数が増えるとコンパイラが通らないって何?
VC++1.52だと最大行数の制限があるの?
426:仕様書無しさん
07/07/21 09:27:51
>>423
パーサーとかそんな感じで作るけど
#ifdef DEB_PRINTしこんで
コールグラフ作ればいいだろ。
んで文法作ればいい。おそらく処理しきれない
例外を見過ごして別の規則に遷移してるだけ
じゃねーの?
427:仕様書無しさん
07/07/21 09:28:44
16ビットの制限とかあるんじゃね?
428:仕様書無しさん
07/07/21 09:33:31
>423
hogeX()や各case値に意味あるんだろうから、そっから状態遷移図でも描いて見れば。
429:仕様書無しさん
07/07/21 09:46:32
>>428
hogeX()や各case値に意味あるケースは稀じゃね?w
430:仕様書無しさん
07/07/21 09:49:31
そうなのかw
431:仕様書無しさん
07/07/21 09:55:27
caseでのコードではこんなのあったな@Java
メンテしろと言われたけど、拒否したら左遷された
後任は自殺未遂したらしいけど・・・
うろ覚え
int i = 20;
label WHILE_LABEL;
while(true) {
switch (i) {
case -3:
i = func3();
break WHILE_LABEL;
case -2:
i = func3();
break WHILE_LABEL;
case -1:
i = func3();
break WHILE_LABEL;
// 中略
case 50:
i = func50();
break;
default:
i = func0();
}
}
423のに似ているけど戻り値がリザルトコードになっていてマジでカオス
432:仕様書無しさん
07/07/21 10:25:39
オブジェクト指向はおろか構造化すら怪しいグラマが必死に考え出したコードっぽいな。
こんなコードが随所にあるなら431は拒否して正解だ。
433:431
07/07/21 10:31:32
随所どころか、辛うじて理解できた一部だよ
結局、ほとんど理解できなかった
434:仕様書無しさん
07/07/21 10:42:34
例はちょっと書けないけど最強にカオスなコードならあるぞ
make
yaccでmake+コード自動生成
生成コードmake
yaccでmake+コード自動生成
・・・
これが15回も繰り返されるカオスなコードあったよ
435:仕様書無しさん
07/07/21 11:58:45
>>434
それは何のプログラムなの?
436:423
07/07/21 12:10:28
>>425
1関数のサイズの上限が決まってたと思う
>>426,428
何年も前に終わった仕事について批判されてもなぁ・・・
大体1関数が1000行って時点で何かおかしいんだから直して当然だろ
437:仕様書無しさん
07/07/21 13:08:52
関数ってどんなに多く書いても数百行で済まないか?
絶対処理分割できるぞ
438:仕様書無しさん
07/07/21 14:23:36
>>436
関数の制限じゃなくてswitchの制限だと思うよ。
439:仕様書無しさん
07/07/21 14:51:16
>>437
普通に手続き言語をやってくれば、どんなに長くても数百行なんだが、
大昔のPLCしか触ったことない奴だとだらだら書く事しか知らなくて、1000行とかいく事がある。
440:仕様書無しさん
07/07/21 16:49:09
実行される行数が50を超えたらそれは長すぎ。
441:仕様書無しさん
07/07/21 16:52:49
>>440
実行される行数ってコンパイルした後の話か?
442:仕様書無しさん
07/07/21 17:38:24
実行後の行数なんて意識する必要ないだろ、50行超えたら読みにくいだけ
443:仕様書無しさん
07/07/21 17:43:39
別にコードなんて動けばどーでもいいんだよ
オマイラだってどうせ適当に書いて後は野となれ山となれだろう?
この会社辞めようと思ったソースコードなんてお高くとまってないで
正直になれよ
プログラムなんてちゃんと動けばそれでいいんだよ
444:仕様書無しさん
07/07/21 17:44:18
煽り乙
445:仕様書無しさん
07/07/21 17:54:01
>>443
中国産は長い・意味不明・動かないの3拍子揃ってるぜw
446:仕様書無しさん
07/07/21 18:05:21
>>445
コメントが中国語なら尚可。