1 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 13:12:25 ] 禁止事項【臨時】 ・前スレの911自身の書き込み、またそれに関連した書き込みを禁止致します。 (スレが荒れる原因となります) プログラミング言語処理系の開発に興味のある人達のスレッドです。 字句解析・構文解析から,データフロー解析,ループ並列化,データ分散,SSA変換, CPS変換,レジスタ割付,命令スケジューリング,ソフトウェアパイプライン, SIMD命令生成,VLIW向けクラスタリング,スクラッチメモリ向け最適化,リンク時最適化, JIT,動的バイナリ変換等の各種最適化,それにVM,GC,低消費電力化などなど。 意味論に関する話題も歓迎です。 過去スレ 1 pc.2ch.net/tech/kako/981/981672957.html 2 pc2.2ch.net/test/read.cgi/tech/1021136715/ 3 pc5.2ch.net/test/read.cgi/tech/1070089173/ 4 pc5.2ch.net/test/read.cgi/tech/1100097050/ 5 pc8.2ch.net/test/read.cgi/tech/1106129164/ 6 pc8.2ch.net/test/read.cgi/tech/1115335709/ 7 pc8.2ch.net/test/read.cgi/tech/1129287390/ 8 pc8.2ch.net/test/read.cgi/tech/1131273918/ 9 pc8.2ch.net/test/read.cgi/tech/1135082582/ 10 pc8.2ch.net/test/read.cgi/tech/1146844753/ 11 pc11.2ch.net/test/read.cgi/tech/1160879890/ 12 pc11.2ch.net/test/read.cgi/tech/1188688416/ 前スレ 13 pc12.2ch.net/test/read.cgi/tech/1233143342/ 関連リンクは多分 >>2-10 あたり
152 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 14:16:11 ] >>142 その3DCGのファイルフォーマットって具体的には何? もしそれがXML形式で、標準ライブラリのREXMLを使っているのなら、 代わりにたとえばLibXml(libxml.rubyforge.org/ )のような C言語で記述された拡張ライブラリを使いなさい。 もしそれが構造化テキスト形式で、手作業でパーザを書いているなら、 Raccと(標準ライブラリの)strscanを使ってパーザを書き直しなさい。 RaccランタイムとstrscanもC言語で記述された拡張ライブラリです。 速い遅いはデータ量とマシン性能に依存するからあいまいになるけど、 上記の方法なら数キロステップのテキストを1秒以内で読み込みできるよ。 あとは>>148 が書いてくれているプロファイラの活用かな。
153 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 14:25:46 ] >>141 日本語が不自由な方がこんな事を言うなんて…
154 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 14:41:17 ] >>139 ここまで頭の悪い奴がどんなコードを組むかは興味がある。
155 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 15:21:26 ] 変態という名の紳士、いやいや天才という名のキチガイが何匹か紛れ込んでるみたいだけど 本物はこんな所に居ない。今までだってちゃちな物ばかりだったし。 >>142 Rubyは重いよ。趣味でやるなら良いけど仕事では用途を選ぶ。 ホットポイントを見つけて最適化という地道な作業と>>152 氏の 事をやってみるしかない。後はRubyスレで聞いた方が速いよ。
156 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 15:33:03 ] 今は実行環境にJVMがあるからお気楽にコンパイラ作れるね。 >>155 うさみちゃんだっけ?
157 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 15:34:42 ] しかしここが進むときは荒れるときで、決まって現物のコンパイラが出てこないね。
158 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 15:45:44 ] 出せるわけないじゃん、馬鹿だな〜
159 名前:157 mailto:sage [2009/12/24(木) 15:54:27 ] 何故出てこれないか考えられないなんて馬鹿だねw
160 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 16:14:47 ] 「考える」ことは誰でもできるね。 馬鹿はそれを「わかる」と混同しがち。
161 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 16:31:31 ] >>151 学生が作ってたところとかのきなみ全滅だな。 せっかくwikiがあるし、そっちのまとめを参照ってことにするか次スレから。
162 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:15:51 ] BNFで何か楽しい言語定義してよ。
163 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:26:32 ] 楽しい言語とは? BrainfuckとかWhitespaceみたいなやつ?
164 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 19:28:13 ] Brainfuckなんて良いね。面白そう。
165 名前:デフォルトの名無しさん [2009/12/25(金) 00:27:10 ] この産業も斜陽だしな 萌えとかエロとかは、食っていくに必要
166 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 13:07:49 ] では萌えキャラに質問形式でプログラムを作らせて実行さすUIはどうか うまく実行できるとエロい事が起こる
167 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 13:43:06 ] >>110 > しかし作者を叩く人は少なく、変な持ち上げ方をしている奴が馬鹿にされただけ。 図星のレスで荒れたなw
168 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 19:15:47 ] だって誰もコンパイラ見せてくれないんだもん。当然荒れるよ。
169 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 20:09:50 ] ないそではふれないっていうか・・
170 名前:デフォルトの名無しさん [2009/12/25(金) 22:03:13 ] >>166 普通に Lisp 優位だろうな。それやるとなると
171 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 03:46:24 ] 点呼を取ります。 A)仕事で使用に耐えうる大量のファイルを高速でコンパイル出来る物を作った人 B)言語をスクラッチで作った人 C)トランスレーターをスクラッチで作った人 D)ツールを使って作った人。 自分はB。構造化言語。
172 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 05:00:57 ] おれもBだ、言語的には3つ作った。
173 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 05:35:30 ] >>171 そのツールには、yaccのようなパーサジェネレータを含みますか? もしYesなら、Bで4つ、Dで5つ作りました。 また、Bの1つとDの2つは仕事で活用しました/しています。 わざわざ新しい言語を作る目的には、高速なコンパイル実行が要求される 場合もあるかと思いますが、扱う問題に応じた計算モデルをベースに 言語を設計した場合、コンパイル速度は大きな課題にはならないことがあります。 自分の作ったミニ言語達は、処理速度は遅いですが、仕事での使用に耐えうる モデル記述が可能であり、どれも実用性があります。
174 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 10:42:19 ] 自分は C×1 (NC工作機械制御用にRatforみたいな文法のマクロプロセッサを1つ)、 D×3 (flex/bison使用×1, jflex/cup使用×2) ただ、最近は言語と一緒に、Eclipse上で動くエディタとデバッガと カバレッジ測定ツール一緒に作れって要望が割と出るので面倒だ。
175 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 10:55:54 ] UTF-8専用の正規表現コンパイラなら作ったことあるが。 状態遷移マシンにコンパイルするので当然速い。 その他は省略。
176 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 11:13:15 ] よくわからないんだけど、Aが一番偉いって言う設定なの? 大量のファイルを高速でコンパイルできることが必要なときもあるけど、 必要でないときもあるし。まして仕事なら、必要ないのに過剰に実装して 俺スゴイとか言ってるのはただのアホだろ。 しかも、なんでその点が実装の経験を判断する基準になってるの? ツールを使ったか使ってないかがなぜ問題になるのかも謎。 体育会系の発想かな? LLなら手書きしても大して変わらないし、LALR(1)とかを手書きしたから偉い って思うやつがいたりするのか・・・? 楽していいもの作るのが優秀なプログラマだと思うけどね。根本的な 発想の違いがある気がする。 すまんマジレスしてしまった
177 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 11:15:37 ] 前スレで馬鹿にされた人が書いたから。
178 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 12:31:39 ] 大量のファイルを高速でコンパイル出来る物と言う言葉が頭に残っていたから。 後手書きは体育会系かな?
179 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 12:35:34 ] しかしこんだけ組んでる人が居るとなったら、 本来の相談室に戻した方が良いと思うけどネタがないね。
180 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 12:38:21 ] しかしこんだけ組んでる人が居るとなったら、 本来の相談室に戻した方が良いと思うけどネタがないね。
181 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 12:43:51 ] しかしこんだけ組んでる人が居るとなったら、 本来の相談室に戻した方が良いと思うけどネタがないね。
182 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 17:46:18 ] 俺は3つ作ったやつだが。ここのスレはほとんどROMだ。 最近はやりの機能や、言語的に高度な機能は、自作実用言語には 要らないんだよ。 使いたければ既存の言語を使うので十分。 結局、オリジナルな言語が欲しいのは既存の言語でめんどくさい部分を簡略化して 組込みたいor使いたい、だから記述が簡単であり、専門的な目的に強力に特化した 言語を作ってる。だからここの話題とはなじまない。
183 名前:デフォルトの名無しさん [2009/12/26(土) 18:27:58 ] >>182 いわゆるDSLでんな
184 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 19:02:20 ] 非正格な言語のコンパイラを作るとしたら、 flex/bisonでは間に合わないでしょうか?
185 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 19:08:33 ] flex/bisonは文法を解析するだけのツールだから正格も非正格も関係ないのでは
186 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 21:12:50 ] >後手書きは体育会系かな? 作った言語自身でセルフコンパイルさせる必要があったので全部手書きしたことある いまから考えたら第1段階だけyacc使えばよかったとは思うけど
187 名前:デフォルトの名無しさん [2009/12/26(土) 21:58:53 ] flex/bison 使ってるからスクラッチとはいえないかも知れないが、 宇宙系のやつを作ったことがある。
188 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 22:30:53 ] 前にも聞いたけど、ネタがないなら再投下させてもらうけど、 タイガー本の和訳ってどう?読んだ人いる? 帯の宣伝文句で、「実装と理論の卓越したバランス」みたいなことが 書いてあったけど、実際どう? まぁ和訳を読むくらいなら原書読めばいいじゃんと思わなくはないけど 原書の情報でもいいからおせーてください
189 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 22:47:46 ] 虎本ってML知らなくても読める?
190 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 02:13:05 ] しかしお笑いだなw GPCPUだかなんだか知らんけど前のスレの奴の言ったとおりの物が出てきたよ。 次はループをタスク間で動的に実行か。VMかOSの力が必用なことも言ってたとおりだなw 俺達は馬鹿と紙一重の奴を相手にしてたのか(自嘲
191 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 02:28:53 ] GPGPUのことか?
192 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 08:05:47 ] 本人が必死だな
193 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 04:11:01 ] いや、グリッド化では当たり前の未来の技術になってきてる。 言っていることと本人の性格は必ずしてイコールでは無いと言うこと。 結論を述べれば、方向性は合っていて研究中。
194 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 15:47:54 ] そんなコンパイラや実行環境はこのスレの趣旨からはみ出てないか?
195 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 16:37:24 ] ぶっちゃけ前スレの流れを断ち切りたい。
196 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 18:15:40 ] 年寄りだからそのうちくたばるだろ
197 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 20:51:30 ] 年寄り?
198 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:03:56 ] 若造が精一杯背伸びしてるみたいだが。
199 名前:デフォルトの名無しさん [2009/12/28(月) 21:06:45 ] 糞じじいは縁側で Lisp でもさわってろ
200 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 01:51:29 ] GCのないLISPを考えてみる 原因はクロージャとconsなわけであるが
201 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 02:51:34 ] 今時、GCのない言語なあ Cのシェアを奪えるのかい
202 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 14:26:29 ] クロージャはともかくconsをfree()するのは嫌。
203 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 20:59:12 ] クロージャは何トカ解析すれば消えるらしいけど consはしょうがないね。定数的に使うか、 破壊禁止にして循環構造を防げば参照カウンタで済む。 カウンタ自体のオーバーヘッド考えるとやりたくないけど。 ただ参照カウンタ式はオーバーフローの対策が要る。 1セル高々16bitにして65535になった時点で例外を投げるか。
204 名前:デフォルトの名無しさん [2009/12/31(木) 00:47:20 ] この年になっても、正直クロージャがあってよかったと思える場面に出会えてない。 みんなこんなもん?
205 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 01:09:26 ] お前の使っている言語に 簡単に使えるクロージャはあるの?
206 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 02:20:18 ] zip.2chan.net:81/5/src/1261905031562.jpg
207 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 02:47:02 ] >>200 new lispってのがそんな事やってた様な気がするが
208 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 03:03:35 ] 何の対策もない処理系でも、あらかじめ必要分を確保するとかで、 範囲内のGC起動を抑止するってことは可能だから 機能縮小してまでGCレスにする事もない気がする。
209 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 13:52:29 ] 寿命解析すれば自動的に抑止することもできるよ。 実用的には適当なところで打ちきらないとダメ。 stalinみたいに最適化に数時間かかると用途が限られる。
210 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 21:27:38 ] Domain-Specific Languagesの総本山ってどこだっけ?
211 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 10:23:53 ] pragmatic programmers のことをさがしてるのかな? 元々Unixの設定ファイルとか、Lispの方からの伝統的なものだが。
212 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 06:59:23 ] GCが有る言語は嫌いだ。リアルタイム処理が確実に出来ない可能性がある。 クリティカルパスを切れば良いんだけどね。 並列コンピュータのコンパイラは今後進歩するのかね。疑問。 >>193 や某氏の言う通りになるほど甘くはないと思うんだが。
213 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 08:12:44 ] 1980年代から研究も実装もあるんだからまずはサーベイだろ。
214 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 23:43:37 ] >>211 DSLの英語のページどこだっけ?
215 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 23:53:47 ] DSLs in Boo: Domain-Specific Languages in .NET これどうなのか書評教えてくれ
216 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 18:40:08 ] DSLってC++界隈では低く見られてない? DSLはどうせC++か何かのコードを生成するんだろ とか、汎用の言語の方が偉いとか。
217 名前:デフォルトの名無しさん [2010/01/15(金) 12:07:43 ] つーか、言語自体が全般的に(ry
218 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 12:09:19 ] ・明快入門コンパイラ・インタプリタ開発 C処理系を作りながら学ぶ(林晴比古実用マスターシリーズ) www.amazon.co.jp/dp/4797357037
219 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 12:13:53 ] 林晴比古(笑)
220 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 12:21:08 ] 読んだことないから本当に風評通りに酷いのか分からん。 昔は酷かったが成長してるのかもしれんし。
221 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 17:15:16 ] 老化してるよ
222 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 11:31:56 ] 数字読み込み関数は数字じゃない文字が来るまで文字をくっつけて返す 識別子読み込み関数は[A-Z][A-Z0-9_]*を文字をくっつけて返す "(", ")"はそのまま返す みたいにS式っぽいものトークン分解しています "(123ABC)"を "(", 数字, 識別子, ")" てトークン分解 しちゃうんですけど数字と識別子が別れていないので これはエラーにしたいです (123 ABC)と区別付きません 普通はどうやってこういうのをトークン分解するんでしょうか
223 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 12:02:51 ] >222 普通どうするかは知らないが「数字じゃない文字が来るまで」のところで判定すりゃいいだけなんじゃないの?
224 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 12:16:30 ] 数字を読んでるときにアルファベットが出てきたらエラーにする。
225 名前:222 mailto:sage [2010/01/17(日) 12:32:55 ] なる・・・ほど・・・ ありがとです
226 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 12:35:56 ] >>225 まず本を一冊通読すべき。
227 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 12:50:05 ] スレチな気もしますが、ざっと見た感じこのスレが一番近い気がするのでここで質問します。 自作のインタプリタ言語用の文法を考えています。 Ruby,Python,JavaScriptあたりを参考にしてクラス系オブジェクト指向言語に しようと考えていますが、いくつか悩んでいます。ご意見いただければ助かります。 まず、class宣言の文法です。上に挙げた言語の中では、Rubyの物を借りようと考えています。 class MyClass def my_method(arg) end end という風にしようと思っていますが、 例えば、メソッドが複数ある場合、endが関数宣言の最後なのかクラス宣言の最後なのか、 見分けがつかない事があるように思えます。 これはPythonではもう少しマシですが、クラス宣言が並んでいる場合に、 どのクラスのメソッド宣言なのかわかりにくい所があると思います。 JavaScriptでは、 MyClass.prototype.my_method = function(arg){ } のように宣言されるので、この問題はないのですが、初学者が理解しにくい点、 メソッドの宣言を一箇所にまとめる事を強制できない点から自分の趣味には合わないと感じます。 そもそも巨大なクラスを宣言すべきでない、という意見もありますが、 -> d.hatena.ne.jp/akkt/20080424/1209051266 実際問題、読みにくいコードが多いように思えます。 他の便利な記法をご存知の方はいらっしゃいますか? また、上記の記法のうちで、どれが好きですか? ご意見ください。
228 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:00:40 ] class MyClass def my_method(arg) end def end class
229 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:08:55 ] >>227 古いfortran風にブロックの対応を明示するという記法もあるよ。 #面倒なうえに逆に見難くなるなので嫌い。 class MyClass def my_method(arg) end def my_method end class Myclass 見分けやすさというレベルならもっと単純に ブロックの対応を表すコメントを追加する方がよいと思う。 有名なエディタを公式環境と決めて、それ用の自動追加マクロを作ればOK。 class MyClass def my_method(arg) end //def my_method end //class Myclass
230 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:11:48 ] Python(Haskell)みたく、オフサイドルールにしちゃえば? ttp://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%95%E3%82%B5%E3%82%A4%E3%83%89%E3%83%AB%E3%83%BC%E3%83%AB
231 名前:227 mailto:sage [2010/01/17(日) 21:19:28 ] レスありがとうございます。 >>228 見ていてVBのend subを思いだしました。 end def、end classというのは予約語を増やさないという意味で良いですね。 予約語を増やしてもいいのなら、シェルスクリプト風に class MyClass def my_method(arg) fed ssalc というのも簡潔でしょうか。 >>229 コメントで良いという意見ももっともです。 >>230 インデントだけだと、 class Hoge class Fuga def foo // Is here end of function or class? def bar のようにネストした時に、どれがどれかわからなくないですか?
232 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 22:27:53 ] beginとendの対応が見えるような短いブロックなら,インデントだけでも見難くはないと思うんだよね 長くなるとendはあってもなくても変わらないし
233 名前:227 mailto:sage [2010/01/17(日) 22:35:10 ] >>232 まったくその通りだと思います。 「インデントよりもendの方が良いけど、もっと良いのないですか?」 という質問ではなく、 「インデントも、endも、わかりにくいのですが、もっと良いのないですか?」 という質問のつもりでした。 わかりにくかったのでしたらすみません。 インデントの場合 メソッド宣言は1インデント メソッドの中身は2インデント と決めうちで書ければ良いかとも思いましたが、 それはそれでありえないと思いました。
234 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 22:10:44 ] もう JavaScript みたいにするしかないじゃん
235 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 01:14:24 ] そういえば、0123abcをエラーにしてませんでした。気をつけよっと。 xml風 <class>A <def>add a b a+b </def> </class> /def /classはキーワード class A class B def a,b a+b /def /class def a b a + b /def /class endじゃなくてe class A class B def add a,b a+b edef eclass def add a,b a+b edef eclass とか。
236 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 03:26:02 ] SGMLつかえよ
237 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 07:51:05 ] >>235 XMLベースなら改行に意味を与えない方がよいよ、とマジレス。
238 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 09:17:19 ] YAMLっぽいのはどう? A: - {add(a,b): a+b} - {sub(c,d): c-d} B: ...
239 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 11:03:57 ] LISPでいいだろ アホか
240 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 18:49:07 ] >>239 ヒント:クラス系オブジェクト指向言語
241 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 19:38:34 ] >>240 CLOS
242 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 19:54:49 ] endだけで構文解析すりゃいいだろ? インデントでなんて馬鹿げてる。
243 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 23:35:14 ] nadesi.com/man/page/%E3%82%B3%E3%83%B3%E3%83%9C forth 系のアプローチ…だと…
244 名前:227 mailto:sage [2010/01/20(水) 00:14:50 ] >>234 意味さえ分れば、プログラムは作りやすいですよね。 >>235 XMLありえなす。 edef はどうかと思いましたが、endefはアリかもw >>238 XMLのと合わせて思ったんですが、 Squeak(smalltalk)の開発環境みたいなUIで表示するのは有ですかね? まあ、自分のテキストエディタが使えないといけない、 と思う人は特定数いそうですけど。 >>241 不勉強なんですが、 CLOSはプロトタイプベースに近いのではないかと思ったんですが、 どうでしょう? マルチメソッドだけでがんがれ、という意味であれば、 それはそれでネストしないはずなので、答としてアリな気はしますね。 >>243 構文解析という意味だと、>>235 さんのedefアプローチに近いですね。 わかりやすい予約語を作れればいけそうですね。
245 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 00:29:45 ] >>244 CLOSはクラスベースだよ。defclassで定義する カプセル化はしないだけ
246 名前:227 mailto:sage [2010/01/20(水) 00:29:52 ] 連投すみません。 メソッド呼び出しの構文について質問です。 Rubyでは、 my_object.my_method arg1, arg2 のようにメソッド呼び出しの括弧を省略する事ができます。 これはとても便利だと思うので、自作の言語にもこの文法を取り込みたいです。 一方で、JavaScriptのように関数をファーストクラスオブジェクトとして 扱いたいという要求もあります。 window.set_on_exit(object.my_event_handler) などとして、イベントハンドラを追加できるような文法を考えています。 Rubyでは、 a = my_object.my_method とした時に、my_methodが呼び出され、実行結果が変数aに代入されます。 しかし、自作の言語の現在の仕様では、メソッド自体が変数aに代入されます。 この差をどう埋めるべきかで悩んでいます。 案としては、 - 特定のメソッドの時には引数は評価されないようにする。 - a = &(object.method) か a = object.&method のように&を必要とする。 などがありますがどれも綺麗ではないです。 個人的に一番良いかなと思っている仕様は、 a = object.method <= methodが返る a = object.method arg <= methodが実行される a = object.method() <= methodが実行される という、引数があれば関数呼び出しで、引数が無い場合は括弧の省略は不可という仕様です。 これは分かりにくいでしょうか? ご意見頂ければ幸いです。
247 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 00:43:05 ] 場当たりな文法は破綻しやすいからなあ。 引数を二つ取る関数に引数を一つ渡したらどうなるの? Curryingとかを調べてみると良いかも。
248 名前:227 mailto:sage [2010/01/21(木) 01:24:49 ] >>247 場当たりに見えるという事はまだ作り込みが甘いんですね。 >引数を二つ取る関数に引数を一つ渡したらどうなるの? Rubyでは、呼び出し時にエラーになりますし、 JavaScriptでは、Undefindを渡したのと同じ動作をすると思います。 このどちらかが分りやすいかなと考えています。 >Curryingとかを調べてみると良いかも。 説明が足りなかったですね。 2引数の関数を呼び出す場合には、 hoge(a, b) か hoge a, b と書くようになる事を考えています。 カリー化については、構文によるサポートはいらないのではないかと 思っています。 単にカリー化を使いこなせてないだけかもしれませんが、 あまり常用する物とは思えませんし、Haskellのような構文で部分適用を サポートすると、静的に型を解析しない言語では、 意図せずカリー化を行ってしまい、混乱するのではないかと思います。 逆にカリー化を行いたい場合には、 Rubyのようにメソッドが基本的にオブジェクトではない言語では、 currying_function = currying(method(:hoge), arg1) curring_function(arg2) のようにメソッドをオブジェクト化する必要がありますが、 メソッドや関数が初期からオブジェクトであれば、 currying_function = currying(hoge, arg1) curring_function(arg2) のように黒魔術(リフレクション)を使わずに簡潔に書けると思います。
249 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 04:10:49 ] merd.sourceforge.net/pixel/language-study/syntax-across-languages/bjcrntRfl.html homepage.mac.com/mkino2/oop/messaging.html メソッドがだとすると、その obj の生成、複製、破棄とか 気になるといえば気になるのにゃあ・・・
250 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 15:27:35 ] 引数をあらわす括弧と、演算子の優先度をあらわす括弧が ネストした時に、どれがどれかわからなくないですか?
251 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 15:33:19 ] わからなくない
252 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 23:36:25 ] >>250 形式言語とパーザの勉強して、 「曖昧な文法」ってどんなのがあるか理解しよう。