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/
89 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 13:13:54 ] >>87 最近の小学生は3と聞いたけど
90 名前:デフォルトの名無しさん [2009/07/30(木) 13:39:23 ] >>89 それ聞きまちがい
91 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 15:00:19 ] ttp://ja.wikipedia.org/wiki/円周率は3
92 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 00:01:38 ] エイプリルフールネタを一見それとはわからない状態で いつまでもWeb上に残しておくなんて、はっきり言って悪だろ。 それでwebなんちゃらなんて会社の代取とか笑えねーって。
93 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 00:39:36 ] 日付みればわかるだろ。アホか
94 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 01:03:21 ] 実際、真に受けてるやつがいるだろ。アホか
95 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 01:08:02 ] ひとりのアホの面倒をみるためにみんなが犠牲にならなければならないのかよ
96 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 08:58:40 ] >>95 犠牲て。 ネットにデマを流すときはそれなりの 配慮があってしかるべき。jk
97 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 11:54:13 ] 4/1のエントリって時点で、それなりの配慮はしてるわな。
98 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 18:47:55 ] 4/1に書かれた記事は全て疑わないといけないのかよ
99 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 19:00:29 ] とうぜんだろ
100 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 21:20:58 ] どっかのバカがやってるならともかく、 プロフィールにそれなりの肩書き書いておいて あんな感じじゃ、いろいろ神経疑われるわなw
101 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 22:03:28 ] Pythonian: モンティパイソン精神なのでそんなの余裕で笑ってスルー Rubist: エープリルフールネタなんだからあーたらこーたら Perler: ネタを見逃して話題に乗れない
102 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 22:13:16 ] >>101 あ、それいいえてミョー
103 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 23:20:35 ] >>101 いや、きっとdankogaiなら、 dankogaiならネタを見逃すはずがない。
104 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 23:34:11 ] >>103 断固GUYって誰?
105 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 23:34:33 ] LLTVまで残り1ヶ月を切りました。 盛り上がって参りましょう!
106 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 06:20:40 ] すみません。 ところで僕は中学生のころ、いじめられっこでした。 一番ひどくいじめられた放課後、先生が見るに見かねてとめてくれて 家の帰りもずっといっしょでした。そのとき、川原で先生と一休みしたんですが 先生がこんなことをいっていました。 「人間ってのはひどいもんだ。 こんな鼻くそより汚い。」 私はいまだに鼻くそより汚いという比喩がうまく理解できませんが、 そんな比喩にまで使われた鼻くそをいまだに食べています。私はRubyプログラマーです。
107 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 15:45:52 ] そのコピペなんかいみあんの?
108 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 18:49:14 ] 例えばこれを実行すると結果が何になるか、すぐにわかる? @int i=0;if(i=1){puts("1");}else{puts("2");} Aint j=0;for(;j>0;++j){}
109 名前:デフォルトの名無しさん [2009/08/02(日) 02:02:48 ] 分かるよ。 1,1 が表示される。 2,for文は実行されない。
110 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 07:04:04 ] 俺は後者はとっさに判らないな 単項++演算子の戻り値はアテにすべきじゃないと思ってる 自分じゃそういうコードは書きたくないね
111 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 07:06:57 ] 単項++の戻り値は使われていないわけだが…
112 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 07:13:43 ] ごめんなさい間違えました
113 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 07:15:59 ] i=1が(文脈によっても)何を返すかは、言語によってブレがあるな。
114 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 08:16:52 ] BASIC系は文脈で比較か代入かが決まることが多いね 本家はLET省略不可だからLET文以外代入だけど Javaは代入文自体の戻り値はCと変わらんが if文がbooleanしか受け付けないからエラーだな
115 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 12:42:53 ] >>107 底辺Rubyプログラマーってことだろ
116 名前:デフォルトの名無しさん [2009/08/03(月) 09:39:57 ] 所謂覆面算で 英字一文字がそれぞれ異なる一桁の数字(0-9)で表されるとき one + nine + twenty + fifty = eighty となる組み合わせを検索してください 各行の先頭の文字は0以外です
117 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 11:52:03 ] それって正解は「そんな組み合わせは無い」で合ってる?
118 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 11:55:11 ] pythonスレで答え出てなかったっけ?
119 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 12:26:48 ] ごめんあった、何故かone+nine+twenty+fifty+eighty=eightyで計算してた俺の馬鹿〜 selects([], _). selects([X|XL],YL) :- select(X,YL,L), selects(XL,L). check(O,N,E,I,T,W,Y,F,G,H,ONE,NINE,TWENTY,FIFTY,EIGHTY) :- ONE is O * 100 + N * 10 + E, NINE is N * 1000 + I * 100 + N * 10 + E, TWENTY is T * 100000 + W * 10000 + E * 1000 + N * 100 + T * 10 + Y, FIFTY is F * 10000 + I * 1000 + F * 100 + T * 10 + Y, EIGHTY is E * 100000 + I * 10000 + G * 1000 + H * 100 + T * 10 + Y, ONE >= 100, NINE >= 1000, TWENTY >= 100000, FIFTY >= 10000, EIGHTY >= 100000, EIGHTY =:= ONE + NINE + TWENTY + FIFTY. solve(ONE,NINE,TWENTY,FIFTY,EIGHTY) :- selects([O,N,E,I,T,W,Y,F,G,H],[0,1,2,3,4,5,6,7,8,9]), check(O,N,E,I,T,W,Y,F,G,H,ONE,NINE,TWENTY,FIFTY,EIGHTY). ?- solve(ONE,NINE,TWENTY,FIFTY,EIGHTY). ONE = 984, NINE = 8584, TWENTY = 364832, FIFTY = 75732, EIGHTY = 450132 ; false.
120 名前:デフォルトの名無しさん [2009/08/03(月) 13:24:34 ] prologだっけ?
121 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 14:54:47 ] Prologだよ 手続き書くのは面倒いが 覆面算とかはむしろこの言語の十八番だと思う
122 名前:デフォルトの名無しさん [2009/08/03(月) 15:29:28 ] >>121 おすすめのProlog実装を教えてください。 あとおすすめの教科書もあれば。
123 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 15:48:44 ] とりあえずはSWI-Prologで良いんじゃないかと 教科書は…Prologスレのテンプレに載ってるやつ片っ端読むのが良いんじゃない? 日本語で書かれてるやつだけ読んでもそれなりには解るかと ちなみに今回のコードは「Prolog 覆面算」でググって出てきた SEND+MORE=MONEYのコードを元にして改変したものだったりする 自分で書いたコードは遅すぎて話にならんかったw
124 名前:デフォルトの名無しさん [2009/08/03(月) 15:51:51 ] metafontとかでも解けそうな気がするな。 くりあがりの処理がミソかしら。
125 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 20:24:40 ] >>123 a+b+...+c=x の形になる任意の式を与えて 解いてもらうようにするにはどうすれば良いですか?
126 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 22:34:53 ] >119 みたく答えになりうる値を全部列挙するワケにはいかないだろうから モジュール使うほうが良いんじゃないかな ?- use_module(library('clp/bounds')). ?- 3 + X + 4 #= 19. X = 12. っていうか、Prologってこのスレで扱って良いものなのかな
127 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 07:35:13 ] >>123 さんくすです。swi-prologをインストールして勉強することにします。
128 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:00:08 ] >>126 他の言語よりも分かりやすく短く書けるのならそれはLL
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に限らずどの言語も危ないことになるな すばらしい発見なのでさっさと報告してくれ