次世代のインテリジェントdiffを思いついた。実装者求む
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2011/08/14(日) 18:29:38.58どういう事かというと、
改行、空白、関数名、変数名、関数や引数の順番などを変えても
コードの動作の点から違いがなければ、変わってないと
判断してくれるdiff。
簡単なリファクタリング、つまり単純なメソッドの移動や
コードのインライン化、コードの関数化、
様々な、機械的にできてしまうコードの変更をやっても
違いがないと判断してくれるdiff
これ、実現するには静的言語じゃないとまず無理だろうな。
ってことでまた静的言語 vs 動的言語 スレ
0002デフォルトの名無しさん
2011/08/14(日) 18:34:35.340003デフォルトの名無しさん
2011/08/14(日) 18:47:58.62とりあえずソースコードをASTに落とし込め。
0004デフォルトの名無しさん
2011/08/14(日) 18:59:47.760005デフォルトの名無しさん
2011/08/14(日) 19:06:55.05この手のバカに付き合うのは時間の無駄で、
バカはこちらの時間を消耗させようとしてアピールをしてくるのだと
0006デフォルトの名無しさん
2011/08/14(日) 19:21:37.88お前いいこと言うな
俺は頭がいいからこのスレにはもう触らないようにするよ
以下、馬鹿が1000まで時間を浪費するスレ
0007デフォルトの名無しさん
2011/08/14(日) 19:34:04.21http://toki.2ch.net/test/read.cgi/bread/1310871655/
0008デフォルトの名無しさん
2011/08/14(日) 22:20:20.33言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
京都大学霊長類研究所
0009デフォルトの名無しさん
2011/08/16(火) 17:12:42.12diffとかではなく、検索エンジンのプリプロセッサとして開発すれば
需要が大きいと思う。
ConvertSecurityDescriptorToStringSecurityDescriptor
こういう長い関数が入っているテキストと比べると、
3^3 + 4^3 + 5^3 = 6^3
こういう簡単な関数しか使っていない式は、検索するのが難しい。
0010デフォルトの名無しさん
2011/08/17(水) 01:37:24.09オブジェクトファイルや実行ファイルってバイナリで比較ってこと?
それよりも構文解析した結果を比較するべきでは?
最適化技術って、ようするには意味は同じでコードを入れ替える技術でしょ?
これを応用すれば、1*2と2*1というコードを同じと見なせるんじゃない?
インライン展開による最適化を応用すれば、関数にしてもしなくても
同じと見なせるかもしれない。
0011デフォルトの名無しさん
2011/08/17(水) 08:22:07.890012デフォルトの名無しさん
2011/08/17(水) 08:50:25.23こんなdiff本当に欲しいか?
0013デフォルトの名無しさん
2011/08/17(水) 21:37:50.69リファクタリングの定義で検索したら真っ先に
外部から見たときの振る舞いを保ちつつ、理解や修正が簡単になるように、ソフトウェアの内部構造を変更させること。
って書いてあるのが見つかったよ。
>>12
逆に考えよう。
スパゲティコードをリファクタリングして綺麗になったコードが、
スパゲティコードと動作が変わっていない。
ごちゃごちゃしたコードを壊すことなく修正できたと他人に証明できるとしたらどうだろうか?
0014デフォルトの名無しさん
2011/08/18(木) 12:27:48.22例えばこれらの同一性を保証するのか?
--
puts("0 1 2");
--
int a;
a = 0;
loop:
if (a == 3) goto end;
printf("%d", a);
if (a == 2) putchar('\n'); else putchar(' ');
a = a + 1;
goto loop;
end:
--
for (int i = 0; i < 3; ++i) printf("%d%c", i, i == 2 ? '\n' : ' ');
--
そりゃ大変だな。
0015デフォルトの名無しさん
2011/08/18(木) 19:42:08.160016デフォルトの名無しさん
2011/08/18(木) 22:42:55.74単体としてのインターフェースが変わる場合、
たとえば、メソッドのクラス間の移動で使えなくなること。
つまりテストのメンテナンスコストが必要になることだよ。
0017デフォルトの名無しさん
2011/08/18(木) 22:46:56.40それはまず無理だよ。
できるとしたら、変数名・関数名の違いと
リファクタリングツールによる半自動的な変換コード。
選択範囲を選ぶだけで、動作が全く同じコードに
自動で変換できるのなら、比較も可能でしょ?
その例では使用している関数が違うから
さすがにリファクタリングツールだけで変換は不可能。
0018デフォルトの名無しさん
2011/08/19(金) 07:15:15.69え?>>1が言うようなdiffがあればテスト不要だとでも?冗談でしょwww
0019デフォルトの名無しさん
2011/08/19(金) 17:37:58.75同値性の判定自体が計算可能かというと、そうでもないぞ
0020デフォルトの名無しさん
2011/08/19(金) 18:06:16.230021デフォルトの名無しさん
2011/08/20(土) 03:02:18.11> え?>>1が言うようなdiffがあればテスト不要だとでも?冗談でしょwww
え? 世の中にいろいろテストサポートツールがあるけど、
それがあればテスト不要だとでも?
それともテスト不要にならないから、テストサポートツールは
意味が無いと言いたいの?
自分で意味不明なことを言っていると思わない?
0022デフォルトの名無しさん
2011/08/20(土) 06:39:30.98意味不明なこと言ってるのはお前だっつーのwww
>>16は「単体テストの欠点は、テストを書かないといけないこと(キリッ」
とか言っちゃってるから、このアホはテストすら書かない土方だろwww
0023デフォルトの名無しさん
2011/08/20(土) 06:52:23.31優先順位が高い土方には、>>1のいうようなdiffが必要なのかもね
普通のプログラマは、そんなdiffは作るのが大変な割に
得られるメリットが殆ど無い(どうせ単体テスト書くし)から興味ないけどね
というわけで、欲しいなら自分で実装すれば?www
0024デフォルトの名無しさん
2011/08/20(土) 09:36:45.21お前は、手動テストの欠点を言ったら、
手動でテストしないと思っちゃうのか?
0025デフォルトの名無しさん
2011/08/20(土) 12:49:21.080026デフォルトの名無しさん
2011/08/20(土) 13:17:34.85例えば自動テストは手動テストの欠点を補ってくれるけど、
>>1のdiffは単体テストの欠点を全く補ってくれないよね?
一体>>16は何の意図で書き込まれたの?
0027デフォルトの名無しさん
2011/08/20(土) 13:55:22.440028デフォルトの名無しさん
2011/08/20(土) 16:17:43.380029デフォルトの名無しさん
2011/08/20(土) 19:43:11.04だって俺小学校のときに毎朝小テストとかやらされるの嫌いだったし…
俺が書いたプログラムだっていちいちテストされるの嫌いだと思うんだ
0030デフォルトの名無しさん
2011/08/21(日) 00:43:34.38単体テストの欠点を補ってるよ。
修正前と修正後、それを単体テストなしに
同一であると比較できる。
0031デフォルトの名無しさん
2011/08/21(日) 00:46:39.25それは単体テストの欠点じゃないだろ。
単体テストの欠点というのは、
単体テスト自体に悪い所があるということだ。
それだと単体テストをしないでも同一であることを
比較できるってだけで、単体テストが不要になっているだけ。
それはとても便利なことだが、
単体テストの欠点に対する反論ではない。
どうだ参ったか。
ということで単体テストの欠点を補うものじゃないだけで、
あったら便利だよね。あれ?そういう結論でいいの?w
0032デフォルトの名無しさん
2011/08/21(日) 08:52:11.86同一性が保証されて、何か嬉しい事があるの?
0033デフォルトの名無しさん
2011/08/21(日) 08:56:14.30ツールが変換履歴を保存出来るようになってれば十分だと思う
0034デフォルトの名無しさん
2011/08/21(日) 11:42:39.28テストって自動テストだけじゃねーぞ
手動でテストしてる場合もある。
0035デフォルトの名無しさん
2011/08/21(日) 11:46:38.23なぜツールに変換履歴を取る機能があるか、
その理由を考えてみようよ。
動作は変わらないのに、コードの表面をがらっと
変えてしまうから、コードレビューが難しいからだよ。
答えは何も変わってない。が正解なのに、
それを調べるのは大変。
0036デフォルトの名無しさん
2011/08/21(日) 11:52:25.77ユニットテストは無いけど長く使われてて枯れてるプログラムの
リファクタリングに使えば便利かな?
0037デフォルトの名無しさん
2011/08/21(日) 11:52:35.670038デフォルトの名無しさん
2011/08/21(日) 11:58:02.43テストを人間が書くのって馬鹿らしいと思うw
0039デフォルトの名無しさん
2011/08/21(日) 14:51:06.740040デフォルトの名無しさん
2011/08/21(日) 15:11:28.58もちろん全てのリファクタリングではないが、
リファクタリングの一部は場所を指定するだけで
コンピュータがやってくれる。
リファクタリングはすべて人間が手でやるしかない
言語もあるようですからw
0041デフォルトの名無しさん
2011/08/21(日) 15:13:48.270042デフォルトの名無しさん
2011/08/21(日) 15:20:39.85そうだよ?
例えば、引数順番だけの入れ替えというリファクタリングの
ためだけにテストを書く馬鹿はいない。
だがコードレビューにおいて、引数の順番を変えるという
行為に対して、それが正しく行われているか確認する必要が
「テストを書く馬鹿はいない」という前提のもと、
それをどうやって確認するのか?
たとえテストが書かれていたとしても、それが
完璧なテストであるという根拠はあるのか?
0043デフォルトの名無しさん
2011/08/21(日) 15:31:19.70で、当然コンパイラが正しくコンパイルするか保証無いから
いつも心配でたまらないんだね
実際、最近でもJDK7のループ最適化にバグ在ったしね
0044デフォルトの名無しさん
2011/08/21(日) 15:49:52.220045デフォルトの名無しさん
2011/08/21(日) 16:27:09.05ことがあるけど、これって同値性が壊れてるよね?
こういうのは考慮しないってこと?
0046デフォルトの名無しさん
2011/08/21(日) 17:31:07.91ここで言っているのは、機械的なリファクタリングの話。
範囲を選んでコンピュータで自動処理させただけで
バグが治ったりはしない。
0047デフォルトの名無しさん
2011/08/24(水) 21:49:41.570048デフォルトの名無しさん
2011/08/24(水) 23:05:03.60■ このスレッドは過去ログ倉庫に格納されています