やっぱり動的言語では安全なソフトは作れない 3
■ このスレッドは過去ログ倉庫に格納されています
0001uy
2011/06/20(月) 01:06:27.48http://hibari.2ch.net/test/read.cgi/tech/1306571666/
0232デフォルトの名無しさん
2011/06/24(金) 11:33:18.35>>58のいう「スニペットの流用」がどれだけやり易いかを
コードを例にして議論してる
もし、>>58のいうようにスニペットの流用が静的言語の方が優れてるなら、
既存のコードから少ない修正で別の用途にも使えるはず
0233デフォルトの名無しさん
2011/06/24(金) 12:26:01.200234デフォルトの名無しさん
2011/06/24(金) 12:39:54.75エロい人、乙であります
0235デフォルトの名無しさん
2011/06/24(金) 13:17:16.77難解な手法は「俺が検証しなくても誰かがするだろう」というパターンに陥りやすい
0236デフォルトの名無しさん
2011/06/24(金) 14:04:04.66静的動的は関係ない例ばかりだなぁ。
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の手前にあるローカル変数にもアクセス出来る奴。
でなきゃ「動的言語と利便性はたいして変わらない」なんて言えないでしょ?
0241デフォルトの名無しさん
2011/06/24(金) 15:08:39.520242デフォルトの名無しさん
2011/06/24(金) 15:10:47.41データ中にコードを埋め込めるので、データ側で何でも書けるようになる。
0243デフォルトの名無しさん
2011/06/24(金) 15:13:07.060244デフォルトの名無しさん
2011/06/24(金) 15:14:56.080245デフォルトの名無しさん
2011/06/24(金) 15:17:36.88$_='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そりゃサンドボックスの話になるな。べつに不可能事じゃない。
0247デフォルトの名無しさん
2011/06/24(金) 15:27:57.94emacs ,、GIMP, ブラウザ, 等がそうだな。
アプリの上で動くスクリプトを書くんじゃなくて、そういうアプリを作るにはパーサとインタプリタを含むエンジンを内蔵するしかない。
もう一つのパターンは、単に「簡単なリフレクション」として用いられる。
リフレクションが必要だと思われるあらゆる例で、リフレクションよりも簡潔に書くことができる。
0248デフォルトの名無しさん
2011/06/24(金) 15:34:12.26>>86で挙げられたPythonの型チェックにしても実行前に検証は可能かと
問われればそれは無理。これもはいそうですね、でおしまい。
つうかパラダイムが違うんだから一方で存在する機能が他方で存在しない
ことなんて普通。
evalがどうしても必要な問題ならevalが存在する言語でプログラム書けば
良い。自分だけの小道具として使うならともかく、他人様の入力を受け
付けるシステムで気軽に使える場面がそう豊富だとは思わないが。
0249デフォルトの名無しさん
2011/06/24(金) 15:42:17.26インタプリタを内蔵してるアプリなんて別に珍しくないんだが。
それらは安全性のために色々仕掛けを施してはいるが、
結局やってることはevalと変わらない。
で、たとえばサーバ用途でならevalで十分なシチュエーションは普通に存在する。
動的言語で使われるテンプレートシステムのいくつかは実際にevalに依存してるしな。
利便性があるというのがtrueなのは間違いない。
静的言語で同じことをやろうとすると大がかりなインタプリタが必要になる上に、
コールスタック上のローカル変数にアクセスする手段が提供されないので
実装が余計に面倒になる。
別に不可能事はなにもないのだが、煩雑なばかりで何も嬉しくない。
0250デフォルトの名無しさん
2011/06/24(金) 16:15:10.46>利便性があるというのがtrueなのは間違いない
特定の用途に関して利便性があるのは否定しないよ。
ただ「気軽に使える場面がそう豊富だとは思わない」と書いたように、通常
のプログラミングの中でどれだけ使える場面があるのかということ。
毎日テンプレートエンジン書いたりインタプリタの組み込みをしている人間
がどれだけいる? それは結構、特殊だよ。
そもそもevalを気軽に使える場面が豊富なプログラミング言語なんて嫌だw
そういう場面ではevalではなく通常の構文の範疇で同じ事を簡単にかける
ように言語は設計されているべき。
0251デフォルトの名無しさん
2011/06/24(金) 16:17:31.43ちなみに静的言語で同じ事をするのにスクリプト機能であればインタプリタ
の実装を拾ってきて組み込むし、テンプレートエンジンであればパーサーを
書くでしょう。実際どちらも便利なツールやライブラリの類が存在するので
そう難しい話ではない。
evalで実行環境のインタプリタを流用するのは簡単だけれども、入力を検証
しないと危ないし、テンプレートエンジンにしても受領できる構文がホスト
言語の構文にどこかしら縛られる。
0252デフォルトの名無しさん
2011/06/24(金) 16:18:26.69そもそもよくある例だから挙げられてるんじゃないよなコレ
動的言語らしい機能の端的な面として出てきてるだけで。
0253デフォルトの名無しさん
2011/06/24(金) 16:25:38.74極端すぎる
0254デフォルトの名無しさん
2011/06/24(金) 16:28:50.93うん。だから>>240についても答えは、
「eval無いよ。でも無くても動的言語と利便性はたいして変わらない。
だってeval使わなきゃならない場面なんて良くある例じゃないし」
になるんだよな。
0255デフォルトの名無しさん
2011/06/24(金) 16:30:57.22evalだけならともかく、実際には動的言語らしい機能って他にも一杯あるしな。
0256デフォルトの名無しさん
2011/06/24(金) 16:33:59.72テストを普通に書けば動的言語でも安全だし、
テスト不足なら静的言語でも危険だろう。
0257デフォルトの名無しさん
2011/06/24(金) 16:44:07.76現実の大規模システムで使われているのは静的言語
0258デフォルトの名無しさん
2011/06/24(金) 16:45:03.680259デフォルトの名無しさん
2011/06/24(金) 16:48:05.60静的言語で書き直さなきゃらならい羽目になるんだったら
最初から静的言語で書いた方がいいよな
0260デフォルトの名無しさん
2011/06/24(金) 16:49:39.210261デフォルトの名無しさん
2011/06/24(金) 16:50:39.68型チェックがなくて余分にテストを書かないといけない分であっという間にマイナスだろ
0262デフォルトの名無しさん
2011/06/24(金) 16:50:48.560263デフォルトの名無しさん
2011/06/24(金) 16:53:48.33おまえが知っているのは言葉だけで中身知らないだろw
0264デフォルトの名無しさん
2011/06/24(金) 16:54:54.84それって動的言語はテストを書くけど
静的言語は全然テスト書かない場合の比較ですよね?
0265デフォルトの名無しさん
2011/06/24(金) 16:56:57.96そんなわけない
動的言語には大規模プロジェクトそのものがないから比較不可能だけど
0266デフォルトの名無しさん
2011/06/24(金) 16:58:22.59じゃあテスト書いてみてよ
0267デフォルトの名無しさん
2011/06/24(金) 17:01:16.71事例だけで確定するんなら、このスレいらないけどな。
まあ対抗事例も山ほどあるが。
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.24Webサイトのアクセス数って意味?
0269デフォルトの名無しさん
2011/06/24(金) 17:04:44.70実際問題、動的言語だと型チェックよりも欲しい型への変換のが多くね?
結果的に「型変換出来ない=例外吐くになる」ってのが多いわ
例えば「引数として型Aを要求する関数」よりも「引数を『型Aを表す何か』として解釈し、そのように振る舞う関数」を書く
結果的に、型Aへの変換が出来ない引数は淘汰される感じ
0270デフォルトの名無しさん
2011/06/24(金) 17:04:57.820271デフォルトの名無しさん
2011/06/24(金) 17:12:42.32使い物にならないよね
0272デフォルトの名無しさん
2011/06/24(金) 17:14:51.41その言語を使ってどんだけのコードを書くかの問題じゃないか?
そもそもライブラリの安全性とそれを呼び出すコードの安全性ってそれぞれ違うし、
スレタイに関係ない話だと思う
0273デフォルトの名無しさん
2011/06/24(金) 17:16:26.83ちょっとでも不利なことになるとすぐこれだw
0274デフォルトの名無しさん
2011/06/24(金) 17:20:04.24強いて言えば、スクリプトってのはむしろ静的言語にエンジン組み込んで動かすものだよね
JavaScriptもサーバで使うようになってきたし。JITも入ってるから静的言語だな
0275デフォルトの名無しさん
2011/06/24(金) 17:20:33.04このスレは、静的/動的両方の言語を安全に使えるPGと、
静的言語(典型的にはJava)しか使えないPGが
意見を戦わせてるんだよ?
0276デフォルトの名無しさん
2011/06/24(金) 17:23:18.97うん。evalについてはね。直接対応する機能が無いのだから当然。
ただ劣るにしても程度問題で、普段滅多に使う場面がないなら劣るに
しても微々たるもの。
>evalだけならともかく、実際には動的言語らしい機能って他にも一杯あるしな。
それも個別に検証しないとね、
0277デフォルトの名無しさん
2011/06/24(金) 17:28:12.76アクセス数の多いサイトを出してくる
動的言語しかつかえないPGと、
静的言語で安全な大規模ソフト作っているPGが
意見を戦わせるスレだろ
0278デフォルトの名無しさん
2011/06/24(金) 17:28:57.930279デフォルトの名無しさん
2011/06/24(金) 17:31:56.90安全なソフトを日々作ってるプログラマなら
テストは書き慣れてるよね?書いてみてよ
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.02http://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ちょこっと拡張用に組み込まれた程度のものが混じっているのな
0283デフォルトの名無しさん
2011/06/24(金) 17:52:07.34英語版の方が多いな
0284デフォルトの名無しさん
2011/06/24(金) 17:53:18.93アクセス数が多いとか商品数が多いWebサイトなのな
0285デフォルトの名無しさん
2011/06/24(金) 17:55:40.35Google 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.200287デフォルトの名無しさん
2011/06/24(金) 17:56:39.02動的言語の方が実装しやすいとか
馬鹿でも使えるとかそんな理由だろ
0288デフォルトの名無しさん
2011/06/24(金) 17:56:46.08静的厨のいう大規模ソフトってのは
土方を大量に集めて開発したって意味だよね
0289デフォルトの名無しさん
2011/06/24(金) 17:57:15.430290デフォルトの名無しさん
2011/06/24(金) 17:57:44.07>>288
0291デフォルトの名無しさん
2011/06/24(金) 17:58:20.37馬鹿でも使えるって意味ではJava最強
これは褒めてる
0292デフォルトの名無しさん
2011/06/24(金) 17:59:02.410293デフォルトの名無しさん
2011/06/24(金) 17:59:10.580294デフォルトの名無しさん
2011/06/24(金) 17:59:42.75Heskellスクリプトなんて入れたらユーザーは怒るだろ
0295デフォルトの名無しさん
2011/06/24(金) 18:02:59.93まともな設計者なら問題を適切に分解して、大規模じゃないソフトの集合にしてしまうだろうし、
そうなると言語の選択ポイントは「(馬鹿に書かせても)安全かどうか」ではなくなってしまう。
どうせテストはするんだしな。
スレタイの反例も十分出したし、このスレもういらね
0296デフォルトの名無しさん
2011/06/24(金) 18:06:18.87アクセス数やページ数が多いWebサイトだからな
しかもバックエンドに静的言語で作られたソフトを使った
0297デフォルトの名無しさん
2011/06/24(金) 18:07:48.560298デフォルトの名無しさん
2011/06/24(金) 18:10:18.270299デフォルトの名無しさん
2011/06/24(金) 18:10:46.380300デフォルトの名無しさん
2011/06/24(金) 18:12:29.92まあWindows界を筆頭に、1つのソフトに何でも詰め込む設計が跋扈してるからなあ
0301デフォルトの名無しさん
2011/06/24(金) 18:13:46.93中身が何であろうと、SQLを扱う上では動的コードの視点に立たないと穴ぼこだらけになっぞ?
0302デフォルトの名無しさん
2011/06/24(金) 18:24:39.440303デフォルトの名無しさん
2011/06/24(金) 18:25:27.370304デフォルトの名無しさん
2011/06/24(金) 18:34:26.540305デフォルトの名無しさん
2011/06/24(金) 18:34:38.060306デフォルトの名無しさん
2011/06/24(金) 18:37:23.98JDBCで使ったことあるんじゃない?
0307デフォルトの名無しさん
2011/06/24(金) 18:49:02.09SQLに対する理解が足りないのか動的言語に関する理解が足りない
のかはっきりしてくれ。
ぶっちゃげ呼び出し側から見れば動的SQLは普通のクエリ実行よりも
よっぽど静的だ。
0308デフォルトの名無しさん
2011/06/24(金) 18:59:48.820309デフォルトの名無しさん
2011/06/24(金) 19:04:52.51ダメだっていってるひとがいた
0310デフォルトの名無しさん
2011/06/24(金) 19:06:01.170311デフォルトの名無しさん
2011/06/24(金) 19:16:21.84また、ホビー、金融系、Webの緩いのや硬いのでも現実的にテストにさける時間は変わってくるよね。
テストで担保するって話が土台になるならここの前提はとても重要だと思う。
0312デフォルトの名無しさん
2011/06/24(金) 19:19:42.580313デフォルトの名無しさん
2011/06/24(金) 19:31:41.890314デフォルトの名無しさん
2011/06/24(金) 20:41:50.14実験に時間をさく事は現実的ではなくて
しかも「時間のかからない安全策」が現実的だと言いたいのか?
そんな都合の良い現実がどこにあるんだ
0315デフォルトの名無しさん
2011/06/24(金) 20:57:35.17要するに静的だろうとテストはしっかりやらなきゃダメってことだろ
0316デフォルトの名無しさん
2011/06/24(金) 21:02:20.250317デフォルトの名無しさん
2011/06/24(金) 21:25:02.06プログラミングできる環境を提供して欲しくないな。
素人の作ったソースのメンテやらされて大迷惑だよ。
本当に抽象的・数学的思考のできない奴に、コード書かせるなよ。
0318デフォルトの名無しさん
2011/06/24(金) 21:33:29.370319デフォルトの名無しさん
2011/06/24(金) 21:49:01.310320デフォルトの名無しさん
2011/06/24(金) 22:34:16.12なんじゃないの?
0321デフォルトの名無しさん
2011/06/24(金) 23:27:29.97コード修正時のメンテナンスが大変になる。
だからテストもなるべく少なくするほうがいい。
もちろん少なくすると言っても必要なテストを省くという意味じゃないよ。
で、静的言語だとテストの一部を実際に使用するコード側に
移動して減らすことができる(実行前の静的テストに変更できる)
0322デフォルトの名無しさん
2011/06/24(金) 23:30:09.880323uy ◆KOAgYBL/Xg
2011/06/24(金) 23:34:05.36コード触って1〜2年目には誰だって辿り着くもんだぞ
変な書籍が大量にでて、それを読んで凝り固まった考えを流布し始める奴が多いから言葉の定義すら曖昧になって
オブジェクト指向とは一生かかっても誰も習得できない技術となった
0324デフォルトの名無しさん
2011/06/24(金) 23:38:03.510325uy ◆KOAgYBL/Xg
2011/06/24(金) 23:50:05.42新しい画期的な概念がでてくると、「これはオブジェクト指向のひとつだ!」
みたいに言い出す こわい
0326デフォルトの名無しさん
2011/06/25(土) 00:17:21.880327デフォルトの名無しさん
2011/06/25(土) 00:25:32.890328デフォルトの名無しさん
2011/06/25(土) 00:36:40.140329デフォルトの名無しさん
2011/06/25(土) 00:40:18.02OOPLや動的言語がどう内部で処理されてるか理解しない奴は土方。
0330デフォルトの名無しさん
2011/06/25(土) 00:43:44.33それはいいね。
動的言語ばかり使っているやつって
内部実装に無頓着になりがちだから。
数値?文字? そんなのどっちも
変数に入れられるじゃん。みたいな。
0331デフォルトの名無しさん
2011/06/25(土) 00:45:31.19■ このスレッドは過去ログ倉庫に格納されています