トップページ⇒tech
1001コメント350KB

やっぱり動的言語では安全なソフトは作れない 3

■ このスレッドは過去ログ倉庫に格納されています
0001uy2011/06/20(月) 01:06:27.48
前スレ
http://hibari.2ch.net/test/read.cgi/tech/1306571666/
0232デフォルトの名無しさん2011/06/24(金) 11:33:18.35
>>229
>>58のいう「スニペットの流用」がどれだけやり易いかを
コードを例にして議論してる

もし、>>58のいうようにスニペットの流用が静的言語の方が優れてるなら、
既存のコードから少ない修正で別の用途にも使えるはず
0233デフォルトの名無しさん2011/06/24(金) 12:26:01.20
いつからトイプログラムスレになったの?
0234デフォルトの名無しさん2011/06/24(金) 12:39:54.75
>>226>>231
エロい人、乙であります
0235デフォルトの名無しさん2011/06/24(金) 13:17:16.77
玩具のような簡単なテストコードは、ユーザーが自分の安全を自分で確認しやすい
難解な手法は「俺が検証しなくても誰かがするだろう」というパターンに陥りやすい
0236デフォルトの名無しさん2011/06/24(金) 14:04:04.66
なんかRubyのRangeやイテレータの類が便利に使える事例と言うだけで
静的動的は関係ない例ばかりだなぁ。
0237デフォルトの名無しさん2011/06/24(金) 14:18:33.35
静的型と関係なく使える道具が増えたら、
動的言語で安全なソフトが作れる可能性が大きくなるな。
0238デフォルトの名無しさん2011/06/24(金) 14:27:50.76
動的言語は
危険、遅い、臭いの三重苦だ
0239デフォルトの名無しさん2011/06/24(金) 14:51:15.04
そういう水掛け論よりはコードで示したほうが建設的だろうに
自慢のIDEでちゃちゃっと書いてくださいよ
え?もしかしてトイプログラムも書けないの?
0240デフォルトの名無しさん2011/06/24(金) 14:53:07.14
あんなネタどうでもいいから、 eval(文字列) を書いて下さいよ。
もちろんevalの手前にあるローカル変数にもアクセス出来る奴。

でなきゃ「動的言語と利便性はたいして変わらない」なんて言えないでしょ?
0241デフォルトの名無しさん2011/06/24(金) 15:08:39.52
その前にevalがあると利便性を感じるような現実的な例を挙げてくれ。
0242デフォルトの名無しさん2011/06/24(金) 15:10:47.41
>>241
データ中にコードを埋め込めるので、データ側で何でも書けるようになる。
0243デフォルトの名無しさん2011/06/24(金) 15:13:07.06
具体例を挙げてくれ。
0244デフォルトの名無しさん2011/06/24(金) 15:14:56.08
evalで安全なソフト
0245デフォルトの名無しさん2011/06/24(金) 15:17:36.88
#!/usr/bin/perl -w
$_='while(read+STDIN,$_,2048){$a=29;$b=73;$c=142;$t=255;@t=map{$_%16or$t^=$c^=(
$m=(11,10,116,100,11,122,20,100)[$_/16%8])&110;$t^=(72,@z=(64,72,$a^=12*($_%16
-2?0:$m&17)),$b^=$_%64?12:0,@z)[$_%8]}(16..271);if((@a=unx"C*",$_)[20]&48){$h
=5;$_=unxb24,join"",@b=map{xB8,unxb8,chr($_^$a[--$h+84])}@ARGV;s/...$/1$&/;$
d=unxV,xb25,$_;$e=256|(ord$b[4])<<9|ord$b[3];$d=$d>>8^($f=$t&($d>>12^$d>>4^
$d^$d/8))<<17,$e=$e>>8^($t&($g=($q=$e>>14&7^$e)^$q*8^$q<<6))<<9,$_=$t[$_]^
(($h>>=8)+=$f+(~$g&$t))for@a[128..$#a]}print+x"C*",@a}';s/x/pack+/g;eval
0246デフォルトの名無しさん2011/06/24(金) 15:18:14.65
>>244
そりゃサンドボックスの話になるな。べつに不可能事じゃない。
0247デフォルトの名無しさん2011/06/24(金) 15:27:57.94
eval自体がどうっていうより、パーサとインタプリタを内蔵することで機能拡張を可能にするアプリならいくらでもある。
emacs ,、GIMP, ブラウザ, 等がそうだな。
アプリの上で動くスクリプトを書くんじゃなくて、そういうアプリを作るにはパーサとインタプリタを含むエンジンを内蔵するしかない。

もう一つのパターンは、単に「簡単なリフレクション」として用いられる。
リフレクションが必要だと思われるあらゆる例で、リフレクションよりも簡潔に書くことができる。
0248デフォルトの名無しさん2011/06/24(金) 15:34:12.26
evalが無い、はいそうですね。でおしまい。

>>86で挙げられたPythonの型チェックにしても実行前に検証は可能かと
問われればそれは無理。これもはいそうですね、でおしまい。

つうかパラダイムが違うんだから一方で存在する機能が他方で存在しない
ことなんて普通。

evalがどうしても必要な問題ならevalが存在する言語でプログラム書けば
良い。自分だけの小道具として使うならともかく、他人様の入力を受け
付けるシステムで気軽に使える場面がそう豊富だとは思わないが。
0249デフォルトの名無しさん2011/06/24(金) 15:42:17.26
>他人様の入力を受け付けるシステムで気軽に使える場面がそう豊富だとは思わないが。

インタプリタを内蔵してるアプリなんて別に珍しくないんだが。
それらは安全性のために色々仕掛けを施してはいるが、
結局やってることはevalと変わらない。

で、たとえばサーバ用途でならevalで十分なシチュエーションは普通に存在する。
動的言語で使われるテンプレートシステムのいくつかは実際にevalに依存してるしな。
利便性があるというのがtrueなのは間違いない。

静的言語で同じことをやろうとすると大がかりなインタプリタが必要になる上に、
コールスタック上のローカル変数にアクセスする手段が提供されないので
実装が余計に面倒になる。
別に不可能事はなにもないのだが、煩雑なばかりで何も嬉しくない。
0250デフォルトの名無しさん2011/06/24(金) 16:15:10.46
>>249
>利便性があるというのがtrueなのは間違いない

特定の用途に関して利便性があるのは否定しないよ。

ただ「気軽に使える場面がそう豊富だとは思わない」と書いたように、通常
のプログラミングの中でどれだけ使える場面があるのかということ。
毎日テンプレートエンジン書いたりインタプリタの組み込みをしている人間
がどれだけいる? それは結構、特殊だよ。

そもそもevalを気軽に使える場面が豊富なプログラミング言語なんて嫌だw
そういう場面ではevalではなく通常の構文の範疇で同じ事を簡単にかける
ように言語は設計されているべき。
0251デフォルトの名無しさん2011/06/24(金) 16:17:31.43
>>249
ちなみに静的言語で同じ事をするのにスクリプト機能であればインタプリタ
の実装を拾ってきて組み込むし、テンプレートエンジンであればパーサーを
書くでしょう。実際どちらも便利なツールやライブラリの類が存在するので
そう難しい話ではない。

evalで実行環境のインタプリタを流用するのは簡単だけれども、入力を検証
しないと危ないし、テンプレートエンジンにしても受領できる構文がホスト
言語の構文にどこかしら縛られる。
0252デフォルトの名無しさん2011/06/24(金) 16:18:26.69
>>250
そもそもよくある例だから挙げられてるんじゃないよなコレ

動的言語らしい機能の端的な面として出てきてるだけで。
0253デフォルトの名無しさん2011/06/24(金) 16:25:38.74
動的型付けだからeval乱舞って、そんなわきゃない
極端すぎる
0254デフォルトの名無しさん2011/06/24(金) 16:28:50.93
>>252
うん。だから>>240についても答えは、

「eval無いよ。でも無くても動的言語と利便性はたいして変わらない。
 だってeval使わなきゃならない場面なんて良くある例じゃないし」

になるんだよな。
0255デフォルトの名無しさん2011/06/24(金) 16:30:57.22
じゃあ利便性が劣ってることは認めるんだな。

evalだけならともかく、実際には動的言語らしい機能って他にも一杯あるしな。
0256デフォルトの名無しさん2011/06/24(金) 16:33:59.72
多分このスレで一番スレタイに近いこと言ってるのは>>18

テストを普通に書けば動的言語でも安全だし、
テスト不足なら静的言語でも危険だろう。
0257デフォルトの名無しさん2011/06/24(金) 16:44:07.76
それは脳内理論にすぎない
現実の大規模システムで使われているのは静的言語
0258デフォルトの名無しさん2011/06/24(金) 16:45:03.68
単に膨大なレガシーコードがあるというだけだから
0259デフォルトの名無しさん2011/06/24(金) 16:48:05.60
twitterみたく動的言語で作っても規模が大きくなったら
静的言語で書き直さなきゃらならい羽目になるんだったら
最初から静的言語で書いた方がいいよな
0260デフォルトの名無しさん2011/06/24(金) 16:49:39.21
早すぎる最適化という言葉をまだ知らない奴がいるのか
0261デフォルトの名無しさん2011/06/24(金) 16:50:39.68
動的言語のほんのちょっとテストが書きやすいなんてのは
型チェックがなくて余分にテストを書かないといけない分であっという間にマイナスだろ
0262デフォルトの名無しさん2011/06/24(金) 16:50:48.56
twitterみたいな動かしてみるまで人気出るか分からんサービスでもか?
0263デフォルトの名無しさん2011/06/24(金) 16:53:48.33
>>260
おまえが知っているのは言葉だけで中身知らないだろw
0264デフォルトの名無しさん2011/06/24(金) 16:54:54.84
>>261
それって動的言語はテストを書くけど
静的言語は全然テスト書かない場合の比較ですよね?
0265デフォルトの名無しさん2011/06/24(金) 16:56:57.96
>>264
そんなわけない
動的言語には大規模プロジェクトそのものがないから比較不可能だけど
0266デフォルトの名無しさん2011/06/24(金) 16:58:22.59
>>265
じゃあテスト書いてみてよ
0267デフォルトの名無しさん2011/06/24(金) 17:01:16.71
>>257
事例だけで確定するんなら、このスレいらないけどな。

まあ対抗事例も山ほどあるが。
http://storecrowd.com/blog/top-50-ruby-on-rails-websites/
https://www.socialtext.net/perl5/websites_using_perl
http://www.masonhq.com/?MasonPoweredSites
http://itpro.nikkeibp.co.jp/article/NEWS/20071022/285089/
http://journal.mycom.co.jp/news/2007/03/15/003.html
0268デフォルトの名無しさん2011/06/24(金) 17:03:44.24
動的厨に言う大規模って
Webサイトのアクセス数って意味?
0269デフォルトの名無しさん2011/06/24(金) 17:04:44.70
>>261
実際問題、動的言語だと型チェックよりも欲しい型への変換のが多くね?
結果的に「型変換出来ない=例外吐くになる」ってのが多いわ
例えば「引数として型Aを要求する関数」よりも「引数を『型Aを表す何か』として解釈し、そのように振る舞う関数」を書く
結果的に、型Aへの変換が出来ない引数は淘汰される感じ
0270デフォルトの名無しさん2011/06/24(金) 17:04:57.82
べつに https://www.socialtext.net/perl5/companies_using_perl でもいいよ。
0271デフォルトの名無しさん2011/06/24(金) 17:12:42.32
動的言語って静的言語のライブラリをラップしたライブラリ使わないと
使い物にならないよね
0272デフォルトの名無しさん2011/06/24(金) 17:14:51.41
>>271
その言語を使ってどんだけのコードを書くかの問題じゃないか?
そもそもライブラリの安全性とそれを呼び出すコードの安全性ってそれぞれ違うし、
スレタイに関係ない話だと思う
0273デフォルトの名無しさん2011/06/24(金) 17:16:26.83
動的厨は自分ではさんざんスレタイと関係ないこと話すのに
ちょっとでも不利なことになるとすぐこれだw
0274デフォルトの名無しさん2011/06/24(金) 17:20:04.24
>>270 から何をどう発展させろってんだよwww

強いて言えば、スクリプトってのはむしろ静的言語にエンジン組み込んで動かすものだよね
JavaScriptもサーバで使うようになってきたし。JITも入ってるから静的言語だな
0275デフォルトの名無しさん2011/06/24(金) 17:20:33.04
だって全然デメリットじゃないじゃんそれ

このスレは、静的/動的両方の言語を安全に使えるPGと、
静的言語(典型的にはJava)しか使えないPGが
意見を戦わせてるんだよ?
0276デフォルトの名無しさん2011/06/24(金) 17:23:18.97
>>255
うん。evalについてはね。直接対応する機能が無いのだから当然。
ただ劣るにしても程度問題で、普段滅多に使う場面がないなら劣るに
しても微々たるもの。

>evalだけならともかく、実際には動的言語らしい機能って他にも一杯あるしな。

それも個別に検証しないとね、
0277デフォルトの名無しさん2011/06/24(金) 17:28:12.76
動的言語の大規模ソフト例を聞くと
アクセス数の多いサイトを出してくる
動的言語しかつかえないPGと、
静的言語で安全な大規模ソフト作っているPGが
意見を戦わせるスレだろ
0278デフォルトの名無しさん2011/06/24(金) 17:28:57.93
amazonとか別にサイト部分だけperlな訳じゃないよな。
0279デフォルトの名無しさん2011/06/24(金) 17:31:56.90
>>277
安全なソフトを日々作ってるプログラマなら
テストは書き慣れてるよね?書いてみてよ
0280デフォルトの名無しさん2011/06/24(金) 17:32:34.04
どっちにしろ、事例だけで確定するんならこのスレいらん

「Amazon uses Perl in a variety of ways through their enterprise. They have a custom application framework called Gurupa which is a bridge between a service layer and Mason.」
でスレタイに反例が存在してることになるので終了ということになる。
0281デフォルトの名無しさん2011/06/24(金) 17:46:02.02
Pythonを使っている製品あるいはソフトウェアの一覧
http://ja.wikipedia.org/wiki/Python%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E8%A3%BD%E5%93%81%E3%81%82%E3%82%8B%E3%81%84%E3%81%AF%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E4%B8%80%E8%A6%A7
0282デフォルトの名無しさん2011/06/24(金) 17:49:48.73
Pythonによって実装されているフリー/オープンソースソフトウェアなんて大げさに書かれているけど
ちょこっと拡張用に組み込まれた程度のものが混じっているのな
0283デフォルトの名無しさん2011/06/24(金) 17:52:07.34
http://en.wikipedia.org/wiki/List_of_Python_software
英語版の方が多いな
0284デフォルトの名無しさん2011/06/24(金) 17:53:18.93
動的厨の言う大規模ソフトって
アクセス数が多いとか商品数が多いWebサイトなのな
0285デフォルトの名無しさん2011/06/24(金) 17:55:40.35
今時、大規模なシステムを1個の複雑なソフトで作ることの方が稀だな

Google uses Python for many tasks including the backends of web apps such as Google Groups, Gmail, and Google Maps, as well as for some of its search-engine internals
googleが安全かどうかは意見が分かれるところだが。

NASA is using Python to implement a CAD/CAE/PDM repository and model management, integration, and transformation system which will be the core infrastructure for its next-generation collaborative engineering environment
NASAが安全かど(ry

the organizations that use Python.
http://wiki.python.org/moin/OrganizationsUsingPython
Financial の分野でも普通に使われてる
0286デフォルトの名無しさん2011/06/24(金) 17:56:25.20
静的厨が発狂してることだけはわかった
0287デフォルトの名無しさん2011/06/24(金) 17:56:39.02
Pythonがアプリに組み込まれるのは
動的言語の方が実装しやすいとか
馬鹿でも使えるとかそんな理由だろ
0288デフォルトの名無しさん2011/06/24(金) 17:56:46.08
>>284
静的厨のいう大規模ソフトってのは
土方を大量に集めて開発したって意味だよね
0289デフォルトの名無しさん2011/06/24(金) 17:57:15.43
大規模っていうからには、年間開発費が10億円以上だろ
0290デフォルトの名無しさん2011/06/24(金) 17:57:44.07
>>289
>>288
0291デフォルトの名無しさん2011/06/24(金) 17:58:20.37
>>287
馬鹿でも使えるって意味ではJava最強
これは褒めてる
0292デフォルトの名無しさん2011/06/24(金) 17:59:02.41
馬鹿に書かせても馬鹿なコードを書かれない、ってむしろ静的厨の主張する静的言語の特長だったよねw
0293デフォルトの名無しさん2011/06/24(金) 17:59:10.58
今時、大規模なシステムを1個の複雑なソフトで作ることの方が稀だな
0294デフォルトの名無しさん2011/06/24(金) 17:59:42.75
アプリの拡張には馬鹿でも使えるってのは重要
Heskellスクリプトなんて入れたらユーザーは怒るだろ
0295デフォルトの名無しさん2011/06/24(金) 18:02:59.93
静的厨のいう「大規模なソフト」自体が問題分割に失敗した悪い例だな。

まともな設計者なら問題を適切に分解して、大規模じゃないソフトの集合にしてしまうだろうし、
そうなると言語の選択ポイントは「(馬鹿に書かせても)安全かどうか」ではなくなってしまう。
どうせテストはするんだしな。

スレタイの反例も十分出したし、このスレもういらね
0296デフォルトの名無しさん2011/06/24(金) 18:06:18.87
動的厨の言う大規模は
アクセス数やページ数が多いWebサイトだからな
しかもバックエンドに静的言語で作られたソフトを使った
0297デフォルトの名無しさん2011/06/24(金) 18:07:48.56
そのバックエンドのさらに下はSQLだからなwww
0298デフォルトの名無しさん2011/06/24(金) 18:10:18.27
データベースが動的言語で出来てると思ってる?
0299デフォルトの名無しさん2011/06/24(金) 18:10:46.38
で、「(馬鹿に書かせても)安全だから」って理由で静的言語で書かれた大規模なソフトって何だよ?
0300デフォルトの名無しさん2011/06/24(金) 18:12:29.92
>>295
まあWindows界を筆頭に、1つのソフトに何でも詰め込む設計が跋扈してるからなあ
0301デフォルトの名無しさん2011/06/24(金) 18:13:46.93
>>298
中身が何であろうと、SQLを扱う上では動的コードの視点に立たないと穴ぼこだらけになっぞ?
0302デフォルトの名無しさん2011/06/24(金) 18:24:39.44
アセンブラは動的言語
0303デフォルトの名無しさん2011/06/24(金) 18:25:27.37
brainf*ckは静的言語
0304デフォルトの名無しさん2011/06/24(金) 18:34:26.54
アセンブラは実行時の型チェックもないからな
0305デフォルトの名無しさん2011/06/24(金) 18:34:38.06
SQLが動的言語って、どういう意味で動的って言っているの?
0306デフォルトの名無しさん2011/06/24(金) 18:37:23.98
動的SQLの意味に決まってるだろう
JDBCで使ったことあるんじゃない?
0307デフォルトの名無しさん2011/06/24(金) 18:49:02.09
動的SQL(Dynamic SQL)と動的言語は違うだろう。
SQLに対する理解が足りないのか動的言語に関する理解が足りない
のかはっきりしてくれ。

ぶっちゃげ呼び出し側から見れば動的SQLは普通のクエリ実行よりも
よっぽど静的だ。
0308デフォルトの名無しさん2011/06/24(金) 18:59:48.82
eval脳ではSQLインジェクション
0309デフォルトの名無しさん2011/06/24(金) 19:04:52.51
動的言語は実行時にしか型エラーがみつからないから
ダメだっていってるひとがいた
0310デフォルトの名無しさん2011/06/24(金) 19:06:01.17
http://tech.a-listers.jp/2011/06/16/orm_is_an_antipattern/
0311デフォルトの名無しさん2011/06/24(金) 19:16:21.84
テストを書けば動的も静的も関係ないって話はC0でも良いからカバレッジ何パーセントくらいで言えるんだろう。
また、ホビー、金融系、Webの緩いのや硬いのでも現実的にテストにさける時間は変わってくるよね。
テストで担保するって話が土台になるならここの前提はとても重要だと思う。
0312デフォルトの名無しさん2011/06/24(金) 19:19:42.58
アセンブラは動的言語
0313デフォルトの名無しさん2011/06/24(金) 19:31:41.89
性的言語は好きですか?
0314デフォルトの名無しさん2011/06/24(金) 20:41:50.14
>>311
実験に時間をさく事は現実的ではなくて
しかも「時間のかからない安全策」が現実的だと言いたいのか?
そんな都合の良い現実がどこにあるんだ
0315デフォルトの名無しさん2011/06/24(金) 20:57:35.17
>>307
要するに静的だろうとテストはしっかりやらなきゃダメってことだろ
0316デフォルトの名無しさん2011/06/24(金) 21:02:20.25
テストって何って感じの人には
0317デフォルトの名無しさん2011/06/24(金) 21:25:02.06
動的か静的かはさておいて、データ構造やアルゴリズムの基礎も知らん人に
プログラミングできる環境を提供して欲しくないな。
素人の作ったソースのメンテやらされて大迷惑だよ。
本当に抽象的・数学的思考のできない奴に、コード書かせるなよ。
0318デフォルトの名無しさん2011/06/24(金) 21:33:29.37
うちでは使えない奴は本番では使われないダミーコード書かせてる
0319デフォルトの名無しさん2011/06/24(金) 21:49:01.31
難しいといわれてたオブジェクト指向をここまで簡単と言わせるJavaってすごいな
0320デフォルトの名無しさん2011/06/24(金) 22:34:16.12
それって、オブジェクト思考が難かしかったんじゃなくて、慣れてなかっただけ
なんじゃないの?
0321デフォルトの名無しさん2011/06/24(金) 23:27:29.97
テストは必要だけど、たくさん書くと
コード修正時のメンテナンスが大変になる。

だからテストもなるべく少なくするほうがいい。
もちろん少なくすると言っても必要なテストを省くという意味じゃないよ。

で、静的言語だとテストの一部を実際に使用するコード側に
移動して減らすことができる(実行前の静的テストに変更できる)
0322デフォルトの名無しさん2011/06/24(金) 23:30:09.88
しかしコードを見るとオブジェクト指向でもなんでもないっていう
0323uy ◆KOAgYBL/Xg 2011/06/24(金) 23:34:05.36
オブジェクト指向なんて
コード触って1〜2年目には誰だって辿り着くもんだぞ
変な書籍が大量にでて、それを読んで凝り固まった考えを流布し始める奴が多いから言葉の定義すら曖昧になって
オブジェクト指向とは一生かかっても誰も習得できない技術となった
0324デフォルトの名無しさん2011/06/24(金) 23:38:03.51
しかしコードを見るとオブジェクト指向でもなんでもないっていう
0325uy ◆KOAgYBL/Xg 2011/06/24(金) 23:50:05.42
オブジェクト指向は韓国みたいなもの
新しい画期的な概念がでてくると、「これはオブジェクト指向のひとつだ!」
みたいに言い出す こわい
0326デフォルトの名無しさん2011/06/25(土) 00:17:21.88
オブシコはオワコン。
0327デフォルトの名無しさん2011/06/25(土) 00:25:32.89
オブジェクト指向型と関数型と静と動が合体した言語は無いの?
0328デフォルトの名無しさん2011/06/25(土) 00:36:40.14
C++0x辺りは、それっぽい事ができると思う。
0329デフォルトの名無しさん2011/06/25(土) 00:40:18.02
C++は基礎知識として必修させるべきだと思う。
OOPLや動的言語がどう内部で処理されてるか理解しない奴は土方。
0330デフォルトの名無しさん2011/06/25(土) 00:43:44.33
>>329
それはいいね。
動的言語ばかり使っているやつって
内部実装に無頓着になりがちだから。

数値?文字? そんなのどっちも
変数に入れられるじゃん。みたいな。
0331デフォルトの名無しさん2011/06/25(土) 00:45:31.19
Javaとかでも = null が何を意味してるかわかってない奴多いし
■ このスレッドは過去ログ倉庫に格納されています