- 1 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 13:12:25 ]
- 禁止事項【臨時】
・前スレの911自身の書き込み、またそれに関連した書き込みを禁止致します。 (スレが荒れる原因となります) プログラミング言語処理系の開発に興味のある人達のスレッドです。 字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換, CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン, SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化, JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。 意味論に関する話題も歓迎です。 過去スレ 1 pc.2ch.net/tech/kako/981/981672957.html 2 pc2.2ch.net/test/read.cgi/tech/1021136715/ 3 pc5.2ch.net/test/read.cgi/tech/1070089173/ 4 pc5.2ch.net/test/read.cgi/tech/1100097050/ 5 pc8.2ch.net/test/read.cgi/tech/1106129164/ 6 pc8.2ch.net/test/read.cgi/tech/1115335709/ 7 pc8.2ch.net/test/read.cgi/tech/1129287390/ 8 pc8.2ch.net/test/read.cgi/tech/1131273918/ 9 pc8.2ch.net/test/read.cgi/tech/1135082582/ 10 pc8.2ch.net/test/read.cgi/tech/1146844753/ 11 pc11.2ch.net/test/read.cgi/tech/1160879890/ 12 pc11.2ch.net/test/read.cgi/tech/1188688416/ 前スレ 13 pc12.2ch.net/test/read.cgi/tech/1233143342/ 関連リンクは多分 >>2-10 あたり
- 266 名前:227 mailto:sage [2010/01/23(土) 00:12:26 ]
- >>261, >>263
知らなかった。確かに違う。> a +b と a + b で意味が違う この辺、複雑なルールなのに穴に落ちる事が少なく 普通の使用者は気がつかないようになってるのが、凄いですね。 本当にRubyの作者はアホですね。 このRubyのやつとか、Perlの関数名によってパース結果が変わるのとか、 真似するのはやめるべきですね。シンプルよりも使いやすさを求めるのではなく、 許容できない使いにくさが無い範囲でシンプルな文法を目指したいですね。 >>246 で書いた文法の場合、正確に文法を書くとすると、 関数呼び出し ← id ( '('? (式 ',')+ ')'? / '()' ) 参照 ← id にしようと考えています。( ?は省略可能, /はor, +は一回以上の繰り返し) 要は、idの後ろからその式の終端までに他の式があれば 関数呼び出しとして扱うつもりです。 LL(1)だと、 a(1) と a = 1 が両方パースできません。 PEG文法の範囲の文法が使いやすくて良いと思います。パーサの実装も楽です。 LLだと無限大相当ですが。
- 267 名前:227 mailto:sage [2010/01/23(土) 00:13:47 ]
- >>262
区別できてる気はしませんが、話したいのは文法についてです。 while (true); myfunc(true); のように書き分けるコーディング規約は一般的だと思いますが、違いますか? 検索して3番目に出てきたPearライブラリの規約では、 pear.php.net/manual/ja/standards.control.php > 制御構造では、関数コールと区別するために、 制御キーワードと開きカッコの間に空白を 1 つ置きます。 と書かれていました。皆これを当然と思っているのなら、 関数名の後ろにスペースを入れた場合、エラーになるまたは違う解釈をする、 というのは落とし穴にならないのではないでしょうか? >>264 設計、実装にあたり参考になる本を紹介してもらう事もあるかもしれませんが、 それは、それでよろしくおねがいします。 ちなみにどんなレベルが私に合ってると思いますか? >>265 私が言うのも何ですが、何でこのスレではそこまで煽られてるんですか?
- 268 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 01:51:17 ]
- >>266の文法はPEGとしても>>246の例と一致していないよ。たとえば
「func a, b,」や「func (a,」が関数呼び出しにマッチしている。 書きたかったのは下のような奴じゃないかと思うんだけど。 関数呼び出し := id ( '()' / 式 ( ',' 式 )* / '(' 式 ( ',' 式 )* ')' ) で、この文法ってRubyと大差ない複雑さだよ。 「f f, f a, b, c」とか、式の中に裸の「,」が出てきたら困るよね。
- 269 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 02:34:05 ]
- 横レス失礼
>>266,267 言っている事が矛盾している気がするヨ。 >>266では、a +b と a + b で意味が違う事を問題としているが、 これはRubyが構文によってセパレータ(字句区切り子)の解釈が異なる事に起因する。 しかし「二項演算子の前後には空白を入れる」という一般的なコーディング規則に 従っていれば実用上の問題は生じない。 対して、>>267ではwhile文と関数呼び出しという二つの構文で、セパレータの 解釈が異なることを問題としていない。それを一般的なコーディング規則であるから、 問題は生じない(落とし穴にならない)と主張している。 Rubyの構文が汚いのは分かるから、>>263が助言しているように、 まずはセパレータでトークンを区切って素直にパーズできる文法で設計することを勧める。
- 270 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 02:48:19 ]
- >>268
ここはこれでも全然煽られてないんだよ。 能力を持った人しか来れないし。 逆にエロゲの人でも能力を持っていればそれほど煽られない(煽られないことはないが)。 君みたいにダメプログラマで上から目線なら、今までだったらもっと煽られて相手にされてないよ。 トークンの切り出し程度で悩んでるなんて、ここに来る資格はない(断言
- 271 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 03:16:08 ]
- 偉そうなこと言っといて安価ミスってると恥ずかしいよね
- 272 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 03:47:25 ]
- ああ(笑
- 273 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 09:48:12 ]
- >>267
>while (true); >myfunc(true); >のように書き分けるコーディング規約は一般的だと思いますが、違いますか? 少なくとも、コーディング規約としては一般的ではない。
- 274 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 10:15:29 ]
- ワロヒコって言った奴ちょっと出てこい
- 275 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 10:33:34 ]
- >>273
CのK&RやJavaは、そうやって書き分けるだろ。それが一般的。 GNUが特殊だと思う。
- 276 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 10:34:47 ]
- >>273
そうか?いたって一般的だと思うが 少なくともここにある規約は全部そうなってる ttp://www.objectclub.jp/community/codingstandard/
- 277 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 12:07:05 ]
- >>246
俺はそれでいいと思う。PythonとRubyの折衷案みたいだね。 r = obj.method1 s = r a, b obj.method2 c, s, d こんな3行があったとき、sを使わずにrの結果を直接method2に渡すと r = obj.method1 obj.method2 c, r a, b, d となる。 これをパースするのが難しそうな気がする。
- 278 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 13:44:15 ]
- >>275
気にしてなかったけど、意外と多いね。 www.google.com/codesearch?q=while++lang:c 空白の有無で意味が変わるのは個人的には気持ち悪いけど、 俺が使う訳じゃないしな。
- 279 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 14:13:45 ]
- https://developer.mozilla.org/en/Mozilla_Coding_Style_Guide#Control_Structures
google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Conditionals lxr.linux.no/linux+v2.6.32/Documentation/CodingStyle#L181 cvsweb.netbsd.org/bsdweb.cgi/src/share/misc/style?rev=HEAD > Space after keywords (while, for, return, switch). httpd.apache.org/dev/styleguide.html > There is a space between the keyword and the opening bracket. Mozilla, Google, Linux, NetBSD, Apache はキーワードの後ろは 空白を空けるスタイルだった。コーディングスタイルと構文規則 では要求される厳密性が違うけどね。インデントの強制くらいなら 受け入れられ易いとは思うけど。
- 280 名前:227 mailto:sage [2010/01/23(土) 15:47:09 ]
- >>268, >>277
その点は見逃していました。 たしかに(人間にとって)パースするのが難しいですね。 試しにRubyで試してみた所、 def a(*x)print"a";p x end;def b(*x)print "b";p x end;a 1,b 2,3 syntax error, unexpected tINTEGER, expecting kDO or '{' or '(' との事です。引数列の中では、関数呼出の括弧は省略不可なのでしょうか? PEG文法は貪欲なアルゴリズムなので a 1,b 2,3 は a(1,b(2,3)) になります。 これは罠になる事が多いでしょうか? このようなコードはとても読みにくいとは思いますが、 そもそも書く方も混乱するので書かれにくく、 プログラムを書く時の罠にはならないかと思います。 >>273, >>275, >>276 GNUのコーディング規約はスペース開けるんですね。知りませんでした。 論点としては、 while の後ろにスペースを開けるのが一般的かどうかではなく、 関数名の後ろにスペースを開けない事が一般的かどうかですね。 これも、func (1)+2 という罠コードを書かないという風にすればいいんですが。 どちらも、RubyのようにWarningを出す等の処理をすれば良いですかね?
- 281 名前:227 mailto:sage [2010/01/23(土) 15:48:12 ]
- 脇道
>>268 すみません、適当を書きました。 手元のでは a(0)[1](2) みたいなののサポートも入ってたのですが、 今回は省略です。 >>269 矛盾というか、同じ論法で正反対の結論になってると言いたいわけですね。 それは前提となるコーディング規約が重要なのではないでしょうか? 私は二項演算子の前後に空白を入れるのはそんなに一般的でないと思っています。 皆さんはどうですか? >>269,>>270 今論じてる、fun(foo,bar)とfun foo,bar の間の話に、 トークナイズ(字句解析)は関係ないと思ってるんですが、私の言葉の使い方は間違ってますか? "fun(foo,bar);" => ['fun','(','foo',',','bar',')',';'] という処理の事を字句解析と言うと認識してるんですが。
- 282 名前:デフォルトの名無しさん [2010/01/23(土) 19:05:04 ]
- 二項演算子の間に空白を入れる人は多いよ。
fun(foo,bar)とfun foo,barを同居させた奴が前スレにいたよ。 エロゲプログラマだったけど。
- 283 名前:デフォルトの名無しさん [2010/01/23(土) 19:06:39 ]
- 関数宣言の時にカッコの後ろに空白をいれるのは検索性を良くするためで、
来れも結構いるよ。
- 284 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 19:14:54 ]
- そもそも>>246の
>引数があれば関数呼び出しで、引数が無い場合は >括弧の省略は不可という仕様です これがおかしい そんな半端に括弧を省略して何になる a = call object.method だろ 文法より意味論をまず確定しろ
- 285 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 19:15:22 ]
- >>276
>少なくともここにある規約は全部そうなってる >ttp://www.objectclub.jp/community/codingstandard/ それ、みんな 「Java コーディング標準(オブジェクト倶楽部バージョンを〜用に変換したもの・・・」 だから、全部同じスタイルになっててあたりまえだろw >>279 Open source系は、キーワードの後ろにスペース入れる事が明記されてるのが多いね。 pearもそうだ。
- 286 名前:デフォルトの名無しさん [2010/01/23(土) 19:36:35 ]
- もうちょっと勉強してから質問しないと、低レベルすぎて話にならないよ。
9??の馬鹿の方がまだ良かったかな。 しかし、こんな素人にみんないつのまに優しくなったんだ?
- 287 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 19:40:29 ]
- レベルより態度。
- 288 名前:デフォルトの名無しさん [2010/01/23(土) 19:40:31 ]
- 高卒でも
kenjikakera.asablo.jp/blog/2009/11/04/4676336#c の様に構文を自由に変えられるコンパイラを作ってるんだから、 麻布と京大の名が泣くぞ。ちんこ。
- 289 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 19:47:40 ]
- 9??の態度は最悪だったなw
その後にマルチスレッドのコンパイラが出たのは、人格と能力はべつもんと知ったな。
- 290 名前:デフォルトの名無しさん [2010/01/23(土) 19:50:17 ]
- >>283
自己レス カッコの後ろ->カッコの前。恥ずかしい…orz
- 291 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 19:57:45 ]
- >>288
これが18年前に作られたそうだ。OO的にはダメダメだけどエロゲ程度で作るのなら関数型が分かり易くて良いだろう。
- 292 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:00:47 ]
- しかもコンパイルスピードは高速らしい。
makeを内蔵してマスター時のスピードを少しでも上げるんだとさ
- 293 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:03:16 ]
- まあ、物を見てないんでホントかどうかは怪しいが。
- 294 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:03:45 ]
- 計算機はプログラマの人格には無頓着だからな。
ネットでは人格が変わる人もいるから、そっちかもしれんが。
- 295 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:06:09 ]
- Horizontal Layoutってどう思う?
1 + 2*3 と書くと2*3を先に計算して 1+2 * 3 と書くと1+2を先に計算するって奴。
- 296 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:08:31 ]
- きもい。Cの優先順位が身に染みてるけど、メンテのためにカッコをいれる。
それに比べて>>295は俺にはなじまん。
- 297 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:08:45 ]
- 1 + 2 * 3
は?
- 298 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:13:51 ]
- スペース同じなら * 優先
- 299 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:14:39 ]
- 同じなら左優先
- 300 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:20:31 ]
- GAME言語は左優先だったな
APLもだっけ? 1 2 3 ADD MULがいいか MUL(1, ADD(2, 3))がいいか (MUL 1 (ADD 2 3))がいいか ((1 2 ADD) 3 MUL) Lisp+Forthも面白いか。 でも世の中にはカンマと小数点が逆の国があるらしくて そういう国の人はどう思うのだろうというのも時々
- 301 名前:295 mailto:sage [2010/01/23(土) 20:20:33 ]
- 聞いておいてなんだけど自分もキモいと思う。
採用している言語もほとんどないしね。 >>297 1+2*3 1 + 2 * 3 のように均等に分けた場合は演算子の優先順位で決まるらしい。
- 302 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:25:06 ]
- 1/((2+3)*4) とかどうするの?
1 / 2+3 * 4 とか書くの? 空白多すぎて読み辛いよ・・
- 303 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:28:39 ]
- Smalltalkも左優先。
>>302 空白の数で優先度が決まるのかw。 いっそ、空白やTABの数で演算子の種類が略
- 304 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:31:14 ]
- Smalltalk はメッセージ式のルールが上位にあるからシンプルで分かり易い。
- 305 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 20:32:34 ]
- >>300
>にはカンマと小数点が逆の国 フランス、スペイン、イタリア、ドイツあたりがそうらしい。 '.'の代わりにスペースを使う場合もあるとか。
- 306 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 21:01:14 ]
- >Smalltalk はメッセージ式のルールが上位にあるからシンプルで分かり易い。
今でも慣れない、四則演算は小学校で習うから体に染みついてる 数値演算でバグだすとマジ悩む>>Smalltalk
- 307 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 21:13:02 ]
- Scalaの、通常の四則演算を多記号に拡張したような規則は
面白いなあと思ってたんだが、アレは元ネタがあるんだろうか
- 308 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 22:10:18 ]
- だいたい、文字列みたいな一次元で表現しようとするから困るんだよ。
二次元に数式置いて、近い順に演算するってのはどう? 三次元に拡張して、上の段が掛け算、下の段が割り算でもいいよ。 この球の中の総和、みたいな。
- 309 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 00:07:00 ]
- 「左結合」「右結合」という術語があるんだから使いましょうや。
- 310 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 02:47:29 ]
- >>303
whitespace
- 311 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 23:43:34 ]
- >>307
www.scala-lang.org/node/118 これのこと?
- 312 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 08:32:47 ]
- >>308
trifungeやると
- 313 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 13:54:25 ]
- >>291
おまいは関数型言語をわかっていてそれを関数型と言ってるのか? どっかのおかしな事典の「C言語は関数型言語」というトンデモを信じてないか?
- 314 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 14:03:04 ]
- 手続き型と勘違いしてるのでは
- 315 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 07:37:00 ]
- 291の発言は?だが、「関数型言語」の定義を聞かれると
答えるのは難しい。
- 316 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 07:47:49 ]
- 実は「関数型言語」という語の意味が二種類あるという落ちか。
古い定義だと「subroutine以外にfunctionを使える言語」なんでCを含むんだよね。
- 317 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 09:05:34 ]
- 細かい違いな気がするけど
何かを返す返さないで記述が違うのは 便利な気がする・・・basic void 使え・・・c ソース嫁・・・動的型付
- 318 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 09:09:08 ]
- > 古い定義だと「subroutine以外にfunctionを使える言語」なんでCを含むんだよね。
[要出典] Cはsubroutineをfunctionと「呼んでいる」言語であって。
- 319 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 09:53:07 ]
- 値を返すサブルーチンを関数と呼ぶのはCに限らずFortranとかPascalとかあるが、
それらが「関数型言語」と呼ばれていたのは聞いたことがない
- 320 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 10:11:12 ]
- LISPも正格評価で逐次処理、関数は置き換えではなく呼び出しだから、
関数型ではなく実質的に手続き型言語と言えなくもない
- 321 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 10:22:57 ]
- 古い論文だとFortranをfunctional languageと呼ぶことがあるんだけど懼ヲ
まあ、聞いたことないのが当たり前だと思う。 自分も最初に聞いたとき訳が分からなかったし。 あと、その訳語として「関数型言語」が主流だったどうかは知らない。 ごめん。
- 322 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 10:32:12 ]
- >>321
具体的にその論文名を。
- 323 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 10:52:26 ]
- threaded interpretive language とか書名聞いて
何ぞと思って調べてみたら forth と z80 の解説書だった 俺もどこで見たか忘れたけど、Cを関数言語と呼んでた 記憶が・・・まぁ文脈というか時代背景によるよね > 用語の定義
- 324 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 10:58:59 ]
- 技評の「新ANSI C言語辞典」を持ってる人がいたら、それの
「関数型言語」の項を見てもらいたいのだが...
- 325 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 11:08:31 ]
- >>322
論文は手元にないんで無理。 Webならwww.liv.ac.uk/HPC/HTMLF90Course/HTMLF90CourseNotesnode52.htmlが近いかな。 むしろちょっと疑問なんだけど、 "functional language"に同綴り異義語があった というのってそんなに興味深いのか。
- 326 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 11:19:10 ]
- >>324
通りすがりの漏れが引用しますよ p.294 関数型言語 の項より 「関数型言語(functional language) 関数型のプログラミング言語。 LISP、LOGO、APL、BCPL、B、Cなどがある」
- 327 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 11:22:51 ]
- そのころの基準で関数型じゃない言語って何だ?
FORTRAN、COBOLは違うのか? BASIC? 関数を言語仕様に入れただけで、分類が型が変わるのか? アセンブラ?
- 328 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 11:58:43 ]
- どうでもいいからブログでやってろ
- 329 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 12:27:44 ]
- >>326
たぶんそれが日本でデマが流行ってる元凶。 時代によって変わったりなどしない。B も C も関数型じゃない。 >>325 も HPC の専門家らしいので、言語屋じゃない。 言語屋が C を functional などと言った例はないはず。
- 330 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 12:52:56 ]
- 素直にこの辺りを参照した方が良いと思う。
ttp://ja.wikipedia.org/wiki/%E9%96%A2%E6%95%B0_%28%E6%95%B0%E5%AD%A6%29 俺解釈だと「処理が関数の変数と値に依存する言語」「独立して書かれている処理は独立している」だな。
- 331 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 13:02:29 ]
- 「Cを関数型と呼ぶ人が一部にいたのかどうか」
「その事実は万人が知っていてしかるべきか」という話になってしまっているが なんにせよCもFortranも関数型言語ではないし LISPにしても、延々とこんな話を続ける理由になるほど手続き型言語っぽくはない
- 332 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 13:03:14 ]
- >>330
バカ
- 333 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 15:53:39 ]
- LISPとCに根本的な違いが無いのに
「LISPは関数言語」というデマがいつからか 流行ったのが酷いと思うけど。
- 334 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 16:11:15 ]
- > 根本的な違い
根本的というのが曖昧すぎて、何とも言えないな。つまりどういう要素が根本的なのか。
- 335 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 16:24:30 ]
- LISPとCでどこが違うのか言ってみてよ。
- 336 名前:227 mailto:sage [2010/01/30(土) 17:59:10 ]
- Haskellも副作用(モナド)あるから関数型じゃないよね、とか燃料投下してみる。
- 337 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 18:22:26 ]
- OCamlはもっと微妙。
- 338 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 08:20:21 ]
- 関数型言語と呼べるための必要条件は何だろう?
素朴には、すべてのプログラムが数学的な関数だけで構成されていること、だが、 これだとほとんどの言語が失格だな。
- 339 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 08:29:30 ]
- >>338 それは十分条件じゃないか?
下手するとHaskellぐらいしか満たせないw
- 340 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 10:14:20 ]
- トランスレータって何時頃からあるんだろう
A言語をC言語に変換する コンパイラ・スクリプトエンジンというよりは テキスト処理の範疇なような気がするけれども でも欠点があるから、技法として主流足りえない あれか出力先の言語・ビルド環境による影響大 適用できる範囲が、自然と絞られざるを得ないとか toy program というような捕らえ方が一般に正しい 反応なような気もする…
- 341 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 10:19:47 ]
- toy rograam じゃなくて toy language だった
なれない言葉使おうとするじぶんかっこ悪いorz
- 342 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 10:27:21 ]
- 有名なものでは "Software Tools" (「ソフトウェア作法」) の Ratfor が 1974 年。
初期の C++ は、C 言語へのトランスレータだった。テキスト処理で済むような 内容ではなかったけどね。
- 343 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 11:39:44 ]
- Cにうまく変換すれば、可搬性でも速度でも申し分ないはず
でもCの再解釈分だけオーバーヘッドがある D&Eを読むと、初期のC++処理系(Cfront)がトランスレータだったいせいで 生成コードの品質が悪いとか、本格的な言語ではないとか誤解されたと書いてあるが >toy language というような捕らえ方が一般に正しい 真実どうなのかはともかく、多数の認識は今でもそうなのかも?
- 344 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 11:45:36 ]
- OOSC初版の頃のEiffelもCへのトランスレータだったはず
今でもそうなのかは知らないが
- 345 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 11:48:35 ]
- コンパイラ入門―構文解析の原理とlex/yacc、C言語による実装
糞本だった。お前ら責任取れよ
- 346 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 11:55:57 ]
- >>345
どの辺が糞なのか書いてないから責任とってあげない
- 347 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 13:25:00 ]
- 馬鹿には有効活用できない本を馬鹿に薦めた責任とかそういうこと?
- 348 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 13:41:31 ]
- 良書だった記憶があるけどなあ
薄い割に説明はかなり噛み砕いてあるし、 かといって理論的な部分を無視してるわけでもない もっとも、内容としては構文解析・yacc/lexの最低限の使い方で終わってるから 詳細は別途ドラゴンブックとかを頼らないといけない その辺も含めて、巻末に関連書籍の紹介が載ってたはず
- 349 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 17:47:18 ]
- でもこの本高校生か大学1年程度の
レベルの本だから意味なくね?
- 350 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 18:42:04 ]
- >>349
この本はそのレベルの人には非常に良い本だし、その良き本を糞本扱いできる程高度な知識を持つものなら手にとって数ページ眺めるだけで自分に必要ないことを理解するハズだよね? それがわからないという事、つまり>>345の中の人は……(以下自粛
- 351 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 19:00:19 ]
- よっぽどデカい本屋じゃないと、置いてなくない?
- 352 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 22:09:25 ]
- 関数型言語をラムダ算法を元に解説するのはもう古いの?
真っ先に出てくると思ったのに。
- 353 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 03:45:35 ]
- 理論背景って研究者にしか意味無いからな…
- 354 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 13:01:04 ]
- でもそういう基礎理論があれば関数型は動作を類推できるじゃないか
コンパイラの設計法にも関わる事だと思うけどな そういうのを知らないとRubyみたいに仕様が破綻することになる
- 355 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 13:06:45 ]
- >>352
破壊的リスト操作をラムダ算法で解説できるんですかあなたは?
- 356 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 11:59:29 ]
- >>352
C#はラムダ式があるから関数型言語だ、ということにしたくないんだろうな。 無名関数はPerlにもある。 もう「値を返すサブルーチン」と同じくらい当たり前になってしまった。
- 357 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 12:17:13 ]
- ラムダがありゃ関数型言語、という新説が登場しますた
- 358 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 13:26:55 ]
- 文法のlambdaとラムダ計算は別物だよね
- 359 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 13:42:28 ]
- >>358
それはlambdaのない言語が言い訳するときのセリフ
- 360 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 17:10:19 ]
- 大事なのはクロージャ
- 361 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 22:19:21 ]
- Objective-Cの勝利。
- 362 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 23:29:26 ]
- >>352
ほとんどの言語はチューリング完全 チューリング完全ということはチューリングマシンと同じ計算能力を持つ チューリングマシンとラムダ計算は等価 よってほとんどの言語は関数型である なんてことになって不都合とか
- 363 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 23:31:47 ]
- SQLいいよSQL
- 364 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:14:36 ]
- 上向き構文解析って遅いし
意味の無い概念じゃないですか 還元とか意味が全くないし
- 365 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 08:34:34 ]
- オマエが意味を理解できなくても、LALR(1) パーサは現実に働いているわけだが
- 366 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 17:06:29 ]
- >>364
上向き構文解析って下向きより遅いの?
|

|