「コンパイラ・スクリプトエンジン」相談室16 (649レス)
上下前次1-新
248: 2015/08/20(木)11:31 ID:WmW0wMbd(1) AAS
痛い文章だ
249(1): 2015/08/24(月)00:47 ID:OjRQ25eS(1/3) AAS
マルチメソッドを効率よく実装するにはどのようにすればよいですか?
250: 2015/08/24(月)01:10 ID:YG1kZeuQ(1/2) AAS
マルチメソッドって何?
251(1): 2015/08/24(月)01:36 ID:OjRQ25eS(2/3) AAS
OOPの最も基本的な機能です
引数によって、メソッドが切り替わります
多態といいます
252: 2015/08/24(月)02:01 ID:YG1kZeuQ(2/2) AAS
オーバーロードのことですか?
ではマングリング
253: 2015/08/24(月)02:21 ID:OjRQ25eS(3/3) AAS
マルチメソッドはオーバーロードでは無いです
一般にオーバーロードは静的ですが、
マルチメソッドは動的です
254: 2015/08/24(月)08:00 ID:WVPITNbu(1) AAS
>>251
> 引数によって、メソッドが切り替わります
はい?
255: 2015/08/24(月)08:19 ID:jJXNOMmM(1) AAS
clojureのdefmultiみたいな奴じゃないの?
256: 2015/08/24(月)11:49 ID:BYoao/vR(1) AAS
多重ディスパッチのニッチな要求に応えるものか
それとも単純な動的バインディングだけの問題なのか
257: 2015/08/26(水)18:36 ID:XR0u/yGZ(1) AAS
マルチメソッドはC++相談室を検索すればなんなのかがわかる
258: 片山博文MZ ◆T6xkBnTXz7B0 2015/08/30(日)17:45 ID:bYlp1Mb/(1) AAS
>>249
パターンマッチを効率よく行う
259(1): 2015/08/30(日)19:15 ID:nhXJHOe7(1) AAS
型を連想配列やトライ木で管理すればO(1)
260: 2015/08/30(日)20:08 ID:brcjELIg(1) AAS
>>259
clojureはソレだね
261(8): 2015/09/17(木)12:38 ID:mHCGeegj(1) AAS
中間言語の設計に関するノウハウとかアンチパターンとかが書かれた本誰か知ってる?
LLVMとかP-codeとかJava VMとか、あるいはKnuthのMIX/MMIXみたいな機械語に近いレベルの言語を
ソフトウェア実装すること前提に設計する場合について知りたい。
今言語設計してて、そろそろ構文解析できそうだから学んでおきたいんだけど。
262(1): 2015/09/17(木)19:56 ID:7ftMaB4B(1) AAS
最初はネイティブに落とした方がいいぞ
中間言語とか遠回りしてたらアホみたいだぞ
263(1): 2015/09/18(金)15:07 ID:QAQ6VXx0(1) AAS
そんな物他人に教わるくらいならおとなしく既存のを使っとけ
264(1): 2015/09/18(金)20:35 ID:F4ynHS7Z(1) AAS
本として出して需要あるか?もしかしたらサーベイ論文なら探せばあるかも
265(1): 261 2015/09/18(金)21:16 ID:ArWsl8Ey(1) AAS
>>262
素直にコンパイル出来ない言語を設計してるので(clispのような)、snippetの表現をx86/amd64表記にする意義が薄いんですよね。
>>263
凝り性なもので。
>>264
一応ciniiは一通り眺めたけど、中間言語の設計に関する論文って無いんですよね。
素直に「中間言語」で調べると自然言語の翻訳に使う方が大量に引っかかってつらい……
266(1): 2015/09/18(金)22:17 ID:i7DEL3du(1) AAS
>>265
動的型付け必須系?
ならErlangの論文とか資料あさるといいかも
267(2): 261 2015/09/19(土)09:19 ID:YlOPp2hb(1/4) AAS
>>266
swiftのように演算子をユーザー定義出来て、
c++のように同名異引数の関数を定義出来て、
Lispのように引数間のカンマが要らず、
Rubyのようにカッコを省ける
そんな言語を設計中です。
それらの両立のために実行中に文法を書き換えて構文解析器を再構成するという手法を採ってるので、コンパイル出来ないんですよね……
clispのリードマクロを文脈依存に拡張したものだと言えば大体あってるかと。
ちょっとErlang関連の資料を見てみます。
268(1): 2015/09/19(土)10:26 ID:7hgo9IJ4(1) AAS
>>267
列挙してあることはシンタックス上のことで全部コンパイル時に静的に解決出来そうに見えるけど無理なの?
269(1): 2015/09/19(土)11:29 ID:I9CWDfzW(1/2) AAS
>>267
コンパイル時の都合だよね?
VMの設計とはなんの関係もなさげなんだけど
270: 261 2015/09/19(土)12:48 ID:YlOPp2hb(2/4) AAS
>>268
今考えてる言語では、演算子の扱いが関数を引数の場所に関して一般化した第一級オブジェクトなので
前置引数の個数や後置引数の個数は実行してみるまで分からないので
コンパイル時の識別子を用いた構文解析は無理です。
前置演算子と一引数関数が別物って変だと思ったのでそうしました。
c++風に書くと、こんな感じのが通るイメージです。
g = [](a,b){return a - b;};
if (複雑な式) {
f = [](a|b,c){return a + b + c;}; // (a|b)で前置引数としてa、後置引数としてbと示すものとする。
} else {
f = [](a,b|c){return a + b + c;};
}
// gは2引数演算子、fは3引数演算子。
// ここではgの優先順位はfより低いものとする(c++での表現方法が無いので)。
// カッコやカンマを省いてある場合、上の条件のどちらが走っても構文上は受理される。
// 複雑な式の結果によって、これはg(1, f(2, 3, 4))及びg(f(1, 2, 3), 4)のどちらにもなりうる。
cout << (g 1 2 f 3 4) << endl;
>>269
そういうわけで一度に全部読み込んでコンパイルしてから実行するという事が出来ないので、
折角だからVMも設計しようと思った次第です。
ASTから中間言語に落とすとcontinuationの実装が楽になるので。
271(1): 2015/09/19(土)13:15 ID:hJISNbn0(1) AAS
g 1 2 f 3 4は構文解析後にはどういうツリーになっているの?
フラットなままで構文解析終えて実行時にまたプチ構文解析をするの?
272: 261 2015/09/19(土)13:24 ID:YlOPp2hb(3/4) AAS
>>271
字句解析でばらばらにしてLL(1)でカッコの対応等について解いた背の低い木にして、その後実行時にLR(1)で式毎に再度解析するので
> フラットなままで構文解析終えて実行時にまたプチ構文解析をするの?
これであってます。
273(1): 2015/09/19(土)14:10 ID:I9CWDfzW(2/2) AAS
おもしろい事かんがえてるなー
ElixirとかBEAM-VMとか参考になるんじゃねぇの?
274(1): 261 2015/09/19(土)15:18 ID:YlOPp2hb(4/4) AAS
>>273
高信頼・並列分散に特化したVMのようにあちこちで言われてるみたいですね、ErlangのBEAM-VM.
そう考えるとLLVMは解析容易性特化、JVMはVM自体の実装容易性特化といった所でしょうか。
VMを作るなら何かに特化させるべきなような気がしてきました。
275(2): 2015/09/20(日)00:52 ID:m4tWKm8w(1) AAS
演算子に限定する意味は何だろう
cout << (g 1 2 f 3 4) << endl;
こんなの一見して何してるのか判らないしいっそ構文ごと第一級にすればいい
そもそも実行時に構文解析機まで走らせる重い処理系って必要なのかなあ
クロージャじゃあかんのかね
276(2): 2015/09/20(日)09:22 ID:tHziPwGz(1/2) AAS
この程度のアイデアしかないようじゃ才能ないわな
277(1): 261 2015/09/20(日)11:27 ID:oZCwg6h7(1/3) AAS
>>275
今作ってる実装だと構文はhead, body, precedence, directionをキーとするオブジェクトの配列になってるので
構文も第一級オブジェクトのインスタンスになっています。
説明不足ですんません。
コードは現在こんな感じ。もし読みたければどうぞ。
外部リンク:gist.github.com
debug-printが多かったりコメントが少なかったりしますが……
> そもそも実行時に構文解析機まで走らせる重い処理系って必要なのかなあ
必要性については私にはまだ分かりませんが、
私は昔レキシカルスコープもクロージャもポインタも継続もマクロも無い素晴らしく酷い言語(古いBASIC)で全てを考えていたので、
その経験から、どんな機能も使い慣れると必要になってくると思っています。
>>276
私馬鹿なもんで。
いいアイデアがあったら是非とも実現してくだされ。
上下前次1-新書関写板覧索設栞歴
あと 372 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.019s