1 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 11:03:24 ] 最強のLL=軽量プログラム言語は、どれよ? エントリーは、Perl、PHP、Python、Ruby、JavaScript・・・ さあ、死ぬまで語りやがれ!!! ■LLとは? 軽量プログラミング言語(Lightweight Language,LL)とは、取り回しに優れ、 コードの作成や修正が容易と見なされるプログラミング言語のことを指す。 ここでいう「軽さ」はプログラマの負担の軽重を指し、 実行速度に優れているという意味ではない。 現在の水準では ・インタプリタ ・動的型 ・正規表現 ・関数オブジェクト などを利用できるものがLLと呼ばれることが多い。(Wikipediaより) ■過去スレ 【Perl,PHP】LLバトルロワイヤル6【Ruby,Python】 pc12.2ch.net/test/read.cgi/tech/1244166510/ 【Perl,PHP】LLバトルロワイヤル5【Ruby,Python】 pc12.2ch.net/test/read.cgi/tech/1238720336/ 【Perl,PHP】LLバトルロワイヤル4【Ruby,Python】 pc12.2ch.net/test/read.cgi/tech/1234635513/ 【Perl,PHP】LLバトルロワイヤル3【Ruby,Python】 pc11.2ch.net/test/read.cgi/tech/1215319832/ 【Perl,PHP】LLバトルロワイヤル2【Ruby,Python】 pc11.2ch.net/test/read.cgi/tech/1209289408/ 【Perl,PHP】LLバトルロワイヤル【Ruby,Python】 pc11.2ch.net/test/read.cgi/tech/1188997302/
129 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:04:26 ] この手の問題だと、論理型が得意だったって事
130 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 16:16:06 ] 読めないからよく解らんのだが、119のコードって他言語に直訳できないの?
131 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 16:20:03 ] アセンブリ
132 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 16:24:23 ] 119って式が変わったら毎回書き換えるしかないんかな
133 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 16:35:08 ] >>130 つ ttp://miko.org/~naruto/Artifact/MASKSQL.html
134 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 17:31:52 ] 汎用性は無いだろうね ただコード自体が式を列挙してるようなコード…つまり入力データみたいなコードだから Prolog的には下手なことするより最適な方法かも知れん
135 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:06:45 ] >>130 論理型言語を、そうでない言語に直訳 するのは基本的に無理。 論理型言語には、処理順序とかまったく ないし、根拠となる条件式に基づいて 解を求めることしかできない。
136 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:09:31 ] >>132 式を他の言語で解釈して、 ソースを機械生成すれば。
137 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:16:27 ] >>135 じゃあロンリー型言語は?
138 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 20:37:13 ] ロンリーロンリーロンリーロリー
139 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 20:51:06 ] TOMOちゃんじゃないか!
140 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 23:09:17 ] どっちにしろマシン語になるんだから、無理なわけないだろ。
141 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 23:14:19 ] >>140 誰がそんな話をしたんだろうか ある言語を使うってことは、その言語の制約内のことしかできないってことだと単純にわかるだろ ここで話題に上がるような言語は、大概昔ラリーさんだかが言った、 「簡単な事は簡単に、難しいことは可能に」 って作られてるから、とりあえず何でも可能な気がするだけだ。
142 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 00:59:56 ] どっちかっつーと、Prologは制御可能なフレームワークって感じ。 普通の言語は流れそのものを書くが、Prologの場合は 基本的な流れはProlog処理系が既に持ってて、ちょいと書くだけである程度勝手に動くものを コードで制御してやると流れが変わって、複雑な動作ができる。 だから元々Prologが持ってる流れに近い動作は簡単に、遠い動作は面倒になるし 流れそのものが明快なものに対しては、それをそのまま書けば良い手続き型言語に対して 「既にある流れをどう変えればその流れになるか」と考えなくちゃいけないからしんどい。
143 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 02:45:30 ] >>142 PrologはDSLの一種と使った方が良いと思う。 正規表現とかSQLとかの仲間。
144 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 09:19:46 ] とはいってもPythonにprologモジュールが入ったりすることはないよね 広めたかったら他のプログラミング言語用のライブラリだ、って割りきっちゃったほうがいいのかな
145 名前:デフォルトの名無しさん [2009/08/06(木) 09:42:30 ] On LispにLispで書かれたprologが載ってたな。 結構すくないコードで書かれてたよ
146 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 10:31:24 ] 何気に欲しいな、Prologモジュール
147 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 17:31:14 ] 何気に欲しいな、Prologモジュール
148 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 19:11:44 ] >>147 インストール済みのPrologを利用する 薄いラッパーだったら、自分ですぐ 作れんじゃね?
149 名前:デフォルトの名無しさん [2009/08/06(木) 23:29:52 ] >>147 Python で作る Prolog 処理系;;www.okisoft.co.jp/esc/prolog/in-python.html
150 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 06:15:54 ] 保守
151 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 18:56:52 ] Pythonって何で「普通に」文字列内で変数展開できないの? 3.0でもformat()とlocal()必要だし。どういう方針なんだろ。誰かおしえて。 これさえできればPython使いたいんだけど。
152 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 20:15:54 ] 文字列内での変数展開なんて一部LLを除いたらおもいっきり邪道だと思うが。 PythonはReconstruct Cを目指した正統派LLというポリシーだからなあ。
153 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 21:55:00 ] LLといってもいろいろあるけど、変数展開はスクリプト言語的な機能だよな。 位置づけ的には Java系カッチリ言語 <- Python ... Ruby . Perl -> シェルスクリプト系テキトー言語
154 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 22:10:23 ] 変数展開があると、普段から変数に変な記号つくしな。
155 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 22:20:26 ] >>154 なにその間違った理解
156 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 10:04:38 ] >>151 >Pythonって何で「普通に」文字列内で変数展開できないの? なんでだろうね。 Rubyのように文字列中に任意の式を埋め込めるようにするには、パーサをおもいっきり書き換える必要があるからめんどくさいけど、 変数展開ぐらいならできてもいいよね。 s = "x=${x}" とか。 s = "x=%{x}" % locals() とかかっこわるいわ。
157 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 11:29:20 ] >>151 tempita
158 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 11:33:11 ] eval
159 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 15:28:26 ] 「変数展開をしないで文字列を書くときはシングルクォーテーション」とか 文字列書くときのルールを無駄に増やすのはPythonらしくない それに比べりゃlocals()かっこわるいなんてw
160 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 15:30:47 ] >>159 > 文字列書くときのルールを無駄に増やすのはPythonらしくない なんという・・・クマー
161 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 18:57:24 ] >>159 r"..." とか u"..." とか """...""" とかあるのに、なにがPythonらしくないだよ 信者乙
162 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 20:06:05 ] Python-Devでは5年以上前に議論された話題だよ。 変数展開はいつ評価するの?パース時?それとも実行時? gettextと組み合わさったときはどういう挙動するの?そのほかの文字列メソッドとは? セキュリティも怖いよね? 結局、文字列に format() メソッドを追加するのが一番汎用的で強力。 変数展開は str.format() よりも限定した状況にしか対応できず、 そんな限られた状況で 「format(vars())」 程度のタイプ数を削減するためだけに 言語規則を複雑にするメリットを見いだせなかったので却下された。
163 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 21:05:52 ] > gettext… 意味わからん。 変数展開って言語構造レベルの機能だから メソッドには展開後の文字列が渡るだけでしょ
164 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 21:16:43 ] >>163 "$foo value is $bar" というメッセージを国際化したくなったとき gettext("$foo value is $bar") って出来ないでしょ? str.format() メソッドなら gettext("{0} value is {1}").format(vars()) できる。 .format() の方が汎用的。
165 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 21:55:06 ] >>164 gettext('$foo value is $var');
166 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 21:58:38 ] >>165 gettextっていうのは渡された文字列をキーにして、 現在の言語の翻訳文を持ってくる。 それだとgettext()に渡される前に変数展開されてしまうから、 キーとして利用不可能。
167 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 22:07:08 ] >>166 リテラルの変数展開は普通、展開・非展開を使い分けるための記法が用意されてる。 PHP なんかだと ' では変数展開されず、" では展開される。
168 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 22:10:39 ] ただ結局HTMLみたいなののためなら、 テンプレートエンジン使う→変数展開イラネって話になる。
169 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 22:35:12 ] ほー、sprintf()じゃなくて%なのか。 perlにもformat/write有るけど、ほとんど使われてないね。 仕様がアレだからか。
170 名前:デフォルトの名無しさん [2009/08/12(水) 22:36:37 ] で gettext() なんか使わないほうがよい?
171 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 23:31:05 ] 使うのは構わんけど、そういうのに限って英語も日本語も中途半端なソフトが出来上がるからなあ。
172 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 23:55:17 ] >>162 >変数展開はいつ評価するの?パース時?それとも実行時? 解析はパース時、値の評価は実行時。 つまり "foo=${foo}." というリテラルがあればパース時に "".join(("foo=", str(foo), ".")) に変換してくれればそれでいい。 #いくらなんでも、これくらいのことがわからないPython開発陣ではないだろ。162は分かってないかもしれないけど。 >gettextと組み合わさったときはどういう挙動するの?そのほかの文字列メソッドとは? >セキュリティも怖いよね? どれも意味不明。セキュリティって何だよ。変数の埋め込みができたらセキュリティ上問題になるのか。珍説すぎる。 自分ででっちあげた理由を、さもPythonでの公式見解みたいな言い方するのはやめて。自分だけの仮説なら、そうとわかる書き方にしようぜ。 > 結局、文字列に format() メソッドを追加するのが一番汎用的で強力。 > 変数展開は str.format() よりも限定した状況にしか対応できず、 > そんな限られた状況で 「format(vars())」 程度のタイプ数を削減するためだけに > 言語規則を複雑にするメリットを見いだせなかったので却下された。 これソースある?実際に却下されたというソースがみたい。 それから変数を埋め込みたいのは、タイプ数削減もあるけど、わかりやすさ・読みやすさのためでもあるんだけどな。たとえば "{0}: not found (file={1}, line={2})".format(name, file, line) より "${name}: not found (file=${file}, line=${line})" のほうがわかりやすい。 もちろん短いことも重要。 "{name}: not found (file={file}, line={line})".format(**locals()) ← これ、いけてないよな。実行時にパースしてるから遅いし。
173 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 00:04:39 ] >>164 >"$foo value is $bar" >というメッセージを国際化したくなったとき >gettext("$foo value is $bar") >って出来ないでしょ? gettext()使うときに、だれもこんなことしないって。gettext()の引数はキーなんだから、こんなところで埋め込もうとは誰も考えない。 こじつけもいいところ。 str.format()のほうが汎用的なことと、埋め込み文字列がほしいこととは別の話だよ。 .format()をなくしてかわりに埋め込み文字列を導入しようという話ではない。 .format()もいいけど埋め込み文字列も欲しいよねという話なんだけど、信者にはわかってもらえなさそう。
174 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 00:05:08 ] ところで、最近なんでRubyが失速してきたんだ? RoRバブルの崩壊でJAVA・PHP・Pythonあたりへの対抗力の限界が露呈された、ってところ?
175 名前:151 mailto:sage [2009/08/13(木) 00:09:36 ] うおおお、なんかみんな語ってる! やっぱり言語仕様を複雑にするほど必要としてないって判断なんですかね。 まあ、オライリーのPythonチュートリアルで勉強中ですが、 クラス部分の実装の仕方に惚れたので、Python使ってこうかと思います。 あと、Pythonは正規表現がモジュールってところがいいですね。
176 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 00:15:16 ] そもそも、変数展開ってそんなに使う?
177 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 00:23:00 ] 俺はPerlでもsprintf、RubyでもString#%使うなぁ
178 名前:デフォルトの名無しさん [2009/08/13(木) 00:27:33 ] 複雑に変数を埋め込むような場合は普通の文字列連結よりは見やすくなるね。 でも当然文字列のパースが入るからパフォーマンスコストは数倍になる。 最初は変数埋め込みばっかしてたけど最近は極力使わないようにしてる。
179 名前:デフォルトの名無しさん [2009/08/13(木) 00:45:17 ] 文字列のパース?そんなんコンパイル時だけだろ パフォーマンスにほとんど影響しない
180 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 00:46:48 ] え?
181 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 00:48:00 ] Python的にTemplate/substitute機能ってどうなん?
182 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 01:32:35 ] >>167 ああ、そういう意味ね。で、結局gettext()で得られたメッセージに対する 変数展開は行われないんだ。 Perlみたいな変数展開を .format() や % で置き換えることはできるが、 逆は不可だ。言語仕様としても、 .format() や % は通常のメソッドや 演算子オーバーロードの範囲で実現できるのに対して、Perlみたいな 変数展開は言語仕様を汚さないと実現できない。
183 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 01:37:46 ] >>182 gettextで得られたメッセージに対する変数展開ってどういう意味?
184 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 01:53:02 ] 勝手にやられるとうざいから、formatが良い落としどころだと思うけどな。 gettextって print _("hoge: %s, %s") % (x, y) ってやるだろうから、こいつに関しては展開要らない。 シェルスクリプトなら変数展開ほしいけど、pythonでほしいと思ったことってあんまり無い。 複雑になるなら"%(name)s" % locals()とかテンプレート使うなりする。 (awkでもprint "hoge" $1 "hoge" でいいし、、ちょっと複雑になってもprintfで事足りる)
185 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 01:58:30 ] >>172 www.python.org/dev/peps/pep-0215/ が Reject されて www.python.org/dev/peps/pep-0292/ になった。詳しい議論はMLの過去ログ参照。 変数展開に能力を与えすぎると複雑だったり危険だったりするし、 能力を限定するとわざわざ言語仕様を汚す価値が無くなるので、 %とtemplateクラスの使い分けで十分と判断された。
186 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 07:32:13 ] >>178 >でも当然文字列のパースが入るからパフォーマンスコストは数倍になる。 やっぱりこいつわかってないよ。文字列リテラルが変数埋め込みをサポートしている言語なら、 コンパイル時に一度行なわれるだけだから、パフォーマンスに影響なんかあるわけない。 「パフォーマンスコストは数倍になる」とか無知もいいところ。 実行時に毎回パースして遅くなっているのは format() のほうだろ。 "{foo} is {bar}".format(**locals()) これをformat()が毎回パースしてるんだから、パフォーマンスコストが悪いのはどう考えてもこっちのほう。 Perl の "$foo is $bar" のように文字列リテラルが変数埋め込みをサポートしている言語なら、 コンパイルした時点ですでにパースは完了しているので、毎回パースする必要なんかない。 ところでセキュリティーの解説はまだなの? なんで変数の埋め込みができるとセキュリティ上問題になるの? しっかり解説たのむぜ>>162
187 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 09:45:18 ] 変数埋め込みだからセキュリティー上問題っていうのは何かあるのかな 意図しない埋め込みが起こるかもしれないぐらい?
188 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 09:49:21 ] sprintfやformatではおこらない、何か
189 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 10:03:34 ] 変数埋め込みがセキュリティ的に危ないのなら、LLに限らずどの言語も危ないことになるな すばらしい発見なのでさっさと報告してくれ
190 名前:162 mailto:sage [2009/08/13(木) 10:33:50 ] >>186 >>178 は俺じゃねーよ。 Python-dev では変数展開がプロポーズされてから、>>162 のような議論があった、 というだけの話だよ。別にPerlやRubyや>>186 の提案している仕様に脆弱性がある というわけじゃなない。詳しく知りたかったら2002年の1月と6月のPython-dev過去ログ読め。 以下てきとうに要約。 *どの変数を展開するのかが実行時に決めると、安全じゃない文字列に対して危険 *なので導入するとしたらコンパイル時に $"${foo + bar} is $baz" が (str(foo + bar) + " is " + str(baz)) に変換されるという仕様はどうだ。 これならセキュリティの問題は無い。 *でも、 % に比べると変数展開時にどの範囲の変数が利用されるのかわかり難いよね *そんな仕様じゃgettextみたいなケースで使えない *gettextを、 gettext("$foo is $bar", foo=hoge, bar=hage) みたいな仕様にしたら? *言語仕様汚してそんな汎用性の無い機能入れるより、汎用的なテンプレートライブラリ 入れたほうがマシだ。 あと、MLでの議論の結果変数展開の代わりに選ばれたのは .format() や % のほうじゃなくて Templateのほうで、こいつを使うとパースは一回で済むから、繰り返し使う場合は こっちを使うべきだな。
191 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 17:46:35 ] PEP292でPEP215のセキュリティに言及してる部分がさっぱり分からん。 いやみっぽく書かれてるのは分かるけど。
192 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 17:50:46 ] いやだから gettext で変数展開は使わんと何度いったら…
193 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 18:29:14 ] >>192 だから、gettextでは使わないみたいに使える状況が限定される 変数展開より、広い状況で使える Template の方が良いよねっていう 議論をしてるんだってば。
194 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 18:37:46 ] >>193 意味がわからん。 それとも単に歯応えしたいだけ?
195 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 19:58:25 ] 意味がわからん。
196 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 20:10:00 ] いい歯ごたえ!
197 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 20:13:48 ] リテラルでしょ? たとえば、辞書のキーに使うこともあんまり無いだろうし、 特に問題無さそうだけどね。
198 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 20:21:21 ] 歯応えwwwwwwwwwwwwwwwwwwwwww
199 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 20:49:49 ] マジレスすると、口答えと歯向かう、がごっちゃになったんだろ どっちも上から目線ではあるけど、それは敢えてだろうな
200 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 21:01:13 ] 言いたいことは察せられる 「噛みつく」なら適切かと思う。表現って難しい
201 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:23:24 ] >186-189 C言語のprintfにはセキュリティホールがあるけど LLでその書式文字列攻撃がどこまで応用効くか俺は判らんな。 ただ、printf/sprintf/format/% の書式指定文字列に変数埋め込みを使っちゃうと 予想外の挙動を招いてしまう可能性が高いのは間違いないよ。
202 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:37:55 ] そういや、ここのPythonユーザはみんな3.x使ってるの? 俺は本業Java趣味Pythonってこともあって、今日から移行することにしたんだが。
203 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 00:01:53 ] 仕事2.5、趣味2.6だよ。 3.1は入れてあるけどほとんど使わない
204 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 03:39:07 ] 特にprintfとprintで混乱したことは無いな。 予想外の挙動ってのがあるのか。 pythonこえー。
205 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 05:53:04 ] >>193 >だから、gettextでは使わないみたいに使える状況が限定される >変数展開より、広い状況で使える Template の方が良いよねっていう >議論をしてるんだってば。 gettext使う場合こそすごく限定されるだろ。使わない場合のほうが圧倒的に多い。 特殊な事例をさも一般的なことのように見せて反対するのはバカのすること。 >>201 >ただ、printf/sprintf/format/% の書式指定文字列に変数埋め込みを使っちゃうと >予想外の挙動を招いてしまう可能性が高いのは間違いないよ。 それ、変数埋め込みに限った話じゃないし、変数埋め込みの欠陥ではない。 結局、なんとかしてPythonの仕様を正当化したいだけの信者にしかみえない。
206 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 09:58:41 ] いまのpythonにどういう風に導入したらいいと思う? uとかrのまねして、e""みたいにすれば、影響範囲は少なそうだけど。 効率を考えなければ、Template("文字列").safe_substitute(vars())とかに置き換えればいいのか?
207 名前:デフォルトの名無しさん [2009/08/14(金) 10:10:12 ] tsushima.2ch.net/test/read.cgi/newsplus/1250174574/
208 名前:193 mailto:sage [2009/08/14(金) 11:06:30 ] >>205 gettextは目的が明確な専用ツールだし、言語仕様ではなくライブラリ。 それに対して、文字列に対して変数を展開するのは汎用的な要求で、 言語仕様に組み込むとすれば(PerlではなくPythonでは)できるだけ汎用に いろんな目的に使えることが要求される。gettextと同じレイヤで語れない。 で、Templateならgettextに対応できて、Perl/Ruby方式変数展開では 対応できない。ならば汎用でしかも言語仕様を汚さないで済む方が良い、 というのがPython的な判断。 実際に string interpolation に対して gettext で使えねーと反論しているメールは こちら。 ttp://mail.python.org/pipermail/python-dev/2002-January/019523.html
209 名前:193 mailto:sage [2009/08/14(金) 11:20:41 ] ちなみに、gettextはリテラル以外の文字列に対する変数展開がほしいという 要求のわかりやすい例であって、gettextのためだけに interpolation が却下された 訳じゃないぞ。
210 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 11:30:39 ] >>206 既に str.format(**vars()) で実現できる以上、言語仕様を汚して15タイプを 削減する提案が通る見込みは無いだろうな。 あったらときどき便利な機能を言語仕様に際限なく組み込んでいけばPerlに なってしまう。
211 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 16:14:51 ] 俺的にはstr.format()で満足。信者だからかな?w
212 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 16:20:45 ] おまえらお盆に何やってんだ
213 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 20:13:15 ] センスが悪くて誰もやらないようなことを持ち出して、 それを出来ないように蓋をするのがPython流なんだと理解した。
214 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 21:25:30 ] はいはい
215 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 21:40:14 ] 別に蓋してない気がするけど。元々できないんだし。
216 名前:201 mailto:sage [2009/08/14(金) 23:05:48 ] >205 俺自身はRubyがメインだし、Pythonを正当化したワケじゃなく >186-189の疑問に判る限りで答えただけ。 何がなんでも正当化したいなら「変数展開とeval()組み合わせたら〜」とか言ってセキュリティーホールがあるって主張するし わざわざ「printf/sprintf/format/% の書式指定文字列に変数埋め込みを」という限定を入れたりしないよ。
217 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 23:07:17 ] 実際、変数展開ある言語だと何かもやもやするから、 Pythonにはいらんな。
218 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 23:26:36 ] 組み合わせるまでもなく evalだけでセキュリティホールだな
219 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 23:32:18 ] まあ、「何がなんでも正当化」をするなら、って話だからw
220 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 01:23:28 ] 俺もない方がいいと思う。それこそがPythonの存在理由と思うから。Perlみたいな言語はPerlだけでいい。
221 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 04:30:09 ] Perl my $price = 100; print "price = $price"; PHP $price = 100; echo "price = $price"; Ruby price = 100 print "price = #{price}"
222 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 05:32:15 ] JavaScript price = 100 print "price = " + price そろそろJavaScriptに、変数展開もsprintf相当の機能も ないことに誰か言及してあげてもいいと思うんだ
223 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 06:58:06 ] >>222 ExtJS
224 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 06:59:23 ] >>210 >言語仕様を汚して このへんが信者だよな。
225 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 07:09:19 ] 全然目的が見えない。
226 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 11:00:20 ] JavaScriptを使う理由って、ブラウザ上で動くスクリプト言語が事実上JavaScriptしかないってだけだからな。
227 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 11:17:46 ] 結局そこは、ブラウザの政治力学なのでしょうがない。
228 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 12:15:26 ] JavaScriptの近年の過大評価って、不良の善行、落ちこぼれの平均点みたいなところがあるよな。 最初はあんなにダメな子だったのに…という。
229 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 12:16:24 ] 政治力学がよく解らんが、ブラウザとしてはそんなに多数の言語をサポートしたくないんだろう HTMLとJSだけサポートするから、あとはサーバ側でやってよっていう あんまり馬鹿でかいエンジンになられるのも嫌だから、俺はそれで良いと思う