「コンパイラ・スクリプトエンジン」相談室9

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
プログラミング言語処理系の開発に興味のある人達のスレッドです。

字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換,
CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン,
SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化,
JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。
意味論に関する話題も歓迎です。

過去スレ
1 http://pc.2ch.net/tech/kako/981/981672957.html
2 http://pc2.2ch.net/test/read.cgi/tech/1021136715/
3 http://pc5.2ch.net/test/read.cgi/tech/1070089173/
4 http://pc5.2ch.net/test/read.cgi/tech/1100097050/
5 http://pc8.2ch.net/test/read.cgi/tech/1106129164/
6 http://pc8.2ch.net/test/read.cgi/tech/1115335709/
7 http://pc8.2ch.net/test/read.cgi/tech/1129287390/
8 http://pc8.2ch.net/test/read.cgi/tech/1131273918/
関連リンクは多分 >>2-10 あたり
2デフォルトの名無しさん:2005/12/20(火) 21:44:10
★コンパイラ一般

・色々なツールの紹介
 http://catalog.compilertools.net/
・コンパイラ関連のリンク集
 http://www.ulis.ac.jp/~nakai/rel_web_compilers.shtml
・スクリプティング言語資料室(仮) (リンク集)
 http://www.kt.rim.or.jp/~kbk/
・Compiler Construction
 http://rananim.ie.u-ryukyu.ac.jp/~kono/lecture/2000/compiler/index.html
・Compiler Construction (1997)
 http://rananim.ie.u-ryukyu.ac.jp/~kono/lecture/1997/compiler/compiler.html
・情報システム工学実験 III コンパイラ・コンパイラ
 http://math.cs.kitami-it.ac.jp/~fuchino/proin/experimentIII-2000/jikken.html
・OS/Programming 簡単な C コンパイラ
 http://www.csg.is.titech.ac.jp/~chiba/lecture/os/
・正規表現
 http://hp.vector.co.jp/authors/VA007799/viviProg/doc_regexp.htm
・コンパイラ研究・開発情報の一集積所
 http://compilers.cs.uec.ac.jp/
・Links and Selected Readings
 http://www.gnu.org/software/gcc/readings.html
・国産のコンパイラ共通インフラストラクチャCOINS
 http://www.coins-project.org/
3デフォルトの名無しさん:2005/12/20(火) 21:48:20
★字句・構文解析

・Lex and YACC primer/HOWTO (邦訳)
 ttp://www.linux.or.jp/JF/JFdocs/Lex-YACC-HOWTO.html
・Turbo Pascal Lex/Yacc
 http://www.musikwissenschaft.uni-mainz.de/~ag/tply/tply.html
・Jim Roskind's LALR(1) C++ Grammar
 ttp://www.empathy.com/pccts/roskind.html
・Flexと Bisonを同時に使う
 http://guppy.eng.kagawa-u.ac.jp/~kagawa/1999/SysProg/both.html
・KITE_ASM (yacc,lex)
 http://www.arch.cs.kumamoto-u.ac.jp/project/kite/kiteasm/
・bison用のC++ LALR skeleton
 ttp://www.bj-ig.de/software/bison/
・ANTLR(非yaccのパーサジェネレータ)
 ttp://www.antlr.org/
・JavaCC(Java Compiler Compiler)
 ttps://javacc.dev.java.net/
 ttp://village.infoweb.ne.jp/~fwif0083/program/java/javacc/javaccgrm.html
 ttp://www.asahi-net.or.jp/~DP8T-ASM/java/tips/JavaCCHelloWorld.html
・CUP, JLex, JFlex
 http://www.cs.princeton.edu/~appel/modern/java/ (JLex, CUP)
 ttp://www.jflex.de/
・SableCC
 ttp://www.sablecc.org/
・¬<><∪∪ (notavacc)LALR(1)
 http://ne.cs.uec.ac.jp/~koto/notavacc/
・boost::spirit(C++のテンプレートでEBNFの構文を模倣)
 http://spirit.sourceforge.net/
 ttp://boost.cppll.jp/HEAD/libs/spirit/index.html(マニュアル日本語化プロジェクト)
 ttp://www.fides.dti.ne.jp/~oka-t/cpplab-boost-spirit.html
4デフォルトの名無しさん:2005/12/20(火) 21:48:57
★ごみ集め

・GC FAQ -- draft
 http://www.iecc.com/gclist/GC-faq.html
・A garbage collector for C and C++
 http://www.hpl.hp.com/personal/Hans_Boehm/gc/
・一般教養としての Garbage Collection
 http://www.is.s.u-tokyo.ac.jp/~vu/01/jugyo/processor/process/soft/compilerresume/gc/gc.html
・Garbage Collection : Algorithms for Automatic Dynamic Memory Management
 http://www.amazon.com/exec/obidos/ASIN/0471941484/

★処理系,スクリプト

・kikyou.info (吉里吉里というゲームのスクリプト)
 http://kikyou.info/
・tiny C コンパイラ (C)
 http://www.watalab.cs.uec.ac.jp/tinyCabs.html
・6809用 Micro C コンパイラ
 http://www.axe-inc.co.jp/pds/mc09.html
・Portable Object Compiler (Obj-C >> C のトランスレータ?)
 http://users.pandora.be/stes/compiler.html
・自作コンパイラの部屋(PL/1, Pascal等)
 http://www.tokumaru.org/
・『Rubyソースコード完全解説』サポートページ
 http://i.loveruby.net/ja/rhg/
・『やさしい Lisp の作り方』『やさしい Java インタプリタ の作り方』
 http://www.okisoft.co.jp/esc/go.html
・MSによるPEフォーマット仕様書(日本語)
 http://www.interq.or.jp/chubu/r6/reasm/PE_FORMAT/intro.html
5デフォルトの名無しさん:2005/12/20(火) 21:50:16
★学会

・PLDI
 http://research.microsoft.com/conferences/pldi06/
 コンパイラの研究に関する最新成果を知りたければまずはここ。
・POPL
 http://www.cs.princeton.edu/~dpw/popl/06/
 PLDIよりは理論寄りだが大いに参考になる。
・ICFP
 http://icfp06.cs.uchicago.edu/
 関数型言語に関する学会。とても難しい。
・OOPSLA
 http://www.oopsla.org/
 オブジェクト指向言語に関する学会。最近はやや低調?
・ICCC
 http://www.st.cs.uni-sb.de/cc/
 ヨーロッパ系。派手さはないが堅実。
6また貼り忘れてないか:2005/12/20(火) 22:07:19
★参考書籍

・コンパイラ 原理・技法・ツール 1&2
 http://www.amazon.co.jp/exec/obidos/ASIN/4781905854/
 http://www.amazon.co.jp/exec/obidos/ASIN/4781905862/
 通称ドラゴンブック。バイブル。
・コンパイラ構成法 原田 賢一
 http://www.amazon.co.jp/exec/obidos/ASIN/4320029224/
 http://www.hara.cs.keio.ac.jp/kCompiler/ (ソース、正誤表のダウンロード)
・プログラミング言語処理系 岩波講座 ソフトウェア科学〈5〉 佐々 政孝
 http://www.amazon.co.jp/exec/obidos/ASIN/4000103458/
 一冊で済ませたい人へ。
・コンパイラの構成と最適化 中田 育男
 http://www.amazon.co.jp/exec/obidos/ASIN/4254121393/
 最適化がメインだが、構文解析からコード生成までの基本事項も解説されている。
・コンパイラの仕組み 渡邊 坦
 http://www.amazon.co.jp/exec/obidos/ASIN/4254127081/
 薄い奴(185p)を読みたい人に。
・21st Century Compilers (Alfred V. Aho, Sethi, Ravi Sethi, Jeffrey D. Ullman, Monica Lam)
 http://www.amazon.co.jp/exec/obidos/ASIN/0321131436/
 まだ出ていない。
・スモールコンパイラの制作で学ぶプログラムのしくみ
 http://www.cbook24.com/bm_detail.asp?sku=4774121770
 初心者向けの優しい解説本。
7デフォルトの名無しさん:2005/12/21(水) 07:44:06
>>6
貼り忘れてないか、はいいけど、リンク先の確認ぐらいしようね、ボク。
8デフォルトの名無しさん:2005/12/21(水) 07:55:32
このスレは質が高くなるといいなあ。

処理系の実装と関係ない、どの言語が優れてるだとかの話は願い下げに
してもらいたい。

あと、このスレの1は前スレのテンプレをそのままコピペしたみたいで
前スレの1が立てたwikiが載ってないね。
http://www6.atwiki.jp/compilerandscriptengine/
9デフォルトの名無しさん:2005/12/21(水) 13:18:54
スクリプト言語の最小構成(これらの機能を満たす物をスクリプト言語と呼ぶと言う定義というか)について議論するのは
このスレでよろしいのでしょうか?
10デフォルトの名無しさん:2005/12/21(水) 15:16:58
11デフォルトの名無しさん:2005/12/21(水) 15:58:32
前スレが埋まったので…

>>9
うはwまた荒れそうなネタをww

この議論に参加する者は、
「絶対的な答えはない」ということを肝に銘じておくように。
12デフォルトの名無しさん:2005/12/21(水) 20:08:27
荒れそう以前に下らなすぎ。意味がない。
13デフォルトの名無しさん:2005/12/21(水) 20:51:01
>>12
じゃぁ何があればスクリプト言語と呼べると思う?
14デフォルトの名無しさん:2005/12/21(水) 20:54:00
だからそれが下らないって。日本語を理解できないのか?
15デフォルトの名無しさん:2005/12/21(水) 21:21:23
>>13
必死だな市ね
16デフォルトの名無しさん:2005/12/21(水) 21:46:33
>>14
くだらないか?別に結論をださなきゃいけないわけじゃないんだから、
答えの出ない問題をわいわい議論してもいいじゃんか。

なにをもってスクリプト言語というかと聞かれたら、おれなら「処理系(構文解析系)と実行系がひとつになっている言語」と答える。


17デフォルトの名無しさん:2005/12/21(水) 21:48:37
それじゃ、お前らの大好きなLISPを完全にリプレースできるような言語を考えてみないか。
Luaなんか良い線行ってる気がするんだけど、
コードをデータで扱ったり新しい構文は定義できないしなあ。
18デフォルトの名無しさん:2005/12/21(水) 21:59:33
>>17
つECMAScript
19デフォルトの名無しさん:2005/12/21(水) 22:00:22
>>16
言葉遊びにしかならん。逝け。
20デフォルトの名無しさん:2005/12/21(水) 22:05:10
「エンジン」相談室なんだからスレ違いな気がするが…まあいいか。
21デフォルトの名無しさん:2005/12/21(水) 22:26:32
Lisp と Smalltalk を置き換える言語と言えば Apple の作った(作らせた) Dylan があるけど
盛り上がってないな。商用の Windows/Linux 処理系がオープン && フリーになったってのに。
純粋 OOPL かつ関数型言語でマクロもあるらしいけど。
22デフォルトの名無しさん:2005/12/21(水) 22:28:01
>>16
全部リストだとシーケンスを扱う時に効率悪そうだから
いっそのこと全部ベクターや配列で表現してみてはどうか。

{1 2 3}[0]
=>1

{1 2 3}[1..]
=>{2 3}

{define func0
 {function {a b c}
  {return {infix a + b + c}}}}

{defmacro defun args
 `{define ,args[0] {function ,@args[1..] }}}

{defun func1{a b c}
 {return {infix a + b + c}}}

func0{1 2 3}
=>6

func1{1 2 3}
=>6

ふむ。
23デフォルトの名無しさん:2005/12/21(水) 22:29:46
>「処理系(構文解析系)と実行系がひとつになっている言語」
これはインタプリタっていうと思います。
あと普通は、「言語」は「仕様」であって「実装」ではないと思います。
実装が仕様って言ってる某言語を除いて。
24デフォルトの名無しさん:2005/12/21(水) 23:25:16
お前ら馬鹿か?wwww

LISPがあるのに

これ以上何やろうっての?

25デフォルトの名無しさん:2005/12/21(水) 23:35:55
インタプリタだけじゃないと思うけど。
26デフォルトの名無しさん:2005/12/22(木) 02:39:57
インタプリタ系の処理で構文木をツリーのままもって処理するのと、バイトコードに落として処理するのとどっちが都合がいいんだろう?
27デフォルトの名無しさん:2005/12/22(木) 03:41:44
>21
FunctionalDeveloperがOpenDylanになって、Gwydion Dylanとそのうちマージされるんじゃ?
と、期待してはいるけどねぇ。
しばらくは混沌としたままという気はするね。MLも停滞中だしなぁ。
28デフォルトの名無しさん:2005/12/22(木) 07:39:28
>>26
何の都合?
とりあえず速度ならバイトコード。デバッグしたいならツリーのまま。
29デフォルトの名無しさん:2005/12/22(木) 11:30:30
何気に Lisp 処理系は開発が盛んなんだよね。SBCL とか。
OpenDylan は何であんなに閑散としてるんだろう。
30デフォルトの名無しさん:2005/12/22(木) 13:17:32
Lispがあるからだろうな。
正直なところ、これ以外どれも同じ。
31& ◆77HZD.NR0E :2005/12/22(木) 21:13:01
同感、他は糞言語
32デフォルトの名無しさん:2005/12/22(木) 21:24:49
>>23
すくりぷとげんごといんたぷりたとのちがいはなに?
ばいなりにおとすかどうか?
33デフォルトの名無しさん:2005/12/22(木) 21:33:40
>>32
落ち着け!>>23は釣り臭いぞ。
34デフォルトの名無しさん:2005/12/22(木) 22:18:33
さすがにLISPじゃ釣れなくなってきたなw
どんな阿呆でも、多少は学習能力があるということか
35デフォルトの名無しさん:2005/12/22(木) 22:21:41
>>34
LISPに釣られてるアフォw
36デフォルトの名無しさん:2005/12/22(木) 23:56:28
ベースはLispでも何でもいいんだけど、ドットで階層表現はほしい。
namespace.object.method
つーかluaって結構バランス良さげだね。
何気にproper tail recursionだし。
schemeと同じ様な書き方ができるっぽい。
37デフォルトの名無しさん:2005/12/23(金) 00:30:46
>>36
>ドットで階層表現
リーダーマクロじゃ無理?
(そのままドットで繋げる形式は無理だと思うけど)
38デフォルトの名無しさん:2005/12/23(金) 07:19:25
Lispスレでやれ。
どのみちこういう話してる面子は両方見てるんだろ? 俺もだけど。
39デフォルトの名無しさん:2005/12/23(金) 08:00:10
Lispスレ見てる奴にとってはこのスレレベル低すぎだろ
40デフォルトの名無しさん:2005/12/23(金) 08:17:24
そうなんだけどさ。>>36みたいな話はあっちでもたまに出た記憶が。
41デフォルトの名無しさん:2005/12/23(金) 08:31:11
>>40
というか過去スレで a[x] みたいな配列アクセスとか . でのオブジェクトへの
アクセスとかは実現されてたと思う。でも荒しが粘着している現状で向こうの
住人がわざわざこっち覗きにきたりはしないと思われ。
42デフォルトの名無しさん:2005/12/23(金) 08:59:00
質問。
oscm の構文定義で以下のようになっていたのだけれども

exp :
BOOL { Bool $1 }
| NUMBER { Number $1 }
| CHAR { Char $1 }
| STRING { String $1 }
| SYMBOL { Symbol $1 }

| LPAREN exp_list RPAREN
{ to_cons $2 Nil }

exp_list :
{[]}
| exp exp_list { $1::$2 }

上の定義の中で、

exp_list :
{[]}

の部分がどう作用するのかいまいちわかんないんですけど・・・
いつ、どの順序でこの部分がマッチするんですか?
43デフォルトの名無しさん:2005/12/23(金) 11:08:52
その規則(1)は、何も無い部分(空トークン)からexp_listというnon terminalを
生成できることを意味している。exp_listを生成するもう一つの規則(2) exp exp_listは、
必ずexp_listというnon terminalを必要とするので、規則(1)がないとexp_listという
non terminalを生成することができない(帰納法のbase caseに相当する)。

規則(1)が使われる具体的なタイミングは、その構文規則でexpがstart symbolと
仮定すると、次のトークンがRPARENの時だと言える。
4442:2005/12/23(金) 13:29:00
なるほど 次のトークンでRPARENが出たとき
exp exp_list { $1::$2 }
において、 $2 が [] になるということですね
ありがとうございました。
45デフォルトの名無しさん:2005/12/23(金) 13:51:33
46デフォルトの名無しさん:2005/12/29(木) 00:25:03
ECMAScript程度の言語の構文解析にboost::spiritを使うのってまずい?
47デフォルトの名無しさん:2005/12/29(木) 00:40:05
べつにまずくない
48デフォルトの名無しさん:2005/12/29(木) 01:02:38
unko
49デフォルトの名無しさん:2005/12/29(木) 01:09:40
ECMAScriptの文法は結構手強いよ。
50デフォルトの名無しさん:2005/12/29(木) 09:20:53
既存のソフトウェア資産が全て0から作られると仮定して
OS側に管理が回りそうな機能と
言語側に標準的に割り当てられそうな機能を教えてくれ

例えばガベージコレクションはOSがやることになって
マルチスレッドは言語レベルでサポートされるのが良いのじゃないかと
51デフォルトの名無しさん:2005/12/29(木) 09:50:25
threading が kernel level で support されてなかったらどうなるか考えてみた?
52デフォルトの名無しさん:2005/12/29(木) 10:28:34
なぜそんな中途半端に英語をしゃべる?
53デフォルトの名無しさん:2005/12/29(木) 11:13:42
>>52
それがナウなヤングなんだよ。
54デフォルトの名無しさん:2005/12/29(木) 12:50:23
>>50
>既存のソフトウェア資産が全て0から作られると仮定して

あのなー、

その「全て0から作らなくてはならなくなった理由」がない状態で、
どの機能を何処に割り当てるべきか、なんてのが決まる訳が無いだろ?
55デフォルトの名無しさん:2005/12/29(木) 13:21:18
OSの足りない機能を補うためにソフトウェア資産があるんだよ
OSの足りない分はソフトウェアがカバーしてるんだよ
56デフォルトの名無しさん:2005/12/29(木) 13:28:14
>>53
ナウでクォー(クール)でヤングですよ。
57デフォルトの名無しさん:2005/12/29(木) 20:52:43
マジレスすると、Rubyの多くの機能は本来はOSが提供するものだろうな。
58デフォルトの名無しさん:2005/12/29(木) 21:05:47
それのどこがどうマジレスなんだ?
59デフォルトの名無しさん:2005/12/30(金) 04:58:42
>>57がRuby要らずのOSを公開するそうです。
みなさんお楽しみに!
60デフォルトの名無しさん:2005/12/30(金) 06:08:19
むしろRubyが必須なOSがあるのか知りたい
61デフォルトの名無しさん:2005/12/30(金) 06:21:04
>>60
ない
62デフォルトの名無しさん:2005/12/30(金) 06:24:26
Ruby 信者とアンチ Ruby が居なければ、このスレも随分と静かになるんだろうなぁ。
63デフォルトの名無しさん:2005/12/30(金) 08:02:02
>>62
大差ないと思うよ。
半分くらいは俺が信者になったりアンチになったりしながら煽ってただけだから。
ちなみに俺はRubyもLISPも使ったことはない。

来年もよろしく。
64デフォルトの名無しさん:2005/12/30(金) 09:38:36
>>63
大差あると思うよ。
もう半分は俺が信者になったりアンチになったりしながらクマしてただけだから。
ちなみに俺はRubyもLispも長年使い込んだ。

今年限りにしておこうか。
65デフォルトの名無しさん:2005/12/30(金) 13:50:43
>>63 要するにお前の自演がウザいから消えてくれたらな…って話なんだよ。
空気読めねー奴だな…。「ちなみに」とかいわなくても君が Ruby を使えない
低能野郎って事は分ってるから来年こそは氏んでくれ。

でも空気読めないからノコノコでてくるんだろうなぁ
66デフォルトの名無しさん:2005/12/30(金) 19:39:50
Rubyついでで恐縮だが、あのソースは本当に凄いな。
まったくの別次元だ。

特にスキャナ
67デフォルトの名無しさん:2005/12/30(金) 23:27:35
パーサのトリックも凄いと思った。
68デフォルトの名無しさん:2005/12/31(土) 04:07:32
GCもスレッドも凄いと思う。

...で、それって結局全部、Rubyの欠点になってるよな。
69デフォルトの名無しさん:2005/12/31(土) 15:59:23
誰かRuby書きなおしてやれよw
70デフォルトの名無しさん:2005/12/31(土) 16:27:46
スキャナとパーサは疑う余地がないよな。でもGCとスレッドって凄いっけ?

GCは、前見たときは、わりと標準的なmark-sweepだと思った。

スレッドは基本的に使ったことしかなくて、
スレッドスケジューラとかを作るやり方の話をよく知らなかったから
いまいち判断できなかった。
それでも、現実のOSなんかが搭載してるスケジューラに比べれば、
かなり簡潔(悪く言えばチープ)だろうな、と何となく思った記憶がある。
71デフォルトの名無しさん:2005/12/31(土) 17:11:19
>>70
>GCは、前見たときは、わりと標準的なmark-sweepだと思った。

うーん、Bohemとかと比べるんなら「標準的」なのかもしれないけど、
BohemはC向けだからああならざるを得ないのであって、インタプリタ言語で
なにもわざわざCスタックをスキャンすることないのではないかと。
あれのおかげでsetjmpでレジスタを対比するようなトリックが必要になっているし
(そのせいでCPUごとの#ifdefやインラインアセンブラも必要になっているし)、
ネイティブスレッドと相性が悪いのもあれのせいでしょ。
72デフォルトの名無しさん:2005/12/31(土) 19:05:16
>>71
言語上の問題じゃなくてオブジェクトメモリ操作のアトミック性の問題のためにスタックまで見る羽目になってるだけなんだけど
どうしたもんかねぇ。
個人的にGC関係が勉強になったというか良くできてるな〜と関心しきりだったのはioなんだよね。
シンプルなのにジェネレーションベースなんでGCに興味がある人は見ておくべきだと思う。
73デフォルトの名無しさん:2005/12/31(土) 19:12:39
> わざわざCスタックをスキャン
CのプログラムがRubyのオブジェクトを捕まえたときに、
Cのプログラムが明示的にそれを開放しなくても良いという利点がある。
これのおかげでCで拡張ライブラリを作ったり
Rubyを他のアプリケーションに組み込んだりしやすくなる。
・・・という目的があったと思った。

でもvolatileつけないといつの間にかオブジェクトが回収される罠があったり、
これのせいでRubyの高速化がしにくかったり。
74デフォルトの名無しさん:2005/12/31(土) 20:28:43
なんだかんだ言っても好きだなw
お前らw
75デフォルトの名無しさん:2005/12/31(土) 20:51:44
>>74
好きです。結婚してくださ(ry
76デフォルトの名無しさん:2005/12/31(土) 22:51:46
volatileによるガードを期待するのはやめて、やばげなところでは
明示的にガードできるようにした方がいいんじゃないかねえ。EmacsのGCPROみたく。
77デフォルトの名無しさん:2005/12/31(土) 22:53:28
EmacsがGCPROとconservative GCを併用できるというわけじゃないんで念のため
(できるのはできるが目的が違う)
78 【小吉】 【1883円】 :2006/01/01(日) 11:53:17
Rubyの運勢
79デフォルトの名無しさん:2006/01/01(日) 17:14:23
ここでやるなよ。
80デフォルトの名無しさん:2006/01/01(日) 20:50:42
アンチRuby房のほとんどが、メジャーになれない
重箱研究者だったりする件についてw
81デフォルトの名無しさん:2006/01/01(日) 21:29:14
人生相談はこのスレの管轄ではありません
82デフォルトの名無しさん:2006/01/02(月) 00:00:49
>>80
それは言えてるかも。ある意味素人が世界的に有名になって
(以下略
83デフォルトの名無しさん:2006/01/02(月) 00:22:58
すっぱい葡萄理論w
84デフォルトの名無しさん:2006/01/02(月) 00:50:46
その点Lispはそのような心配がない罠
人機の秘密は案外こんなところおにあったりする。
85デフォルトの名無しさん:2006/01/02(月) 00:52:48
やはりLispが原点だね
Rubyだのなんだのと遠回りする馬鹿の多いことよ
86デフォルトの名無しさん:2006/01/02(月) 02:57:54
Lispはある意味Cよりもコンピュータに近い所をプログラマに処理させるわけだから、
そんなに使い易いもんでは無いわな。
Rubyのシンタックスシュガーはやりすぎな感じもするけど……

誰か表記改良版のLisp作らんかね?
87デフォルトの名無しさん:2006/01/02(月) 03:00:55
誰か=御自分
いいだしっぺの法則
88デフォルトの名無しさん:2006/01/02(月) 03:20:15
JavaScript が C の皮を被った Lisp と言われていますよ。
89デフォルトの名無しさん:2006/01/02(月) 03:35:36
>>88
ネイティブコンパイラとオプショナルな静的型付けと Dylan 風マクロが備わったら認めてやる。

ECMAScript に静的型付けを導入する話はどうなったんだろうか。
90デフォルトの名無しさん:2006/01/02(月) 04:30:38
>>89
どっかで見た4thエディションでは予約語にはなってたようにおもう。
俺はバリアント型大好きだからいまさら感、感じてるけどね。
91デフォルトの名無しさん:2006/01/02(月) 04:53:19
ところで、バリアント型大好きなんだけど、実装ってどういう感じになってるのかぜんぜん検討つかないんですよ。
ライターのM氏のページで、Cでの実装だと型そのものはUNIONにまとめてる感じでした。
やっぱり処理系が扱う変数型をまとめてUNIONにしてしまってフラグ変数で型を見分けて扱うというのが一般的なんでしょうか?
そのときに、たとえばWinapiに対する拡張とか、製作時点で未知のオブジェクトに対応する場合はどういう方向になるんでしょうか?
ヒントでもいいので、お返事お待ちしております。
92デフォルトの名無しさん:2006/01/02(月) 05:01:58
>>91
大筋その認識で間違いない。
ただし未知のオブジェクトなど存在しないと思って良い。
複雑な構造のオブジェクトがあったとしても、
レコード型などのなんらかの既知の型の組み合わせでしかない。
93デフォルトの名無しさん:2006/01/02(月) 05:23:43
>>92
お返事ありがとう。大筋でもあっててよかった。
Winapiのハンドル関連も元をたどればvoid*だったりするのかな。
構造体の内部表現とか結構気になるな。
うぅ。夢は尽きません。

ま、それはそれとして、参考になりました。
94デフォルトの名無しさん:2006/01/02(月) 06:48:16
拡張モジュールを書いてバリアントを増やせる設計って可能だろうか?
つまり、型識別フラグのとりうる値がすべてわかっていないと書けない
部分というのが存在するかしないかなんだけど。
ちょっと考えた限りではなさそうに思える(効率は別として)。
95デフォルトの名無しさん:2006/01/02(月) 08:23:22
最近 scheme の処理系を勉強で書きはじめたのですが
call/cc の実装で、継続を作成するという処理は
トップレベルに戻るコードと
そのときの環境オブジェクトというか全フレームを
対にしてまとめたものを保存しておけばよいのかなあと思ったのですが
gauche とかで、call/cc の実装を見ると結構複雑っぽいことを
しているんだけど、なんか考えが足りないのかなあ
識者の見識を聞かせてください
96デフォルトの名無しさん:2006/01/02(月) 09:03:14
眠れないからC++のバリアントを試作してみたよ。
未知の構造体を格納しつつ自由にメンバにアクセスしたいときってどうやってやるんかな。
リフレクション自作とかしないといけないのかな・・・。ドウヤッテツクルンダ・・・。
void*に突っ込んで使用時にキャストがいいのかな??スクリプトエンジンでそんな指定どうやって??
テンプレートは一個しかできない上に決めうちしないといけないから向いてない感じがする。
悩む。

>>94
C言語的構造体指向OO風味だと、メモリの配置さえあってれば問題なく下位の構造体にアクセスできるから、
なんとか構造体EXとかは可能だと思う。関数ポインタつければ仮想関数もどきとかもできますぜ。
ただ、型識別フラグは拡張を指しているだけとかそういうことになりそう。
細かい指定はどうだろ、enumの拡張って動的にできるのかな。あぁ、INTつかえばいいのかな??
型ID予約制とかそういうことになって管理大変かも??


とか、書いてたらねむくなってきたなぁ。
論点ずれてたらごめんね。
97デフォルトの名無しさん:2006/01/02(月) 09:30:51
>>95
継続というのはその時点での全アクティベーションレコード (スタック
フレームと思っておけばいい) そのものだから、基本的にはそれだけ
取っておけばいい。アクティベーションレコードを全部ヒープに
アロケートする処理系なら単にその先頭のポインタを掴むだけで済む。
概念的にはとても単純。

複雑になるのは効率を考えるから。普通のプログラムは、継続が絡まない
通常の関数呼び出し/復帰の方がはるかに多く、その場合はスタックを
利用する方が一般的にずっと速い。けれどスタック上のアクティベーション
レコードは関数復帰時に自動的に開放されてしまうから、継続が作られた
場合にそれを防ぐ何らかの方法がいる。継続作成時にヒープにコピーするとか、
継続作成時にスタックのベースを動かしてそれまでのスタックをヒープに
しちゃうとか、色々テクニックはある。

それから、単純な関数呼び出し/復帰モデルで賢い最適化をしたつもりが、
継続が入るとうまく動かなくなるってことも多い。効率を考えてゆくと
だんだん実装は複雑になる。


98デフォルトの名無しさん:2006/01/02(月) 09:51:55
>>97
C++で、コードが複雑な場合に、最適化でバグの発生する理由がようやく理解できた
99デフォルトの名無しさん:2006/01/02(月) 16:10:25
>>96
型式別のフラグ=型を理解するコードへのポインタ
にすればフラグの値を全部知ってる必要は無いでしょう?
実行時にロードされた場所が被るハズないって前提なのではあるけど。
100デフォルトの名無しさん:2006/01/02(月) 16:57:04
C++の話は別でやってくれ
シッシッ
101デフォルトの名無しさん:2006/01/02(月) 18:42:13
>>97
効率を考えると色々あるのですね
効率を考えずに単純に実装しようと思うのですが
一度中間言語へコンパイルし、仮想マシンなりで走らせるようにする部分は
継続を実装する上で必須なのでしょうか
中間言語とかなしでインタプリタのままで実装することはできないものかと・・・
例えば、(+ 2 (+ a 1)) とかで、(+ a 1) の継続を
その時点での環境を丸々コピー&(lambda (x) (+ x 2)) を
継続コードとして保存する、とか考えてたのですが、
S式全体から (lambda (x) (+ x 2)) の部分を取得する上手い方法が
思いつかないっす
102デフォルトの名無しさん:2006/01/02(月) 18:50:56
っ CPS 変換
103デフォルトの名無しさん:2006/01/02(月) 18:58:58
C++って、嫌われてるの?
104デフォルトの名無しさん:2006/01/02(月) 19:01:53
>>102
なるほど!それがまさにそれに該当する方法っぽいです
ただどっちが簡単なんでしょうか

1.VM作って中間言語へコンパイルして継続を管理
2. CPSで継続渡し?みたいな形にS式をコンバート

なんか後者も結構メンドイ気がしてきた・・・
初心者向けなのはどっちですか?
105デフォルトの名無しさん:2006/01/02(月) 19:39:59
別に中間言語にする必要もCPS変換かける必要もない。
ただ、スタックを陽に管理することになるので
(実装言語のスタックをそのままは使えない)
それを仮想マシンと言えなくはない。


106デフォルトの名無しさん:2006/01/02(月) 20:23:15
効率、実用性を度外視して、とりあえず動くものを作りたいだけなら
CPS 変換の方が圧倒的に楽だと思う。
後は callcc 以外の Scheme インタプリタ作るだけだし。

ところで実装言語は何?
107デフォルトの名無しさん:2006/01/03(火) 05:30:35
>>99
レスty!
ぜんぜん僕が思ってたのと違う方法なきがする。
型を理解するコードか・・・。変数のことかな。
勉強不足でうまく思い浮かばないOrz

そのほかでは、
名前と値保持の領域をmap使って管理するのがいいのかな。
これ使えばJS風味のバリアントできるな。
でも1オブジェクトに1mapってなんか色々コスト高いような・・・。

あとは関数をどうやって抽象化するかかな・・・。
これこそテンプレートのでばんか!?

という感じで色々ひねって見ます。
ありがとー。

108デフォルトの名無しさん:2006/01/03(火) 08:14:25
>106
C#です。GCとか作る自信ないもんで。
109デフォルトの名無しさん:2006/01/03(火) 08:35:02
>>107
typeinfoクラスへの参照をメンバに持っとけって話だろ。
110デフォルトの名無しさん:2006/01/03(火) 08:49:43
>>108
実装する目的がわからんのだけど、もしただの勉強なら、
せっかくだから Scheme で実装したらどう?
(eval 使ってはい終わりって意味じゃないよ)
自分のインタプリタで自分のインタプリタを動かすのは
一度はやっておくべきだと思う。
見当違い、余計なお世話だったら無視してくれ。
111デフォルトの名無しさん:2006/01/03(火) 09:23:29
>>110
C#で実装して、.net framework, managed directX と連携してゲームとか
簡単な画像処理のフィルタとかをお手軽に作れるような scheme インタプリタを
作ろうというのが処理系の目的といえば目的ですが・・・
現状はC#のインタプリタ部分は call/cc とかマクロとかその辺を
除けばほぼ完成まで来たので、とりあえずはこの路線で進もうかと。
scheme で実装するというのは発想自体思いつかなんだ
いずれやってみようかなと思いました
112デフォルトの名無しさん:2006/01/03(火) 09:25:40
>>105
スタックを陽に管理するとは?
113111:2006/01/03(火) 09:33:39
ごめん、上げてしまった
114デフォルトの名無しさん:2006/01/03(火) 13:05:21
>>112
構文木を直接評価してくときに、素直に実装言語の(非末尾)再帰を
使うと、対象言語のスタックが実質的には実装言語のスタック上に
置かれることになるでしょ。そうすると継続を捕まえるのが面倒。
対象言語のスタックは自分で管理して、実装言語側で再帰しないように
評価器を呼んで行くことを「陽に管理する」と表現した。
実行時にCPS変換かけてるのと同じことだけどね。
115デフォルトの名無しさん:2006/01/03(火) 19:18:40
GCを自分で実装しようとする人が多いのは
自分でメモリ管理することで(GC以外の部分でも)最適化の
余地が大きいからでせうかね?
116デフォルトの名無しさん:2006/01/03(火) 19:24:11
>>115
コアの部分に、他人のクセだらけのソースコードを使えるか?という問題かと
117デフォルトの名無しさん:2006/01/03(火) 19:43:53
良くも悪くもGCには、作った人の技術の粋が集まるから
他人のGCを使うのは、リスクが大きすぎるんだよな
何処にどんなバグが潜んでいるかは、作った人にしか分からない……
118デフォルトの名無しさん:2006/01/03(火) 19:58:43
つか、他人の作ったGCって、Bohem以外にあったっけ?
C/C++にライブラリ乗せただけで使えるGCは原理的にコンサバ以外になり得ないので、
exactなGCが欲しければ、自分で作るしかあるまい。
だいたい、(mark sweepだとすれば)mark phaseはその言語のオブジェクト構造に
モロに依存するから、結局自分で書くことになると思うんだが。
119デフォルトの名無しさん:2006/01/03(火) 20:29:35
Boehm使ってる。
自分で書くことも考えたんだけど、ネイティブスレッドとか
incremental GCへの対応はプラットフォーム依存のコードが
入って来るから、自分一人ではサポートしきれないという判断。
色んなアーキテクチャでテストとデバッグしてくれる要員が
いるくらいプロジェクトが大きくなればいいんだけれどね。

120デフォルトの名無しさん:2006/01/03(火) 20:47:56
>>109
な!そんなクラスが!!!!
目から鱗です。
レスty!!
121デフォルトの名無しさん:2006/01/03(火) 20:52:43
所詮俺言語ってことかw
俺言語に俺研究、本当にお前らときたら(ry
122デフォルトの名無しさん:2006/01/03(火) 21:23:18
そりゃな、誰が好き好んで他人向け言語なんて作るんだ?
自分が好き勝手に色々な事をやりたいから作るんだよ。w
それで他人向けにもなっていて、神になれれば万々歳だよ。www

妄想入り過ぎだな……orz
123デフォルトの名無しさん:2006/01/03(火) 23:19:20
それで成功した例が、お前らの嫌いなRubyって訳か。
ある意味皮肉なもんだ
124デフォルトの名無しさん:2006/01/03(火) 23:28:49
つまり、ツンデレ?
125デフォルトの名無しさん:2006/01/03(火) 23:43:19
そもそもC言語が自分がUNIX作るために作った俺言語だから。
126デフォルトの名無しさん:2006/01/03(火) 23:45:05
>>124 なにそれ?
>>125 正当化に必死ワロw
127デフォルトの名無しさん:2006/01/03(火) 23:51:48
>>126
表面上は嫌っている(ツンツン)が、
内面では認めている(デレデレ)って意味
128デフォルトの名無しさん:2006/01/04(水) 00:21:52
Ruby最高!
実行速度の遅さと、色々と無駄の多くて破綻している文法以外……
129デフォルトの名無しさん:2006/01/04(水) 00:33:21
ruby の文法って日本語的な思考方向(熟語が最後に来る)になってるような
気がしている
130デフォルトの名無しさん:2006/01/04(水) 00:39:14
>>123
まあねえ。
このスレにいるような連中(のうち何割か)は、俺言語の5つや6つとっくに作ってて
(あるいは作りかけていて)、みーんなディスクの肥やしにしてるんだと思う。
言語処理系作るのなんて別に難しくないんだけど、ちゃんと完成させて、
かつちゃんと普及させる人は珍しい。その点じゃまつもとさんはすごいんだと思う。
131デフォルトの名無しさん:2006/01/04(水) 00:39:41
obj.m1.m2.m3.m4

objをm1してm2してm3してm4する。
と書けるようになればいいのかも。
132デフォルトの名無しさん:2006/01/04(水) 00:58:01
ruby のイメージってそんな感じなんですけど
133デフォルトの名無しさん:2006/01/04(水) 01:05:40
>130
まだまだ諦めとらんよ。
(SchemeとIOを合わせたようなのを作成中)
134デフォルトの名無しさん:2006/01/04(水) 01:10:11
SchemeやLispを使うとプロトタイプ作成は早いですよ
最近実感した
135デフォルトの名無しさん:2006/01/04(水) 01:13:51
>>133
くだらねぇなあ。
そういう既存のものを中途半端に組み合わせたのって
数あるつまらん言語のうちの1つになるだけだろ。
136デフォルトの名無しさん:2006/01/04(水) 01:21:07
有名どころが作ったとかではないなら、少なくとも何らかの他と
違う特徴がないとほんとに俺用で終わってしまうな。
Rubyだってフリーで国産とか、イテレータとか、一応特徴あったしな。
LispやSmalltalkやPrologやPerlなどは言うまでもないし。
137デフォルトの名無しさん:2006/01/04(水) 01:24:14
Rubyが出てきた頃は、最初からオブジェクト指向を元に設計されてる
スクリプト言語が無かった。
今では珍しくもないと思われるかもしれないが。
138デフォルトの名無しさん:2006/01/04(水) 02:21:53
Lisp系言語を作っても、ほぼLisp系言語愛好者(超少数派)しか注目しない
しかも、Lisp系言語愛好者は多少浮気をしたところで、
必ず最後はメジャー(少数派の中でだが)なCLかSchemeに戻る
したがって、どうあがいてもユーザーはほとんど出来ないだろうね
139デフォルトの名無しさん:2006/01/04(水) 02:24:17
え?Lispなんて超がつくほどメジャーな部類では?
140デフォルトの名無しさん:2006/01/04(水) 02:30:58
メジャーな言語一覧。
http://www.answers.com/topic/list-of-programming-languages
ここに載ってないのがマイナーの条件。
141デフォルトの名無しさん:2006/01/04(水) 02:42:32
>>140
Hspとなでしこは世界ではダメだったか・・・
世界的にはRubyのほうが知名度高いんだな。
142デフォルトの名無しさん:2006/01/04(水) 03:15:58
やっぱりLispですね
議論はここに戻る
遠回りするアホは嘲笑の対象だね
143デフォルトの名無しさん:2006/01/04(水) 03:24:58
お願いだから、あんまり Lisp を釣りネタに使わないでくれ。
144デフォルトの名無しさん:2006/01/04(水) 04:27:34
>>139
Lispがマイナー言語だとは書いてないだろ
Lisp愛好者が超少数派と書いたんだ
Lisp愛好者が多数派だと、本気で思ってるなら
死んだほうが良くねえか?
少なくとも、ボケ老人レベルの判断力としか思えんわ
145デフォルトの名無しさん:2006/01/04(水) 05:31:54
全体の割合で見たら超少数派かもしれんが、
A言語愛好家、B言語愛好家、C言語愛好家、
〜言語愛好家って、たくさん見てけば超人数
多い部類だと思うが。
146デフォルトの名無しさん:2006/01/04(水) 05:40:35
"Cが好き" の検索結果 約 440 件
"Lispが好き" の検索結果 約 316 件
"Javaが好き" の検索結果 約 259 件
"Rubyが好き" の検索結果 約 186 件
"C++が好き" の検索結果 約 175 件
"Perlが好き" の検索結果 約 134 件
"Pascalが好き" の検索結果 約 57 件
"Basicが好き" の検索結果 約 25 件
147デフォルトの名無しさん:2006/01/04(水) 05:49:19
Lisp愛好者って最近になってちょっと増えたんじゃないか?
高学歴の若者にファンが多い気がする。
148デフォルトの名無しさん:2006/01/04(水) 05:55:12
>>146
"Cが好き"は別回答含んでねぇか?
149デフォルトの名無しさん:2006/01/04(水) 06:02:24
ウェブ全体から検索で

"I love Ruby" の検索結果 約 21,500 件
"I love Java" の検索結果 約 17,200 件
"I love C" の検索結果 約 13,800 件
"I love Perl" の検索結果 約 9,980 件
"I love C++" の検索結果 約 1,610 件
"I love Basic" の検索結果 約 1,290 件
"I love Lisp" の検索結果 約 310 件

いろんな意味で m9(^Д^)プギャー!!
150デフォルトの名無しさん:2006/01/04(水) 06:09:34
vのあとのlは比較的発音しにくいからな。
likeにしてみると多少マシなんじゃないかな?
やってないけど
151デフォルトの名無しさん:2006/01/04(水) 06:13:08
"Lisp hacker" の検索結果 約 17,200 件中
"Java hacker" の検索結果 約 14,800 件中
"C++ hacker" の検索結果 約 1,540 件中
"Ruby hacker" の検索結果 約 969 件中
152デフォルトの名無しさん:2006/01/04(水) 06:17:53
>>150
"I like Ruby" の検索結果 約 15,700 件
"I like Perl" の検索結果 約 14,600 件
"I like Java" の検索結果 約 14,000 件
"I like C" の検索結果 約 11,000 件
"I like Basic" の検索結果 約 1,600 件
"I like Lisp" の検索結果 約 653 件
"I like C++" の検索結果 約 508 件

なるほど、確かに多少マシだw

おまけ。

"Pythonが好き" の検索結果 約 91 件
"I love Python" の検索結果 約 12,100 件
"I like Python" の検索結果 約 24,300 件
"Python hacker" の検索結果 約 808 件
153デフォルトの名無しさん:2006/01/04(水) 06:21:59
>>152
しかし、C++より多いのか。
いずれにせよ、それら超メジャー言語と張り合う程度に
愛好家はいるんだから、超少数派というのは当ては
まらないのではないか?
154デフォルトの名無しさん:2006/01/04(水) 06:23:58
Lisp Hackerが多いってのがLispを象徴してるな。
Lisperっていうメジャーな代替表現があるのにこれはすごい。
155デフォルトの名無しさん:2006/01/04(水) 06:30:48
おまいらプラス思考だな。
まあ、Ruby 厨の俺から見ても Lisp が超少数派なわきゃないと思うけどね。

>>153
C++ は確かに超メジャー言語だが、
"I love C++" "I like C++" って発言するほど C++ 自体が好きな奴って
あんまりいないんじゃないかという先入観がある。

>>154
Lisp Hacker ≒ Paul Graham
156デフォルトの名無しさん:2006/01/04(水) 06:31:23
とりあえず、PythonとRubyは人名と宝石が引っかかってるぞ。
157デフォルトの名無しさん:2006/01/04(水) 06:36:19
>>156
今じゃ誰もこんなこと言わないとわかっているが敢えて言わせて貰おう。
ネタにマジレスカコワルイ
158デフォルトの名無しさん:2006/01/04(水) 08:00:51
まあ何だ。こと布教にかけては、本職の宣教師が最強だったってことじゃねえ?
159デフォルトの名無しさん:2006/01/04(水) 08:28:35
話題がRubyに向かいやすいのは、Rubyの人気が出たことに対する
言語設計者の嫉妬にみえなくもない
160デフォルトの名無しさん:2006/01/04(水) 08:44:56
このスレではRubyのソース読んだ人の割合が他の言語より多いってのも多少関係するかと。
ソースコード完全解説が出版されるはオンラインで公開されるは、挙句Matz氏もソース嫁と言わんばかりの勢いだからな。
161デフォルトの名無しさん:2006/01/04(水) 09:27:27
308 "I hate Ruby"
743 "I hate Perl"
15500 "I hate Java"
726 "I hate C"
988 "I hate Basic"
257 "I hate Lisp"
1320 "I hate C++"

Javaダントツ人気で砂
162デフォルトの名無しさん:2006/01/04(水) 09:32:26
何が嫌いということもないけれど
わざわざ触りたいという気には不思議とならない
163デフォルトの名無しさん:2006/01/04(水) 10:00:09
164デフォルトの名無しさん:2006/01/04(水) 10:04:42
ていうか、JavaとかBasicとかも違うのひっかかってるから。
165デフォルトの名無しさん:2006/01/04(水) 10:24:01
まあ検索なんかに頼らなくても、
愛好家の数で言ったら、大体

C++、Java、Perl、Pythonなど>Ruby、Delphi、VBなど>Lisp、Basic、Pascalなど
>Cobol、PL/I、Fortran、Prologなど>>>>>>>>>マイナー言語の数々

って感じになるのは、これらを知ってる奴なら納得するだろ?
166デフォルトの名無しさん:2006/01/04(水) 10:49:03
年も改まったのに頭の中は進歩しない奴ばっかりだな。
処理系の実装に関係ない話はどっかよそでやってくれ。
167デフォルトの名無しさん:2006/01/04(水) 11:00:34
処理系と関係ないようでいて間接的に関係あります。

処理系を作っても、特徴がなければただの俺言語になる。
特徴があってもLispのように超少数派になる。
いや、Lispは超少数派ではない。←いまここ
168デフォルトの名無しさん:2006/01/04(水) 11:04:45
特徴の有無が問題なのかよ
レベル低いなあ
169デフォルトの名無しさん:2006/01/04(水) 11:06:55
特徴の有無は問題だろ
レベル低いなあ

↑これと同じくらいお前の論理は無意味
170デフォルトの名無しさん:2006/01/04(水) 11:46:48
なんか、このスレすごいレベル低い・・・もうお気に入りから消そうかな・・・

皆さん、どう思います?
171デフォルトの名無しさん:2006/01/04(水) 11:48:34
>>165
愛好家ってカテゴリだったらC++の位置はそこじゃねぇだろ、実用性じゃダントツだってのは認めるけどさ。
チームに一人デコ助がいるだけで地獄を「簡単」にみられる言語の筆頭だぜ。


172デフォルトの名無しさん:2006/01/04(水) 11:50:58
もうスレ違い議論はやめてくれr
いつから言語比較スレになったんだ?
173デフォルトの名無しさん:2006/01/04(水) 11:54:05
言語比較ほどの価値もないな。
個人個人が好き勝手に好きな言語を推しているに過ぎない。
検索結果がどうのこうのしょうもない外人が書いたようなリストを持ち出そうが、そんなもんが言語研究と何の関係があるんだよ。
お前らもうちょっと理性的に考えたらどうなんだ?
174デフォルトの名無しさん:2006/01/04(水) 12:07:59
自分の好きな言語を押し付けたいだけの厨にそんな事言っても無視するだけだろうな
175デフォルトの名無しさん:2006/01/04(水) 12:09:19
>>167
第二段が間違ってるぞ
「特徴があってもLisp系ではLisperしか食いつかないうえ、
 Lisperは試食しただけで、またCL Schemeに戻る」だ
176デフォルトの名無しさん:2006/01/04(水) 12:20:32
特徴を「他の言語との比較」に頼ってるあたりが
井の中の蛙臭さの原因なんじゃなかろうか
177デフォルトの名無しさん:2006/01/04(水) 12:27:35
まあLispとIoを組み合わせるなんて、いかにも中途半端なオタクが
考えそうなありふれたアイディア。
目だった特徴にはならん。
178デフォルトの名無しさん:2006/01/04(水) 12:28:37
>>176
原因はむしろ比較の基準が使用者の人口なことじゃね?
179デフォルトの名無しさん:2006/01/04(水) 12:31:14
IoってSmalltalkみたいなもんだろ?
CLOSじゃいかんのか?
180デフォルトの名無しさん:2006/01/04(水) 12:34:10
Smalltalkはフォロワーを生み出してるところが偉大だな。
LispもSchemeやJavaScript、果てはRubyやPythonに至るまで
フォロワーを生み出したことに凄さがある。
181デフォルトの名無しさん:2006/01/04(水) 12:42:45
そうニダ
Lisp起源ニダ
Ioも実はLispが起源ニダ
182デフォルトの名無しさん:2006/01/04(水) 12:50:07
>>181
そもそもSmalltalkがLisp起源・・・
183デフォルトの名無しさん:2006/01/04(水) 12:51:57
やっぱりLispですね
議論はここに戻る
遠回りするアホは嘲笑の対象だね
184デフォルトの名無しさん:2006/01/04(水) 13:13:39
>>180
そうだな。何だかんだ言われても、HSPにもフォロワーはいるからな
185デフォルトの名無しさん:2006/01/04(水) 13:23:41
フォロワーで言ったらCも相当なものだな
186デフォルトの名無しさん:2006/01/04(水) 15:14:22
HSPにフォロワーはいるのかもしれないが、有名なフォロワーはいないな。
187デフォルトの名無しさん:2006/01/04(水) 15:26:07
フォロワーってフォローする人の事じゃないの??
188デフォルトの名無しさん:2006/01/04(水) 15:44:26
そうだな。「信者」の類義語とかかな。
189デフォルトの名無しさん:2006/01/04(水) 16:26:19
小室です

今年は、環境ごとにミニ言語をさくっとでっち上げるのが
来ます
190デフォルトの名無しさん:2006/01/04(水) 17:38:44
人じゃなくても概念や物でも擬人化して考えれば可じゃないか?
191デフォルトの名無しさん:2006/01/04(水) 17:41:28
>141
Hspとなでしこって何?って素で思ったよ。漏れはorz
結構はびこってやがったのねん
192デフォルトの名無しさん:2006/01/04(水) 17:46:36
>>180の言う「〜のフォロワー」は「〜に大きく影響されて生み出された言語」
という意味だろ。
193デフォルトの名無しさん:2006/01/04(水) 18:12:27
ワカメちゃん・・・
  僕らはもっと、早く、

出会うべき、ダッタ、のかも、
               ウゥン・・・マスオ兄さん
シレナヒ・・・
             ダッテ・・・もっと早かったらァ・・・
               
                私ィ、赤チャンだyo^
イイの・・・
イイの・・・

イイ!!
194デフォルトの名無しさん:2006/01/04(水) 18:33:22
今日 Essentials of Programming Language を読了した
すごくいい本だった
中身は scheme で ML 作る本だった
多相型、型推論、CPS変換まで丁寧すぎるぐらいだった
Friedman 本にハズレないっすわ
195デフォルトの名無しさん:2006/01/04(水) 19:04:33
>>194
> 今日 Essentials of Programming Language を読了した
> すごくいい本だった
> 中身は scheme で ML 作る本だった
> 多相型、型推論、CPS変換まで丁寧すぎるぐらいだった
> Friedman 本にハズレないっすわ
大学院のとき、輪講でその本やったんだけど、俺、当時CPSで
脱落しました。orz
今でも、継続を使ったコルーチンなど、どうしてこうなるのか理解
できません。
今は、SICPからやりなおしています。EOPLには、機会を見て再挑戦
したいと思います。
196デフォルトの名無しさん:2006/01/04(水) 19:38:32
やっぱりLispなんですね。
時が流れても、原点はLispであることを認識することができました。
197デフォルトの名無しさん:2006/01/04(水) 20:03:15
Lispは機械語で作られてます。
時代が流れても、原点は機械語です。
198デフォルトの名無しさん:2006/01/04(水) 20:16:08
こんな感じでスレ立てようか?

--- 言語処理系開発議論スレ ---
コンパイラ・スクリプトエンジン相談室があまりにアホばっかなんで立てました。
このスレの話題は処理系の実装に関する議論に限定します。

言語の善し悪しなどは遠慮ください。
つまり、実装の議論に直接関わらない限り言語のデザインに関する議論、
もちろんどの言語が優れているだの使われる言語がえらいだの特徴がどうだの
成功失敗だのユーザがどうだのどの言語が起源だのなどなどの議論は禁止。
処理系をどの言語で実装するのがいいだのも禁止。

過疎上等、高S/N比優先でいきましょう。
くだらなくてもにぎわってる方がいいという方にはもっとよいスレがあります↓

関連スレ:
「コンパイラ・スクリプトエンジン相談室」という名の言語比較厨隔離スレ
http://pc8.2ch.net/test/read.cgi/tech/1135082582/l50
199デフォルトの名無しさん:2006/01/04(水) 20:18:33
機械語は二進数の数字で出来ています。
時代が流れても、原点は二進数の数字です。
200デフォルトの名無しさん:2006/01/04(水) 20:21:25
Lispにしろ機械語にしろ、コンピュータで実現可能なアルゴリズムはチューリングマシンで実現可能なことと同値です。
時代が流れても、原点はチューリングマシンです。
201デフォルトの名無しさん:2006/01/04(水) 20:27:47
チューリングマシンで実現可能なことは、λ計算で全て書けます。
時代が流れても、原点はλ計算です。
202デフォルトの名無しさん:2006/01/04(水) 20:39:45
お久しぶりです、実装について質問させてくださいまし
クロージャの実装についてですが例えば、以下のソース

(let ((a 0))
(define hoge (lambda (x) (+ a x))))

を eval する際に、クロージャ hoge をどのようにクラス化
するかについてですが、
トップ環境フレームを top 、矢印は親を指すとして上の例だと

top <- frame1(aを束縛している)

のようにフレームが伸びていて、クロージャオブジェクトは
frame1へのポインタをメンバに持つように作成したとします

で、このクロージャへの呼び出しをするとき、例えば (hoge 10)としたとき
top <- frame2(10を束縛)
のように別フレームが伸びるじゃないですか。
このとき、(hoge 10)を評価するときに必要な環境として2つの連結リスト
top <- frame1
top <- frame2
が二つ必要になる?という見解はあってますか?評価手順としては
x の検索を frame1 に対してかける(見つかる)
a の検索を frame1 に対してかける(見つからない)
a の検索を frame2(クロージャクラスのメンバ変数) に対してかける(見つかる)
を順次探しにいく、という風にするという考え方?で良いのでしょうか
なんか上手く日本語化できなかったorzけど
壮大な勘違いをしている可能性もありそうなのでアドバイス求む
203デフォルトの名無しさん:2006/01/04(水) 20:40:52
アホとは、Lispをあえて避ける行為のことでしょうか。
204デフォルトの名無しさん:2006/01/04(水) 20:52:31
>>198
実装に関する質問だったらレベル低くてもOK?
当方このスレにかなり助けられているので相談できなくなるのは寂しい
205デフォルトの名無しさん:2006/01/04(水) 20:59:23
>>198は他人がレベルを高くしてくれるのを待ってるだけの他力本願野郎。
誰も同意しないので、気にするでない。
206デフォルトの名無しさん:2006/01/04(水) 21:04:09
>>202
んー、素直にやるなら、hogeの中の評価時には
top <- frame1 <- frame2
ってならない? 内側から探してけば自然にレキシカルスコープに
なると思うけど。
207デフォルトの名無しさん:2006/01/04(水) 21:14:05
俺言語作ってる様な奴は大抵秘匿主義だからな。
俺もそう。
こんなスレのレベルが高くなるわけないだろ。
208デフォルトの名無しさん:2006/01/04(水) 21:36:59
>>207
俺なんかこのスレの誰も及ばないくらいレベル高いことを秘匿してるけどな。
209デフォルトの名無しさん:2006/01/04(水) 23:25:42
>>202
(let ((a 0))
  (define hoge (lambda (x) (+ a x))))
(hoge 10)
だと、3行目ではシンボルhogeに値が束縛されてないと思うぞ。

(define hoge #f)
(let ((a 0)) ; frame1
  (set! hoge (lambda (x) (+ a x)))) ; frame2
(hoge 10)

たぶん↑のようにしたいんだと思うけど、
この場合だと、letを評価した時点でframe1が作られ、top <- frame1 になり、
lambdaで作られた手続きは top <- frame1 の frame1 部分を参照する。
で、(hoge 10)が評価されたときに frame2 が作られて
top <- frame1 <- frame2 になる。
あとはaを検索するときは上から順に。という感じかな。

top <- frame2 のようなリスト(か何か)も必要になるけど、
これは継続絡みの話だと思う。
210デフォルトの名無しさん:2006/01/04(水) 23:26:23
このスレ役に立つレスは>>1-6まで
あとは屑
211デフォルトの名無しさん:2006/01/04(水) 23:26:28
>>181
>Lisp起源ニダ
>Ioも実はLispが起源ニダ

Ioじゃないけどそれに近い主張と、
http://shiro.dreamhost.com/scheme/trans/icad-j.html

それに対する反論。
http://shiro.dreamhost.com/scheme/trans/IsPythonLisp-j.html

反論側のほうが説得力あるような。
>LispのS式表記は、声高に、はっきりと、過去半世紀の間拒否されてきた。

まったくだ。

Lisp信者の改宗の話。
http://www.gembook.jp/tsum/page.pys?wiki=How+I+lost+my+faith
212デフォルトの名無しさん:2006/01/04(水) 23:29:14
俺には反論側のほうが全く説得力ないように見えるけどな。
213デフォルトの名無しさん:2006/01/04(水) 23:33:08
>>211
最後の記事を実際に見てみると、Lisp信者が改宗した話というよりは、
Lisp信者がLispを絶賛してる話にしか見えないぞ。
214デフォルトの名無しさん:2006/01/04(水) 23:39:29
スレ違いも甚だしい
これだからLisp厨は・・・
215デフォルトの名無しさん:2006/01/04(水) 23:40:21
211はどう見てもアンチLispだがな。
Lisp厨=アンチLispだったら同意。
216デフォルトの名無しさん:2006/01/04(水) 23:40:36
> 他人がレベルを高くしてくれるのを待ってるだけの他力本願野郎

待つのを諦めたからの提案だと思うけど。
217デフォルトの名無しさん:2006/01/04(水) 23:41:10
>LispのS式表記は、声高に、はっきりと、過去半世紀の間拒否されてきた。

これってどういう意味で言ってるのか知らないけど、括弧がネストしすぎると
見難いとかめんどくさいとかなら、Lisp信者でもそう思ってると思うぞ。
218デフォルトの名無しさん:2006/01/04(水) 23:46:40
>>216
待ってないで自分で書き込めばいいのにね。
219デフォルトの名無しさん:2006/01/05(木) 00:04:53
>>206,209
THX!! なんとなくわかってきたような。

hoge に束縛された closureオブジェクトは
メンバに top->frame1 のフレームリストをメンバに持っている、と。
で、(hoge 10) という関数呼び出しを評価するとき
hoge はクロージャなので、hoge.env( top->frame1 ) に対して、frame2(10を束縛)を
リストに連結して評価する( top->frame1->frame2 )、と。
もし hoge がプリミティブなら掴んだ環境を持っていないので、
素直に10を束縛したフレーム(frame'とする)を
top に連結して( top->frame' )評価する、ということでしょうかね?

>>209
>あとはaを検索するときは上から順に。
上からというのは最下層からということですか。
top からではないですよね?

ありがとうございました。
220デフォルトの名無しさん:2006/01/05(木) 00:13:24
S 式を叩けば良いみたいな風潮は何とかならんかね。頭悪過ぎなんだが。
221デフォルトの名無しさん:2006/01/05(木) 00:36:57
つか、S式のメリットって、マクロ以外にあるの?
そのマクロにしてからが、

http://www.rubyist.net/~matz/20030910.html
>マクロは生産性の向上には有効、わかりやすさにはかなり不利

って言われてたりするわけだが。
222デフォルトの名無しさん:2006/01/05(木) 00:56:31
知らない/調べない/でも批判する...
223209:2006/01/05(木) 00:58:00
>>219
> 上からというのは
frame2側からね。

> もし hoge がプリミティブなら掴んだ環境を持っていないので…
プリミティブって、トップレベルで定義された手続きの事かな?
1. topを普通のフレームと同じように扱って、
  NULL <- top <- frame1 <- frame2 ....
  トップベルで定義された手続きはtop環境を参照。

2. topを特別なフレームと考えて
  NULL <- frame1 <- frame2 ...
  (検索して見つからなかったらtopから検索)
  トップレベルで定義された手続きはNULLを参照。

の、どっちかかな。

>>221
個人的には、リストがやたらと扱いやすいことを挙げたい。

>マクロは生産性の向上には有効、わかりやすさにはかなり不利
「構文を言語のユーザが拡張する」という考えに慣れていないだけだと思う。
matz氏自身、Rubyの構文の拡張を何度も行っているが、
Rubyを拡張したことでRubyがわかりづらくなったと本人は言ってないよね?
224デフォルトの名無しさん:2006/01/05(木) 01:25:28
>>223
>個人的には、リストがやたらと扱いやすいことを挙げたい。

それは、リスト部分だけ、たいがいのスクリプト言語にある配列のリテラル
みたいに表記できるだけでは不足なの?
あとは簡潔に記述できるクロージャがあれば、(処理を変数などに代入することも
できるんだから)プログラムコードまでS式である必要は薄いんじゃ、って
疑問なんだけど。

>「構文を言語のユーザが拡張する」という考えに慣れていないだけだと思う。

ていうかその考え自体に批判的なんじゃないかなあ。
C++のオペレータオーバロードが、同じ文脈でよく批判されるよね?
Rubyの場合、Matz氏は言語設計者なんだから、拡張しても問題なし、
でもユーザがやるのは許さん、と。
225デフォルトの名無しさん:2006/01/05(木) 01:43:42
そんなに知りたかったら自分で触ってみろよ。
226223:2006/01/05(木) 02:52:56
>>224
> リスト
「後ろ半分だけ実体が共通なリスト」とか、
「変数aの参照しているリストの3番目以降のリストを変数bに参照させたい」とか。
全体から見ると、リストというよりはグラフになるのか。
このスレに沿った話題だと、
構文木をいじったり、クロージャのリストを実装したりが簡単。

> プログラムコードまでS式である必要は薄いんじゃ
マクロを一切使わないなら必要ないんじゃない?
自分の作りたいプログラムを書くのに十分な構文をサポートしている言語が
常にあるなら、と読み替えてもいいけど。

> C++のオペレータオーバロードが、同じ文脈で
その辺の話なら同意。
利点欠点は大体同じだよね。
マクロの利点欠点ははオペレータオーバロードよりもずっと大きいけど。
227デフォルトの名無しさん:2006/01/05(木) 07:25:37
>マクロは生産性の向上には有効、わかりやすさにはかなり不利

いいんじゃない?生産性が上がればいいんだし。
228デフォルトの名無しさん:2006/01/05(木) 12:01:40
>>211
御大ですら自分の好きな言語が一番素敵厨かYo!と思いマスタ(w
229デフォルトの名無しさん:2006/01/05(木) 12:18:15
他人を改宗させようとは思わないけれど。
頭の中でコードを考えてる時はグラフなわけ。
S式だとそれをそのままシンプルに書き下せる感じがする。
そして、Emacsの式単位 (文字単位や行単位でなく) の編集は
頭の中のグラフを直接いじっている感覚がある。
他の構文は、読むときも書くときもいちいち頭の中の
構造と字面とを翻訳してやらないとならないんでかえって面倒。
230デフォルトの名無しさん:2006/01/05(木) 13:25:03
a した結果を b して、その結果を c して、その結果を d する
というのを、頭の中では、
(d (c (b (a ... ))))
と考えるんだ、凄い頭だね
231デフォルトの名無しさん:2006/01/05(木) 13:41:18
>>230
>a した結果を b して、その結果を c して、その結果を d する

この時点で違ってんじゃないの、Lisp 脳と C 脳では。
232デフォルトの名無しさん:2006/01/05(木) 13:50:39
要は人によるってことでおさまりそうな議論だな
233デフォルトの名無しさん:2006/01/05(木) 13:52:08
S 式に特定した話というではないが、read/write invariance なのが良いとは聞くね。
計算途中のデータを引っ張りだして、ちょっと修正してまた計算みたいなのを何も考えずに出来る。
234デフォルトの名無しさん:2006/01/05(木) 14:58:34
>>230
そっちの方向にネストが深くなるときってのは、だいたい
逆に考えてる。欲しいものが先にあって、最後にdを呼べば
それが得られる、dがその結果を出すためにはcが返す値
が必要で… とトップダウンで。
逆にボトムアップで考えるときはletが深くなる。構造が
見えて来たらどんどん整理するけど。


235デフォルトの名無しさん:2006/01/05(木) 15:18:04
>>231
Cでも d(c(b(a(..)))) なんだけど・・・
C++なら、hoge.a().b().c().d() とも出来る(どっちも出来る)が
236デフォルトの名無しさん:2006/01/05(木) 15:37:37
>>235
文法の話じゃなくて、「〜して、次に〜する」という手続き的な考え方をしていないんじゃないかって事。
237デフォルトの名無しさん:2006/01/05(木) 18:14:22
>>235
あ、それ初めて知った
238デフォルトの名無しさん:2006/01/05(木) 18:25:13
逆にボトムアップで考えるときは・・・、とか書いてんじゃんw

let云々はCで言えば
a_result = a(...);
b_result = b(a_result);
c_result = c(b_result);
d(c_result);
といったやり方だし
これを、S式で書くとグダグダになるが
239デフォルトの名無しさん:2006/01/05(木) 19:04:44
だからツリーをいじってるって言ってるだろ。
(let ((ra (a x)))
(let ((rb (b ra)))
(let ((rc (c rb)))
(d rc))))
でカーソルが一番最初にある時に、rcを束縛する
let式に行くのは C-M-d C-M-f C-M-f C-M-d C-M-f C-M-f
そのlet式全体をリファクタリングするために外に出したければ
C-M-Space C-M-w でカット。
(a x), (b ra), (c rb) の部分がどんなに複雑になっても
この操作は変わらない。木構造が変わらないからね。

a_result = a(...);
b_result = b(a_result);
c_result = c(b_result);
d(c_result);

でa(), b(), c() の部分が何行にもわたる式になった時に
同じことができるのかい。
240デフォルトの名無しさん:2006/01/05(木) 19:08:17
スレ違い乙
241デフォルトの名無しさん:2006/01/05(木) 19:12:42
emacs講座ですか
242デフォルトの名無しさん:2006/01/05(木) 19:16:25
>>238
let*ってそのためにあると思ってたんだけど…。
(let* ((a-result (a ...))
     (b-result (b a-result))
     (c-result (c b-result)))
     (d c-result))
使った事ないけどさ。
243デフォルトの名無しさん:2006/01/05(木) 19:26:42
どっちにしても、ぐだぐだやん。
244デフォルトの名無しさん:2006/01/05(木) 20:06:48
何がぐだぐだなのかわからん。
245デフォルトの名無しさん:2006/01/05(木) 21:30:18
Lisp脳と聞いて、Ruby脳が飛んで着ました。
246デフォルトの名無しさん:2006/01/05(木) 21:42:14
Flexのライセンスについて質問なのですが、いまいち不明なところがあります。
Flexをつかって生成されたものに関してなのですが、

Note that the "flex.skl" scanner skeleton carries no copyright notice.
You are free to do whatever you please with scanners generated using flex;
for them, you are not even bound by the above copyright.

とあるので、生成されたものに関しては著作権表示すらなしに組み込むことが可能であってますでしょうか?

それとも、
This product includes software developed by the University of California, Berkeley and its contributors

この一文はやはりいれておかなければならないのでしょうか?

識者の方々よろしければご教授いただけたらとおもいます。
247デフォルトの名無しさん:2006/01/05(木) 23:24:12
普通に読めば著作権表示入れる必要はないと思うけど…。
248デフォルトの名無しさん:2006/01/05(木) 23:42:56
ここは Copyright and/or Copyleft については素人集団だからな。
一応、著作権スレにでもあたってみたら?
249デフォルトの名無しさん:2006/01/05(木) 23:49:49
そういうツールで生成したやつは、たいてい著作権的には
ツールの方の著作権は関係ないって感じになる。

ライブラリリンクとかで、生成した成果物が、他人の著作物を含むと
ややこしくなるがこの場合そうじゃないしな。
250デフォルトの名無しさん:2006/01/06(金) 00:14:17
>>249
その程度なら誰でも想像できるんだけどな
中途半端なカキコ見は混乱のもと
251デフォルトの名無しさん:2006/01/06(金) 00:29:25
ていうか、246はどう見ても著作権表示入れる必要はないと
はっきり書いてあるようにしか見えんが。
252デフォルトの名無しさん:2006/01/06(金) 00:56:01
>>251
俺にもそう読める。246よ著作権表示は一切不要と心得よ
253デフォルトの名無しさん:2006/01/06(金) 01:23:45
246です。

みなさま質問に対してのご返答ありがとうございました。

ライセンスは色々とありまして、その中でも、特にツールで生成されたものに対しては扱いが分かりづらいものが
ありまして質問させて頂くに至りました。
コンパイラ・スクリプトエンジンに関連あるFlexについての質問でしたが、微妙にスレ違いだったかもしれません。
そのために気を害してしまった方がおられましたら、お詫び致します。
254デフォルトの名無しさん:2006/01/06(金) 01:25:31
もともとスレ違いの連続みたいなスレだから
255デフォルトの名無しさん:2006/01/06(金) 03:20:02
俺言語を作ってる人達の雑談スレッドだろ
256デフォルトの名無しさん:2006/01/06(金) 05:58:15
>>255
俺言語は非難しないが、俺様言語な香具師が来ると痛すぎ
257デフォルトの名無しさん:2006/01/06(金) 08:06:18
俺言語と俺様言語の違いとは?
258デフォルトの名無しさん:2006/01/06(金) 23:18:40
Lisp と Ruby の違いと解く。
さて、その心は?
259デフォルトの名無しさん:2006/01/06(金) 23:55:00
>>257
俺言語は局所的用途の為に作られたもの
俺様言語は自己満足のたまもの。

260デフォルトの名無しさん:2006/01/06(金) 23:58:22
WinAPIの質問ですいませんけど、
WindowsでJIT作ろうとしたら

void *mem = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE)
memの先にコード書き込む
VirtualProtect(mem, size, PAGE_EXECUTE, &old)
ジャンプする

で良いんでしょうか?
261デフォルトの名無しさん:2006/01/07(土) 00:46:43
WRITEをはずしておくと意図しないアレをアレできるからアレかも
262デフォルトの名無しさん:2006/01/07(土) 19:10:16
>>259
うまい!
あんた、扇子あるよ。
263デフォルトの名無しさん:2006/01/07(土) 20:11:22
ま、何を作ろうともLispに還元されるわけだけどね。
264デフォルトの名無しさん:2006/01/07(土) 21:27:15
>>261
PAGE_EXECUTE

コミット済みページ領域に対する実行アクセス権を有効にします。
このコミット済み領域の読み取りまたは書き込みを行おうとすると、
アクセス違反が発生します。
265デフォルトの名無しさん:2006/01/08(日) 05:32:27
>>264
そうだったんか・・・
PAGE_EXECUTE_READ とは別か・・・
266デフォルトの名無しさん:2006/01/08(日) 23:06:40
りんご
267デフォルトの名無しさん:2006/01/08(日) 23:30:44

===== FORTRAN 77 =====
268デフォルトの名無しさん:2006/01/09(月) 01:38:26
DEFINT A-Z
269デフォルトの名無しさん:2006/01/10(火) 23:40:58
なんで、最適化用語って変なのばかりなんだろう?
もうちょっと、かっこいい名前つけられんのかねぇ?
270デフォルトの名無しさん:2006/01/10(火) 23:51:15
コンパイラの用語って変なのばっかり。
還元(reduce)って言葉見つけたとき、酸化還元の還元かとおもったよ。
271デフォルトの名無しさん:2006/01/10(火) 23:56:40
合ってるよ。reduce には酸化還元の還元という意味もある。
272デフォルトの名無しさん:2006/01/11(水) 00:05:43
コンパイラ用語に使うときは意訳でよいから別の言葉を使って欲しかった。
273デフォルトの名無しさん:2006/01/11(水) 00:42:29
もとに戻すんだから意味的にも還元で問題なかろう。
日本語力の乏しさを棚に上げて何言ってんだ。
274デフォルトの名無しさん:2006/01/11(水) 01:05:57
>>269
例えば?

>>272
じゃ、「リデュース」で。
275デフォルトの名無しさん:2006/01/11(水) 01:22:05
上方遷移…余計わからんな
276デフォルトの名無しさん:2006/01/11(水) 03:36:45
>>270
コンピュータ用語自体変なの多いから気にスンナ
277デフォルトの名無しさん:2006/01/11(水) 05:21:22
自己満足のために、lispのdefmacroのc言語風なものを実装してます。
for(i=0,i<10,i++,printf("%d\n",i));
といったかんじのことは出来るようになったのですが、
for(i=0;i<10;i++){printf("%d\n",i);}と言った外側にブロックを
持ったマクロは、どうやって実現したらいいか悩んでます。
何かいい参考資料ないでしょうか???
278デフォルトの名無しさん:2006/01/11(水) 06:05:07
279デフォルトの名無しさん:2006/01/11(水) 08:25:43
>>278
ありがとうございます。
Dylanですか。初めて聞きました。
結構古い言語なんですね。仕様読んでみます。
使ってみたい気がするのですが、windowsバイナリとか落ちてないのかなぁ。
280デフォルトの名無しさん:2006/01/11(水) 08:36:56
>>279
商用の Dylan 処理系がオープンソースになったものがあるよ。
http://www.gwydiondylan.org/downloads/opendylan/
281デフォルトの名無しさん:2006/01/11(水) 12:53:41
>>280
ほんとだ。ちょっと探せば見つかるじゃん。orz
ありがとうござます。

Hygieneって書いてあるので、基本的に名前の衝突が回避されていて、
BNFを書くような感じでパターン照合を行うものがDylanのマクロと考えてよいのでしょうか?
パターン照合はやったことがないのですが、
構文解析器の自動生成ができる技術力ないと作れないような気がするのですが。。。
282デフォルトの名無しさん:2006/01/11(水) 13:27:11
>>281
Schemeのsyntax-rulesの美しさに萌えろ。S式最強。
283デフォルトの名無しさん:2006/01/11(水) 14:11:20
>>282
Schemeのsyntax-rulesが作れれば、そりゃ、もー、うれしいんですけど。
S式だとS式でない場合に比べて、実装が簡単になるのでしょうか?
それだと、うれしいんだけどなぁ。
284デフォルトの名無しさん:2006/01/11(水) 15:55:15
>>283
どんな文法を使おうと、結局はツリーにしてマッチや変換をかけるでしょ。
S式の場合は最初からツリーになってるから前半の(どっちかっつうとtrivialな)
ステージが省ける、ってだけじゃないかと。
言語デザイナの立場だと文法も重要なんだろうけど。
285269:2006/01/11(水) 20:30:31
>>274
例えば、皮剥き
286デフォルトの名無しさん:2006/01/11(水) 20:53:09
パターンマッチマクロってどんな syntax の言語でも実装可能なの?
287デフォルトの名無しさん:2006/01/12(木) 00:51:45
自分の欲しいsyntaxのマクロを人に書かせたいと見たw
288デフォルトの名無しさん:2006/01/12(木) 06:39:51
>>286
可能か不可能かなら可能でしょう。
使いやすいとかわかりやすいものになるかどうかは別。
289デフォルトの名無しさん:2006/01/12(木) 08:35:55
>>288
どうもありがとう。

>>287
Ruby や ECMAScript, Python は acceptable lisp と言われているけど、
マクロを追加すればもっと Lisp の強力さに近付くかなと。
290デフォルトの名無しさん:2006/01/12(木) 11:28:30
>>287

自分は、schemeのsyntax-rulesを実装したいのだけど、
わからないので、簡単なソース付きで解説してほしいです。

自分のほしい言語をすべて書いてもらえたら幸せです。
schemeのスレとかで聞いたほうがいいのかなぁ?

>>287>>288>>289
PythonはDylanに似たマクロが入るとかいう噂がある(あった?)ようです。
どんな言語でも適用できそうなので、(よくわかってないのですが)
Dylanのマクロのアイディアはとにかく凄いような気がします。
C用のDylan風マクロとか、Java用のDylan風マクロとかあったら
そりゃもう、うれしいんじゃないかなぁと思います。
291デフォルトの名無しさん:2006/01/12(木) 11:40:09
schemeのスレで質問してみました。
292トラックバック ★:2006/01/12(木) 21:15:09
【トラックバック来たよ】 (ver. 0.11)
[タイトル] 萌え言語を作ろう!
[発ブログ] プログラム技術@2ch掲示板
http://pc8.2ch.net/test/read.cgi/tech/1131442510/l50
[=要約=]
日本語で書ける言語では「ひまわり」なんてのがありますが
いまいち使いづらいというか、萌えないw

ということで、萌え萌えな言語を作ってみようと言う企画です。



293デフォルトの名無しさん:2006/01/12(木) 22:06:16
萌言語案

ハァハァ{



の機能

while(1){
...
}
294デフォルトの名無しさん:2006/01/12(木) 23:04:56
萌えとハァハァは別だよ派
萌えもハァハァも一緒だよ派
295デフォルトの名無しさん:2006/01/13(金) 00:30:47
#define _ 1

とかやると、

for (;_;) 仕事;

となるわなw

萌えないが、実感はむしろこっちのほうが(泣)
296デフォルトの名無しさん:2006/01/13(金) 00:42:10
#define T_T 1

while (T_T) 仕事;
297デフォルトの名無しさん:2006/01/13(金) 18:49:31
#define ハァハァ 999

while(ハァハァ) 言語スレ
298デフォルトの名無しさん:2006/01/13(金) 23:33:15
変な用語の例(その2)

・せわしない。。。
・なまけた。。。
299デフォルトの名無しさん:2006/01/14(土) 00:03:57
bool A = ture;
bool T_T = true;

for(;A;) wile(T_T) int y=-(T_T);
300デフォルトの名無しさん:2006/01/14(土) 10:39:00
assert マクロって must って名前にしたほうがよくない?

assert ( a == b ) → must( a == b )
301デフォルトの名無しさん:2006/01/14(土) 11:31:50
assert that a equals b (thatは略可)
はそのまま読めるけど、mustはどう読んだらいいんだ?
302デフォルトの名無しさん:2006/01/14(土) 13:16:28
a == b で「なければならない」
should ( a == b ) とか must( a == b )
303デフォルトの名無しさん:2006/01/14(土) 15:18:27
must(a == b) を a == b でなければならないと読むのは
英語的におかしくないか。
! 演算子みたいに must が演算子だとして a must== b ならわかるが。
304デフォルトの名無しさん:2006/01/14(土) 15:25:59
must be (a is equal to b)
なんじゃないの。
305デフォルトの名無しさん:2006/01/14(土) 15:42:50
だから、それが英語的におかしいといっている。
306デフォルトの名無しさん:2006/01/14(土) 15:50:52
じゃ、 must be a condition of (a == b) は?
307300:2006/01/14(土) 16:14:15
いや、まあそんなに深い意味で発言したわけじゃないけど
英語的にどうこうというか、
自分的にはこっちのほうが直感的かなと思っただけ
初心者に assert を教えたらピンとこなさそうな顔してたもんだから
308デフォルトの名無しさん:2006/01/14(土) 16:24:42
個人的には ensure が良いと思う。ちょっと意味合いが変わって来ちゃうけど。
309デフォルトの名無しさん:2006/01/14(土) 18:15:19
>>307
assertって単語になじみが無いだけだ、辞書引かせてからassertを使った例文を毎日一個5営業日続ければ覚える。
310デフォルトの名無しさん:2006/01/14(土) 18:37:19
俺なら、

must.be.A.eq.B

が一番すんなりと入るかな?
311デフォルトの名無しさん:2006/01/14(土) 19:04:13
俺なら、

zettai(a == b)

が一番すんなりと入るわ。
312デフォルトの名無しさん:2006/01/14(土) 19:05:53
(a == b)じゃなきゃいやん
313300:2006/01/14(土) 19:41:09
assert だけだと、どっちの場合に警告するのかよくわかんなくない?
a == b 「だったら」警告するのか
a == b 「でなければ」警告するのか。
must とか(あるいは311,312 でもいいけど)だと、
明らかに後者が連想されるんじゃないかなと思った
314デフォルトの名無しさん:2006/01/14(土) 19:57:21
「ここでは(a == b)になると断言する」と日本語で言っても?
315デフォルトの名無しさん:2006/01/14(土) 20:01:06
assert に 『警告する』 って意味は無いんだよなぁ……。
316デフォルトの名無しさん:2006/01/14(土) 20:01:45
assert false の場合はどーやって解釈すりゃいい?
317デフォルトの名無しさん:2006/01/14(土) 20:03:01
『常に偽であると表明する』

prolog の fail みたいな。
318300:2006/01/14(土) 20:37:49
>>315
あ、ホントだ、やべえ!長いこと勘違いしとった!!
「断言する」で問題ないじゃん!
てことは、assert でも問題ナスorz
319デフォルトの名無しさん:2006/01/14(土) 20:43:02
ドンマイ
320デフォルトの名無しさん:2006/01/14(土) 20:43:14
>>316
正確には「もしここに来たら(a == b)がtrueであると断言する」と思えばいい。
assert falseは「もしここに来たらfalseがtrueであると断言する」、
つまり「ここには来ることはありえないと断言する」。
321デフォルトの名無しさん:2006/01/14(土) 20:59:13
#define assert 断言する

断言する(a == b)
322デフォルトの名無しさん:2006/01/14(土) 21:02:32
スキャナとパーザって、マルチバイト文字を通せるのですか?
323デフォルトの名無しさん:2006/01/14(土) 21:12:13
通すように作れば通る。
324デフォルトの名無しさん:2006/01/14(土) 21:56:47
シングルバイト文字の8バイトの連続だよ?
たまたま 0x80 より大きいだけ
325デフォルトの名無しさん:2006/01/14(土) 22:15:08
>>324
アフォ来た〜〜〜!!
326デフォルトの名無しさん:2006/01/15(日) 01:00:21
>>324
8バイトって何だ8バイトって。

実際には322の言うように、通るように作れば通るし、今時flexもbisonも
8bitは通す。マルチバイト文字というと、SJISだと0x5c問題が出てくる
可能性は歩けど、それはlexerのつくりの問題だよな。
327デフォルトの名無しさん:2006/01/15(日) 23:35:26
変な用語その3

マトン
328デフォルトの名無しさん:2006/01/15(日) 23:41:00
羊肉?
329デフォルトの名無しさん:2006/01/15(日) 23:41:51
自動羊肉
330デフォルトの名無しさん:2006/01/15(日) 23:57:17
オートマタ。
331デフォルトの名無しさん:2006/01/16(月) 00:59:16
オート マトン
というよりは
オー トマトン
何だが。
332デフォルトの名無しさん:2006/01/16(月) 04:17:47
Oh! Tomato! n?
333デフォルトの名無しさん:2006/01/16(月) 05:17:47
コンピュータ関係の変な用語ってのはKILLとかZOMBIEとかENTITYとかじゃねぇのか?
334デフォルトの名無しさん:2006/01/16(月) 07:13:02
デムパな単語が、そんなに嫌か?
335デフォルトの名無しさん:2006/01/16(月) 22:02:30
>>327
automate(自動)+ton(〜風)、「自動っぽいもの」くらいの意味。
336デフォルトの名無しさん:2006/01/16(月) 23:15:29
>>335
こらこら。だますんじゃない。
337デフォルトの名無しさん:2006/01/16(月) 23:29:55
自動人形
338デフォルトの名無しさん:2006/01/17(火) 01:33:13
ギリシャ語のautomatos(自立して動くもの)が語源だっけか。
別にどうでもいいけど。
339デフォルトの名無しさん:2006/01/17(火) 23:22:03
>>329
昔食肉工場の機械が、簡易プログラムのような物で動いていて
たまたま羊毛の盛んな時期と重なった
340デフォルトの名無しさん:2006/01/18(水) 00:58:17
>>339
ツマンネ

しかしあれだな、Lisp叩きやRuby叩きの話が出て来ると、すぐ「実装の話をしろよ!」という
主張が出て来るが、実装の話が好きな人達は、スレが閑散としてても実装の話はしないんだよな。
341デフォルトの名無しさん:2006/01/18(水) 01:14:52
assertやらオートマータやらの話をしている輩が何を偉そうに
342デフォルトの名無しさん:2006/01/18(水) 01:26:06
>>341
何一つ自分からネタ振れない輩が何を偉そうに。

つか、俺はassertやオートマータの話なんかしてないし。
だいたい、ここじゃちょくちょく構文解析+αのレベルで「間違い」が書き込まれる
ことがあるんだが、自称凄い人達はその訂正もしてくれないのな。
343デフォルトの名無しさん:2006/01/18(水) 08:54:41
まず、自称このスレの間違いをわかってる君が、具体的に間違いを指摘してみては?
344260:2006/01/18(水) 23:33:35
>>342
詳しい人らしいんで返答を乞うてみます。
345デフォルトの名無しさん:2006/01/19(木) 06:52:05
342が「自分に何がわかっているのかを書かなくていい理由」を考えつくまで
もう少しお待ち下さい。
346342ではないけれど:2006/01/19(木) 21:35:50
なぜこんな流れに。。。

俺はレベルの低い実装の質問を書き込んでいたものですが
342の人は多分質問に答えてくれた人なんじゃないかという
気がしています。

逆に意地悪な感じで初心者を馬鹿にしている人達は
初心者の質問が書かれるたびに
「このスレ〜以外は意味ない」とかそんなんばかりでしょう。
そういうのはレベルが低くはないんですか?
347デフォルトの名無しさん:2006/01/19(木) 22:39:30
エスパー光臨
348デフォルトの名無しさん:2006/01/19(木) 22:59:51
マシンのネイティブコードを吐き出すための情報(命令セットってやつ?)はどこから入手したらいいのですか?
VMや構文木直辿りのインタプリタしかやったことないのでそろそろコンパイラにチャレンジです。
349デフォルトの名無しさん:2006/01/19(木) 23:16:32
>>348
えーと、ギャグで言ってるんだよね?
350デフォルトの名無しさん:2006/01/19(木) 23:23:56
前からテンプラにその情報源がないのは、
ひどく片手落ちな気がしてたよ
351デフォルトの名無しさん:2006/01/19(木) 23:35:30
>>350
どのマシンがターゲットなんだかワカランのじゃ話にもならないし、少しだけ乗せるとアンチとか出てきて喧嘩になるし
ろくな事ないからじゃないの?
352デフォルトの名無しさん:2006/01/19(木) 23:42:03
IA32だけならば、誰も文句いわねえと思うが・・・
マカーでさえもう文句いわねえ

とおもったが、このスレの二大言語(笑)の信者は
蚊帳の外に置かれてしまうかw
353デフォルトの名無しさん:2006/01/19(木) 23:47:30
>>352
でIA32の場合インテルに資料請求するか秋葉あたりでデータシート買うって言う選択肢な訳だけど。
354デフォルトの名無しさん:2006/01/19(木) 23:51:23
>>352 の意味が分からん。
355デフォルトの名無しさん:2006/01/19(木) 23:52:08
lisp原理主義者はcarをeaxに、cdrをedxに。

>>353
例のpdfじゃ不足?
356デフォルトの名無しさん:2006/01/20(金) 02:46:07
357デフォルトの名無しさん:2006/01/20(金) 02:53:46
358デフォルトの名無しさん:2006/01/20(金) 05:00:59
> でIA32の場合インテルに資料請求するか秋葉あたりでデータシート買うって言う選
> 択肢な訳だけど。

それ、いつの時代の話?
ほとんどのCPUの命令セットはWebから落せる。
しかも IA32 の場合、日本語に訳されてる。

http://www.intel.com/jp/developer/download/
にある
IA-32 インテル アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル
からどうぞ。
359デフォルトの名無しさん:2006/01/20(金) 05:29:13
>>358
紙のマニュアルの方が扱いが楽だからなぁ。
プリントすると紙質の関係でつらいからね。
360デフォルトの名無しさん:2006/01/20(金) 07:49:40
そんなの選択肢からはずす理由にはならんだろ。
知らなかっただけなのに、言い訳苦しすぎですよ先輩。
361デフォルトの名無しさん:2006/01/22(日) 12:39:02
新しい言語本がでてるな。
リンゴに続けるか?


362デフォルトの名無しさん:2006/01/22(日) 13:30:05
>>361
どれ?
363デフォルトの名無しさん:2006/01/22(日) 14:24:41
>>361
KWSK
364デフォルトの名無しさん:2006/01/22(日) 14:25:30
っていうかリンゴってどれだw
スモールコンパイラの制作で学ぶプログラムのしくみ?
365デフォルトの名無しさん:2006/01/22(日) 19:48:58
>>364
リンゴ本はその通り。
別名綾タソ本
366デフォルトの名無しさん:2006/01/22(日) 23:16:51
手続き呼び出し/呼び出されの制御はどうするのが一番簡単だと思います?
一時変数・局所データとか考えると色々と面倒……

一時変数については呼び出し側にスタック作っといて、呼び出され側が
勝手に取り出すようにするのが簡単かな?スタックマシンにすると構文木
を解釈するのが面倒臭そうだし……
367デフォルトの名無しさん:2006/01/24(火) 00:04:05
>>366
作ろうとしているのが機械語吐くコンパイラなのか、バイトコード吐くのか、
Rubyみたいに解析木を実行するタイプなのかもわからんでは何も言えんわな。

>一時変数については呼び出し側にスタック作っといて、呼び出され側が
>勝手に取り出すようにするのが簡単かな?

呼び出し側と呼び出され側でスタックが違うの?

>スタックマシンにすると構文木を解釈するのが面倒臭そうだし……

意味わかんねえっす。どっちみち構文木は解釈しなきゃいけないのでは。
368366:2006/01/24(火) 00:46:10
>367
おお、すみませぬ。インタープリタ作ろうとしています。
まずの目標はRubyみたいな解析木を実行するタイプですね。

>呼び出し側と呼び出され側でスタックが違うの?
一時変数の管理責任と、手続呼び出しの動作主体をどのように割り振ろうかな……
と思いまして。前述の例だと
 一時変数の管理責任:呼出側 -> スタック作って管理
 動作主体:呼び出され側 -> 駆動はこちら
とかを考えています。

>意味わかんねえっす。どっちみち構文木は解釈しなきゃいけないのでは。
確かにそうですな……知恵が回らなかった……


結局、
今日一日考えた結果、スタックマシンの連鎖みたいなのを作ってみることにしました。
369デフォルトの名無しさん:2006/01/24(火) 01:29:56
>>368
実行環境フレームとか言う奴の事さしてんの?>>スタックマシンの連鎖
370366:2006/01/24(火) 02:47:12
どっちかっていうと、駆動レコード+スタックマシンといった感じですかね。
(実装の手を抜くために)駆動ごとにスタックマシンを付けた感じ。
371デフォルトの名無しさん:2006/01/24(火) 20:35:38
お手本がRubyだと、この擦れ的には受けが悪いかもw
おれは第三世
372デフォルトの名無しさん:2006/01/25(水) 01:20:34
LISP最高!
373デフォルトの名無しさん:2006/01/25(水) 01:42:38
>>372
なんでそこでLupinと言ってぼけないだよ
374366:2006/01/25(水) 22:18:52
そういや、単純なスタックマシンだと(いくつ実引数を渡すかは関数側で決まるから)
オーバーロードでひどい目に会いそうですな……

取りあえずはスタックのリストを作って回避しようかと考えていますが、他にどんな
アイディアがあります?
375デフォルトの名無しさん:2006/01/25(水) 22:24:52
オーバーロードを何時解決するかによる。コンパイル時に全部解決するなら問題あるまい。
376デフォルトの名無しさん:2006/01/25(水) 23:18:18
>>375
メソッド名とシグニチャが結びついてれば実行時解釈でも問題ないしね。
377366:2006/01/25(水) 23:20:36
そういやそうですな。

でも、折角だから多値戻しを実装してみたい気もするんですよね……
Rubyみたいに配列を戻す手もありますが。
378デフォルトの名無しさん:2006/01/25(水) 23:37:20
あまり欲張らない方がいいよ。複雑にしすぎると作ってて嫌になる。
379366:2006/01/26(木) 00:06:21
ははは、ご心配なく。かれこれ1年以上弄んでいますので、嫌んなるのは慣れっこです。
仕事だったら素直にC++使いますし。

まあ、未だに駆動が回んなくて鬱ですが…… “1+1”ができるのはいつになることやら……
380デフォルトの名無しさん:2006/01/26(木) 18:25:17
ルビーに学べ
381(ぱ):2006/01/26(木) 21:14:22
どうもです。上のほうで出ていた「ライターのM」です(たぶん)。

Rubyのような解析木実行タイプの言語を作ろうとしていて、かつ、独自スタックも
使うつもりなら、うちのcrowbarなんかは参考になりませんか?

http://kmaebashi.com/programmer/devlang/

>>368
>一時変数の管理責任:呼出側 -> スタック作って管理
>動作主体:呼び出され側 -> 駆動はこちら

ここで言っている「一時変数」がローカル変数のことであれば、管理責任は
呼び出され側にあるのでは。呼び出し側は呼び出され側のローカル変数を
知らないからです。

引数についてであれば、呼び出し側で領域を確保するにしても、別段それを
スタックに積む必要はないように思います。
crowbarの場合、駆動レコードごとに、変数名と値の対応表を持っています
(ver.0.3以降は、クロージャの実現のためにスコープチェーンを持っているので
ちょっとややこしいですが)。関数呼び出しでは、呼び出し時に、呼び出され側の
駆動レコード(CRB_LocalEnvironment)を作成し、その中に、ローカル変数として、
実引数の値を突っ込んでいるだけです。

引数やローカル変数の領域をスタックに確保するという実装ももちろん考えられますが
(crowbarでは代入により実行時にローカル変数が作られるのでそれはできなかった)、
その場合、引数は呼び出し側で積むことになるのでは。

いずれにしても、関数呼出しごとにスタックを持つ必要なないと思うのですが、
どうでしょうか。crowbarは演算用の独自スタックを持っていますが、スタックは1本です。
まあ、crowbarのスタックは足りなくなるとrealloc()するので、そのへんの効率低下を
嫌って関数呼び出しごとに持つ、というのならわかりますけど。
382(ぱ):2006/01/26(木) 21:22:58
ついでに上の方の質問に。

>>91
>ライターのM氏のページで、Cでの実装だと型そのものはUNIONにまとめてる感じでした。
>やっぱり処理系が扱う変数型をまとめてUNIONにしてしまってフラグ変数で型を見分けて扱うというのが一般的なんでしょうか?

一般的かどうかは知りませんが、crowbarでは値を保持するために2箇所で共用体を使っています。
変数の値を直接保持するCRB_Valueと、変数から指された先のヒープ中にある、
CRB_Objectです。

>そのときに、たとえばWinapiに対する拡張とか、製作時点で未知のオブジェクトに対応する場合はどういう方向になるんでしょうか?

Winapiに対する拡張とかを狙って、ネイティブポインタ型というのを導入しています。
luaのユーザデータ型も同じようなもののように見えます。

>>96
>C言語的構造体指向OO風味だと、メモリの配置さえあってれば問題なく下位の構造体にアクセスできるから、
>なんとか構造体EXとかは可能だと思う。関数ポインタつければ仮想関数もどきとかもできますぜ。

これは、crowbarで言うところのCRB_Objectについては可能でも、CRB_Valueについては
不可能ですよね。
383366:2006/01/27(金) 00:10:43
>381
情報サンクスです。考え方のところとか色々と参考になります。

ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと
ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。

>ここで言っている「一時変数」がローカル変数のことであれば、
いえ、関数の戻り値ですね。最初は関数の戻り値を次の継続に直接渡そうかと
考えていたのですが、そうすると今の自分のアイディアだと(継続のずっと先にある)
ブロックのローカル変数から実引数を取ってくるのが面倒にだったので、少し悩んでました。
スコープチェーン作って管理するのもいいのですが、もっと簡単な方法が無いかな……と
いうことで、取りあえずはスタックマシンを利用する方法でトライすることにします。

>いずれにしても、関数呼出しごとにスタックを持つ必要なないと思うのですが、
call/ccを実装したいと思っているのですが、その都度スタックを保存するのも面倒だし
いっそのこと全部の継続にスタック持たせちまえ、という乱暴なアイディアから来ています。
……まだ実装できていないので、本当にうまくいくのか不明ですが……
384デフォルトの名無しさん:2006/01/27(金) 00:27:50
アイデアだけではなぁ、
なぜ既にあるものを使わん?
アフォ?
385366:2006/01/27(金) 00:37:09
>384

既にある言語では無いから作っているんだけど……Schemeは近いものを感じるけどね。

あと、勉強という意味では車輪の再発明も重要だよ。
386デフォルトの名無しさん:2006/01/27(金) 02:00:33
一年以上やって1+1も出来ないんだろ?
勉強になってるか疑問だな。

>ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと
>ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。

形無し&プロトタイプ指向だからポイント違う?
何言ってんだお前。
387366:2006/01/27(金) 02:45:51
> 一年以上やって1+1も出来ないんだろ?
> 勉強になってるか疑問だな。

あら、そう? 1+1てけっこう大変だよ?
まあ、継続とか移譲とかグラフとかオートマトンとか、回り道が多いちゃ多いがね。
それもまた勉強。


>形無し&プロトタイプ指向だからポイント違う?
>何言ってんだお前。

どういう意味?
388デフォルトの名無しさん:2006/01/27(金) 09:10:54
もういいから来るな。
一年以上で未だ1+1もできないほど頭悪いんだろ?
これから先何年もアホ質問書き込まれるかと思ったらゾッとする。
389デフォルトの名無しさん:2006/01/27(金) 12:24:31
継続でスタック保存するのが面倒ってんなら、駆動レコードを全部
ヒープに置くって手もあるが。それだとcall/ccは駆動レコード
チェインの頭の掴んでおくだけだよ。
性能を気にしてるわけでもなさそうだし、駆動レコードごとに
スタックなんて面倒なことをなぜするのかよくわからない。
390デフォルトの名無しさん:2006/01/27(金) 13:54:36
Lisp使いはリストを見ると車とかCD-Rとかを使い出す
391デフォルトの名無しさん:2006/01/27(金) 13:58:48
>>390
どうして車とCDRに発想が結びつくの?
392デフォルトの名無しさん:2006/01/27(金) 14:28:07
なにこの変なマジレス
393デフォルトの名無しさん:2006/01/27(金) 14:39:34
Lisp使いはCD-Rのことを「クダー」と読むんだな
394デフォルトの名無しさん:2006/01/27(金) 17:54:48
久多良木信者はLisp使いか否か?
395デフォルトの名無しさん:2006/01/27(金) 18:21:20
>>391
しらないけどcarとcdrだからじゃない?
396(ぱ):2006/01/27(金) 20:21:31
>>383
>ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと
>ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。

crowbarは思いっきり型なし&プロトタイプベースのつもりですが。

>いえ、関数の戻り値ですね。最初は関数の戻り値を次の継続に直接渡そうかと
>考えていたのですが、そうすると今の自分のアイディアだと(継続のずっと先にある)
>ブロックのローカル変数から実引数を取ってくるのが面倒にだったので、少し悩んでました。

継続をやりたいということ自体初耳なわけですが。

継続は詳しくないので以下見当外れならすみませんですが、
「Rubyみたいな解析木を実行するタイプ」で、解析木を再帰で辿っているとすれば、
「Cのスタックどうするの?」という疑問が出てきます。
「関数の戻り値を次の継続に直接渡そう」ということだから、CPS変換を前提にしている?
だとすればそれはもう「Rubyみたいな解析木を実行するタイプ」とは言えないのでは。

>>389
関数内での、計算途中の値を積んでおくスタックのことなんじゃないでしょうか。
397デフォルトの名無しさん:2006/01/27(金) 22:07:07
1+1ねぇ、マジレスするけど、
yacc触りはじめてその日でできたよw
398デフォルトの名無しさん:2006/01/27(金) 22:27:40
コンパイラ構成法の一番最初の項目が電卓だからな。
399デフォルトの名無しさん:2006/01/27(金) 22:43:00
1+1が一年以上できないとか言ってるなら、いったんScheme作ればいいのに。
コアな部分に限れば仮想マシンとコンパイラそれぞれ一日で書けるよ。
そしたら作りたい俺様言語で何をどうするかも少しは見えてくるんじゃね?
400デフォルトの名無しさん:2006/01/27(金) 22:45:01
>>398
うちの大学は字句解析だったよ…。
401デフォルトの名無しさん:2006/01/27(金) 23:53:04
>>398
漏れが最初にやったのは逆ポーランド式の理解だった・・・懐かしいな
402デフォルトの名無しさん:2006/01/28(土) 00:42:37
きっかけを大別すると、
・yacc/lexまたはbison/flexで独学
・大学や専学でコンパイラ/インタプリタの講義
って感じなのかな?
403デフォルトの名無しさん:2006/01/28(土) 00:43:46
授業でちょっとやったけど、あまりに講義資料・内容がヘボかったから独学に切り替えたなぁ。
404デフォルトの名無しさん:2006/01/28(土) 00:58:28
情報処理の講師の説明よりも、数学の講師の説明の方が、実は分かりやすかったりするんだよな。w
405デフォルトの名無しさん:2006/01/28(土) 01:02:41
アルゴリズムの大半は、数学の勉強だからな
406366:2006/01/28(土) 04:22:49
しまった……中途半端な情報で混乱させていますね。すみません

>389
今作っている実装だと、駆動レコードチェイン+駆動レコード内のスタックといった
感じにしています。>396の指摘通りですね……と言っても詳しく説明していないから
わかんないよね。ごめん

>396
>crowbarは思いっきり型なし&プロトタイプベースのつもりですが。
失礼しました。まだ読み込んでいないので……

>「Rubyみたいな解析木を実行するタイプ」で、解析木を再帰で辿っているとすれば、
>「Cのスタックどうするの?」という疑問が出てきます。

今のところ、Cの関数処理プロセスに頼らない(再帰を使わない)で、
・解析木から継続の連鎖を作る
・継続を駆動する
という駆動を外部からループで回そうとしています。

>399
そうなんだけど、作りたいのはSchemeじゃないし、Schemeからちょっと離れているし。
……とはいっても、練習に作ってみるのもいい勉強かな……

>388
はあ。
407デフォルトの名無しさん:2006/01/28(土) 04:27:43
1年で1+1が作れない、最低限の理解力すら無い人間が406を書いたと思うと
その恐ろしい知ったかぶりに愕然とする
408デフォルトの名無しさん:2006/01/28(土) 04:45:28
しばらく放っとけないのか?
409デフォルトの名無しさん:2006/01/28(土) 06:12:16
俺は407の方の噛みつき具合いの方が愕然とする。
410デフォルトの名無しさん:2006/01/28(土) 08:15:29
>>409
そう? このスレの伝統だと思ってた。
411デフォルトの名無しさん:2006/01/28(土) 10:56:44
1+1 って、意外と難しいよ。特に数値オブジェクトを + メソッドで加算する場合……とか。
経験ない人が独学でやるには、1年はちょっとキツ過ぎじゃないか? とか擁護してみる。
412デフォルトの名無しさん:2006/01/28(土) 11:08:31
まあそういうのは人による部分が大きいよ。
CSのバックグラウンドあってOOにドップリつかった人がやり始めれば理解するのに1日かからないだろうし、逆にこれからプログラミングを始めますって人には1年じゃ無理だろうし。
極端に言えばね。
一口に何日で理解したとか何年かかっても理解できないとかから能力を量ってしまうのはナンセンスだとは思う。
413デフォルトの名無しさん:2006/01/28(土) 11:18:12
10秒デデキマツタ!

if(strcmp(str,"1+1"))
printf("2\n");
414デフォルトの名無しさん:2006/01/28(土) 11:38:52
>>413
情報サンクスです。考え方のところとか色々と参考になります。

ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと
ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。
415デフォルトの名無しさん:2006/01/28(土) 12:32:42
>>406
> 今のところ、Cの関数処理プロセスに頼らない(再帰を使わない)で、
> ・解析木から継続の連鎖を作る

それをCPS変換というんじゃ…
でも素直にCPS変換したらスタックなんて出てこないと思うんだけど
(「計算途中の値」も全て継続への引数になる)。
それとも複数の引数を渡す際に、既に計算した引数の値を一時保存
しておくエリアってことかな。それを「スタック」と呼ぶのはどうかと
思うが (FILOである必要がないから)。

スタックは、普通の関数呼び出し→リターンに特化した一種の最適化
なんだよ。>>406 が何か特別な最適化のアイディアを試したいなら
別だが、原理を理解するために書いているなら、まず基本的な
CPS変換→実行系を動かしてみることをお薦めする。判断に迷うところは
とりあえず簡単に実装できるほうで書いてみる。書いてみないとわからない
ことってたくさんあるからね。とにかく動かしてから、別のアイディアを
試してみればいい。

416デフォルトの名無しさん:2006/01/28(土) 12:58:32
>411
そうだよね……自分の場合は駆動に引っ掛かっています。オブジェクトとメソッドを
等価に扱おうとして、『どうやって駆動すりゃいいの?』というところで散々悩んでいます。
あとは名前解決とか変数呼び出しとか……

>412
OOにはけっこうドップリ漬かっているんですけどね。
ここまで彷っているのは『当たり前と思っていた駆動とか関数呼び出しが、いざ
やってみると全然当たり前じゃなかった』というのが大きいですかね。


>407, 413, 414
へえ?
417デフォルトの名無しさん:2006/01/28(土) 13:16:19
>415
>それをCPS変換というんじゃ…
……そうだった。

> でも素直にCPS変換したらスタックなんて出てこないと思うんだけど
最初は素直にCPS変換していたんですけど、レキシカルスコープやろうとしたときに
(オレ言語のアイディアが邪魔して)うまくアクセスリンクが処理できなかったので、
スタック……というか単なるリストも併用する形を検討しています。

> まず基本的なCPS変換→実行系を動かしてみることをお薦めする
やっぱりそっちの方が近道かな……もうちょっと悩んでみます。
418366:2006/01/28(土) 13:38:37
>>415
情報サンクスです。CPS変換のところとか色々と参考になります。

ただ、自分の目指しているのはCの関数処理プロセスに頼らない(再帰を使わない)ですので、やっぱりちょっと
ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。
419デフォルトの名無しさん:2006/01/28(土) 13:41:57
ありゃ、騙りも出て来たか……これだからIDの無い板は駄目だよな。
そろそろ名無しに戻るか。

>418
ふうん?
420デフォルトの名無しさん:2006/01/28(土) 13:42:19
>>419
ふうん?
421デフォルトの名無しさん:2006/01/28(土) 13:48:08
彼は型無し&プロトタイプ指向の言語に対して

>ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと
>ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。

とか言ったのが一番面白かった。最高にバカ丸出しで。


何か言われたら、はあ?とかへえ?とかふうん?とか、
何か言い返さないと気がすまないってのもポイント高し。
422デフォルトの名無しさん:2006/01/28(土) 13:50:38
>>421
で?
423デフォルトの名無しさん:2006/01/28(土) 13:58:54
>>422
10ポイントアップ
424デフォルトの名無しさん:2006/01/28(土) 17:51:31
プライドだけ高そうだね。技術は(ry
425デフォルトの名無しさん:2006/01/28(土) 17:55:29
ここの住人はプライド高いからナァ
ただし、技術は(ry
426デフォルトの名無しさん:2006/01/28(土) 18:08:16
お前の事か?
427デフォルトの名無しさん:2006/01/28(土) 18:52:11
プライドが高くなるのは仕方が無いのでは?
PGの四大欲求の一つである、言語の作成をやってるわけだし
OSと言語とファイルシステムとAIで良かったんだっけ?
428デフォルトの名無しさん:2006/01/28(土) 19:03:38
OS と言語と AI は分かるけど、ファイルシステムってのは何で?
4 番目に来るのは、Emacs とか Smalltalk みたいな「環境」じゃないかな。
429デフォルトの名無しさん:2006/01/28(土) 23:43:42
OSと言語は分かるけど、AIってのは何で?
アフォ?
430デフォルトの名無しさん:2006/01/28(土) 23:48:46
ちょwww「四大欲求」てwww
431デフォルトの名無しさん:2006/01/28(土) 23:58:48
ファイルシステムってOSの一部じゃないの?
432デフォルトの名無しさん:2006/01/29(日) 00:06:41
DOS
433デフォルトの名無しさん:2006/01/29(日) 00:50:20
どっちかってーと、OS・言語・マイクロコード(CPUの)・BIOS(とかEFI)
とかの方が
434デフォルトの名無しさん:2006/01/29(日) 01:50:22
それはただLow Levelな方をかき集めただけじゃん
435デフォルトの名無しさん:2006/01/29(日) 01:55:09
OS、言語、データーベース、ゲームじゃね?w
436デフォルトの名無しさん:2006/01/29(日) 01:58:33
AIは、作れなさそうだから実際に作ろうとまでは思わないが、
願望を持つ奴は多いと思う。
ゲーム、言語、OS、AIだろう。
437デフォルトの名無しさん:2006/01/29(日) 06:09:51
この人、数学者としてはいまいちなのかもしれないけど、
計算機科学の実情についてはよく分かってるね。
http://www.ritsumei.ac.jp/se/~takayama/MathEssays/essays.html

>>428
どうでもいい話だけど、現代においてはOSこそ「環境」ではないのかな。
438デフォルトの名無しさん:2006/01/29(日) 06:23:47
>>437
この人は自分が高いレベルにいすぎて、考え方の基準が高すぎるね。
確かに数学者を目指すレベルからすれば、計算機科学はおちこぼれが
流れる分野なのかもしれないが、一般の高校生から見れば
やっぱり、数学が必要な学科だよ。
単位とるにも数学的なものの考え方が必要な科目ばかりだしね。
一般の高校生の99%は大学でどちらかと言えば数学嫌い
になるだろうし。
一般の高校生のレベルと数学者のレベルを混同してるように見える。
439デフォルトの名無しさん:2006/01/29(日) 06:30:44
そりゃ、京都大学理学部出身から、立命館大学情報工学科みりゃ
レベル低くも見えるだろ。
それでもそこにいる学生は相対的に数学が得意で好きだった学生
なんだということが理解できないんだろうな。
440デフォルトの名無しさん:2006/01/29(日) 09:23:25
理学と工学は似て非なるものだしな。
441デフォルトの名無しさん:2006/01/29(日) 15:33:57
工学で一度数学の必要性を身に沁みるとまじめに勉強する気にもなるもんだが。
一度数学の講義を受けないとそもそも数学の必要性に気付けない罠。
442デフォルトの名無しさん:2006/01/29(日) 15:41:09
>>436
ああなるほど、ようやく分かった
人工無能の事ではなく、ホントの人格の事だったのか

人間の場合は四つの判断力を持ってるからな。
直感と理性の再現だけならどうにかなるかもしれないが、
感情と欲求の再現となると、なかなか難しいだろな
443デフォルトの名無しさん:2006/01/29(日) 16:30:38

PGの3第欲求

(1)OS
(2)言語
(3)ハーレム

この辺りが本当の所だろう。
444デフォルトの名無しさん:2006/01/29(日) 16:34:41
で、エロゲで代用するわけか
445デフォルトの名無しさん:2006/01/29(日) 19:55:35
プログラマをPGと略す奴にろくな奴がいない
446デフォルトの名無しさん:2006/01/29(日) 20:06:05
>>443
OSも言語も興味ないやつはいくらでもいそうだけどな。
447デフォルトの名無しさん:2006/01/29(日) 20:15:58
(1)金
(2)酒
(3)ハーレム
448初心者:2006/01/29(日) 21:13:56
質問です。
Yaccとかで論理式の短絡評価を行う常套手段はどのようなものでしょうか?
例えば、if(a==b||c==d) でa==bが確定するとc==dの評価はスキップ可能ですが、
Yaccとかだと、先にa==bとc==dが認識されてしまうと思うのです。
449デフォルトの名無しさん:2006/01/29(日) 21:53:31
>>448
yaccが生成するのは構文解析器。
意味解析は通常は構文解析で構文木を作った後のステップであって、yaccはやってくれません。

[文字列]→字句解析→[トークン列]→構文解析→[構文木]→意味解析→[一時コード]→最適化→[ましなコード]→コード生成→[出力コード]
というように道のりは長い。
yaccがやってくれるのは構文解析だけ(でも構文解析は最適化の次に面倒くさい部分なので大助かり)。
450デフォルトの名無しさん:2006/01/29(日) 23:39:37
>>447
それだ
451デフォルトの名無しさん:2006/01/31(火) 00:42:32
まあ、たいていの入門書ではyaccの最初のサンプルは電卓で、
そのプログラムではアクションの中で計算もやっちゃってることが多いから
>>448 のように思ってしまうのも無理はないのかも。

制御構造を持つちゃんとしたプログラミング言語を作ろうと思ったら、
yaccのアクションでは解析木を作るだけにしておいて、評価は後で行います。
452448(初心者):2006/01/31(火) 02:22:55
>>449,451
そうでしたか。奥が深いですね。
一瞬、言語の仕組みが分かったような錯覚をしましたが、
本格的なものと電卓的なものとでは、ずいぶんとギャップがあるということが
わかりました。

ありがとうございました。
453デフォルトの名無しさん:2006/01/31(火) 02:33:12
C# コード出力するコンパイラコンパイラって、もしかして未だ無い?
454デフォルトの名無しさん:2006/01/31(火) 02:36:00
>>452
その錯覚はあながち間違いじゃないよ。
449で道のりは長いとか書いちゃったけど、実際には構文木まで作れれば終わったようなもんだし。
あとはその周辺の理論的な考察とか最適化の手法は好きなように学んだらいいだけ。
455デフォルトの名無しさん:2006/01/31(火) 07:15:12
>>453
多分ある。というかC#でコンパイラ作るみたいな本がなかったっけか。
456デフォルトの名無しさん:2006/01/31(火) 12:20:28
>>453
たしかANTLRが対応してたような気が
457448(初心者):2006/01/31(火) 23:15:15
>>454
どうもです。すこしづつ勉強して行きたいと思います。
(老後の趣味です。ハハハ)

ところで、Yaccってコンパイラコンパイラ等と呼ばれたりもしますが、
結構誇張された言い方とも受け取ったのですが、言語専門家の方は
どのように感じますか?

(技術的な話でなくてすいません。)
458デフォルトの名無しさん:2006/01/31(火) 23:30:38
そんなことを聞いてどうする
459デフォルトの名無しさん:2006/02/01(水) 01:12:13
コンパイラコンパイラは言い過ぎ
パーサジェネレータの方がしっくり来る
460デフォルトの名無しさん:2006/02/01(水) 02:09:03
なんで2chの回答者って偉そうなのばっかりなんですか?
461デフォルトの名無しさん:2006/02/01(水) 02:16:09
Copying でも Generational でも、オブジェクトを移動させる GC で、
移動不可なデータ(ロックとか)ってどう扱ってるのでしょうか。
何かおいしい資料(論文とか)ありましたら教えて下さい。
462デフォルトの名無しさん:2006/02/01(水) 06:49:40
移動不可なデータのみを別に扱っておけば良いのでは?
例えば、移動不可データ専用の予備領域を取っておくとか
463デフォルトの名無しさん:2006/02/01(水) 10:08:04
>>460
質問者にとっては初めての質問でも、答える方は3度目、4度目というのが当たり前。
日常では温厚な人間でも切れ気味になる。顔が見えりゃいいんだけどね。
おれは一度目にした質問にはレスしないことにしている。
464デフォルトの名無しさん:2006/02/01(水) 11:48:51
http://members.at.infoseek.co.jp/zzyyb/gc/incremental-collector.html
のインクリメンタルガベコレの説明ですが、
GCが処理しているカレントオブジェクトをプログラムが変更しちゃう場合が
言及されていないのですがまさにその場合が問題である気がします。
カレントオブジェクトが保持する別オブジェクトへの参照のうち、既に処理
した参照が書き換えられるとおかしくなると思うんですが。
465デフォルトの名無しさん:2006/02/01(水) 20:10:10
>>462
どうもありがとう。後で思いついたんですが、世代別なら一番古い世代に置くというのも手ですね。
466デフォルトの名無しさん:2006/02/01(水) 21:42:14
>>460
ヒント:ルサンチマン
467デフォルトの名無しさん:2006/02/01(水) 22:19:13
>>463
ハツモノでもあんたのレスはいらんよw
468デフォルトの名無しさん:2006/02/01(水) 23:38:35
>>461
俺もちゃんと読んでないけどひとまず貼っとく。
http://www.nminoru.jp/~nminoru/java/cms/concurrent_mark_sweep.html#45
469デフォルトの名無しさん:2006/02/02(木) 00:59:19
http://www.shos.info/develop/oo/dscsnptn.html#chapter4

>464
GCが処理しているカレントオブジェクト
 灰色

カレントオブジェクトが保持する別オブジェクトへの参照のうち、既に処理した参照
 灰色 -> 黒 または
 灰色 -> 灰色

灰色 -> 灰色については言及されていないけど、どちらの種類のリンクともうまく処理されます。
470デフォルトの名無しさん:2006/02/02(木) 01:46:04
灰色→白は?

カレントオブジェクトに参照A,B,Cがあってこの順で処理するとして、
Aをキューに追加して灰色にした後、Bを処理しようとしているときに
別プログラムがAを白への参照に書き換えてしまったら?
471デフォルトの名無しさん:2006/02/02(木) 23:59:03
>470
ごめん、ちょっと勘違いしていたみたい。

・カレントオブジェクトの処理(参照先の灰色化 & 参照元の黒化)はアトミックに処理する
・カレントオブジェクトが参照された場合、処理を中断してキューの最後に持ってくる
・カレントオブジェクトは黒と同様に処理する
あたりはどう?
472デフォルトの名無しさん:2006/02/03(金) 00:49:26
>>471
最後でしょうか。つまりこの条件においては黒→白取り付けと同様に考える
(のでその後に書いてある各手法のようなバリアを張る)と。
前二者はオーバーヘッドが重すぎますよね。

このページ、過渡状態を無視せずにもうちょっと厳密に書いてくれていれば
よかったんですけどねえ。
473デフォルトの名無しさん:2006/02/04(土) 01:50:29
まずカレントオブジェクトを黒にしてから参照先を灰色にすれば、カレントオブジェクトを
特別扱いしなくて済むかな?
474デフォルトの名無しさん:2006/02/04(土) 02:13:51
ちょっと考えたら分かることだろ。
475デフォルトの名無しさん:2006/02/04(土) 02:48:08
>>473
処理中のカレントオブジェクトが
「それが参照している先は必ず灰色か黒」という黒の定義に反することになるのが
気持ち悪い。
476デフォルトの名無しさん:2006/02/04(土) 10:51:06
>>472
そのページはマルチスレッドは考えてないでしょ。
シングルスレッドなら普通 >>471 の 1 にするかと。
477デフォルトの名無しさん:2006/02/04(土) 13:02:40
>>475
アホかお前
478デフォルトの名無しさん:2006/02/04(土) 17:24:37
>475
黒の定義を変えるヨロシ
「GCから『それが参照している先は灰色か黒しか存在しない』と認識されるオブジェクト」
かな?
479デフォルトの名無しさん:2006/02/07(火) 00:59:07
スタックアロケーションには定数時間が必要なのに対し、
生きているオブジェクトの数だけに比例する時間がかかるGCは
メモリを大きく取ることでいくらでも1セルあたりのGCコストを減らせますよね。
だからGCはスタックアロケーションよりも速いっていうのは間違ってますか?
480デフォルトの名無しさん:2006/02/07(火) 01:39:53
全体的にどういう計算、それ?
481デフォルトの名無しさん:2006/02/07(火) 10:54:53
>>480
例えばコピーGCでメモリのサイズをM、GCで生き残ったオブジェクトのサイズをA
とすると、GCにかかる時間は定数Cを使ってCAになります。
回収されたオブジェクトのサイズはM-Aなので、これで割るとCA/M-Aになります。
スタックのポップだと一般にサイズ当たりにかかる時間は定数です。
コピーGCではMを大きくすることで、いくらでもコストが減るので
"Garbage Collection Can Be Faster Than Stack Allocation" Andrew W. Appel
ということらしいです。
482デフォルトの名無しさん:2006/02/07(火) 12:22:38
よくわかんないけど
その理論だとスタックの最大サイズM(仮想メモリ使えば∞と思ってよい)
に対して同じ式が出てくるんじゃないか?
スタックのポップのコストがサイズ当たりってことは、
ポップのコストはサイズに比例って意味だよね?
483デフォルトの名無しさん:2006/02/07(火) 12:44:12
>>482
スタックのポップは引き算すればいいだけなので、ほんとは比例しないんですが
使い終わる度にポップするのでサイズに比例するってことです。

スタックのポップのコストにスタックの最大サイズは関係ありません。
484デフォルトの名無しさん:2006/02/07(火) 13:01:35
>479
それって、前提条件が 1スタック=1オブジェクト になっていない?
ただ単に「GCによるオーバーヘッド > まとめてメモリ回収する時間節約」つうてる
だけのような気がする
485デフォルトの名無しさん:2006/02/07(火) 13:28:06
>>484
すいませんがよく意味が分からないです...

VMのスタックをポップせずに一杯になったときにGCを起動した方が
性能がいいんじゃないかって話です。
環境をヒープにコピーしたり末尾再帰を最適化したりしなくてすみます。
ただコンパクションしないと断片化するのでGCは結構重そうです。

>>482 のようにメモリが無限にあるのなら GC自体必要ないのでコストは0です。
で、現実問題としてどんなもんなのかなあと。Chickenで実装されているらしいのですが...
486デフォルトの名無しさん:2006/02/07(火) 13:35:44
元論文をつまみ読みして想像するに
・Mはメモリのサイズというよりは、今までアロケートしたセルのサイズ
・「スタックアロケーション」といっているのはヒープに確保したセルを明示的に開放する話。スタックは関係ない。
・「スタック〜」では開放するセルの個数に比例したコストがかかるが、
 コピーGCでは生き残ったセルの個数に比例したコストがかかる。
・コピーGCでは開放するセルあたりのコストはCA/M-A なので、
 開放するセルあたり1インストラクションより小さくなることすらある。
487デフォルトの名無しさん:2006/02/07(火) 13:57:28
>>486
> ・Mはメモリのサイズというよりは、今までアロケートしたセルのサイズ
MはコピーGCで使われるメモリ領域です。つまり 2Mのメモリが必要です。

> ・「スタックアロケーション」といっているのはヒープに確保したセルを明示的に開放する話。スタックは関係ない。
どちらにしても explicit freeingはセルの個数(開放する回数)に比例したコストがかかります。
この論文でも特にヒープかスタックか特定していないような気がします
5章でもスタックとヒープを比較しているので、どちらかといえばスタックかなあと
間違ってたらすいません。

>・「スタック〜」では開放するセルの個数に比例したコストがかかるが、
> コピーGCでは生き残ったセルの個数に比例したコストがかかる。
>・コピーGCでは開放するセルあたりのコストはCA/M-A なので、
> 開放するセルあたり1インストラクションより小さくなることすらある。
その通りです。
他の論文にも StackGCの性能がよいと書いてあったのですが
Chicken くらいしか実装例を知らないのでどうなのかと思ったんです。
飯喰ってきます。
488484:2006/02/07(火) 14:49:37
ごめん。
意図しているのは >486 の通りね。

GCによるオーバーヘッド => GCでの生き残ったセルの個数に比例したコスト
まとめてメモリ回収する時間節約
=> スタックでの開放するセルあたりのコスト - GCでの生き残ったセルの個数に比例したコスト

といった感じかな?
489デフォルトの名無しさん:2006/02/08(水) 14:42:58
>>481
>これで割るとCA/M-Aになります。

うんうん。なるほど・・・

ところで、その割った「値」っていうのは、
一体何を意味している数なのかな?
490デフォルトの名無しさん:2006/02/08(水) 17:20:13
>>489
そのまんま「回収したサイズ当たりの計算量」です。

一般的なコピーイングでは 2Mのメモリが必要ですが、explicit freeing
と効率が同じになるサイズNを超す生存オブジェクトを許さないのならば M + Nで済みます。
(コピーGCでは生存オブジェクトのサイズに比例したコストがかかるので、
Nを超えると explicit freeingの方が効率的になるということです。)
生存オブジェクトのサイズがNを超えたらスタックオーバーフローにします。
で、この論文の例の場合 M = 7Nなので 8Nのメモリが必要となります。
これは コンスセル一つ 3ワードという前提の上での計算です。
VMスタックにこの GCを使った場合、環境フレームの大きさは固定では
ありませんがほとんどの場合 3ワードよりも大きいので、M/Nはもっと大きいです。

という訳で生存オブジェクトに対して十分大きなメモリが確保されないと
GCの優位性は保たれないので、現実問題としてどうなのかと思ったのです。
20年前の論文なのでもっと流行っててもよさそうなものですし
(停止時間が長いという欠点はありますが)。
491デフォルトの名無しさん:2006/02/08(水) 19:20:52
コピーGCでは1回のGCのコストがヒープ領域の大きさに依存しないので、
ヒープ領域が大きいほどGC回数が減ってGCのオーバヘッドが小さくなる

ということ自体は別に直感に反してないし、流行る流行らないの話ではない
と思うな。他の要因がなければヒープ領域は大きいに越したことはないに
決まってるし。
492デフォルトの名無しさん:2006/02/08(水) 19:34:11
>>490
>現実問題としてどうなのか
が知りたいなら、>>479の時点でそう書け。
学生がゼミの宿題で悩んでるのかと思って
時間割いちまったじゃねぇか。
493デフォルトの名無しさん:2006/02/08(水) 20:30:01
知ってる人には当たり前の内容で
知らない人には何を言ってるかわからない説明力。
494デフォルトの名無しさん:2006/02/08(水) 20:42:14
>>491
その通りなんですが、スタックをヒープとみなしてポップせずにGCで回収してしまおう
って話なんです。何度も書きますが。
VMのスタックをGCで回収させる処理系って何があるでしょうか。

>>492
ごめんなさい。2chにこんな優しい人がいるなんて。
495デフォルトの名無しさん:2006/02/08(水) 21:00:24
さあどんどん後出し設定が出てきますよ。
496デフォルトの名無しさん:2006/02/08(水) 22:22:51
>>485
>VMのスタックをポップせずに一杯になったときにGCを起動
>>494
>スタックをヒープとみなしてポップせずにGCで回収

それって普通はスタック上で確保するフレームを
ヒープ上に確保するのと一緒だから
パフォーマンスが悪くなることはあっても良くなる事はないんじゃない?
497デフォルトの名無しさん:2006/02/09(木) 06:21:45
>>496
494はたぶんHenry BakerのCheney on the M.T.A.みたいな話を
してるんだと想像するが。この話のキモは、多くのオブジェクトは
短命で、GCが走る頃にはごみになってるからヒープにさえ移らな
いってこと。スタックを世代別GCの第0世代とみなしてると考えても良い。

で、Chickenがそれを実装してるわけだが。Scheme処理系としての
性能はそこそこ良いらしいが、処理系の性能はGC以外の部分にも
依存するからねえ。Cheney on the MTA自体がどのくらいの性能かを
測るには、GC部分だけを取り替えて比べるしかないんじゃない。

498デフォルトの名無しさん:2006/02/09(木) 07:35:56
>>497
言語の構造にも依存するんだよね、ヒープ上につくるオブジェクトの種類。
もし比較するならそのあたりの事も考慮しないといけないし、その場合の
試験プログラムの内容も影響受けるだろうし面倒臭そうだね。


499デフォルトの名無しさん:2006/02/09(木) 11:11:46
そだね。特に第一級の継続が無い言語ではアクティベーションフレームの
エクステントは関数を抜けるまでに決まってるから、popしてしまう方が
良さそうだ。継続がある場合はどうせ捕捉時にスタックを何とかしなくちゃ
ならないからCheney on the MTAと相性が良さそうなんだが。





500デフォルトの名無しさん:2006/02/09(木) 11:22:34
>>499
環境に関してはどうですか?
一般的にはクロージャが生成されたときにスタックからヒープにコピーすると
思うんですが、それが必要なくなりますよね。
どちみちGCのときにはコピーするので微妙ですが。
501デフォルトの名無しさん:2006/02/12(日) 14:59:24
yaccを使ってるんですが、トークンの数字を文字列に変換することはできますか?
NUMBER => "NUMBER", STRING=>"STRING", '+' => "+" みたいなかんじです。
502デフォルトの名無しさん:2006/02/12(日) 23:09:56
アフォ?
503デフォルトの名無しさん:2006/02/13(月) 13:11:20
>>501
yaccはそんなことするためのものではないので、ご自分でどうぞ。
504デフォルトの名無しさん:2006/02/13(月) 20:24:30
>>501
yaccの仕事じゃない。
もしどうしても今組んでいるコードがそれを要求するのであればlex側で処理しておくべし(トークンの持ち方で2つの意味づけしとけ)
505デフォルトの名無しさん:2006/02/14(火) 23:32:01
>>501
kmyaccならできる。起動時に-tオプションをつけてみて。
506デフォルトの名無しさん:2006/02/16(木) 20:56:42
kimyacc ?
キムチ!
507デフォルトの名無しさん:2006/02/17(金) 00:34:11
>>506 うまい!!!!!!!!1
508デフォルトの名無しさん:2006/02/17(金) 00:39:37
sage
509デフォルトの名無しさん:2006/02/17(金) 01:10:02
>>506
ワロwwwwwwwwwwwwwwwwwww
510デフォルトの名無しさん:2006/02/18(土) 04:59:51
そういや、少し前にGUI型言語の話が出ていたけれども、
それってオーサリングツールとどう違うの?
511デフォルトの名無しさん:2006/02/18(土) 08:53:21
スクリプトや言語の支援ツールとしてのモデリングツールなら、
たま〜に見る。

で思った事なんだが、言語の一部としてモデリングツールがあり、
モデリングツールの細かい調整用にスクリプトを用いたツールを
作ろうと思ってるのだが、このツールは何と呼べば良い?
512デフォルトの名無しさん:2006/02/18(土) 08:56:15
>>511
コンパイラでは?
513デフォルトの名無しさん:2006/02/18(土) 09:06:47
>>510
オーサリングツール自体が、広義ではコンパイラだと考えられる。
514デフォルトの名無しさん:2006/02/18(土) 09:28:22
>>512
どちらかといえばスクリプトエンジンの方かと
515デフォルトの名無しさん:2006/02/18(土) 09:38:07
「細かい調整」の内容による?
516デフォルトの名無しさん:2006/02/18(土) 11:08:33
大昔のPlusの時代のMacにブロックダイアグラムをGUI上で用いて機能設計
(というよりモジュールプログラムって感じ)して、バイナリを出すシステム
があったけど、そういう奴のこと?>>510

それともIBMのVisualAgeシリーズみたいな奴かな?
517デフォルトの名無しさん:2006/02/18(土) 11:33:02
>>516
前スレの最後の方で出てたネタなんだが・・・見れないな。
CAD/CAMとか、UMLとか、電子回路みたいな奴の事。

DVDの編集ツールとか、アニメーション製作ツールといったオーサリングツールと、どうも似てるなと。
518デフォルトの名無しさん:2006/02/18(土) 11:34:53
前々スレだったかもしれんし、はっきりとは覚えて無いが。
519デフォルトの名無しさん:2006/02/18(土) 11:59:53
『コンパイラ入門 C#で学ぶ理論と実践』
って、本はどうなのでしょう?
初心者向け?
520デフォルトの名無しさん:2006/02/19(日) 02:11:30
>519

だれか答えてやれよ。
521デフォルトの名無しさん:2006/02/19(日) 03:03:09
amazonの書評にも誰も書いてねーよーな
1000部も出てないだろう本の内容なんか知るかボケ。

自分で買うなり立ち読みするなりして調べろバーカ。
522デフォルトの名無しさん:2006/02/19(日) 05:37:26
無理してレスつけなくてもいいんだよ
523デフォルトの名無しさん:2006/02/19(日) 07:32:33
omaemona
524デフォルトの名無しさん:2006/02/19(日) 12:09:03
521は無理矢理感ありまくりだけど
522はそうでもない
525デフォルトの名無しさん:2006/02/19(日) 14:22:05
と、522が寂しそうにつぶやいた。
526デフォルトの名無しさん:2006/02/19(日) 20:07:33
やっぱりこのスレLispやRubyがネタに絡まないと寂れる一方ですね。


Lisp最高!!!
と言ってみるtest
527デフォルトの名無しさん:2006/02/19(日) 20:15:00
↓Lispnおなにが良いか答えなさい
528デフォルトの名無しさん:2006/02/19(日) 20:42:23
ば〜かw
Rubyがいいに決まってるだろ?
新しい時代には新しい言語が必要だ

Lisp?はぁ〜?
コボルジジイと一緒にオナ●ーでもしてる!
529デフォルトの名無しさん:2006/02/19(日) 20:46:14
はぁあ……Lisp……カッコいいのぉ……
S式……すごい興奮します……
あふっ、いぐのぉおおおっ、インデントすごいぃいいい!
いくっ、いきます、いっちゃう!いぐぅぅぅぅぅぅぅぅぅぅぅぅぅぅぅぅぅ!!!
530デフォルトの名無しさん:2006/02/19(日) 21:07:07
よし、いいだろう!
531デフォルトの名無しさん:2006/02/19(日) 21:12:10
燃料投下の自作自演イラネ
532デフォルトの名無しさん:2006/02/20(月) 00:27:06
最強はJRubyだろ
Javaの機能も使える超絶的多機能Ruby
533デフォルトの名無しさん:2006/02/20(月) 00:29:24
AspJ
534デフォルトの名無しさん:2006/02/20(月) 00:56:14
lispy
535デフォルトの名無しさん:2006/02/20(月) 03:19:33
ようやく俺Lispにクロージャが加わった記念にカキコ
536デフォルトの名無しさん:2006/02/21(火) 20:42:51
Lispって存在意義あるの?
ゴボルと一緒で保守用?
537デフォルトの名無しさん:2006/02/21(火) 21:02:06
そろそろ釣り餌の変え時では?
信者の多そうなHaskellとかSmalltalkがお勧め
538デフォルトの名無しさん:2006/02/21(火) 21:23:40
信者率は高いだろうが、絶対数がな
539デフォルトの名無しさん:2006/02/21(火) 23:40:07
釣り餌じゃなく本当に lisp の存在意義が疑問なんだが
(除く、研究用)
540デフォルトの名無しさん:2006/02/21(火) 23:46:27
>>539自分で答え言ってるじゃ
541デフォルトの名無しさん:2006/02/21(火) 23:47:50
疑問に思う >>529 に尋ねる。
なぜ「研究用」が除かれるんだ?
542デフォルトの名無しさん:2006/02/21(火) 23:50:05
手軽に自分用のスクリプトを組み込むという用途としては
最適であるのは間違いないと思うがな。
543デフォルトの名無しさん:2006/02/22(水) 00:37:49
>>539 には Python の存在意義を問うてみたいな。
544デフォルトの名無しさん:2006/02/22(水) 00:46:40
Java用のスクリプト言語にHaskellが加わったらしいね
Javaのスクリプトコレクションがどんどん増えていって楽しい
545539:2006/02/22(水) 21:51:56
釣り餌じゃなく本当に python の存在意義が疑問なんだが
(除く、実用)
546デフォルトの名無しさん:2006/02/22(水) 21:53:16
> Lispの存在意義
新しい言語を手軽に実装できる、に尽きるような。
(で、この言葉がまた誤解されると。)
547デフォルトの名無しさん:2006/02/23(木) 00:44:35
釣り餌じゃなく本当に ruby の存在意義が疑問なんだが
(除く、他の言語を見下して優越感に浸る)

548デフォルトの名無しさん:2006/02/23(木) 00:49:39
Pythonは教育用言語がはじまりだよ
だれが書いても同じようなソースになるのは意図したこと
汚くないソースを書く癖を付けさせるためにインデントを強制している
549デフォルトの名無しさん:2006/02/23(木) 01:11:55
>>548
Pythonって使ったことないんだけどtabの扱いってどうなるの?
550デフォルトの名無しさん:2006/02/23(木) 02:35:36
>>542
>手軽に自分用のスクリプトを組み込むという用途としては
>最適であるのは間違いないと思うがな。

なんで?

パーサ書くのが簡単だから、というのはよく聞くけど、パーサなんて
パーサジェネレータ使えば簡単に生成できるから、メリットにならんと思う。
LL(1)文法なら再帰下降パーサでもそんなに大変じゃないし。
# だからよく聞く「言語処理系を作りたければまずLispから」ってのは
# おかしいと思う。みんな、自分が普段使ってるCとかJavaみたいなのから
# 処理系に興味を持つんだから、そういうのを作ってみたいんじゃなかろうか。

それとも他の理由?
551デフォルトの名無しさん:2006/02/23(木) 03:01:37
>>549
http://www.python.jp/doc/nightly/ref/indentation.html
>まず、タブは (左から右の方向に) 1 つから 8 つのスペースで置き換えられ、
>置き換え後の文字列の終わりの位置までの文字数が 8 の倍数になるように調整されます
>(Unixで使われている規則と同じになるよう意図されています)。

で、下がったインデントが上がるときには以前のどっかのインデントレベルと
合ってなければいけないけれど、1回のインデントでどれだけ下げるかは
決められてなくて、2文字インデントと4文字インデントと8文字インデントが
混在していてもいいってことか。

>>548
>だれが書いても同じようなソースになるのは意図したこと
>汚くないソースを書く癖を付けさせるためにインデントを強制している

中途半端だよなあ。

http://www.artima.com/weblogs/viewpost.jsp?thread=101968
>All code indented with four spaces. This will also get rid of the tabs problem!

やっぱこれだこれ。
552デフォルトの名無しさん:2006/02/23(木) 07:19:59
>>550
他の理由。

飽きれるぐらい繰り返し出てる話だけど、
新しい言語を追加できるんだよ。
553デフォルトの名無しさん:2006/02/23(木) 09:40:18
 
554デフォルトの名無しさん:2006/02/23(木) 21:26:25
>>547
それ程までに、優越感を感じる言語って
一体…?
555デフォルトの名無しさん:2006/02/23(木) 22:27:38
習得が難しい言語でなければ
ユーザーが優越感を感じたりはしないだろうな
556デフォルトの名無しさん:2006/02/23(木) 22:29:43
>>555
よい言語ではある、でも偉いのは作ったmatzで優越感を感じてる厨房は単なる馬鹿
557デフォルトの名無しさん:2006/02/24(金) 00:35:12
>>552
>新しい言語を追加できるんだよ。

新しい言語を「何に」追加するのさ。
542は、AutoCADがAutoLispを組み込んでいるように、アプリケーションにLispを
組み込む話をしてるのかと思ったから550を書いたんだけど、違ってたのかね。

Lispでプログラムをばりばり書きながら、そのなかのある特定の領域について
DSLが欲しいと思ったときにLispだと楽に作れるって話?

だとすれば、それはどんな言語をどんな形態で組み込むことを想定しているの?

(1)Lispでスキャナやパーサを書いて、Lispとはまったく似ていない言語を組み込む。
(2)Lispのリーダを使ってS式を読み込み、自力で評価する。
(3)Lispのマクロで俺言語っぽいものを作る。

どれ?

(2), (3)だと、作れる言語は所詮S式になるな。
558デフォルトの名無しさん:2006/02/24(金) 01:16:46
>>557
もちろんLispを使うということはS式ありきだよ。
552じゃないけどLisperの思考なら(1)も結果をS式に変換して、
Lispにそのまま食わせたり(これが(2)や(3)に繋がったり)すると思うよ。
適当に俺言語っぽいものを作ってみたとして、仮にS式で不満に
なったらフロントエンドに俺言語スキャナを追加したりという、
色んな箇所で入出力できるのがLispの使い勝手の良さに繋がってる
のではないかと。

アプリの組み込みについては、とりあえずS式読めるように
Lispコアを埋め込んでおくと便利という意味じゃないかな。
559デフォルトの名無しさん:2006/02/24(金) 09:22:51
括弧が深くならないLISPってないですか?
560デフォルトの名無しさん:2006/02/24(金) 09:29:13
>>559
( ´Д`) キサマ・・・見た目に惑わされているな
561デフォルトの名無しさん:2006/02/24(金) 10:53:43
>>559
XML
562デフォルトの名無しさん:2006/02/24(金) 20:46:42
括弧開くと括弧閉じるの書き方が違うだけでは
563デフォルトの名無しさん:2006/02/24(金) 23:13:29
結局は括弧ばかりのカッコウ言語w
564デフォルトの名無しさん:2006/02/24(金) 23:46:35
なにその昭和な親父ギャグ
565デフォルトの名無しさん:2006/02/25(土) 01:44:26
ワンライナーならPythonのPLY。
アプリ組むならC++Boostのspritがデフォなんだけどどうなんだろう。

開発業務における調査・解析の仕事って結構あるのよね。
最終的にはgrep一覧と確認結果をレポートするんだけど、当たりを付ける時は
自前のスクリプト使ってる。
抽象的な入力を対話式に行って解析出来るツールが欲しいなぁと思うこの頃。
誰か作ってません?
566デフォルトの名無しさん:2006/02/25(土) 02:25:16
prolog?
567565:2006/02/25(土) 02:35:29
>>566
あー、そういうアプローチもあるねw
自分が考えているのは、もっとバカチョンなやつ。
理想は自然言語をINPUTとして扱えるとか。

チームで使うのに、Prolog覚えるのは敷居を上げてしまうので
普及しない希ガス。
568デフォルトの名無しさん:2006/02/25(土) 02:40:22
Eliza?
569565:2006/02/25(土) 02:53:28
>>568
それやりすぎだしw
つか、相当マニアックだなおい。

文章は命令形式で良いと思うんだ。
list param CFoo::m_bar1 when CFoo::m_bar2 == 0
見たいな感じ。全然自然言語じゃないな。やっぱ形式言語がいいかw
SQLみたいだと良いかも。

すまんな、求めているものが変わってきたw
570デフォルトの名無しさん:2006/02/25(土) 10:19:44
死ねよ
571デフォルトの名無しさん:2006/02/25(土) 11:59:25
こうして、またひとり Ruby ユーザが増えました。
めでたしめでたし。
572デフォルトの名無しさん:2006/02/25(土) 13:34:49
>>569
こんな感じだろ


もしお金が10億あれ場合
 会社を辞める
それ以外の場合
 銀行を襲う
以上
573デフォルトの名無しさん:2006/02/25(土) 15:00:20
>>572
ElizaよりMedicが必要な希ガス
574デフォルトの名無しさん:2006/02/26(日) 19:01:55
上のほうにあった
コンパイラ入門 C#で学ぶ理論と実践 ソフトウェア実践講座
冨沢 高明 (著)

http://www.amazon.co.jp/exec/obidos/ASIN/4797331690/qid=1140946035/sr=1-1/ref=sr_1_10_1/250-3599959-2832238

マクロアセンブラのコードを吐く「ジェネレータ」の説明に60ページほど費やしてました。
このコードをインラインに展開するツールも添付されてます。

現在MS社の上級社員?である著者がアメリカの大学で行っていた講義の中身を再編集した本らしいです。

MS製品の開発環境の使い方から書かれてあるので
手元にC#があれば便利ですが、C++が使える人には多分問題でないでしょう。

Javaのバイトコードを吐く「スモールコンパイラ」本と同程度の内容ですが、
類書でマクロアセンブラのコードジェネレータまで扱う本はあまり無かったのではないでしょうか?

やる気のあるアメリカ人大学生相手の講義が元ネタなので内容はずっと真面目で、
著者は特に情報工学部の実習本・TAのためのガイド本を意識されておられるようです。

ただ、アセンブラ「ジェネレータ」部分ですが、複雑なテクニックは使っていないはず
なので、「俺はCのソースを見るだけでアセンブラのコードが頭に浮かんでくる、
これまでにコンパイラはいくつも書いてきた」、という方やRuby厨は買う必要ないと思います。

インタプリタやスクリプト言語の作成から、コンパイラの作成へとステップアップしたいが
アセンブラの勉強がどーにも…、という方には喜ばれる内容だと思いました。
575デフォルトの名無しさん:2006/02/26(日) 19:04:44
上のほうにあった
コンパイラ入門 C#で学ぶ理論と実践 ソフトウェア実践講座
冨沢 高明 (著)

http://www.amazon.co.jp/exec/obidos/ASIN/4797331690/qid=1140946035/sr=1-1/ref=sr_1_10_1/250-3599959-2832238

マクロアセンブラのコードを吐く「ジェネレータ」の説明に60ページほど費やしてました。
このコードをインラインに展開するツールも添付されてます。

現在MS社の上級社員?である著者がアメリカの大学で行っていた講義の中身を再編集した本らしいです。

MS製品の開発環境の使い方から書かれてあるので
手元にC#があれば便利ですが、C++が使える人には多分問題でないでしょう。

Javaのバイトコードを吐く「スモールコンパイラ」本と同程度の内容ですが、
類書でマクロアセンブラのコードジェネレータまで扱う本はあまり無かったのではないでしょうか?

やる気のあるアメリカ人大学生相手の講義が元ネタなので内容はずっと真面目で、
著者は特に情報工学部の実習本・TAのためのガイド本を意識されておられるようです。

ただ、アセンブラ「ジェネレータ」部分ですが、複雑なテクニックは使っていないはず
なので、「俺はCのソースを見るだけでアセンブラのコードが頭に浮かんでくる、
これまでにコンパイラはいくつも(心の中に)書いてきた」、という方は勿論買う必要ないと思います。

インタプリタやスクリプト言語の作成から、コンパイラの作成へとステップアップしたいが
アセンブラの勉強がどーにも…、という方には喜ばれる内容だと思いました。
576デフォルトの名無しさん:2006/02/26(日) 22:27:19
上のほうにあった
コンパイラ入門 C#で学ぶ理論と実践 ソフトウェア実践講座
冨沢 高明 (著)

http://www.amazon.co.jp/exec/obidos/ASIN/4797331690/qid=1140946035/sr=1-1/ref=sr_1_10_1/250-3599959-2832238

マクロアセンブラのコードを吐く「ジェネレータ」の説明に60ページほど費やしてました。
このコードをインラインに展開するツールも添付されてます。

現在MS社の上級社員?である著者がアメリカの大学で行っていた講義の中身を再編集した本らしいです。

MS製品の開発環境の使い方から書かれてあるので
手元にC#があれば便利ですが、C++が使える人には多分問題でないでしょう。

Javaのバイトコードを吐く「スモールコンパイラ」本と同程度の内容ですが、
類書でマクロアセンブラのコードジェネレータまで扱う本はあまり無かったのではないでしょうか?

やる気のあるアメリカ人大学生相手の講義が元ネタなので内容はずっと真面目で、
著者は特に情報工学部の実習本・TAのためのガイド本を意識されておられるようです。

ただ、アセンブラ「ジェネレータ」部分ですが、複雑なテクニックは使っていないはず
なので、「俺はCのソースを見るだけでアセンブラのコードが頭に浮かんでくる、
これまでにコンパイラはいくつも書いてきた」、という方やLisp厨は買う必要ないと思います。

インタプリタやスクリプト言語の作成から、コンパイラの作成へとステップアップしたいが
アセンブラの勉強がどーにも…、という方には喜ばれる内容だと思いました。
577デフォルトの名無しさん:2006/02/26(日) 22:56:34
上のほうにあった
コンパイラ入門 C#で学ぶ理論と実践 ソフトウェア実践講座
冨沢 高明 (著)

http://www.amazon.co.jp/exec/obidos/ASIN/4797331690/qid=1140946035/sr=1-1/ref=sr_1_10_1/250-3599959-2832238

マクロアセンブラのコードを吐く「ジェネレータ」の説明に60ページほど費やしてました。
このコードをインラインに展開するツールも添付されてます。

現在MS社の上級社員?である著者がアメリカの大学で行っていた講義の中身を再編集した本らしいです。

MS製品の開発環境の使い方から書かれてあるので
手元にC#があれば便利ですが、C++が使える人には多分問題でないでしょう。

Javaのバイトコードを吐く「スモールコンパイラ」本と同程度の内容ですが、
類書でマクロアセンブラのコードジェネレータまで扱う本はあまり無かったのではないでしょうか?

やる気のあるアメリカ人大学生相手の講義が元ネタなので内容はずっと真面目で、
著者は特に情報工学部の実習本・TAのためのガイド本を意識されておられるようです。

ただ、アセンブラ「ジェネレータ」部分ですが、複雑なテクニックは使っていないはず
なので、「俺はCのソースを見るだけでアセンブラのコードが頭に浮かんでくる、
これまでにコンパイラはいくつも書いてきた」、という方やLisp厨は買う必要ないと思います。

インタプリタやスクリプト言語の作成から、コンパイラの作成へとステップアップしたいが
アセンブラの勉強がどーにも…、という方には喜ばれる内容だと思いました。
578デフォルトの名無しさん:2006/02/26(日) 23:57:26
どうした?
どうした?
どうした?
どうした?
579デフォルトの名無しさん:2006/02/27(月) 02:52:17
>>574-577
おまえら長文で微妙に書き換える位なら差分だけあげろや惚け
580デフォルトの名無しさん:2006/02/27(月) 21:37:29
同じファイル内のdiffを取るツールって時々欲しくなるよね。
エディタ組み込みのスクリプトで書くのも面倒だし。
581デフォルトの名無しさん:2006/02/27(月) 22:05:37
>>580
perl : Algorithm::Diff
Python : difflib
582デフォルトの名無しさん:2006/02/27(月) 22:52:22
>>579
コンパイラ屋なら差分くらい自分で抽出せい
583デフォルトの名無しさん:2006/02/27(月) 23:15:05
上の本、買っていいんじゃない?
584デフォルトの名無しさん:2006/02/27(月) 23:15:29
>>582
プログラマは無駄を嫌うので、
出来る・出来ないに関わらずやりたくない。
とりあえず最後の577だけ読んだ。
585デフォルトの名無しさん:2006/02/27(月) 23:33:55
そんなレスも考えたら凄い無駄だな

そして>>585も…
586デフォルトの名無しさん:2006/02/28(火) 03:17:49
「いまどきのプログラム言語の作り方」って本を読んでるんだけど、サンプルコードがJavaで
書かれているにもかかわらず、インターフェースがまったく使われてない。

そういうもの?
587デフォルトの名無しさん:2006/02/28(火) 09:59:13
インタフェースは仕様を記述するものだからな
作者は仕様を考えたりできなかったんだろう
588デフォルトの名無しさん:2006/02/28(火) 11:20:56
名に要ってんだコイツ
589デフォルトの名無しさん:2006/02/28(火) 11:47:26
>>588が低脳をさらけ出したw
590デフォルトの名無しさん:2006/02/28(火) 12:47:34
↑意味不明もここまで来ると病気だろう
591デフォルトの名無しさん:2006/02/28(火) 14:00:13
2つ上をさす時は
矢印使わないほうが紛れが無くて良いと思うよ。
592デフォルトの名無しさん:2006/02/28(火) 14:07:00
そうだな。こういう風にな。

>>591はバカでアホすぎ。死んだ方がいいよ。
593デフォルトの名無しさん:2006/02/28(火) 14:47:08
おまえらいい加減にしろ
594591:2006/02/28(火) 15:39:26
まぁ相当悔しかったんだろうな。
595デフォルトの名無しさん:2006/02/28(火) 16:14:38
お前だろwww悔しかったのww
596デフォルトの名無しさん:2006/02/28(火) 16:28:38
wはいい火病メーターだなホント
597デフォルトの名無しさん:2006/02/28(火) 17:09:39
ほらww悔しかったから反応しちゃってるwww
598デフォルトの名無しさん:2006/02/28(火) 17:39:02
ListやConnectionの仕様をみると、確かにこりゃインタフェースだと思った。
ClonableやAppendableとかはなんかインタフェースとは違う気がする。(使うないう意味じゃなくてね)
599デフォルトの名無しさん:2006/02/28(火) 17:54:15
600デフォルトの名無しさん:2006/02/28(火) 17:58:58
>>599
うざいから火病くんは消えてね
601デフォルトの名無しさん:2006/02/28(火) 18:06:28
という悔しさいっぱいの反応でした
602デフォルトの名無しさん:2006/02/28(火) 18:08:23
自作自演で荒らしてるのか?

603デフォルトの名無しさん:2006/02/28(火) 18:10:59
>>601
うざいから火病くんは消えてね
604デフォルトの名無しさん:2006/02/28(火) 18:12:07
自演じゃないならある意味チキンレースだな
相手に放置されちゃった方の負け

反応が無くて俺のこのレスが最後になったらどうしよう、と
ハラハラしながら送信してるんだろうな、どっちも
605デフォルトの名無しさん:2006/02/28(火) 18:49:08
見当違いな意見だ。
逆だ逆。自分が最後じゃないと悔しいんだよ。こういう手合いは。
606デフォルトの名無しさん:2006/02/28(火) 23:42:26
また、rubier と lisper かw
まったくお前らって(ry
607デフォルトの名無しさん:2006/02/28(火) 23:50:10
>>606
もう Ruby や Lisp じゃ釣れない事を学習しろ。
608デフォルトの名無しさん:2006/02/28(火) 23:52:22
(・∀・)ニヤニヤ
609デフォルトの名無しさん:2006/03/01(水) 04:44:59
以前Flex/Bison使うと生書きするより実行速度が遅くなるって誰か言ってたけどいったいなぜ?
それともデマ?
610デフォルトの名無しさん:2006/03/01(水) 05:08:00
そりゃターゲット言語に特化すれば速くなるでしょ。何でデマ?
611デフォルトの名無しさん:2006/03/01(水) 07:17:46
>>606
> rubier
612デフォルトの名無しさん:2006/03/01(水) 07:20:32
もうだれかVIPとか言う言語つくるしか
613デフォルトの名無しさん:2006/03/01(水) 08:48:37
>>610
よーわからんけどFlex/Bisonに勝てそうな気がしない。
なんかすごい効率的にやってそうじゃん。
614デフォルトの名無しさん:2006/03/01(水) 14:02:45
『プログラミング言語を作る』
http://kmaebashi.com/programmer/devlang/index.html
615デフォルトの名無しさん:2006/03/02(木) 01:01:49
>614
>381
616デフォルトの名無しさん:2006/03/02(木) 02:13:51
がいしゅつでしたか (><)
617デフォルトの名無しさん:2006/03/02(木) 19:41:51
俺言語でなく姫言語というのはないのか?
618デフォルトの名無しさん:2006/03/02(木) 22:32:39
プログラミング言語 姫
619デフォルトの名無しさん:2006/03/03(金) 12:52:34
彼女に捧げるプログラミング言語 Love
そんな彼氏に捧げるプログラミング言語 氏ね
620デフォルトの名無しさん:2006/03/03(金) 19:52:46
love か、いいネーミングだ。


プログラミング言語 ORZ
621デフォルトの名無しさん:2006/03/04(土) 07:42:53
>>620
むしろ OTL?
622デフォルトの名無しさん:2006/03/04(土) 11:04:14
>>619
ウィザードしか使えないくせによく言う(都市伝説ですか?)
623デフォルトの名無しさん:2006/03/05(日) 11:54:43
>>618
>プログラミング言語 姫

これの勉強を始めるのは「姫はじめ」か。
624デフォルトの名無しさん:2006/03/05(日) 13:26:21
入門書「はじめての姫」
625デフォルトの名無しさん:2006/03/05(日) 15:40:34
参照カウンタやマークスイープ型より効率のいい方法のGC考えた。

循環参照でも問題ないし、スループット、レスポンスともにほとんど
アプリの動作を邪魔しないし、効率は参照カウンタ方式の99%は
出る見込み(Cで普通にmalloc,freeする程度の負荷以上はかから
ない)
626デフォルトの名無しさん:2006/03/05(日) 18:26:21
同じことをやってるヤシはいると思うが、まあガンガレ
627デフォルトの名無しさん:2006/03/05(日) 19:12:42
Cのようにポインタをビット操作できてしまう言語ではGCの実装は無理でOK?
628デフォルトの名無しさん:2006/03/05(日) 19:19:56
コンサバなものならいくらでもあるわけだが…
629デフォルトの名無しさん:2006/03/05(日) 19:20:29
↑C「で」実装するではなく、Cのような言語にGCを搭載する、の意
630デフォルトの名無しさん:2006/03/05(日) 19:42:43
C/C++ 用の GC があるの知らんの?

現状だってプロセスのメモリ空間の中はスタックとか読み込んだライブラリを置く所とか
色々細分化されている訳で、そういう所は好き勝手弄っちゃダメでしょ。同じように GC
ヒープ領域を用意してあげれば良いんじゃないの。
631デフォルトの名無しさん:2006/03/05(日) 19:49:14
>C/C++ 用の GC があるの知らんの?
通常のmallocやnewに対応した完全に汎用的なGCがあるの?
原理的に絶対無理だと思うんだが。

やっぱGC専用のポインタが必要ってことだよね。
632デフォルトの名無しさん:2006/03/05(日) 20:01:52
>>628 >>630
ポインタのアライメントを利用して下位1ビットに情報を…
とか、その手の事をやられるとお手上げ。
633デフォルトの名無しさん:2006/03/05(日) 20:03:38
はいはい、C++/CLIでもやってなさいボウヤ
634デフォルトの名無しさん:2006/03/05(日) 20:05:07
>>632
>ポインタのアライメントを利用して下位1ビットに情報を…

もともとこういうことをするのは、C言語でも未定義なのでする奴が悪い、でオワリ
635デフォルトの名無しさん:2006/03/05(日) 20:31:54
JavaでできていることがCで出来ないはずはないだろ。
アセンブラに落とす時にJavaのVMみたいに複雑なメモリ管理を織り込めばいいんだから。

お前ら、言語仕様とABIを混同してないか?
636デフォルトの名無しさん:2006/03/05(日) 20:34:41
この話は仕舞いだな。
637デフォルトの名無しさん:2006/03/05(日) 20:45:38
>>635
>JavaでできていることがCで出来ないはずはない
JavaがGCできるのはCよりも操作の制約が強いからだ

char *a = malloc(100);
int b = (int)a; // これの善悪は別問題として
a = 0;

ってやってaからの参照がなくなった時点でGCが掃除しちゃったら
まずいだろ。プログラムとしてはbから復元して利用することもあり
えるから。

よってこういうことが出来る素のCには、「触らないでねポインタ」を
新たに導入しないとGCは装備できないんじゃねーか?
638デフォルトの名無しさん:2006/03/05(日) 20:53:07
だからコンサバ。
639デフォルトの名無しさん:2006/03/05(日) 20:57:37
わかんないおれのためにもっとくわしく。コンサ何とか型のGCって名前は
聞いたことあるけど、そんなにすごいもんなのか?
640632:2006/03/05(日) 21:00:00
>>634
その突っ込みは>>627に対して?
何で俺?
641デフォルトの名無しさん:2006/03/05(日) 21:03:26
642デフォルトの名無しさん:2006/03/05(日) 21:18:35
>>641
リンク先見たけど(情報どうも)結局>>637をやられると吹き飛ぶじゃん。
回収し損ねは許容するとして、ポインタを隠蔽して分解して
持っておくようなことはやったら駄目ってことだね。

よって「触らないでねポインタ」を導入しないことには回収しそこねや
ハングアップを防止することは出来ないというのがオレの結論。
643デフォルトの名無しさん:2006/03/05(日) 21:18:53
まぁ、ばかはどの刷れにもいるけどなw
644デフォルトの名無しさん:2006/03/05(日) 21:21:01
>>637でGCがおかしくなるって言ってる奴は機械語レベルの表現を
全然理解できないんだろうなあ。
645デフォルトの名無しさん:2006/03/05(日) 21:22:43
うむ。
646デフォルトの名無しさん:2006/03/05(日) 21:26:39
まあ、マジックリストに対応できるようなGCは
それなりに大変だろうね
647デフォルトの名無しさん:2006/03/05(日) 21:29:25
たしかCからJavaを呼べるはずだから
JavaはCのManagedコードライブラリと見ることも出来る
648デフォルトの名無しさん:2006/03/05(日) 21:29:34
>>644-646
というかGC使いたかったら泥臭いことはあきらめろってしかいえない。
649デフォルトの名無しさん:2006/03/05(日) 21:30:56
はあ?
650デフォルトの名無しさん:2006/03/05(日) 21:30:59
>>642
スマソ。>>641 の下のリンク先は読まない方が良いや。
適当にググって貼っつけただけだから。何じゃこりゃ。
651デフォルトの名無しさん:2006/03/05(日) 21:41:52
>>644
もうちょっと詳しく。当方アセンブラプログラマだ。

int b = (int)a;
a = 0;

とやったあとでb をビットレベルで分解したらどうにもならんと思うが、
コンサバ型だとそうならない魔法があるのか?

bを再構成してポインタに戻してアクセスしたら開放されてるって
いう状況は起こりうると思うが。
652デフォルトの名無しさん:2006/03/05(日) 21:44:21
だんだん条件が増えていく件。
653デフォルトの名無しさん:2006/03/05(日) 21:52:27
そりゃさすがにどうにもならない。

とはいえ、ビットレベルで分解→後で計算によって得た値が
セマンティクスの面で有効なポインタかどうかは疑問ではある。

>>652
つか、「原理的に無理」で思考停止してるから。
654デフォルトの名無しさん:2006/03/05(日) 21:59:47
>>652
議論に勝つために、徐々に条件を変えていくんだよなー。
2chはこういう奴ばかり。
655デフォルトの名無しさん:2006/03/05(日) 22:09:08
議論に勝った所で何があるわけじゃないんだけどね

俺の知らないところで何かあるのかな?w
656デフォルトの名無しさん:2006/03/05(日) 22:13:50
>>654
議論に勝つためというより、物知らずというか
ものの評価基準が幼稚なだけだと思われる。
657デフォルトの名無しさん:2006/03/05(日) 22:21:31
えーと、どこで笑えばいいのかな?
658デフォルトの名無しさん:2006/03/05(日) 22:24:05
>>657の頭の弱さ。
659デフォルトの名無しさん:2006/03/05(日) 22:25:21
ふーん。
660デフォルトの名無しさん:2006/03/05(日) 22:25:56
>>656
コンサバティブ GC を初めて知ったレベルなら仕方が無いんじゃないの。
まだ当たりが付けられないだけだと思う。
661デフォルトの名無しさん:2006/03/05(日) 22:26:56
あのー
>>642の時点で分解って書いてるんですけど
662デフォルトの名無しさん:2006/03/05(日) 22:30:00
>>652
651じゃないが、わざわざポインタを整数として扱おうとするなら、
その後なんらかの演算を行うんじゃないかってのは
容易に想像つきそうなものだが。

ま、演算は演算させておいて、ポインタはポインタのまま
別に持っておくとか手はありそうだけど。
663デフォルトの名無しさん:2006/03/05(日) 22:30:14
元々の命題は >>637 だろ。
664デフォルトの名無しさん:2006/03/05(日) 22:33:40
重箱の済みつつき過ぎ、話も出来やしないよ。
>>662はまともな人だね
665デフォルトの名無しさん:2006/03/05(日) 22:35:08
いや、>>631なんじゃないの。
631を無視して637だけなら対応したGCを書けばいいだけの話。
666デフォルトの名無しさん:2006/03/05(日) 22:35:43
>>662
演算をするかどうかじゃなくて、再代入するかどうかが問題でしょ。
コード辺だけでそこまでケアしろと?
667デフォルトの名無しさん:2006/03/05(日) 22:42:04
再代入というか、計算で合成した任意の値をアドレスとして
アクセスできるかどうかだね。
GCはプログラム中のデータからトレースできるものを残して
それ以外を回収するってことだから、
可能な演算の集合を定義してルートとなる即値だけでなく
その集合に含まれる演算で計算可能な値もアドレスとして
コンサバティブに扱うことをトレースとすればいいだけの話。
だから、むしろ「原理的には」GCは設計可能。「原理的には」だけど。
668デフォルトの名無しさん:2006/03/05(日) 22:48:20
ちょっと修正
ルートとなる→アドレスとなる
「原理的には」GCは設計可能→「原理的には」完全に汎用なGCは設計可能

669デフォルトの名無しさん:2006/03/05(日) 23:35:17
そのGC、何一つヒープを開放してくれなさそう
670デフォルトの名無しさん:2006/03/05(日) 23:42:56
>>666
想像しろよ。書いてるもんが100%だと決めなきゃ話できないようじゃ
CPUと一緒じゃないか。人間だろ? >>662は十分想像可能な範囲。

現に出来てる者が居る以上、それが出来なかった奴は気がまわら
ないということ。

なんで整数に持ってきたいのか用途は色々あるだろ。まあ想像でき
ないかもしれないがな。
671デフォルトの名無しさん:2006/03/05(日) 23:47:32
まぁなんらかのお約束は必要だよ
672デフォルトの名無しさん:2006/03/05(日) 23:48:31
>>669
コンサバだからねw
演算の集合は全域で同一である必要はないわけで、
適当にヒントを与えて限定してもいいし、GCがコードを解析してもいい。
普通はそこまでやってらんないから演算は値をそのまま使う
という一択だと考えるだけで。
673デフォルトの名無しさん:2006/03/06(月) 00:34:34
>>670
幾らでも拡大解釈しようはあると思うけど、GC の仕組みを知っていれば
そちらには振れないんじゃないかというのが俺の解釈だっただけだよ。
ま、GC の仕組みを知っていれば、最初からこんな質問も出なかった
だろうけど。
674デフォルトの名無しさん:2006/03/06(月) 00:36:57
なんか理論の飛躍が Ruby vs Lisp の時と似ているなぁ
675デフォルトの名無しさん:2006/03/06(月) 01:06:36
同じ面子でグルグル回してるだけだから
676デフォルトの名無しさん:2006/03/06(月) 07:47:45
>〜俺の解釈だっただけだよ
後から言うなよ
677デフォルトの名無しさん:2006/03/06(月) 08:30:12
後から想像しろとか言ってきたのアンタじゃん。俺にどうしろと??
もうこの話は終わったんだから絡んで来るなよ。
678デフォルトの名無しさん:2006/03/06(月) 10:17:54
>>677
> 俺にどうしろと??
恐らく謝罪を要求してるのでしょう :-)
あなたをやり込めたい一心であらゆる論理を適時付け替えて頑張っているのですから、
彼のプライドを満たすためにも謝ってあげてはどうかと思います。
679デフォルトの名無しさん:2006/03/06(月) 10:40:02
680デフォルトの名無しさん:2006/03/06(月) 10:47:47
>>679
笑えない現実に対する対処の話ですから、笑う箇所などありませんよ。
そんなことも読み取れないのですね :-)
681デフォルトの名無しさん:2006/03/06(月) 10:54:51
>>680
ふーん?
682デフォルトの名無しさん:2006/03/06(月) 13:07:06
>>680
よし、じゃ俺のプライドを満たすためにおまいが謝れ。
683デフォルトの名無しさん:2006/03/06(月) 13:28:21
>>682
ごめんください。
684デフォルトの名無しさん:2006/03/06(月) 13:52:59
エェェェェェェ(;´Д`)ェェェェェェェエ
685デフォルトの名無しさん:2006/03/06(月) 14:23:03
>>684
ごめんくさい。
686デフォルトの名無しさん:2006/03/06(月) 15:32:11
  /\___/\
/ /    ヽ ::: \
| (●), 、(●)、 |    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|  ,,ノ(、_, )ヽ、,,   |  < まーた始まって、終わった。
|   ,;‐=‐ヽ   .:::::|    \___________
\  `ニニ´  .:::/
/`ー‐--‐‐―´´\
687デフォルトの名無しさん:2006/03/07(火) 00:21:33
まけず嫌いで粘着なキチガイが暴れているスレはここですか
688デフォルトの名無しさん:2006/03/07(火) 00:31:35
ぶるんぶるん体操

ぶるんぶるんと僕は言う
ぷるんぷるんとあなたは笑う
そんな2人は、フォーエバー
世界の端から今日は
そんなあなたはお毎度さん
今日もぶるんぶるん体操始まるよ

ぶるんぶるん、ぷるんぷるん
ぷるんぶるん ぶぷぷぷぷぷ

*四谷街道繰り返し
689デフォルトの名無しさん:2006/03/07(火) 23:02:33
このスレでオリジナル言語作って公開してる人って何人ぐらいいるの?
690デフォルトの名無しさん:2006/03/07(火) 23:22:00
俺的には、スクリプトはあくまで手段。目的は別にある。
だからスクリプトだけを公開する事は、俺にはありえん。
691デフォルトの名無しさん:2006/03/08(水) 09:09:50
現在の人数=0

>>690
ところで、目的って何ですか?
692デフォルトの名無しさん:2006/03/08(水) 09:15:09
現在の人数=1 ←どういうカウントだこれは?

>>690
ぼくちんも知りたい。その手の業界ってけっこうあるのかな?
693デフォルトの名無しさん:2006/03/08(水) 10:22:21
694デフォルトの名無しさん:2006/03/08(水) 10:29:08
>>693
あーそういう意味だったのか。
じゃリセット。

現在の人数=0
695デフォルトの名無しさん:2006/03/08(水) 12:58:30
現在の人数=1
でもどこだかは教えない(w
696デフォルトの名無しさん:2006/03/08(水) 13:19:30
現在の人数=2
……まあ、趣味の領域ですが。
697デフォルトの名無しさん:2006/03/08(水) 19:53:28
>>691-692
単に自分の作りたいソフトを作るために、
下ごしらえでスクリプトを作ってるだけだよ。
698デフォルトの名無しさん:2006/03/08(水) 20:06:51
現在の人数=3
……自分専用ツールとしてはじめたのがきっかけです。
私も、どこかは内緒w
699デフォルトの名無しさん:2006/03/08(水) 20:17:47
>>697
マクロみたいなの搭載してるって意味だよね。
それとも何か目的のソフトを作るための言語を作ってるって意味?
700デフォルトの名無しさん:2006/03/08(水) 21:05:27
>>699
後者。
701デフォルトの名無しさん:2006/03/08(水) 21:19:45
>>700
マジで?言語作ってる間に既存の言語でソフト作っちゃったほうが早いんじゃないの?
702デフォルトの名無しさん:2006/03/08(水) 22:16:53
>>701
プログラマの癖に手段と目的を取り違えたことがないの?
703デフォルトの名無しさん:2006/03/08(水) 22:33:03
>>702
くせにとは何だ!くせにとは!
お前こそ●●のくせに、いい気になるなよ。
704デフォルトの名無しさん:2006/03/08(水) 22:54:10
>>702
●2つも使ってるのか?なんて贅沢な。
705デフォルトの名無しさん:2006/03/08(水) 23:05:44
>>703
なんだとこの●●●!
お前だって●●●の●●●だろうに!●●●●!
706デフォルトの名無しさん:2006/03/08(水) 23:22:18
>>705
うるさい、この●●のろ!
707デフォルトの名無しさん:2006/03/08(水) 23:41:49
の●●の

↑鼻と目に見えた orz 以下、何事も無かったかのように再開。・゚・(ノД`)・゚・。↓
708デフォルトの名無しさん:2006/03/08(水) 23:53:37
>>702
こいつは、真性の●●●●。
つまり、●●w
あるいみ、●●●●●● ruby ● lisp ●●w
709デフォルトの名無しさん:2006/03/09(木) 00:08:50
>>701
理想が高すぎる事と、自分自身の能力不足が原因なんだよ。
オブジェクトが多くなりすぎると、内容を追い切れなくなる。
つか、状態変位やイベントトリブンは、漏れには理解しづらい‥‥orz
で、主に、個々の処理を独立させて、別個にまとめて見られる
ようにするためにスクリプトを使ってる。
710デフォルトの名無しさん:2006/03/09(木) 00:40:15
>>709
一言で言い表すと、
「グローバルオブジェクトなんて嫌いだぁ・・・
 全部ローカライズ化してやるぅ・・・・」
ってな感じでつ。orz
711デフォルトの名無しさん:2006/03/09(木) 01:50:58
ローカライズ化?

頭痛が痛いだな。
712デフォルトの名無しさん:2006/03/09(木) 02:16:15
英語は嫌いだぁ・・・w
713デフォルトの名無しさん:2006/03/09(木) 11:44:40
>>709
>つか、状態変位やイベントトリブンは、漏れには理解しづらい‥‥orz
>で、主に、個々の処理を独立させて、別個にまとめて見られる
>ようにするためにスクリプトを使ってる。

ちなみに、エミュレータのレジューム機能が元ネタ。
つ〜か、スレッドの場合は同期の管理が面倒なんだよな。
714デフォルトの名無しさん:2006/03/09(木) 12:44:30
OSとエミュレータと、エミュレートされるソフトの動作を、
全部一つの実装で実現させたい、ってな所。
715デフォルトの名無しさん:2006/03/09(木) 14:07:36
ネタが特許級に見えるのは気のせいか?
出願前に公開すると無効なはずだが・・・
716デフォルトの名無しさん:2006/03/09(木) 14:54:39
レジューム機能付きのエミュレータが出る前なら、可能だったかもね。
717デフォルトの名無しさん:2006/03/09(木) 20:09:47
>>714-715
似たようなネタのスクリプトなら実在するから探して味噌。

扱いやすいかどうかは別だが。w
718デフォルトの名無しさん:2006/03/09(木) 20:50:04
構文規則で、よくこんな表記つかってるけど
A → B,C
矢印逆じゃないの?

なんか、すげ〜違和感あり。
719デフォルトの名無しさん:2006/03/09(木) 21:07:28
なにゆえ
720デフォルトの名無しさん:2006/03/09(木) 22:33:32
「生成」規則だからね。もともとのオートマトン理論では
規則によりどういった文章が生成されるかを考えていたから。
構文解析は、逆に与えられた文章がどういう生成規則を
たどって作られたかを求める問題だ。その過程で生成規則を
逆向きに使って還元を行う。
だから構文解析だけを考えていたら、矢印が逆だと思うかも
しれんね。
721デフォルトの名無しさん:2006/03/09(木) 22:36:21
>>718
別に逆でもいいけど、たぶんおまいは逆にすると今度はそっちに違和感を感じるんだろ。
A → BC | DE
ってのは
A is defined as BC or DE
A expands to BC or DE
A generates BC or DE
A is rewritten as BC or DE
逆方向には
BC or DE can constitute A
BC or DE can be reduced to be A
などなど、色々な読み方ができる。
722デフォルトの名無しさん:2006/03/09(木) 22:39:38
A ← BC | DE

A is defined as BC or DE
と読んじゃいけないのかよ。
723デフォルトの名無しさん:2006/03/09(木) 22:42:22
>>722
いいよ別に。咎めはしないけど真似してくれる人は少なそうだね。
724デフォルトの名無しさん:2006/03/09(木) 22:43:50
>>722
それを流行らせてくれ!!
725デフォルトの名無しさん:2006/03/09(木) 22:50:30
っていうか矢印の向きなんてどーでもいいし。
矢印以外の記号だって使われるわけだし、勝手にしろとしかいいようがない。
726デフォルトの名無しさん:2006/03/09(木) 23:04:18
そんなに揉めるくらいならこっちを指せばいい

A m9(^Д^) BC | DE
727デフォルトの名無しさん:2006/03/09(木) 23:11:11
>>726
ワロタw

でも、確かに代入文とかも A=B+C は A->B+C とは書かんな
どうみても A<-B+C だな。
728デフォルトの名無しさん:2006/03/09(木) 23:12:03
A ブギャー BC or DE と読むのか。勢いがあって好いな。
729デフォルトの名無しさん:2006/03/10(金) 00:23:11
A pgr BC or DE

なんかよく分からんが格好良いぞ
730デフォルトの名無しさん:2006/03/10(金) 12:21:57
yaccやbisonでは、演算子の順位を指定することができますが、これもLALR(1)で必要なのでしょうか。
コンパイラの本を読むと、LALR(1)の説明では生成規則しか使わず、演算子の順位を含めたaction表やgoto表の作り方は特に書いてないように思います。
もしかして、yaccやbisonではLALR(1)と演算子順位解析法との併用なのかなと思ったりするんですけど、どうなんでしょうか?

なお、やりたいことは自前で簡単なパーサジェネレータを作ることです。LALR(1)のアルゴリズムを勉強しているんですが、演算子の順位がまるででてこないので、どうやるんだろうと疑問に思ってます。
731デフォルトの名無しさん:2006/03/10(金) 12:30:17
>>730
コンフリクト時にシフト/還元のどれを選択するかでうまいことやっている。
ドラゴンブックに説明があったかもしれない。
732デフォルトの名無しさん:2006/03/10(金) 20:02:39
>>730
> もしかして、yaccやbisonではLALR(1)と演算子順位解析法との併用なのかなと思ったりするんですけど、どうなんでしょうか?

そうです。
expr → expr + expr | expr * expr
っていう生成規則はLALR文法ではないけど使えた方が便利でしょ。
733デフォルトの名無しさん:2006/03/10(金) 23:20:04
734デフォルトの名無しさん:2006/03/10(金) 23:52:42
bisonってGLRにならなかったっけ?
735デフォルトの名無しさん:2006/03/11(土) 09:18:24
bisonの入力になりえる文法はGLRだろうけど(自信なし)、あいまいさを解決するアルゴリズムが違うからパースした結果が変わっちゃうんじゃないの?
GLRはshift/reduceコンフリクトでreduceを優先するから、あいまいなぶらさがりelseが遠い方のifにくっついちゃう。
736デフォルトの名無しさん:2006/03/11(土) 10:42:50
>GLRはshift/reduceコンフリクトでreduceを優先
ちがうよー。
コンフリクトでshiftとreduceの両方追いかけるのがGLR。

>>734
GLRもできるけど>>732をGLRで扱うと
+の優先度が高い場合の構文木と*の優先度が高い場合の構文木の
両方を解析結果として得る話になるから、
演算子の順位指定の話とはからまないと思われ。
737730:2006/03/11(土) 22:13:54
>>731,732
どうもありがとうございます。
けっこう複雑なことやってるんですね。
作るの自信なくなってきたな。。。
738デフォルトの名無しさん:2006/03/12(日) 01:08:18
がんがってくれい
なせばなるよ
739デフォルトの名無しさん:2006/03/12(日) 23:28:26
既に慣れてしまってる方ばかりだろうが、
還元ということばに違和感を感じる自分。

どうせなら、還元よりも換言だとおもう。
740デフォルトの名無しさん:2006/03/13(月) 02:55:26
それだと向きを含意しないから、reduceの語感が出ないなあ。
741デフォルトの名無しさん:2006/03/13(月) 03:37:22
これはなかなか面白い (厭味じゃなくて)
>>739 は明治時代辺りに生れてればよかったのに
742デフォルトの名無しさん:2006/03/13(月) 03:58:25
コンサバって何?
743デフォルトの名無しさん:2006/03/13(月) 04:00:45
松平健が歌ってるヤツだろ。
744 :2006/03/13(月) 08:44:18
しってる言語はJavaなんでJavaのバイトコードに変換する本当に簡単なコンパイラ?つくりたいんですが、古い本でも大丈夫ですか?
Programming for the Java(TM) Virtual Machineって本見つけたんですが1999年出版なんです。バーチャルマシンの仕様とかは変わってないのですか?
745デフォルトの名無しさん:2006/03/13(月) 09:32:08
検索すれ。

The JavaTM Virtual Machine Specification, Second Edition
http://java.sun.com/docs/books/vmspec/

同 Maintenance Page
http://java.sun.com/docs/books/vmspec/2nd-edition/jvms-maintenance.html



746 :2006/03/13(月) 22:17:19
>>745
どうもありがとう。
747デフォルトの名無しさん:2006/03/17(金) 23:50:51
>>726
1から見てみたが、お前のレスが一番ワロタw
748730:2006/03/18(土) 08:20:23
C言語とかで、'*' や '&' がポインタ演算だったり四則演算だったりビット演算だったりするけど、
このように1つの記号が複数の意味を持つ場合、字句解析で別のトークンを返さないといけないのでしょうか。
それとも構文解析時に判断できるものなのでしょうか。

例えば仮引数に *p とあれば、これはポインタを意味するための * であり、四則演算ではないとすぐにわかります。
しかし、*p1 * *p2 などとあった場合、ひとつの式の中でポインタを表す * と四則演算を表す * とが混じってるんですけど、こういったものはどうやって別物であると判断しているのか不思議です。
749デフォルトの名無しさん:2006/03/18(土) 11:05:59
>>748
字句解析では区別せず、構文解析で判定する。
教科書で、-1 - -2 のような式を扱う例を探してみて。
750デフォルトの名無しさん:2006/03/18(土) 13:14:58
前置子やね
751デフォルトの名無しさん:2006/03/18(土) 13:27:13
そういうやり方をするから、vector<vector<int>>がコンパイルできなかったりするw
752http://www.vector.co.jp/soft/win95/util/se072729.html:2006/03/18(土) 19:03:18
TextSS のWindowsXP(Professional)64bit化おながいします

もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
753デフォルトの名無しさん:2006/03/18(土) 19:50:35
なぜ、関係演算子は結合を持たない例が多いんだろうか?
単純に 3<=x<99 とか書けてもいいとは思うんだが、
754デフォルトの名無しさん:2006/03/18(土) 19:58:12
C がそうやってるから右に習えだと思う
755デフォルトの名無しさん:2006/03/18(土) 20:00:44
10 < x >= y < 20 <= z > 0
とかあったら何なんだか困るじゃん
Lispだと (< 10 x 20) とか書けるけどね
756デフォルトの名無しさん:2006/03/18(土) 20:02:06
演算子で思い出したけど
おれは perl の =~ を代入演算子だとばっかり思ってたから
$a =~ s///; はいいけど
$b =~ m//; の意味がわかんなくなって混乱してた…
757デフォルトの名無しさん:2006/03/18(土) 21:14:54
>>754
とりあえず、C で 3<=x<99 はコンパイル通るぞ。
758デフォルトの名無しさん:2006/03/18(土) 21:18:53
コンパイル通るから何?
759デフォルトの名無しさん:2006/03/18(土) 23:30:10
>>752
いっぺん死ねって書いてもよまねぇだろうな(w
760デフォルトの名無しさん:2006/03/18(土) 23:51:40
>>753
確かに
Mathematicaは書ける、って言うか書けないと数学ソフトだし不便すぎる。
761デフォルトの名無しさん:2006/03/19(日) 02:21:26
スタックマシンでスタックが溢れそうな時、スタックを reallocするのと
別に領域を確保するのとではどっちが一般的ですか?

前者はスタックが一つの領域でないといけないのと reallocのコストが欠点で、
後者はフレームの削除などを絶対アドレスで指定しないといけないので
継続を作る時にちょっとめんどくさいのが欠点だと思います。
762デフォルトの名無しさん:2006/03/19(日) 20:27:31
>>760
へぇ、書ける言語あるんだね。しらなんだわ
763デフォルトの名無しさん:2006/03/19(日) 21:19:10
おそらく専用でない一般高級言語だと、Rubyあたりが実装しそうな木ガス
764デフォルトの名無しさん:2006/03/19(日) 21:19:29
Pythonがそうだった記憶がかすかに
765デフォルトの名無しさん:2006/03/19(日) 21:21:33
>>761
おれなんかは自家製超高速malocを作ってダブルリンクリストでスタック作ってます。
スタックに無茶な要求するにはこれが一番かなとか思ってたりします。

>>762
おれは、例外を作ってもこの表現ができるべきだと思うのですが、みんなどう思っているのだろうか?
絶対見通しいいとおもうんだけどな・・・
766デフォルトの名無しさん:2006/03/19(日) 21:27:41
ダブルリンクリストだと継続が困らないか? (スタックがツリーになるから)
継続使わないならシングルリンクリストでも良さそうだが。
767デフォルトの名無しさん:2006/03/19(日) 21:28:42
>>766
ダブルでないと削除がややっこしいです。
768デフォルトの名無しさん:2006/03/19(日) 22:30:25
単なる好奇心だけど、途中のスタックフレームを削除したいってどういう場合ですか?
769761:2006/03/19(日) 23:11:42
セグメント、オフセットを使えば相対アドレスでもスタックを分割できることに
気づきました。

>>765
セグメントテーブルをリストにするってことでしょうか?
最初からセグメントテーブルのサイズを決め打ちして配列にしても良い気がします。
リストだとアクセスにコストがかかりますし。
確かに途中を削除するっていうのならリストの方がいいですが、どういう状況なんでしょうか。
770デフォルトの名無しさん:2006/03/20(月) 13:38:41
>>765
ヒープへの参照をスタックに積んでスタックそのものは小容量ですまそうって方向じゃないんだ?
771デフォルトの名無しさん:2006/03/20(月) 19:01:49
無知な俺が、話ぶった切って恐縮ですが
リフレクションってどんな構造で作るの?
javaぐらいみっちり仕込まないと不可能?
772デフォルトの名無しさん:2006/03/20(月) 19:54:37
>>771
例だけど、
scheme(L)でscheme(L')インタプリタを書いて、L'からLを操作したり、L'自身の環境情報などを
取得できるように作る。このときL'からLをいじったことによってL'の動作に影響が及ぶことを
causal connectionという。

言語、用途により様々だけど、メタレベルに何を求めるのかで、実装や仕様が変わると思う。
773デフォルトの名無しさん:2006/03/21(火) 20:59:46
>>771
どんな構造っつーか、単にオブジェクトやクラスに関する情報を、実行時に取り出せる(アクセスできる)仕組みを用意するだけ。
ただそれだけだから、あんまり構造がどうとか悩まなくていいよ。

リフレクションの仕組みや構造について考えるなら、まずは言語の仕組みについて知らないと。
それがわかれば、リフレクションの仕組みはおのずとわかる。
774デフォルトの名無しさん:2006/03/23(木) 14:28:00
775デフォルトの名無しさん:2006/03/26(日) 10:03:01
助けてください。
↓こんな文章があって要はfortran90でない場合一番下のfcに何か入力しろという意味だと思うのですが、
なんと打ちこんだらよいのですか?fortran77なので打ち込まないといけないのはわかっているのですが、
全くこのあたりの知識がないのでわかりません。
--------------------------------------------------------------------
#if your machine's fortran compiler command is not "f90", need to set #
# the following macro to adjust. #
---------------------------------------------------------------------

FC=
776デフォルトの名無しさん:2006/03/26(日) 10:23:11
>>775

Format C:
777デフォルトの名無しさん:2006/03/26(日) 10:53:15
FORTRAN より C
778775:2006/03/26(日) 13:29:06
ありがとうございます。
ですが入力してもだめでした。
そこで方向転換してfortran90のコンパイラをインストしたいのですが、
どこに転がっているのですか?
windowsです。
779デフォルトの名無しさん:2006/03/26(日) 17:44:13
書いてあるとおりのことすればいいじゃねぇかよ。
それともネタですか?>>775
780デフォルトの名無しさん:2006/03/26(日) 17:47:03
FC=f77

じゃあかんの?
781デフォルトの名無しさん:2006/03/27(月) 07:31:07
ポインタ操作のできるスクリプト言語作りたい
そゆーの既にある?
782デフォルトの名無しさん:2006/03/27(月) 07:40:26
CINT?
783デフォルトの名無しさん:2006/03/27(月) 08:23:08
すごい久々にCINTスレのぞいてみたら、まだ落ちてなかったw

C/C++インタプリタ CINT
http://pc8.2ch.net/test/read.cgi/tech/1114397934/

CINTの需要自体はちと薄そうな印象。
もしもありとあらゆるCのライブラリが元のC言語の文法と比べて違和感なく全て呼び出せたらはやりそうなもんだけどな。
784デフォルトの名無しさん:2006/03/27(月) 12:53:33
>>775
訳してみた。

-------------------------------------
#手持ちのマシンにおいて、Fortranコンパイラのコマンドが "f90" でない場合は、
#次のマクロを設定する必要があります。
-------------------------------------
FC=


つまりだな、Fortranコンパイラのコマンドが例えばf77とかだったら、
FC=f77
と設定すればよい。

これ以上はスレ違いだから質問はやめたほうがよい。
785デフォルトの名無しさん:2006/03/28(火) 03:57:44
とある対話型計算ソフトの入力行を横取りして先に字句構文解析したいんだけど
perlだとParse::RecDescentがメジャーなの?

代入と()のネストくらいを1行ずつ処理できればいいので手で書いてもいいけど
昔yacc+bisonで遊んでたときみたいにまたBNF触りたくなった
割鶏焉用牛刀だが
786デフォルトの名無しさん:2006/03/28(火) 12:29:49
>>785
yacc+bisonの経験あるなら、kmyaccはどう?
yaccの書き方そのままで、perlやjavaやjavascriptが使える。
787デフォルトの名無しさん:2006/03/28(火) 14:31:40
ひとつ聞きたいんだけど、
2型言語の任意の位置に [] の組を挿入できるようにした文法って1型言語?

例えば 1+2 を変化させた 1[+2] とか [1+]2 とかを許容する文法なんだけど……
788デフォルトの名無しさん:2006/03/29(水) 02:59:38
>>785
入力が小さい場合は Parse::RecDescent が手軽だね。外部ツールにくらべると
手軽さが違う。
789デフォルトの名無しさん:2006/03/29(水) 07:51:32
>>786
>>788
情報ありがと。しかし構文解析久しぶりで大分忘れてるわ。
790デフォルトの名無しさん:2006/03/31(金) 18:10:09
よく、他言語のライブラリとか呼べる言語があるけど、
あれって事前に呼ぶ関数名を全て列挙して組み込んでるのですか?
791デフォルトの名無しさん:2006/03/31(金) 18:19:49
普通マーシャリングしてるだけじゃないか
792デフォルトの名無しさん:2006/03/31(金) 21:28:55
それは結局の所、「事前に呼ぶ関数名を全て列挙して組み込んでる」のでしょうか?
793デフォルトの名無しさん:2006/03/31(金) 21:31:42
事前にわかんない場合はどうしてるんだとか思わないのか
794デフォルトの名無しさん:2006/03/31(金) 21:32:21
違う
795デフォルトの名無しさん:2006/03/31(金) 21:34:54
そういうのもあるし、そうじゃないのもある。
796デフォルトの名無しさん:2006/03/31(金) 22:29:35
LALR(1)の文法をLL(k)に変えることって可能ですか?
797デフォルトの名無しさん:2006/03/31(金) 22:51:20
>>793
事前にわからない場合でも呼べる方法ってありますか?
798デフォルトの名無しさん:2006/03/31(金) 23:00:22
>>797
http://cvs.sourceforge.net/viewcvs.py/sbcl/sbcl/src/runtime/x86-assem.S?rev=1.32&view=auto

call_into_c の部分とか。C なら引数とか戻りアドレスとか用意して call すれば良い。
あとは dlsym() とかを調べる。
799デフォルトの名無しさん:2006/03/31(金) 23:42:34
むむ、アセンブラですか!



















orz
800デフォルトの名無しさん:2006/03/32(土) 00:22:44
いや、単なる例として出しただけだから...
801デフォルトの名無しさん:2006/03/32(土) 02:40:22
引数の積み上げ方と呼出し後の処置さえ合ってればいんだから
簡単だろ
802デフォルトの名無しさん:2006/03/32(土) 06:02:31
>>796
規則を増やして左再帰を消去して左括り出しするとか地道な方法しかなさそう(自動化するツールもあるのかな?)。
それで衝突が起こるならその文法がそもそもLLじゃない可能性もあるので、文法自体を修正する。

ちなみにLL文法ってLALR文法のサブセットだっけ?
LL(∞)⊂LR(1)は確かだったと思うけど、LR(0)は微妙だったような気が。
誰か教えて。
803デフォルトの名無しさん:2006/03/32(土) 14:03:32
>>790,799
その言語のソースを読んでみようとは思わないのかな。
xyzzyのdefine-dll-entryとかRubyのdlモジュールはC++/Cだった。
804デフォルトの名無しさん:2006/04/03(月) 21:46:49
コンパイラを書くのにオススメな言語を教えてください。
最近は、海外では関数型言語で書くのがはやっているみたいですが・・・
OCamlとか。

自分の一番慣れている言語!というのはなしの方向で。
805デフォルトの名無しさん:2006/04/03(月) 23:54:21
>>804
yaccがあるからC! とか、JavaCCがあるからJava! ってのもなしの方向で?
806デフォルトの名無しさん:2006/04/03(月) 23:57:15
ある程度以上メヂャーな言語なら、hogeCCの類いは存在するからねえ。
807デフォルトの名無しさん:2006/04/03(月) 23:58:13
>>804
自分で作った言語でコンパイラ書くのがおすすめ
808デフォルトの名無しさん:2006/04/04(火) 00:26:28
誰も使わないけどな。
809デフォルトの名無しさん:2006/04/04(火) 00:46:06
elisp みたいな組み込み言語にすればオケ
emacs 程の神アプリじゃなくても、ちょっと気の利いたツールの拡張言語にすれば
それなりにユーザを獲得出来るんじゃない。
810デフォルトの名無しさん:2006/04/04(火) 00:59:31
そういえば、情報処理学会の会誌でコンパイラの連載始まるみたいね。
COINS使うらしい。
811デフォルトの名無しさん:2006/04/04(火) 01:17:00
>>809
設計思想による
812デフォルトの名無しさん:2006/04/04(火) 01:28:00
>>807
そこまでいければ苦労しないw
と思ったけど、それもいいな。

GCCみたいに、最初はどこでもコンパイルできるミニマムなCでコンパイラを生成して、
そのコンパイラで自分自身をまたコンパイルして・・・と。


そういえば、マルチプラットフォームなコンパイラつくりたいと思ったら、
やっぱり、GCCのフロントエンド作るのが正解なんかね。
最初見たとき、中間言語がわけわかめだった。
他に方法ないすか?
813デフォルトの名無しさん:2006/04/04(火) 08:29:54
>>812
>他に方法ないすか?

お前の知能じゃドレもムリ。

大人しくHSP使ってろ
814デフォルトの名無しさん:2006/04/04(火) 11:20:41
HSPならできるんですか?
815デフォルトの名無しさん:2006/04/04(火) 15:35:54
つまり、HSP最強
816デフォルトの名無しさん:2006/04/04(火) 17:24:17
はいはいわろすわろす
817デフォルトの名無しさん:2006/04/04(火) 18:56:18
>810
COINSはいつJavaに対応するのでしょうか?
図には書かれているのに…
818デフォルトの名無しさん:2006/04/05(水) 13:09:14
>>817
一応あるみたい。
http://www.coins-project.org/COINSdoc/frontend/index.html#i-5-1-3

これ以上まともにJavaに対応することには、
苦労に見合うだけの学術的な意味がないからなあ。
819デフォルトの名無しさん:2006/04/05(水) 18:50:53
>818
> Javaのフロントエンドは以下の方針で開発しているが、デバッグ中であるので、
> リリース版にはまだ入っていない。

だから公開はされてないんですね。いつからデバッグしてるのかちょっと不安…
820デフォルトの名無しさん:2006/04/11(火) 18:25:41
>>818
参考になります。
ただ、自分の目指しているのは型なし&プロトタイプ指向ですので、やっぱりちょっと
ポイントが違うようですね。まあ、その違いを見るのも楽しいですが。
821デフォルトの名無しさん:2006/04/11(火) 18:54:36
なぜ>383
822デフォルトの名無しさん:2006/04/16(日) 21:51:35
どこかにJavaでかかれたCの処理系とかない?
自分で作ろうかと思ってるんだけど、結構大変そうだし。
自作するならSableCCあたりで作ろうと思ってる。
ASTを作るまでは楽だろうけど、その後が...。
823デフォルトの名無しさん:2006/04/17(月) 01:13:49
824デフォルトの名無しさん:2006/04/17(月) 12:07:17
>>823
どうもありがとう。学習支援用にインタープリタでも作ろうかと思って。
825デフォルトの名無しさん:2006/04/17(月) 20:22:45
>>823
情報処理学会誌、今日家に届いたよ。
826デフォルトの名無しさん:2006/04/17(月) 21:48:30
>>825
家にも来た。
情処会員相手ということで
初心者本や教科書なら必要な噛み砕いた説明がないから
読むほうとしては面白いことだけさらっと読めていいね。

3月までの連載は
http://www.ipsj.or.jp/07editj/promenade/index.html
で見れるから、コンパイラの連載も誰でもダウンロードできるようになるかもね。
827デフォルトの名無しさん:2006/04/17(月) 22:43:38
学会誌見るまでCOINSなんて知らなかった。
828デフォルトの名無しさん:2006/04/18(火) 12:14:03
>>822
構文解析だけなら、JavaCCやANTLRなら有志によってCの文法定義ファイルが用意されている。
Cだけじゃなくて、JavaやXMLも用意されている。
JavaCCやANTLRのサイトをのぞいてみて。
829デフォルトの名無しさん:2006/04/18(火) 12:26:48
どんなに遅くてもいいから、実装まで作った処理系のサンプルがほしい
830デフォルトの名無しさん:2006/04/18(火) 14:23:00
>>828
感謝。実はSableCC用のgrammarを発見しました。
あとはASTを上からなめるようなものを書けばいいと思う。
あとプリプロセッサがないから手で書くか、IPAのを借りようかと思う。

>>829
完成したらソース公開するから期待しないで待ってて。
Javaで作るつもり。ライブラリはアドオン形式で。

C89も結構複雑だよねぇ。これがC99になったらと思うと・・・。
831デフォルトの名無しさん:2006/04/18(火) 14:31:21
今公式サイト見たけどCOINSって錚々たるメンバー参加してるんだね。
国内のコンパイラの書籍で見かける人ばっかり・・・。
832デフォルトの名無しさん:2006/04/18(火) 15:45:54
>>830
それを言うならC++0xになったらと思うと…
833デフォルトの名無しさん:2006/04/18(火) 16:07:22
>>832
仰る通り。言語が複雑化すると処理系作る人は大変だね。
LL(1)で解析できる言語(Pascalとか)は素晴らしいなあ。
もっともそのせいで":="あたりで賛否両論になるわけだが...。
834デフォルトの名無しさん:2006/04/18(火) 16:08:48
> もっともそのせいで":="あたりで賛否両論になるわけだが...。
どういうことですか?kwsk
代入演算子が = で、比較演算子が ==なら済む話?
835デフォルトの名無しさん:2006/04/18(火) 16:59:55
>>834
ごめんごめん、深い意味はないのよ。個人的な感想。
個人的には":="が"="で、"<>"が"!="で、"="が"=="だったら
もっと好きになってたかもってことで。
#自分が最初に使った言語にもよるんだろうけど
836デフォルトの名無しさん:2006/04/18(火) 18:09:40
>>835
それは、ホントに個人によるな。
俺の場合、= が代入なのはキモく感じる。
今は慣れたが、最初に言語を習うときに、既存の教育(数学)の常識と違うから。
代入は、:= とか <- とかの方がしっくりくる。
837デフォルトの名無しさん:2006/04/18(火) 20:23:17
>>836
確かに。a = a + 1 なんて絶対成立しないもんね。
そういう意味では := や <- が支持されるのはわかるなぁ。
ただ、<> が等しくないというのはちょっと違和感?
後輩で「<>って大なりでも小なりでもないから等しいってことですか」って
マジで言ってる奴がいた(w
...なるほど深読みするとそうとも取れるのかと思ったよ。
838デフォルトの名無しさん:2006/04/18(火) 21:06:01
<>と!=は好みがでそう。
個人的には!=という記号の対称性のなさが少し嫌かも。
それだったらprologのように=\=の方が好きだ。
839デフォルトの名無しさん:2006/04/18(火) 21:16:39
<and>か<or>か、確かにどっちにも取れるよなぁ。
840デフォルトの名無しさん:2006/04/18(火) 21:26:26
昔は"#"が不等号って時代もチョロットだけあったよね。
841デフォルトの名無しさん:2006/04/18(火) 21:38:37
a := 3 は a: int = 3 の略だったりするのはちょっと萌え。
842デフォルトの名無しさん:2006/04/18(火) 22:28:55
俺の知人がアドレスバーにあった
://www.com/?1=1+2
なよーなURL見て、
このサイト足し算もできないとんでもねー馬鹿だなって言ってたの思い出した

この業界はとりあえず普通じゃないよね
843デフォルトの名無しさん:2006/04/18(火) 22:31:35
>>842
というかURLの意味がわからないんだけど。

俺のプログラマでない友人も、x=x/3というのを見て、x==0と思い込んでた
844デフォルトの名無しさん:2006/04/18(火) 23:17:02
洩れは if .. elsif を見て英語音痴だとおもたよw
845デフォルトの名無しさん:2006/04/18(火) 23:19:15
"=="を定義の意味にすべきだと思う。
846デフォルトの名無しさん:2006/04/19(水) 01:05:41
ウゼー、言語初心者が2,3人迷い込んでガタガタ騒いでやがる
847デフォルトの名無しさん:2006/04/19(水) 01:14:13
自称熟練者さんは理論にもさぞお詳しいのでしょう。
848デフォルトの名無しさん:2006/04/19(水) 01:25:27
演算子の記号の意味なんか言語の仕様書読めば済む話
スレ違い
849デフォルトの名無しさん:2006/04/19(水) 01:29:00
自称熟練者さんは「演算子の記号の意味」が理論だと思っていらっしゃるようです。
850デフォルトの名無しさん:2006/04/19(水) 01:44:17
つーか何で = が代入なんだよ
851デフォルトの名無しさん:2006/04/19(水) 01:50:13
代入要らない。
852デフォルトの名無しさん:2006/04/19(水) 02:31:05
>>851
関数型言語?
853デフォルトの名無しさん:2006/04/19(水) 02:38:57
代入って古いんだよね ダサい きもい
854デフォルトの名無しさん:2006/04/19(水) 02:47:10
そっか。
855デフォルトの名無しさん:2006/04/19(水) 08:55:35
>>850
BASICの頃に作られた定石でつね
856デフォルトの名無しさん:2006/04/19(水) 09:04:53
知り合いに「Pascalの代入演算子が:=なのは文法をLL(1)にするためだ」って
力説してるヤツがいたなぁ。
つーか、トークンの切り出しは字句解析の仕事で、
LL(1)は構文解析の話だと思うのだが。
857デフォルトの名無しさん:2006/04/19(水) 20:48:54
本によるとLALR(1)文法は手書きには向かないって書いてあるんだけど
Rubyとかの言語がコンパイラコンパイラで作られてるのはその為?
858デフォルトの名無しさん:2006/04/19(水) 20:53:30
>>857
その本によるとなんで手書きに向いていないか書いてある?
859デフォルトの名無しさん:2006/04/20(木) 02:33:51
>>855
FORTRANの頃だろう。
860デフォルトの名無しさん:2006/04/20(木) 17:53:43
>>857
LALR(1)を手で書こうとすると地獄を見るよ。
再帰下降の文法がどれだけ簡単か感謝するようになる(w
861デフォルトの名無しさん:2006/04/20(木) 20:15:23
LL(1)は適用範囲が狭いけど書きやすい。
LALR(1)は適用範囲が広いけど書きにくい。
すげージレンマです!
862デフォルトの名無しさん:2006/04/20(木) 21:58:00
flex 使ってると、このようなメッセージが出るんだけど、
この関数を定義しないようにするにはどうすればいいでしょうか?

lex.yy.c: warning: 'yy_flex_realloc' defined but not used
863デフォルトの名無しさん:2006/04/21(金) 00:40:11
#undef yy_flex_realloc
864デフォルトの名無しさん:2006/04/22(土) 10:06:33
一般教養としての Garbage Collection
ttp://www.logos.t.u-tokyo.ac.jp/~endo/gc/gc.pdf
865デフォルトの名無しさん:2006/04/22(土) 10:56:10
>>863
違うだろ?
866デフォルトの名無しさん:2006/04/22(土) 22:41:57
867デフォルトの名無しさん:2006/04/25(火) 21:58:09
HSPもyaccとか使ってんのかね?
868デフォルトの名無しさん:2006/04/27(木) 11:58:47
>>867
どうでしょう。HSPって文法は何?LALR(1)?
869デフォルトの名無しさん:2006/04/27(木) 23:41:05
HSPは字句解析とか構文解析みたいな、まともな理論使ってなさそうな雰囲気
例えるなら紙芝居エロゲのシナリオスクリプト
870デフォルトの名無しさん:2006/04/29(土) 18:18:30
エロゲスクリプタもbisonで書いてるの多いと思うが
871デフォルトの名無しさん:2006/04/30(日) 13:00:49
コンパイラを書くのに最も適した言語って何ですかね?
872デフォルトの名無しさん:2006/04/30(日) 13:08:48
最初の立ち上げの言語のことか?
それともツール込みの事か?

おいらは最後には自己記述するから自分自身とかって事になるもんだと思ってるんだけど。
873デフォルトの名無しさん:2006/04/30(日) 14:31:34
コンパイラの仕事ってのは、大半がツリーからツリーへの変換だから、
ツリーを弄りやすく、静的な強い型検査をし、メモリ管理がらくちんな
言語が向く。ML系かHaskellでどうぞ。
874デフォルトの名無しさん:2006/04/30(日) 15:34:17
コンパイラの仕事ってのは、大半がツリーからツリーへの変換だから、
ツリーを弄りやすく、強力なマクロを持ち、メモリ管理がらくちんな
言語が向く。LispかSchemeでどうぞ。
875デフォルトの名無しさん:2006/04/30(日) 15:52:58
コンパイラの仕事ってのは、大半がツリーからツリーへの変換だから、
ツリーを弄りやすく、すべてがオブジェクトで、メモリ管理がらくちんな
言語が向く。Ruby でどうぞ。
876デフォルトの名無しさん:2006/04/30(日) 16:01:31
コンパイラの仕事ってのは、大半がツリーからツリーへの変換だから、 
ツリーを弄りにくく、貧弱なマクロを持ち、メモリ管理がたいへんな 
言語は向かない。CかC++はやめとけ。 
877デフォルトの名無しさん:2006/04/30(日) 16:10:52
>>876

 ・・・orz

878デフォルトの名無しさん:2006/04/30(日) 16:24:16
でも結局yaccとc使うんでしょ
879デフォルトの名無しさん:2006/04/30(日) 16:25:33
yaccとCをつかうと何が有利なのでしょう?
880デフォルトの名無しさん:2006/04/30(日) 16:28:07
なにも。
881デフォルトの名無しさん:2006/04/30(日) 16:30:19
あれを使えばいい、とか、これを使えばいい、とか言ってるだけのやつはいなくなってもいいよ。
882デフォルトの名無しさん:2006/04/30(日) 16:31:29
そもそも、ここで具体的なことを質問に来るやつなんていないじゃない?
スレもここで終了してもいいんじゃないかな?
というわけで



======= 終 了 =========


883デフォルトの名無しさん:2006/04/30(日) 18:27:01
久しぶりに終了厨を見たな
884デフォルトの名無しさん:2006/04/30(日) 19:54:42
時代的にはHaskellですかね?
でも習得が簡単なのはLisp?
うーん迷う。
885デフォルトの名無しさん:2006/04/30(日) 19:59:03
>>884
お前が言いたいのはLispじゃなくてSchemeだろ?
886デフォルトの名無しさん:2006/04/30(日) 22:30:19
>>875
では、何故Rubyは、Rubyで書かれていないのですか?
887デフォルトの名無しさん:2006/04/30(日) 23:22:40
コンパイラはブートストラップできるけど、スクリプタは出来ない希ガス
888名無しさん@Linuxザウルス:2006/05/01(月) 07:38:23
ほとんどの速いLISP/Schemeはそれ自身で書かれてるけど
コア部分はCだったりする。
移植考えた場合gccでミニ言語構築してからブートストラップかな。
開発者はELFとかPEまで面倒見たくないのが本音。
889デフォルトの名無しさん:2006/05/01(月) 08:26:55
>>886
こういう馬鹿がたまに湧いてでてくるようだが、
おっとそろそろ連休かぁw

言語にはそれぞれの目的があるのも分からんの?
アセンブラからベン教しなおしたら?
890デフォルトの名無しさん:2006/05/01(月) 09:22:19
.o0(下らない煽りを入れるだけなら、書き込まなきゃ良いのに・・・)
891デフォルトの名無しさん:2006/05/01(月) 09:45:36
886じゃないけど、ブートストラップする目的の一つには言語の記述力の高さを証明するって意味合いもあるんじゃまいか。
rubyのことはよく知らないけど、もしパフォーマンスに関して考慮しないとしたら、rubyは自己記述できるだけの記述力はあるの?
892デフォルトの名無しさん:2006/05/01(月) 10:53:53
ruby で ruby を記述することはできるっしょ。
893デフォルトの名無しさん:2006/05/01(月) 19:54:21
ruby を用いれば(理論上は)なんでも記述できる。
ただ、パフォーマンスが問題なだけ。
894デフォルトの名無しさん:2006/05/01(月) 19:58:44
>>893
>ruby を用いれば(理論上は)なんでも記述できる。
証明は?
895デフォルトの名無しさん:2006/05/01(月) 20:07:02
遅いってのは、それだけで罪だと思う
896デフォルトの名無しさん:2006/05/01(月) 20:09:17
早漏よりはましだと思うけどね
897デフォルトの名無しさん:2006/05/01(月) 22:55:01
>>893
あまり良い例じゃないかもしれないけど、GC は Ruby で書けないんじゃない?
898デフォルトの名無しさん:2006/05/01(月) 23:46:15
GCも書けないんじゃチューリング完全といえるのか?
899デフォルトの名無しさん:2006/05/01(月) 23:49:02
書けるよ^^;
900897:2006/05/02(火) 00:07:17
>>898
まぁ、そういう意味では書けそうかな。
仮想的なメモリの様な物を定義して、GC のアルゴリズムを実装したり、
malloc/free/etc. をラップしてゴリゴリ書いたりは出来るだろうね。
901デフォルトの名無しさん:2006/05/02(火) 00:15:59
>>898
チューリング完全関係ない^^;
902デフォルトの名無しさん:2006/05/02(火) 01:29:53
つーか実装可能かどうかよりも、実装しやすいかどうかが問題なんじゃないの?
903デフォルトの名無しさん:2006/05/02(火) 01:38:25
コンパイラ作る側のことは問題じゃない^^;
904デフォルトの名無しさん:2006/05/02(火) 01:44:50
ユーザーにコンパイラ作らせるって意味じゃなくて言語の記述力の話だったような気が
905デフォルトの名無しさん:2006/05/02(火) 07:01:58
マジレスすると Ruby の記述力はほぼ最強クラス
Ruby と Haskell を学べば他のウンコ言語は不要
906デフォルトの名無しさん:2006/05/02(火) 10:12:40
Rubyは型なしライトウェイト言語。Haskellは強い型あり言語。ぜんぜん用途も違うから住み分けが必要だね。
907デフォルトの名無しさん:2006/05/02(火) 18:16:08
>>905
いやしかし、ごく普通のPCで
「720x480ピクセルのインターレースの画像データを
デインターレース処理してね。当然60fpsでよろしく」
「ビットレート10MBpsのMPEGデータを・・・」
とか、そういうごく有りがちな応用とかでは C/C++ は捨てがたい。
908デフォルトの名無しさん:2006/05/02(火) 22:20:30
この板もID制になればなぁ。
一日中一人で荒らしてるが丸分かりでおもしろいのになぁ
909デフォルトの名無しさん:2006/05/02(火) 22:57:40
>>907
そろそろrubyでも届く処理になっていると思われ。
910デフォルトの名無しさん:2006/05/02(火) 23:04:47
>>909は世間知らず
911デフォルトの名無しさん:2006/05/02(火) 23:05:59
Rubyの売りは手軽に書けるということでしょ?
C/C++はシビアな処理が必要なところとか、大規模開発向き。
言語は住み分けが大切なんだって言ってるでしょ。
912デフォルトの名無しさん:2006/05/02(火) 23:09:57
Rubyはなんだかうんこくさいんです。
913デフォルトの名無しさん:2006/05/03(水) 01:05:19
清濁併せのむって事がわからない馬鹿は死ね
914デフォルトの名無しさん:2006/05/03(水) 01:46:15
>>909
またまたご冗談を

>>911
激しく同意
915デフォルトの名無しさん:2006/05/03(水) 01:50:51
scheme みたいにミニマム指向で、型付きで、オブジェクト指向をサポートしていて、
repl があって、文法が奇麗な言語って無いですかねぇ。仕様がある程度かっちり
していると嬉しいのですが。

JavaScript に型が付いた様なの、あるいは言語仕様がきちっと決まっている Pike
みたいな感じのキボンヌ。
916デフォルトの名無しさん:2006/05/03(水) 01:59:06
>>915
オブジェクト指向はラムダ式の包含的なアプローチなわけだが・・
とりあえずOCamlあたりのことを言っているのかな・・
917デフォルトの名無しさん:2006/05/03(水) 02:27:23
ラムダでオブジェクトを作れると言う意味では、syntax sugar としての OO をサポートしている
-- object.method() の様な感じで記述出来る -- 言語が無いかなと思いまして。

OCaml はミニマム指向なのでしょうか?
ML97 みたいな規格があると嬉しいです。
918デフォルトの名無しさん:2006/05/03(水) 04:11:54
>>915
Ruby。動的型だけど。
919デフォルトの名無しさん:2006/05/03(水) 06:38:26
もうRubyはいいってw
920デフォルトの名無しさん:2006/05/03(水) 06:42:15
動的型まで含めたらだめだろ
921デフォルトの名無しさん:2006/05/03(水) 06:52:13
>>915
JavaScript 2.0では随所に型情報をつけられるよ。
つーか「型が付いた」ってどういう意味で言ってるの?
静的型付けってこと?
922デフォルトの名無しさん:2006/05/03(水) 07:25:26
>>921
JavaScript 2.0 は以前ちょっとだけ見て忘れてました。
もう一度調べてみます。どうもありがとう。
923デフォルトの名無しさん:2006/05/03(水) 07:33:02
JavaScript 2.0って昔からドラフトだけは出てたけど、
今はもう実装されてんの?
924デフォルトの名無しさん:2006/05/03(水) 07:50:29
誰も実装しないね。草案が固まらないのかな?
925デフォルトの名無しさん:2006/05/03(水) 07:54:42
ActionScript3.0は
926デフォルトの名無しさん:2006/05/03(水) 08:45:35
>>919
Ruby コンプレックスかよダセw
どうせオブジェクト指向が使いこなせなかった低能だろ?
氏んでくださーい。あっ HSP 厨房?
927デフォルトの名無しさん:2006/05/03(水) 10:27:54
926みたいな奴を見るたびに、Ruby使う気が失せていくんだよな。
928デフォルトの名無しさん:2006/05/03(水) 13:26:48
レベルの低下が著しいスレですね
929デフォルトの名無しさん:2006/05/03(水) 15:30:01
このスレは前からこんなもんだ。
930デフォルトの名無しさん:2006/05/03(水) 15:30:40
           j} _ ..∠ ≧=≠ー≒=辷z、_      _メ    }}
          ≠´              `く≠≦´_     〃
.         , '                  〈、⌒ヽ`ヽ=≠"
        /, ,   / ,               キヽ.     ヽ
         ///〃 / / /     }}川 i|!  i  } ハ   ト、 キ
.         jハl|‖{ { {  {     ノノ川 jj|  j / / j}_,メ ヾリ
.        l{八 ヽヽヽ \   //ノノノノノ}  /〃//  `二ニ=- 、
         八 、ヽ、 x≦ミヽ、{ { ≧=ミ.ノ/ノ_厶斗-‐== 二 」
        /  ゝ≧ミyィ゙j:i}  `  ´{゙j:;;!ii}ゞ≧=彡ヘ-‐=≡ ‐= ニコ
.    /  /{ミ辷彡}oー ' ,     ーo' {ミ辷__彡}二ニ=-  jノ
    {  / , ゝー=人""  cっ   "" °{ミ辷__彡}-‐==≡ミ〉
      \{ / /{辷彡}>  .. __    イj从ミ辷_彡ノ==≡ニ≦、
      `{ { f´≧=彡'´ ̄`ヽ_」    jァァ' ゞ=个辷ニニ=-テ′
       `ーァ `≠ x==く(´   /,≠=キテノハミ辷=≦
          ヤ/ 〈く   `'ァfj彡'゙     》/   ヽ_弓
          `{   ヾx、__,≠ハミヽ、    〃   丿 リノ
.             \/´   ̄_/,≠= 、 `'≡彡゙ '⌒'く  ´
             /   _/´~ニ{ニ   Y´   -‐- 、丿
             { /i{   ニ{-    ハr┬- 、   }
              ノイ|  キ  ノ゙T ¬i ! } }   ヽ {
          / {l|  キf´‖{|  j }ノノ    } }
           ‖ ミ{   キ!、リ キ  ///    ′ハ
            人  ヾ、 ヾツ キー' 〃   _ .. イ   ヽ
.        /  `アアア丁! ! `T¨丁 ̄i i |    \
.        /    / / / Ui i U |  U i  i     \


うう・・・・・・・グス・・・・・・・ひっく・・・・・・・・ごめんなさいなのぉ・・・
931デフォルトの名無しさん:2006/05/03(水) 22:14:41
オブジェクト指向言語って全体のどれぐらいを占めるのでしょうね?
最近流行ってる見たいですが…
932デフォルトの名無しさん:2006/05/03(水) 22:23:22
オブジェクト指向言語というのは、オブジェクト指向でプログラミングすることを念頭に置いた言語という意味だって知ってる?
933デフォルトの名無しさん:2006/05/03(水) 23:33:12
いまどきアセンブラの仕事している俺っていったい・・・
さすがに紙に穴あけたことはないけど。
934デフォルトの名無しさん:2006/05/04(木) 00:48:06
>>933
> いまどきアセンブラの仕事している俺っていったい・・・
1チップ組込用マイコン設計屋で、アセンブラでテストパタン作っていますが、何か?
935デフォルトの名無しさん:2006/05/04(木) 00:58:01
アセンブラがかっこいいとか思ってるの?
936デフォルトの名無しさん:2006/05/04(木) 01:12:31
>>934
カコイイ!!
937デフォルトの名無しさん:2006/05/04(木) 04:32:36
オブジェクト指向が主流の現代にアセンブラかよ。プゲラ
938デフォルトの名無しさん:2006/05/04(木) 04:53:01
>>937
disassemble や decompile した事無いの?
939デフォルトの名無しさん:2006/05/04(木) 07:20:30
>>934
スゲー!!!
940デフォルトの名無しさん:2006/05/04(木) 08:53:20
>>934
FPGA とか CPLD でゴニョゴニョ出来る人はちょっと憧れる。
↓こんなのとか。

http://crystal.freespace.jp/pgate1/nes/index.html
941デフォルトの名無しさん:2006/05/04(木) 09:00:37
>>934
お嫁さんにして下さい。
942デフォルトの名無しさん:2006/05/04(木) 10:15:22
>>934
カコイイ
943デフォルトの名無しさん:2006/05/04(木) 13:03:21
>>934
m9(^Д^)プギャー!!
944デフォルトの名無しさん:2006/05/04(木) 13:18:00
アセンブラに対する評価って、色々なんやね。
そういや、アセンブラやってからCをやると、
ポインタが分かりやすいという話があったな。
945デフォルトの名無しさん:2006/05/04(木) 19:21:03
>>944
それ、逆というか本末転倒。
ポインタの概念を理解できないと、そもそもアセンブラを理解できない。
従って、アセンブラをやった者にはポインタは空気のような存在。
使えない事の方が理解しがたい。
946デフォルトの名無しさん:2006/05/04(木) 19:33:46
>>945
アセンブラの次にcやった人だと、ポインタに対する
インクリメント(++)で、型によって値が+2されたり+4
されたりするのが理解しづらいとオモ

つ〜か、漏れが昔はそうだった
947デフォルトの名無しさん:2006/05/04(木) 19:54:50
へー頭悪かったんだね。
948デフォルトの名無しさん:2006/05/04(木) 20:22:54
煽り乙
949デフォルトの名無しさん:2006/05/04(木) 20:35:34
スレの本題を忘れるなよ。まぁ今後オブジェクト指向が主流となる事は間違いない
950デフォルトの名無しさん:2006/05/04(木) 21:05:25
OO つかクラス指向は 90's 中頃からずっと主流だったし、最早、水や空気と変わらんね。
1チップマイコンは地味に流行ってて面白そう。ARM 基板とか安く手に入るし。
951デフォルトの名無しさん:2006/05/04(木) 23:18:48
オブジェクト指向はruby以外まともなものは知らない。
みな中途半端
952デフォルトの名無しさん:2006/05/04(木) 23:25:02
Ruby 以外の言語を知らないんじゃないの?
953デフォルトの名無しさん:2006/05/04(木) 23:56:18
YARV の話しようぜー
今んとこ最強だよね
954デフォルトの名無しさん:2006/05/05(金) 04:45:55
大昔 Smalltalk-80 とか Smalltalk/V とかつかってて、
それほど中途半端な感じはしなかったけど・・・
955デフォルトの名無しさん:2006/05/05(金) 04:47:52
>>951
rubyも中途半端
956デフォルトの名無しさん:2006/05/05(金) 06:04:08
つか、rubyは手続き型の記述が「可能」な時点でオブジェクト指向ぽい言語なのでわ?
957デフォルトの名無しさん:2006/05/05(金) 06:50:44
>>956
それを言っちゃうとメジャーな言語でオブジェクト指向を謳ったものはほとんど残らないじゃないか。
958デフォルトの名無しさん:2006/05/05(金) 10:24:17
>>954
また古い話だな。でも Ruby は Smalltalk の良い所を継承しつつ、その制限や
不便な部分を改善しているよ。今迄実行環境については構文木を Eval という
Smalltalk に大きく見劣りする形式だったけど YARV によって GC 回りを含め
て大きく改善された。
959デフォルトの名無しさん:2006/05/05(金) 10:28:29
一番最後に出来た VM だな。

YARV の詳細は知らんけど、世代別 GC と JIT くらい備えないと
10 年前の Smalltalk にすら追い付いてないのでは。
960デフォルトの名無しさん:2006/05/05(金) 11:52:13
>>359
YARV 世代別 GC になるよ。JIT も計画されてるみたいだけど
最初は搭載されないだろうなー
961デフォルトの名無しさん:2006/05/05(金) 16:48:22
Ruby関係はIPA採択されやすいのかな
YARVてなんか未踏でもなんでもない気がくぁwせdrftgyふじこ
962デフォルトの名無しさん:2006/05/05(金) 16:49:14
国産ですので。
963デフォルトの名無しさん:2006/05/05(金) 16:49:49
早っww
964デフォルトの名無しさん:2006/05/05(金) 18:47:40
やっぱり「純粋な〜」が好きな国民性ゆえ Ruby と Haskell がブームとなるん
だろう。
純粋な関数型: Haskell
純粋なオブジェクト指向: Ruby
このスレもこの二つメインで良くね?ぶっちゃけのこりの雑種共はいずれ死滅
するだろ。
965デフォルトの名無しさん:2006/05/05(金) 18:54:52
YARVって速いの?
966デフォルトの名無しさん:2006/05/05(金) 20:15:27
Rubyが純粋なオブジェクト指向て。

孤高の言語 Lisp Prolog > 新しいパラダイム Smalltalk Haskell > 面白いモデル ML Forth
て感じだろ。

Java Perl Ruby Python なんかはカスみたいなもんだ。
967デフォルトの名無しさん:2006/05/05(金) 20:21:22
今日はじめて彼女とHしました。記念sage
968デフォルトの名無しさん:2006/05/05(金) 20:25:44
>>966
実用言語が一つもない件w
969デフォルトの名無しさん:2006/05/05(金) 20:30:53
>>986
まじめな話Forthは実用言語だぞ。

今はあまり使われないがリソースが少なかった頃の組み込み分野じゃ一斉を風靡したもんだ。
(ちなみにforthラブラブな本があったんだけどタイトル失念した)
970デフォルトの名無しさん:2006/05/05(金) 20:35:11
でも再帰下降が普及してからforthでなくともスクリプト組み込みは容易になったからなあ
971デフォルトの名無しさん:2006/05/05(金) 20:40:43
完全に純粋であることに意味なんか無いしなぁ。

つうか、あるパラダイムに本当に完全に純粋な言語なんて無いよなぁ。
972デフォルトの名無しさん:2006/05/05(金) 20:48:04
Microsoft パラダイムに
純粋な言語は幾らでもあるけれど?
973デフォルトの名無しさん:2006/05/05(金) 21:09:50
>>972
政治的な話はなしにしないとemacsとviみたいに不毛な話しかでてこなくなる。


#つーか原理主義だけはやめようよ〜
974デフォルトの名無しさん:2006/05/05(金) 22:01:34
純粋な言語って使い物にならないよ。
実用的なソフトが作れない

>>969
おお、それは失礼した。
組み込みで使われてたか。知らん分野だった

>>972
どこどこ?
975デフォルトの名無しさん:2006/05/05(金) 22:09:58
つVB
つC$
976デフォルトの名無しさん:2006/05/05(金) 22:31:03
言語が「純粋」ってどういう意味?
977デフォルトの名無しさん:2006/05/05(金) 23:07:39
>>976
Vi を使って Ruby スクリプトを書くようなイメージ
978デフォルトの名無しさん:2006/05/05(金) 23:12:09
だーかーら Rubyは「純粋」じゃないのっ
もっとお勉強しましょうねー
979デフォルトの名無しさん:2006/05/05(金) 23:12:40
「実用的」なソフトってどんなの?
980デフォルトの名無しさん:2006/05/05(金) 23:31:46
>>978
お前の言う「純粋」な言語は存在しない。お前がもっと勉強してね。
981デフォルトの名無しさん:2006/05/05(金) 23:34:05
>>974
あと印刷関連の言語 PostScript もほぼ純粋 Forth だよ。
982デフォルトの名無しさん:2006/05/05(金) 23:51:09
>>980
SchemeとSmalltalkはRubyよりは「純粋」だと思うよ
Rubyのアイデンティティってなんなの?
983デフォルトの名無しさん:2006/05/05(金) 23:54:45
>>982
SchemeとSmalltalkが「純粋」?

ブハッツww バカだコイツww
984デフォルトの名無しさん:2006/05/05(金) 23:58:11
>>983
Smalltalk のどのへんが OO 言語として純粋でない部分?
ちょっと通りすがりだけど興味あるんで聞いてみたい。
985デフォルトの名無しさん:2006/05/05(金) 23:58:15
だーかーら SchemeとSmalltalkは「純粋」じゃないのっ
もっとお勉強しましょうねー
986デフォルトの名無しさん:2006/05/06(土) 00:05:59
ruby はブロックの扱いが Smalltalk に比べて純粋でないというか、
後付っぽい感じがただよいまくり。
987デフォルトの名無しさん:2006/05/06(土) 00:07:11
クラスの概念はOOとして純粋じゃない。
実用の為に導入されている。
988デフォルトの名無しさん:2006/05/06(土) 00:11:10
>>987
OO の本質が何であるかは人によって様々。
勿論クラス指向でも問題無し。
989デフォルトの名無しさん:2006/05/06(土) 00:11:31
Scheme は最小構文、クロージャ、プログラムがデータ
Smalltalk は全てオブジェクト

Ruby は 、、、 えっ 文字列を evalするの?
ブロックなにそれ?
そんな Rubyのアイデンティは? 、 ないよねー
990デフォルトの名無しさん:2006/05/06(土) 00:14:03
>>988
つまり、人によって純粋の定義は異なる。

よって、純粋かどうかに拘って、アイデンティティがどうとか言ってる982はバカだってことで
991デフォルトの名無しさん:2006/05/06(土) 00:18:15
や、>>977 の発言を見て Rubyを純粋だと信じてやまないピュアな若者を
いじってみたくなっただけなんだ。
正直純粋とかアイデンティティとかどうでもいい。いまは反省している。
992デフォルトの名無しさん:2006/05/06(土) 00:18:35
>>990
>つまり、人によって純粋の定義は異なる。

これはそのとおりだし、「純粋」議論には意味がないと思うが。
で、「純粋なOO言語だっ」と言いたがるのはたいていRuby信者だが、それはさておき。

Rubyが、いろんな言語からつぎはぎした統一感のない言語だってのは事実なんじゃね?
それを「いいとこ取り」と言う奴もいるだろうが、「ぐちゃぐちゃ」とか「アイデンティティがない」とか
思う奴もいてよかろう。
993デフォルトの名無しさん:2006/05/06(土) 00:18:36
>>990
純粋の定義は変わらんよ。どっちの方向に純粋かが変わるだけ。
純粋である事にはそれ程意味がある訳じゃないけどね。

>>989
Ruby のアイデンティティは ad-hoc さとごちゃ混ぜ感じゃないの。
yet another perl だから。
994デフォルトの名無しさん:2006/05/06(土) 00:22:21
そういや、次スレ立てにゃいかんな。
今回は特にテンプレ貼らず、Wikiのまとめページへのリンクだけでもいい気がする。

http://www6.atwiki.jp/compilerandscriptengine/
995デフォルトの名無しさん:2006/05/06(土) 00:31:26
>Rubyが、いろんな言語からつぎはぎした統一感のない言語だってのは事実なんじゃね?

他の言語のよいところをつぎはぎしない言語は、死んで使われてない言語だけだろ。


>それを「いいとこ取り」と言う奴もいるだろうが、「ぐちゃぐちゃ」とか「アイデンティティがない」とか
>思う奴もいてよかろう。

それは無知だからだろ。  というと怒るか?

では、Rubyも全てオブジェクトだし、純粋だと言うヤツがいてよかろう。
それを否定して、無知だからだと言ってるヤツは何だ?
996デフォルトの名無しさん:2006/05/06(土) 00:39:47
>>995
その話はもう終わり。無駄レスで残り少ないレスを消費するなよ。
997デフォルトの名無しさん:2006/05/06(土) 00:43:12
お前のそのレスがムダだし、その所為でこうしてまたムダレスが書かれる。
浅はかなんだよ。お前は。
998デフォルトの名無しさん:2006/05/06(土) 00:51:28
>>993
アイデンティティがないのがアイデンティティって? まあ否定はしないけど。

>>995
ブロックはオブジェクトじゃないよ。RubyはSchemeに似すぎている。だからこそ中途半端に感じる。
もっと Schemeっぽくして callを applyにしてオブジェクトを evalするようにするのは簡単
だろうけど、それって嬉しいの? ってなる。Schemeでいいじゃんみたいな。
使ってる人もいっぱいいるし、身動きとれなくなって結局 Perlみたくなるんだよ。
999デフォルトの名無しさん:2006/05/06(土) 00:59:00
ブロックはオブジェクトとして扱えばオブジェクトになる。

>RubyはSchemeに似すぎている。だからこそ中途半端に感じる。
最近のLL言語はそらLisp系に似てるだろうけど、それで中途半端に感じる?意味不明すぎ。

>もっと Schemeっぽくして callを applyにしてオブジェクトを evalするようにするのは簡単
>だろうけど、それって嬉しいの? ってなる。Schemeでいいじゃんみたいな。
なんでSchemeっぽくする話にしてんの?しないよ。
Schemeでいいじゃんみたいなって、意味不明な論理からその結論かよ。アホか。

>使ってる人もいっぱいいるし、身動きとれなくなって結局 Perlみたくなるんだよ。
だからなんだってんだ?
1000デフォルトの名無しさん:2006/05/06(土) 01:00:07
1:00ちょうどに 1000!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。