中田先生の第2版、取り次ぎに来たから少しだけ読ませて貰ったけど良い感じだった。 第一版の内容を全部覚えているわけじゃないし、ほんの数ページを見せて貰っただけだけど。
go最強だな
10 :
911 :2009/11/18(水) 12:38:55
よう、愚民ども。911様とあがめろ。 本当の俺の力を見せつけるときが来たな。 中田の本で防御してドラゴンブックで攻撃だ!
.NET Micro Framework 4.0がApache License 2.0のオープンソースになると発表されたらしいが オレオレ言語の実行環境として流用できるだろうか
よっぽど物好きでない限りCLIの上にのせる方が汎用性高くなるとは思うが
>>12 Windowsプラットフォーム前提であれば、そのとおりだろうな。
14 :
デフォルトの名無しさん :2009/11/18(水) 16:27:25
15 :
デフォルトの名無しさん :2009/11/18(水) 17:15:21
>>11 MS社の囲い込み戦術か。JVMの方が汎用性が高いしJVMの地位は落ちないと思う。
JVMの方が汎用性が高い(キリッ
17 :
デフォルトの名無しさん :2009/11/18(水) 17:25:46
エロゲの話で恐縮だが、体験版をEXEではなくFLASHで遊ばせてくれる所が出てきた。 そのうちJVMで実行できるエロゲが販売されれば、OSの選択にLinuxと言うのも出てくると思う。 今はKVMでXPを動かしてるけど、JVM版が出ればMS社にOSのライセンス料を払わなくて良くなる。 ビデオテープの原動力がエロだったという事実を考えると、OSは今、officeとエロゲで選ばれてると思うからね。
中田先生の本、新版はハードカバーじゃないのか。本屋で見てきた。
>>18 ハードカバーじゃないのか。でも価格は変わっていないんじゃなかった?
>>10 防御力-1(w
>>19 クロスプラットホームのゲームならActionScriptが組みやすいね。
ActionScriptHACKを覚えるのがやっかいだけど。
Fileアクセスの場合はlocalで実行できるけど
httpアクセスの場合、local-http-serverが必用だけど。
saveオブジェクトを作らないといけないのが面倒っちゃ面倒。
IronActionScript
スレが進まない。誰か話題をプリーズ。
C++のコードを変換するのに十分な小さい言語を定義しない?
目新しさが無いな。
俺はすごく興味ある。スレ立ててみようよ。
すぐ過疎るよ
型推論でもどうよ
コンパイラの抽象構文木の出力がlispのソースコードっぽくなるなと思っていたら lisp自体が抽象構文木だったんだってね
うーん、話がつまらない。
この前のトライ木の実装とかif-then(とラベル管理とstack管理で)関数型言語を定義することが出来る
と言う話の方が断然面白かった。
もっと意味のある話は出来ないかな。
と言うわけで
>>24 を指示する。
それってまるっきりLISPの1実装の話なんですケド
>>24 >C++のコードを変換するのに十分な小さい言語
というのは、その言語が(別の何かに)変換するということ?
その言語に変換するということ?
Cでいいだろ
GNUですな。
ぐぬぅ
コンパイラ作るのに、オートマトンとかFIRST集合とかの知識ってまったく 必要ないよな
形式言語理論の知識は必須だろ。
自分の過去の経験からすれば、言語処理系(コンパイラ or インタプリタ)を 作るだけなら、形式言語理論の知識は必須とは思えないな。 カーニハンの本「UNIXプログラミング環境」を読んでyacc&lexで C言語風のミニインタプリタを作って遊んだのが最初の経験だ。 当時はC言語の知識しか無かったけど、動く物を作ることはできたよ。
まあ動けばいいってだけなら本読んでコンパイラジェネレータの使い方覚えればなんとかなるだろうが、 ツール類が何をしてるのか理解するには初歩的な言語理論やオートマトンの知識は必要になってくるだろう。
うまくいかない時にどうしてうまくいかないか、を探るには 知識重要だな。 まぁLALRを使うならLLのための知識はいらないだろうがw
自分には必要ないからという理由で他人のチンコをちょん切りに行くのはどうかと思うんだ
俺も最初は形式言語の知識は不要だと思う。最初は逆ポーランドかS式を使うべきだと思う。 むしろ形式主義的な考え方を勉強した方がはるかに役に立つな。メタ数学オモシロス
良い感じになってきたね。
俺も
>>45 の意見に賛成。逆ポーランドから1歩ずつステップアップするのが吉。
>>41 俺はスクラッチ主義者(スピードを稼ぐため)なんだが、言っていることはその通りだな。
>>36 あんな出来損ないを作ってた奴ら(今はマシだけど)より、ここで定義した方が良い物が出来る予感。
出来損ないってバージョン1の頃のGCCのことを言ってるのか?
>>47 そう、まだ定義も決まってなかった頃の物。
GNUなんてOSも作れず、Linuxを自分たちの功績にして、
GPLでサポート等で金を稼げなんて言う奴ら。
商業ソフト(office等)の正常な商業活動が実質出来なきなくなり
ジャストシステム(エロゲ会社じゃないよw)ももうすぐやばそう。
これはMSの囲い込み政策も関連してるけど。
もちろん、GPLライセンスの功績は認めてるけど、 誰とは言わないがGNUの奴らは原理主義が多すぎ。
定義って何だ? 標準のことか?
>>50 そう、標準のこと。まあ、これ以上はスレチになるから辞めよう。
スレを無駄に使ってスマン。>all
標準って何の?
ああ、言語の標準の話か。 ごめん。
LinuxがBSDライセンスだったら今よりも良い状態だったかも 少なくともカーネル・ドライバ周辺は
言い出しっぺがやめようと言ってる話題をひきずるなよ。
56 :
24 :2009/11/23(月) 21:28:33
>>56 やめようといってるのはライセンスがらみの話のことじゃないの?
つーか24も意味不明なんだが。 何をしたいの?
みんな
>>24 に書かれていることを理解できてるのかな?
俺には理解できない…。
>>24 は
>>34 の質問に答えてほしい。
>>60 たとえば、がどこに掛かってるのか意味不明なんだが。
C--が何?
中間言語なら既存のものに合わせれば十分じゃないか。
君の意図もさっぱり判らん。
「既存のもの」のひとつとしてたとえばC--がある、と思うのだが? なににつっかかってるんだ?
C--は中間言語じゃないし
64 :
24 :2009/11/24(火) 21:13:30
私が言いたかったのは、まさにこの様な言語の事です。
今ダウンロードしたファイルを読んでる最中です。
>>60 さん、どうもありがとうございます。
え?
なんてこった! すごいなーえすぱーはいたんだなー
>>63 プログラマがC--でソースコードを直接書き下すことが想定されてるとでも?
ドキュメントと仕様見る限りではとてもそう見えないが。
Cのリテラルは対称性無さすぎ/再帰効かなすぎだから中間言語化なんて考えない方が…… そういう目的には木構造を表現できるS式 or 命令の連なりとして処理できる逆ポーランドが最適だってば。
>>68 C--はCと同列に扱っちゃだめだってば。少なくとも、Cよりははるかに機械生成されることを
想定してかなり低レベルなところまで扱える仕様になってる。つか、なんでそこで逆ポーランドとか
S式が出てくる?逆ポーランド(記法)とかS式はメタ言語であって、それ自体で何か意味のあるもの
じゃないだろ。
そう言われてみればそうかもね。 >24の字面からメタ言語の話かと思ってた。
メタ言語ってすごく意味の薄い言葉だね。
S式と逆ポを一括りにされると違和感が
結局俺言語作っても使わない。 だからまず最初に俺言語Cトランスレーターを作る。可逆でな。 C→俺言語 俺言語→C これで俺言語の役立たず度が計れる。 作れない→論外
俺言語で俺言語をビルドできれば神
>>73 C++テンプレートやLispマクロのようなコード生成を含む機構あると可逆はつらくない?
作る価値の薄い「パワーの無い」言語ほど
>>73 を実現しやすいのが
突っ込み所かもね。
>>60 仕様書を軽く読んでみたけど、面白いね。
C言語は構造化アセンブリ言語だと言われることがあるけど、
人間様がプログラミングすることを意識した高級言語として設計されていた。
でもC--言語は、C言語風の構文だけど、まさしく構造化アセンブリ言語だ。
Cから俺言語はともかく、初めから俺言語をCに変換する手段はあるといいね
バイナリを吐くだの最適化だのといったことを Cコンパイラに丸投げするのは悪くない話。
移植やクロスも楽そうだしな
Rubyもそれで作ってれば馬鹿にされずに済んだのに。
Ruby to Cのそういうものを作った例はあるよ。かなり昔だけど。 結局たいして速くならない。 メソッドを動的にディスパッチしたりとかする必要があるのは変わらないから。
ライブラリ作るのめんどくさい。 ところで、漏れは数値と文字列の自動変換て好きくないのだが 文字列しか変数に入らなくって、基本は正規表現風パターンマッチと変換だけの言語って …面白くないですね。すみません。AWKみたいだし。
ライブラリの性能で全てが決まるよ。ガンバレ。 数値と文字列の自動変換、俺も嫌い。
もうライブラリを細かく実行ファイルにしちゃって 画像も音声もみんなパイプで渡せるようにするか ファイルに作らせるかすれば、シェルスクリプトで全部できるんじゃね? っていうか組み合わせればどんどんすごいことになっていかね? と、石田先生のUnix入門を読んだときは思っていた。
64bit浮動小数点のINFとNaNの間に文字型とか入らないかな?50bitくらい使えそうなのだけど。 大富豪型プログラミングになれは、1Cell=64bitでいいよね。 もっと気張っておく?1Cell=4096byteとか。フラグメントはメモリマッパ任せとか。
>フラグメントはメモリマッパ任せとか。 これ昔実験したけどあんまり早くならないよ MMU周りのコードにもよるかもしれないけど
>>前スレ
IF GOTOで全部の構造式が出来るか。当たり前だけど力業だな。
>>89 MMUの全面的な支援がないと難しいんじゃない?
>>90 R4000系でやったんだけど基本がストールで検出なんでキャッシュがコケまくるんだよね
それだったらキャッシュが十分に効くようにして世代別のGCを普通に実装した方がはやかったんだ。
タイガー本の和訳が出てたけど、買った人いる?
93 :
デフォルトの名無しさん :2009/12/05(土) 23:38:12
yanecあげ
もう一つの日本電気?
re2c+UTF32なサンプルってmonaの所の他にありませんか?
96 :
デフォルトの名無しさん :2009/12/17(木) 20:40:42
>・前スレの911自身の書き込み、またそれに関連した書き込みを禁止致します。 > (スレが荒れる原因となります) kwsk
いちいち蒸し返すなよ.前スレ嫁
98 :
デフォルトの名無しさん :2009/12/18(金) 20:53:22
よめんからきいてんのよ!
911の事なんて語りたくもない
同意w
101 :
デフォルトの名無しさん :2009/12/20(日) 21:22:18
9.11テロか?
C--は既に廃れてる。 GIMPLE@gccはどうよ?
103 :
デフォルトの名無しさん :2009/12/21(月) 19:49:27
ATI Stream/NVIDIA CUDA両対応のC言語コンパイラ 9??の事かw >対象のC言語の記述はforループによる繰り返し制御構造で、 >特に2重の入れ子構造をもったループを効率的に扱えるという。 >SIMD型アクセラレータ上での実行に適した演算の多くはこの形式で記述できるという
>>103 変数の依存性でスピードが全然違うんだろうね。
相互に依存しない物ってなんだろう?
例えばクイックソートは依存するよね。
911wの話が本当になったw
106 :
デフォルトの名無しさん :2009/12/23(水) 00:58:04
911知りたい (T_T)
ここのスレの方が一歩送れてたか。
911の言動は感心できないが、方向性とかはちゃんと見てたな。
そうなるとNECのベクター型とIntelの提携だな。
>>106 911が自分の考えの中にエロゲの事を必ず入れていた。
それがこのスレのエロゲを卑下する人達の逆鱗に触った。
プログラムコードがエロゲ界でも経験豊かで秀逸なコンパイラをスクラッチで作っている人が出てきたら、
40才でエロゲ作ってたら氏ね。とか罵詈雑言。
911と、そのエロゲプログラマが作ったコードでその人を見れないスレ住人の中に確執。
おれは911も悪いと思ったが、コードで人を見れない奴はイヤだな。
configureにも使われてるm4という汎用マクロ言語を勉強しよう
> プログラムコードがエロゲ界でも経験豊かで秀逸なコンパイラをスクラッチで作っている人 ……
秀逸なコンパイラ→オールドスクールなコンパイラ ASCII創成期かと思ったよ。 しかし作者を叩く人は少なく、変な持ち上げ方をしている奴が馬鹿にされただけ。
> ASCII創成期かと思ったよ。 えーなに、GAME(言語)ですか?
ああ、構文すらもマクロで組めるパスカルライクなゲーム様汎用コンパイラ。
いままで100本ぐらいエロゲを作って、 その他win3.1/95時代に色々なプログラムで稼いだ金を使って、 エロゲ会社立ててポルシェ乗り回してる成功者だね。 ブログでは引っ越しするからアーロンチェアとか after effectとか高位物をいろいろみんなに配ってる。
LISPとPASCALで良い意味でも悪い意味でもOLD SCHOOL。
ブログ見てきた。 こんな事やっちゃって、この人は自分が妬まれる位置にいることを分かってないね。
いいじゃないのさ。一攫千金。金があってこそできる善行だってある。
話は戻すけど、依存性のないループなんてほぼ無いんじゃないか? どういった用途に使われるコンパイラだろう。 昔、IntelC/C++コンパイラ使ったときは落胆した。VSの方が早いんだもん。 あれはライブラリの料金なのかね。
>>116 まあそうだけどさ。
表だってやらなきゃ妬まれないのに。
泥棒にも狙われるぞ。
でも、アーロンチェアとafter effectとA3スキャナとGP225は欲しいな。 田舎だから家だけは広いし。
>>117 ハマルと早いよ。しかし、クリティカルな部分はV-TUNEでカリカリ書いた方が速い。
FORTRANコンパイラ由来で、ループの直前のイテレーションにのみ依存するだとか、 行のループの間隔で依存するだとか、そういうものを検出する技法はたんとある。
>>121 そっか。中田氏の最適化の本は斜め読みした程度だけど、
そこまで進んでいるのか。
しかしIntelコンパイラは上手く使いこなせなかった。
PentiumのUVの2パイプを意識して手でASMを組んだ方が速かったな。
そのときはV-TUNEが役に立った。
スパコンのベクトル化コンパイラはある程度やってるよ。 手でコンパイラ好みのコードに書き直さないと、 ハードウェアの性能は引き出せないけど。
やはり並列化は大変だね。
9??の話を続けるのも何だし、もうそろそろ何か新しい話題に移ろう。
>>110 ちょっと聞きたいんだけど、大量のファイルを高速でコンパイルでき、
構文までマクロで組める汎用コンパイラをスクラッチからあなたは実際に組んだの?
実装は無しなんて言ったら何でもOKだよね?
噛みつきたいんじゃなく、そこまで自信満々だったら見せてよ。
サブセットでもいいからさ。
例の奴の話を蒸し返すのは嫌なんだけど自信満々で言われるとあなたがどれぐらい凄いか興味がある。
>>110 今細かく見たらマクロの機能もMASM6を超えてんじゃん。
これのどこがASCII創刊時の機能だと言い切れるの?
>>127 鼻息荒いね。
ここでは実装は軽視される。
ある意味浮世離れしているスレだよ。
その氏のは前スレで言ってることが本当ならば実装は凄いよ。
しかし、エロゲには必要ないがオブジェクト指向とかがこのスレの本分。
あと、ここに来ている全員が凄腕ではなく一部だけだと思うから、
煽りにいちいち反応しない方が良いよ。体に悪い。
俺は凄腕だけどね。多分、学会関連で知れていると思う。
129=130ね。
132 :
130 :2009/12/24(木) 05:21:10
中田なんてオヤジが権威とされてる時点で世界に遅れてる。 ドラゴンブックも古い。 出版不況じゃなければ一般向けの本を出したいよ。
133 :
130 :2009/12/24(木) 06:18:10
すまん、名前間違えた。
>>129 最終的に実行スピードとバグの無さが全てだよ。
オブジェクト指向なんてGCの問題もあるしファイル単位で関数郡をつくればいいし。
構造化で十分だと思ってる。
それを考えると114の言語が現在ではベターだと思う。
>>135 おまいさんも鼻息荒いな。
某氏のコンパイラはエロゲの現状に即してる。そしてハイスピード、バグを出さない仕様。
FORTRAN,C,JAVA,どれも得意分野違うじゃん。
ここは実装の話だけじゃないんだよ。
しかし
>>110 がどれぐらい出来るかは示して欲しいな。だって他人を卑下したんだから
俺も叶わないスーパープログラマなんだろうな。
>>136 そんな物組めないの分かってるのに性格悪いなw
138 :
デフォルトの名無しさん :2009/12/24(木) 09:28:57
こういった情報系の大学でお薦めのところありますか? 国内で。やはり東大ですか? orz
頭悪いのがまだ居座ってるのがわかったのでそういう質問は勘弁してください
>>139 本当にそう思ってるのならそんな1行レス辞めなよ。それこそ頭悪そうだ。
141 :
139 :2009/12/24(木) 12:07:10
>>140 お前の腐った目から見て俺の頭が悪そうでもまったく問題ない。実際には俺の頭は良いんで。
Rubyで3DCGのファイルフォーマットのパーサーを書いたら すんげー遅い(8秒ぐらい)なんですが何とかなりませんか 1秒以下が希望です。
>>141 はいはい。どこの院生ですか、お坊ちゃま。
あとサンプルあげてよ。口ではいくらでも言えるからね。
>>143 SEEKが遅いとか?
ホットポイントが明確でないときついな。
145 :
139 :2009/12/24(木) 12:25:59
>>143 日本語読めないのか? お前の腐った目にどう映ろうが俺は構わないのに、誰がサンプルなんか上げるかw
さあ、あとは「上げられないんだろ」とか好きなだけ妄想して、
「最後にレスした俺が勝ち」ゲームの勝者となりたまえw
自称天才の馬鹿の集まりでした。以上。
自称天才で構ってちゃんで馬鹿の集まりでした。以上。
>>142 一般的な手順を踏むしかないわな
プロファイラでボトルネックを発見し、そこを何とかできないか考える
ただ、少なくとも今のところ、Rubyはお世辞にも速い言語じゃないので、
頑張ってもどうにもならない可能性は否定できない
院生呼ばわりで勝った気か。2ちゃん脳社会人の典型だな。
僕は実装が見たいとかあんまし思わないんですが、なんで世の殿方は実装とか珍重するのでしょうか。 ただのプログラムじゃん。 わかんない。田代とかもわかんない。得るものが少ないと思います。 したがってジャンプに載ってる実装をメインテーマにした実装コメントというか もよくわかりません。ただのプログラムです。 さらにそもそも女子はなぜ実装の話ばかりするのですか。 あまつさえ学校でも実装の話をしたりするのですか。僕は賛成ですが。 いや賛成なのは実装の話が出るからじゃないです。なんとなくいいからです。 僕は女子高生の実装とかそういうものは大好きです。 いや問題なのは女子高生の制服ではなくてパンツです。 パンツが見えててもかまいませんが、布だと思います。 いやそうではなくて、なぜパンツの出るような服を着るかということです。僕は賛成ですが。 すいません。まちがいました。もういいです。
151 :
デフォルトの名無しさん :2009/12/24(木) 13:52:36
香ばしいんだけど テンプレのサイトあちこち潰れててどこも古めかしいんだけど今ならどこ見りゃいいでしょうか
>>142 その3DCGのファイルフォーマットって具体的には何?
もしそれがXML形式で、標準ライブラリのREXMLを使っているのなら、
代わりにたとえばLibXml(
http://libxml.rubyforge.org/ )のような
C言語で記述された拡張ライブラリを使いなさい。
もしそれが構造化テキスト形式で、手作業でパーザを書いているなら、
Raccと(標準ライブラリの)strscanを使ってパーザを書き直しなさい。
RaccランタイムとstrscanもC言語で記述された拡張ライブラリです。
速い遅いはデータ量とマシン性能に依存するからあいまいになるけど、
上記の方法なら数キロステップのテキストを1秒以内で読み込みできるよ。
あとは
>>148 が書いてくれているプロファイラの活用かな。
>>141 日本語が不自由な方がこんな事を言うなんて…
>>139 ここまで頭の悪い奴がどんなコードを組むかは興味がある。
変態という名の紳士、いやいや天才という名のキチガイが何匹か紛れ込んでるみたいだけど
本物はこんな所に居ない。今までだってちゃちな物ばかりだったし。
>>142 Rubyは重いよ。趣味でやるなら良いけど仕事では用途を選ぶ。
ホットポイントを見つけて最適化という地道な作業と
>>152 氏の
事をやってみるしかない。後はRubyスレで聞いた方が速いよ。
今は実行環境にJVMがあるからお気楽にコンパイラ作れるね。
>>155 うさみちゃんだっけ?
しかしここが進むときは荒れるときで、決まって現物のコンパイラが出てこないね。
出せるわけないじゃん、馬鹿だな〜
159 :
157 :2009/12/24(木) 15:54:27
何故出てこれないか考えられないなんて馬鹿だねw
「考える」ことは誰でもできるね。 馬鹿はそれを「わかる」と混同しがち。
>>151 学生が作ってたところとかのきなみ全滅だな。
せっかくwikiがあるし、そっちのまとめを参照ってことにするか次スレから。
BNFで何か楽しい言語定義してよ。
楽しい言語とは? BrainfuckとかWhitespaceみたいなやつ?
Brainfuckなんて良いね。面白そう。
165 :
デフォルトの名無しさん :2009/12/25(金) 00:27:10
この産業も斜陽だしな 萌えとかエロとかは、食っていくに必要
では萌えキャラに質問形式でプログラムを作らせて実行さすUIはどうか うまく実行できるとエロい事が起こる
>>110 > しかし作者を叩く人は少なく、変な持ち上げ方をしている奴が馬鹿にされただけ。
図星のレスで荒れたなw
だって誰もコンパイラ見せてくれないんだもん。当然荒れるよ。
ないそではふれないっていうか・・
170 :
デフォルトの名無しさん :2009/12/25(金) 22:03:13
>>166 普通に Lisp 優位だろうな。それやるとなると
点呼を取ります。 A)仕事で使用に耐えうる大量のファイルを高速でコンパイル出来る物を作った人 B)言語をスクラッチで作った人 C)トランスレーターをスクラッチで作った人 D)ツールを使って作った人。 自分はB。構造化言語。
おれもBだ、言語的には3つ作った。
>>171 そのツールには、yaccのようなパーサジェネレータを含みますか?
もしYesなら、Bで4つ、Dで5つ作りました。
また、Bの1つとDの2つは仕事で活用しました/しています。
わざわざ新しい言語を作る目的には、高速なコンパイル実行が要求される
場合もあるかと思いますが、扱う問題に応じた計算モデルをベースに
言語を設計した場合、コンパイル速度は大きな課題にはならないことがあります。
自分の作ったミニ言語達は、処理速度は遅いですが、仕事での使用に耐えうる
モデル記述が可能であり、どれも実用性があります。
自分は C×1 (NC工作機械制御用にRatforみたいな文法のマクロプロセッサを1つ)、 D×3 (flex/bison使用×1, jflex/cup使用×2) ただ、最近は言語と一緒に、Eclipse上で動くエディタとデバッガと カバレッジ測定ツール一緒に作れって要望が割と出るので面倒だ。
UTF-8専用の正規表現コンパイラなら作ったことあるが。 状態遷移マシンにコンパイルするので当然速い。 その他は省略。
よくわからないんだけど、Aが一番偉いって言う設定なの? 大量のファイルを高速でコンパイルできることが必要なときもあるけど、 必要でないときもあるし。まして仕事なら、必要ないのに過剰に実装して 俺スゴイとか言ってるのはただのアホだろ。 しかも、なんでその点が実装の経験を判断する基準になってるの? ツールを使ったか使ってないかがなぜ問題になるのかも謎。 体育会系の発想かな? LLなら手書きしても大して変わらないし、LALR(1)とかを手書きしたから偉い って思うやつがいたりするのか・・・? 楽していいもの作るのが優秀なプログラマだと思うけどね。根本的な 発想の違いがある気がする。 すまんマジレスしてしまった
前スレで馬鹿にされた人が書いたから。
大量のファイルを高速でコンパイル出来る物と言う言葉が頭に残っていたから。 後手書きは体育会系かな?
しかしこんだけ組んでる人が居るとなったら、 本来の相談室に戻した方が良いと思うけどネタがないね。
しかしこんだけ組んでる人が居るとなったら、 本来の相談室に戻した方が良いと思うけどネタがないね。
しかしこんだけ組んでる人が居るとなったら、 本来の相談室に戻した方が良いと思うけどネタがないね。
俺は3つ作ったやつだが。ここのスレはほとんどROMだ。 最近はやりの機能や、言語的に高度な機能は、自作実用言語には 要らないんだよ。 使いたければ既存の言語を使うので十分。 結局、オリジナルな言語が欲しいのは既存の言語でめんどくさい部分を簡略化して 組込みたいor使いたい、だから記述が簡単であり、専門的な目的に強力に特化した 言語を作ってる。だからここの話題とはなじまない。
183 :
デフォルトの名無しさん :2009/12/26(土) 18:27:58
非正格な言語のコンパイラを作るとしたら、 flex/bisonでは間に合わないでしょうか?
flex/bisonは文法を解析するだけのツールだから正格も非正格も関係ないのでは
>後手書きは体育会系かな? 作った言語自身でセルフコンパイルさせる必要があったので全部手書きしたことある いまから考えたら第1段階だけyacc使えばよかったとは思うけど
187 :
デフォルトの名無しさん :2009/12/26(土) 21:58:53
flex/bison 使ってるからスクラッチとはいえないかも知れないが、 宇宙系のやつを作ったことがある。
前にも聞いたけど、ネタがないなら再投下させてもらうけど、 タイガー本の和訳ってどう?読んだ人いる? 帯の宣伝文句で、「実装と理論の卓越したバランス」みたいなことが 書いてあったけど、実際どう? まぁ和訳を読むくらいなら原書読めばいいじゃんと思わなくはないけど 原書の情報でもいいからおせーてください
虎本ってML知らなくても読める?
しかしお笑いだなw GPCPUだかなんだか知らんけど前のスレの奴の言ったとおりの物が出てきたよ。 次はループをタスク間で動的に実行か。VMかOSの力が必用なことも言ってたとおりだなw 俺達は馬鹿と紙一重の奴を相手にしてたのか(自嘲
GPGPUのことか?
本人が必死だな
いや、グリッド化では当たり前の未来の技術になってきてる。 言っていることと本人の性格は必ずしてイコールでは無いと言うこと。 結論を述べれば、方向性は合っていて研究中。
そんなコンパイラや実行環境はこのスレの趣旨からはみ出てないか?
ぶっちゃけ前スレの流れを断ち切りたい。
年寄りだからそのうちくたばるだろ
年寄り?
若造が精一杯背伸びしてるみたいだが。
199 :
デフォルトの名無しさん :2009/12/28(月) 21:06:45
糞じじいは縁側で Lisp でもさわってろ
GCのないLISPを考えてみる 原因はクロージャとconsなわけであるが
今時、GCのない言語なあ Cのシェアを奪えるのかい
クロージャはともかくconsをfree()するのは嫌。
クロージャは何トカ解析すれば消えるらしいけど consはしょうがないね。定数的に使うか、 破壊禁止にして循環構造を防げば参照カウンタで済む。 カウンタ自体のオーバーヘッド考えるとやりたくないけど。 ただ参照カウンタ式はオーバーフローの対策が要る。 1セル高々16bitにして65535になった時点で例外を投げるか。
204 :
デフォルトの名無しさん :2009/12/31(木) 00:47:20
この年になっても、正直クロージャがあってよかったと思える場面に出会えてない。 みんなこんなもん?
お前の使っている言語に 簡単に使えるクロージャはあるの?
>>200 new lispってのがそんな事やってた様な気がするが
何の対策もない処理系でも、あらかじめ必要分を確保するとかで、 範囲内のGC起動を抑止するってことは可能だから 機能縮小してまでGCレスにする事もない気がする。
寿命解析すれば自動的に抑止することもできるよ。 実用的には適当なところで打ちきらないとダメ。 stalinみたいに最適化に数時間かかると用途が限られる。
Domain-Specific Languagesの総本山ってどこだっけ?
pragmatic programmers のことをさがしてるのかな? 元々Unixの設定ファイルとか、Lispの方からの伝統的なものだが。
GCが有る言語は嫌いだ。リアルタイム処理が確実に出来ない可能性がある。
クリティカルパスを切れば良いんだけどね。
並列コンピュータのコンパイラは今後進歩するのかね。疑問。
>>193 や某氏の言う通りになるほど甘くはないと思うんだが。
1980年代から研究も実装もあるんだからまずはサーベイだろ。
DSLs in Boo: Domain-Specific Languages in .NET これどうなのか書評教えてくれ
DSLってC++界隈では低く見られてない? DSLはどうせC++か何かのコードを生成するんだろ とか、汎用の言語の方が偉いとか。
217 :
デフォルトの名無しさん :2010/01/15(金) 12:07:43
つーか、言語自体が全般的に(ry
林晴比古(笑)
読んだことないから本当に風評通りに酷いのか分からん。 昔は酷かったが成長してるのかもしれんし。
老化してるよ
数字読み込み関数は数字じゃない文字が来るまで文字をくっつけて返す 識別子読み込み関数は[A-Z][A-Z0-9_]*を文字をくっつけて返す "(", ")"はそのまま返す みたいにS式っぽいものトークン分解しています "(123ABC)"を "(", 数字, 識別子, ")" てトークン分解 しちゃうんですけど数字と識別子が別れていないので これはエラーにしたいです (123 ABC)と区別付きません 普通はどうやってこういうのをトークン分解するんでしょうか
>222 普通どうするかは知らないが「数字じゃない文字が来るまで」のところで判定すりゃいいだけなんじゃないの?
数字を読んでるときにアルファベットが出てきたらエラーにする。
225 :
222 :2010/01/17(日) 12:32:55
なる・・・ほど・・・ ありがとです
スレチな気もしますが、ざっと見た感じこのスレが一番近い気がするのでここで質問します。
自作のインタプリタ言語用の文法を考えています。
Ruby,Python,JavaScriptあたりを参考にしてクラス系オブジェクト指向言語に
しようと考えていますが、いくつか悩んでいます。ご意見いただければ助かります。
まず、class宣言の文法です。上に挙げた言語の中では、Rubyの物を借りようと考えています。
class MyClass
def my_method(arg)
end
end
という風にしようと思っていますが、
例えば、メソッドが複数ある場合、endが関数宣言の最後なのかクラス宣言の最後なのか、
見分けがつかない事があるように思えます。
これはPythonではもう少しマシですが、クラス宣言が並んでいる場合に、
どのクラスのメソッド宣言なのかわかりにくい所があると思います。
JavaScriptでは、
MyClass.prototype.my_method = function(arg){
}
のように宣言されるので、この問題はないのですが、初学者が理解しにくい点、
メソッドの宣言を一箇所にまとめる事を強制できない点から自分の趣味には合わないと感じます。
そもそも巨大なクラスを宣言すべきでない、という意見もありますが、 ->
http://d.hatena.ne.jp/akkt/20080424/1209051266 実際問題、読みにくいコードが多いように思えます。
他の便利な記法をご存知の方はいらっしゃいますか?
また、上記の記法のうちで、どれが好きですか?
ご意見ください。
class MyClass def my_method(arg) end def end class
>>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
231 :
227 :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
のようにネストした時に、どれがどれかわからなくないですか?
beginとendの対応が見えるような短いブロックなら,インデントだけでも見難くはないと思うんだよね 長くなるとendはあってもなくても変わらないし
233 :
227 :2010/01/17(日) 22:35:10
>>232 まったくその通りだと思います。
「インデントよりもendの方が良いけど、もっと良いのないですか?」
という質問ではなく、
「インデントも、endも、わかりにくいのですが、もっと良いのないですか?」
という質問のつもりでした。
わかりにくかったのでしたらすみません。
インデントの場合
メソッド宣言は1インデント
メソッドの中身は2インデント
と決めうちで書ければ良いかとも思いましたが、
それはそれでありえないと思いました。
もう JavaScript みたいにするしかないじゃん
そういえば、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 とか。
SGMLつかえよ
>>235 XMLベースなら改行に意味を与えない方がよいよ、とマジレス。
YAMLっぽいのはどう? A: - {add(a,b): a+b} - {sub(c,d): c-d} B: ...
LISPでいいだろ アホか
endだけで構文解析すりゃいいだろ? インデントでなんて馬鹿げてる。
244 :
227 :2010/01/20(水) 00:14:50
>>234 意味さえ分れば、プログラムは作りやすいですよね。
>>235 XMLありえなす。
edef はどうかと思いましたが、endefはアリかもw
>>238 XMLのと合わせて思ったんですが、
Squeak(smalltalk)の開発環境みたいなUIで表示するのは有ですかね?
まあ、自分のテキストエディタが使えないといけない、
と思う人は特定数いそうですけど。
>>241 不勉強なんですが、
CLOSはプロトタイプベースに近いのではないかと思ったんですが、
どうでしょう?
マルチメソッドだけでがんがれ、という意味であれば、
それはそれでネストしないはずなので、答としてアリな気はしますね。
>>243 構文解析という意味だと、
>>235 さんのedefアプローチに近いですね。
わかりやすい予約語を作れればいけそうですね。
>>244 CLOSはクラスベースだよ。defclassで定義する
カプセル化はしないだけ
246 :
227 :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が実行される という、引数があれば関数呼び出しで、引数が無い場合は括弧の省略は不可という仕様です。 これは分かりにくいでしょうか? ご意見頂ければ幸いです。
場当たりな文法は破綻しやすいからなあ。 引数を二つ取る関数に引数を一つ渡したらどうなるの? Curryingとかを調べてみると良いかも。
248 :
227 :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)
のように黒魔術(リフレクション)を使わずに簡潔に書けると思います。
引数をあらわす括弧と、演算子の優先度をあらわす括弧が ネストした時に、どれがどれかわからなくないですか?
わからなくない
>>250 形式言語とパーザの勉強して、
「曖昧な文法」ってどんなのがあるか理解しよう。
perlfunc List operators take more than one argument, while unary operators can never take more than one argument. Thus, a comma terminates the argument of a unary operator, but merely separates the arguments of a list operator.
明快入門コンパイラ・インタプリタ開発 C処理系を作りながら学ぶ 神本だった。ここでうだうだ糞文法の質問している奴 読めや
本を紹介するんならICBMくらい書けや
テポドン2号だと? おまえ、それかっぱえびせんじゃねえか
ワロヒコ乙
260 :
227 :2010/01/22(金) 03:00:20
>>249 C#などのように扱い始める時にオブジェクトの生成を行う方法と、
JavaScriptのようにメソッドの定義時に行う方法があると思っていますが、
後者の方が心理モデルを構築しやすく、理解しやすいと思っています。
オブジェクトにはフィールドとメソッドがペタペタくっついてる、と
説明すると、初学者にも理解してもらいやすいのではないでしょうか?
>>250-253 たしかに分かり難い所があるかもしれません。
この点に関しては、
>>253 であげられた所ドユメントでも、
> the simple (but occasionally surprising) rule is this:
と書かれています。
Perlは各関数が取る引数の数によってどうパースされるかが変わります。
Rubyでは、"p (1) - 2"というコードで 1.6 と 1.8 で結果が違います。
また、Ruby 1.8 では、引数の数でも変わります。
これらをふまえると、単純に関数名の後ろのスペースの有無で評価結果を
変えるのが良いのではないかと思っています。
私は過去にCなどの言語で関数名の後ろにスペースを入れるべきという主張を
見た事がありませんし、while, for 等の構文と関数呼び出しを
スペースの有無で見わけるという、コーディング規約も一般的だと思います。
そのため、自由度は減りますが、見た目的には良いのではないでしょうか?
>>254 どのような点が良いのでしょうか?
Cのような低いレイヤの処理系を実装するとなるとinline化の判断や
可変長配列サポートの仕方とかが気になりますが、
その辺はまっとうな方法を紹介してますか?
土日に本屋に行って探してみます。
>>255 じゃあ、ABMで。
261 :
デフォルトの名無しさん :2010/01/22(金) 05:11:45
>Rubyでは、"p (1) - 2"というコードで 1.6 と 1.8 で結果が違います。 >また、Ruby 1.8 では、引数の数でも変わります。 Ruby作ってる奴ってアホだろ
> while, for 等の構文と関数呼び出しを > スペースの有無で見わけるという、コーディング規約も一般的だと思います。 ナンセンス。 エディタと文法と実行モデルを区別しようぜ。
>>261 a +b と a + b で意味が違うとかな。
アホ扱いされる一面ではある。
>>260 そういう、レキシカルアナライザの挙動が、パーサに左右される状態に依って変わる、
なんていう言語はパーサとレキシカルアナライザを作るのが大仕事になる。
なに考えてるのかわからんが素直に正規表現でトークンを切り出して、LL(1)かLALR(1)で
処理できる文法にしたほうがよい。まずは。
>>260 > Cのような低いレイヤの処理系を実装するとなるとinline化の判断や
> 可変長配列サポートの仕方とかが気になりますが、
> その辺はまっとうな方法を紹介してますか?
お前、自分のレベルにあった本をまず読めよ。
なんで上から目線なんだw
ワロヒコの本を紹介するような椰子には、上から目線で当然だろwwwww
266 :
227 :2010/01/23(土) 00:12:26
>>261 ,
>>263 知らなかった。確かに違う。> a +b と a + b で意味が違う
この辺、複雑なルールなのに穴に落ちる事が少なく
普通の使用者は気がつかないようになってるのが、凄いですね。
本当にRubyの作者はアホですね。
このRubyのやつとか、Perlの関数名によってパース結果が変わるのとか、
真似するのはやめるべきですね。シンプルよりも使いやすさを求めるのではなく、
許容できない使いにくさが無い範囲でシンプルな文法を目指したいですね。
>>246 で書いた文法の場合、正確に文法を書くとすると、
関数呼び出し ← id ( '('? (式 ',')+ ')'? / '()' )
参照 ← id
にしようと考えています。( ?は省略可能, /はor, +は一回以上の繰り返し)
要は、idの後ろからその式の終端までに他の式があれば
関数呼び出しとして扱うつもりです。
LL(1)だと、 a(1) と a = 1 が両方パースできません。
PEG文法の範囲の文法が使いやすくて良いと思います。パーサの実装も楽です。
LLだと無限大相当ですが。
267 :
227 :2010/01/23(土) 00:13:47
>>262 区別できてる気はしませんが、話したいのは文法についてです。
while (true);
myfunc(true);
のように書き分けるコーディング規約は一般的だと思いますが、違いますか?
検索して3番目に出てきたPearライブラリの規約では、
http://pear.php.net/manual/ja/standards.control.php > 制御構造では、関数コールと区別するために、 制御キーワードと開きカッコの間に空白を 1 つ置きます。
と書かれていました。皆これを当然と思っているのなら、
関数名の後ろにスペースを入れた場合、エラーになるまたは違う解釈をする、
というのは落とし穴にならないのではないでしょうか?
>>264 設計、実装にあたり参考になる本を紹介してもらう事もあるかもしれませんが、
それは、それでよろしくおねがいします。
ちなみにどんなレベルが私に合ってると思いますか?
>>265 私が言うのも何ですが、何でこのスレではそこまで煽られてるんですか?
>>266 の文法はPEGとしても
>>246 の例と一致していないよ。たとえば
「func a, b,」や「func (a,」が関数呼び出しにマッチしている。
書きたかったのは下のような奴じゃないかと思うんだけど。
関数呼び出し := id ( '()'
/ 式 ( ',' 式 )*
/ '(' 式 ( ',' 式 )* ')' )
で、この文法ってRubyと大差ない複雑さだよ。
「f f, f a, b, c」とか、式の中に裸の「,」が出てきたら困るよね。
横レス失礼
>>266 ,267
言っている事が矛盾している気がするヨ。
>>266 では、a +b と a + b で意味が違う事を問題としているが、
これはRubyが構文によってセパレータ(字句区切り子)の解釈が異なる事に起因する。
しかし「二項演算子の前後には空白を入れる」という一般的なコーディング規則に
従っていれば実用上の問題は生じない。
対して、
>>267 ではwhile文と関数呼び出しという二つの構文で、セパレータの
解釈が異なることを問題としていない。それを一般的なコーディング規則であるから、
問題は生じない(落とし穴にならない)と主張している。
Rubyの構文が汚いのは分かるから、
>>263 が助言しているように、
まずはセパレータでトークンを区切って素直にパーズできる文法で設計することを勧める。
>>268 ここはこれでも全然煽られてないんだよ。
能力を持った人しか来れないし。
逆にエロゲの人でも能力を持っていればそれほど煽られない(煽られないことはないが)。
君みたいにダメプログラマで上から目線なら、今までだったらもっと煽られて相手にされてないよ。
トークンの切り出し程度で悩んでるなんて、ここに来る資格はない(断言
偉そうなこと言っといて安価ミスってると恥ずかしいよね
ああ(笑
>>267 >while (true);
>myfunc(true);
>のように書き分けるコーディング規約は一般的だと思いますが、違いますか?
少なくとも、コーディング規約としては一般的ではない。
ワロヒコって言った奴ちょっと出てこい
>>273 CのK&RやJavaは、そうやって書き分けるだろ。それが一般的。
GNUが特殊だと思う。
>>246 俺はそれでいいと思う。PythonとRubyの折衷案みたいだね。
r = obj.method1
s = r a, b
obj.method2 c, s, d
こんな3行があったとき、sを使わずにrの結果を直接method2に渡すと
r = obj.method1
obj.method2 c, r a, b, d
となる。
これをパースするのが難しそうな気がする。
280 :
227 :2010/01/23(土) 15:47:09
>>268 ,
>>277 その点は見逃していました。
たしかに(人間にとって)パースするのが難しいですね。
試しにRubyで試してみた所、
def a(*x)print"a";p x end;def b(*x)print "b";p x end;a 1,b 2,3
syntax error, unexpected tINTEGER, expecting kDO or '{' or '('
との事です。引数列の中では、関数呼出の括弧は省略不可なのでしょうか?
PEG文法は貪欲なアルゴリズムなので
a 1,b 2,3 は a(1,b(2,3)) になります。
これは罠になる事が多いでしょうか?
このようなコードはとても読みにくいとは思いますが、
そもそも書く方も混乱するので書かれにくく、
プログラムを書く時の罠にはならないかと思います。
>>273 ,
>>275 ,
>>276 GNUのコーディング規約はスペース開けるんですね。知りませんでした。
論点としては、
while の後ろにスペースを開けるのが一般的かどうかではなく、
関数名の後ろにスペースを開けない事が一般的かどうかですね。
これも、func (1)+2 という罠コードを書かないという風にすればいいんですが。
どちらも、RubyのようにWarningを出す等の処理をすれば良いですかね?
281 :
227 :2010/01/23(土) 15:48:12
脇道
>>268 すみません、適当を書きました。
手元のでは a(0)[1](2) みたいなののサポートも入ってたのですが、
今回は省略です。
>>269 矛盾というか、同じ論法で正反対の結論になってると言いたいわけですね。
それは前提となるコーディング規約が重要なのではないでしょうか?
私は二項演算子の前後に空白を入れるのはそんなに一般的でないと思っています。
皆さんはどうですか?
>>269 ,
>>270 今論じてる、fun(foo,bar)とfun foo,bar の間の話に、
トークナイズ(字句解析)は関係ないと思ってるんですが、私の言葉の使い方は間違ってますか?
"fun(foo,bar);" => ['fun','(','foo',',','bar',')',';'] という処理の事を字句解析と言うと認識してるんですが。
282 :
デフォルトの名無しさん :2010/01/23(土) 19:05:04
二項演算子の間に空白を入れる人は多いよ。 fun(foo,bar)とfun foo,barを同居させた奴が前スレにいたよ。 エロゲプログラマだったけど。
283 :
デフォルトの名無しさん :2010/01/23(土) 19:06:39
関数宣言の時にカッコの後ろに空白をいれるのは検索性を良くするためで、 来れも結構いるよ。
そもそも
>>246 の
>引数があれば関数呼び出しで、引数が無い場合は
>括弧の省略は不可という仕様です
これがおかしい
そんな半端に括弧を省略して何になる
a = call object.method
だろ
文法より意味論をまず確定しろ
286 :
デフォルトの名無しさん :2010/01/23(土) 19:36:35
もうちょっと勉強してから質問しないと、低レベルすぎて話にならないよ。 9??の馬鹿の方がまだ良かったかな。 しかし、こんな素人にみんないつのまに優しくなったんだ?
レベルより態度。
288 :
デフォルトの名無しさん :2010/01/23(土) 19:40:31
9??の態度は最悪だったなw その後にマルチスレッドのコンパイラが出たのは、人格と能力はべつもんと知ったな。
290 :
デフォルトの名無しさん :2010/01/23(土) 19:50:17
>>283 自己レス
カッコの後ろ->カッコの前。恥ずかしい…orz
>>288 これが18年前に作られたそうだ。OO的にはダメダメだけどエロゲ程度で作るのなら関数型が分かり易くて良いだろう。
しかもコンパイルスピードは高速らしい。 makeを内蔵してマスター時のスピードを少しでも上げるんだとさ
まあ、物を見てないんでホントかどうかは怪しいが。
計算機はプログラマの人格には無頓着だからな。 ネットでは人格が変わる人もいるから、そっちかもしれんが。
Horizontal Layoutってどう思う? 1 + 2*3 と書くと2*3を先に計算して 1+2 * 3 と書くと1+2を先に計算するって奴。
きもい。Cの優先順位が身に染みてるけど、メンテのためにカッコをいれる。
それに比べて
>>295 は俺にはなじまん。
1 + 2 * 3 は?
スペース同じなら * 優先
同じなら左優先
GAME言語は左優先だったな APLもだっけ? 1 2 3 ADD MULがいいか MUL(1, ADD(2, 3))がいいか (MUL 1 (ADD 2 3))がいいか ((1 2 ADD) 3 MUL) Lisp+Forthも面白いか。 でも世の中にはカンマと小数点が逆の国があるらしくて そういう国の人はどう思うのだろうというのも時々
301 :
295 :2010/01/23(土) 20:20:33
聞いておいてなんだけど自分もキモいと思う。
採用している言語もほとんどないしね。
>>297 1+2*3
1 + 2 * 3
のように均等に分けた場合は演算子の優先順位で決まるらしい。
1/((2+3)*4) とかどうするの? 1 / 2+3 * 4 とか書くの? 空白多すぎて読み辛いよ・・
Smalltalkも左優先。
>>302 空白の数で優先度が決まるのかw。
いっそ、空白やTABの数で演算子の種類が略
Smalltalk はメッセージ式のルールが上位にあるからシンプルで分かり易い。
>>300 >にはカンマと小数点が逆の国
フランス、スペイン、イタリア、ドイツあたりがそうらしい。
'.'の代わりにスペースを使う場合もあるとか。
>Smalltalk はメッセージ式のルールが上位にあるからシンプルで分かり易い。 今でも慣れない、四則演算は小学校で習うから体に染みついてる 数値演算でバグだすとマジ悩む>>Smalltalk
Scalaの、通常の四則演算を多記号に拡張したような規則は 面白いなあと思ってたんだが、アレは元ネタがあるんだろうか
だいたい、文字列みたいな一次元で表現しようとするから困るんだよ。 二次元に数式置いて、近い順に演算するってのはどう? 三次元に拡張して、上の段が掛け算、下の段が割り算でもいいよ。 この球の中の総和、みたいな。
「左結合」「右結合」という術語があるんだから使いましょうや。
>>291 おまいは関数型言語をわかっていてそれを関数型と言ってるのか?
どっかのおかしな事典の「C言語は関数型言語」というトンデモを信じてないか?
手続き型と勘違いしてるのでは
291の発言は?だが、「関数型言語」の定義を聞かれると 答えるのは難しい。
実は「関数型言語」という語の意味が二種類あるという落ちか。 古い定義だと「subroutine以外にfunctionを使える言語」なんでCを含むんだよね。
細かい違いな気がするけど 何かを返す返さないで記述が違うのは 便利な気がする・・・basic void 使え・・・c ソース嫁・・・動的型付
> 古い定義だと「subroutine以外にfunctionを使える言語」なんでCを含むんだよね。 [要出典] Cはsubroutineをfunctionと「呼んでいる」言語であって。
値を返すサブルーチンを関数と呼ぶのはCに限らずFortranとかPascalとかあるが、 それらが「関数型言語」と呼ばれていたのは聞いたことがない
LISPも正格評価で逐次処理、関数は置き換えではなく呼び出しだから、 関数型ではなく実質的に手続き型言語と言えなくもない
古い論文だとFortranをfunctional languageと呼ぶことがあるんだけど懼 まあ、聞いたことないのが当たり前だと思う。 自分も最初に聞いたとき訳が分からなかったし。 あと、その訳語として「関数型言語」が主流だったどうかは知らない。 ごめん。
threaded interpretive language とか書名聞いて 何ぞと思って調べてみたら forth と z80 の解説書だった 俺もどこで見たか忘れたけど、Cを関数言語と呼んでた 記憶が・・・まぁ文脈というか時代背景によるよね > 用語の定義
技評の「新ANSI C言語辞典」を持ってる人がいたら、それの 「関数型言語」の項を見てもらいたいのだが...
>>324 通りすがりの漏れが引用しますよ
p.294 関数型言語 の項より
「関数型言語(functional language) 関数型のプログラミング言語。
LISP、LOGO、APL、BCPL、B、Cなどがある」
そのころの基準で関数型じゃない言語って何だ? FORTRAN、COBOLは違うのか? BASIC? 関数を言語仕様に入れただけで、分類が型が変わるのか? アセンブラ?
どうでもいいからブログでやってろ
>>326 たぶんそれが日本でデマが流行ってる元凶。
時代によって変わったりなどしない。B も C も関数型じゃない。
>>325 も HPC の専門家らしいので、言語屋じゃない。
言語屋が C を functional などと言った例はないはず。
「Cを関数型と呼ぶ人が一部にいたのかどうか」 「その事実は万人が知っていてしかるべきか」という話になってしまっているが なんにせよCもFortranも関数型言語ではないし LISPにしても、延々とこんな話を続ける理由になるほど手続き型言語っぽくはない
LISPとCに根本的な違いが無いのに 「LISPは関数言語」というデマがいつからか 流行ったのが酷いと思うけど。
> 根本的な違い 根本的というのが曖昧すぎて、何とも言えないな。つまりどういう要素が根本的なのか。
LISPとCでどこが違うのか言ってみてよ。
336 :
227 :2010/01/30(土) 17:59:10
Haskellも副作用(モナド)あるから関数型じゃないよね、とか燃料投下してみる。
OCamlはもっと微妙。
関数型言語と呼べるための必要条件は何だろう? 素朴には、すべてのプログラムが数学的な関数だけで構成されていること、だが、 これだとほとんどの言語が失格だな。
>>338 それは十分条件じゃないか?
下手するとHaskellぐらいしか満たせないw
トランスレータって何時頃からあるんだろう A言語をC言語に変換する コンパイラ・スクリプトエンジンというよりは テキスト処理の範疇なような気がするけれども でも欠点があるから、技法として主流足りえない あれか出力先の言語・ビルド環境による影響大 適用できる範囲が、自然と絞られざるを得ないとか toy program というような捕らえ方が一般に正しい 反応なような気もする…
toy rograam じゃなくて toy language だった なれない言葉使おうとするじぶんかっこ悪いorz
有名なものでは "Software Tools" (「ソフトウェア作法」) の Ratfor が 1974 年。 初期の C++ は、C 言語へのトランスレータだった。テキスト処理で済むような 内容ではなかったけどね。
Cにうまく変換すれば、可搬性でも速度でも申し分ないはず でもCの再解釈分だけオーバーヘッドがある D&Eを読むと、初期のC++処理系(Cfront)がトランスレータだったいせいで 生成コードの品質が悪いとか、本格的な言語ではないとか誤解されたと書いてあるが >toy language というような捕らえ方が一般に正しい 真実どうなのかはともかく、多数の認識は今でもそうなのかも?
OOSC初版の頃のEiffelもCへのトランスレータだったはず 今でもそうなのかは知らないが
コンパイラ入門―構文解析の原理とlex/yacc、C言語による実装 糞本だった。お前ら責任取れよ
>>345 どの辺が糞なのか書いてないから責任とってあげない
馬鹿には有効活用できない本を馬鹿に薦めた責任とかそういうこと?
良書だった記憶があるけどなあ 薄い割に説明はかなり噛み砕いてあるし、 かといって理論的な部分を無視してるわけでもない もっとも、内容としては構文解析・yacc/lexの最低限の使い方で終わってるから 詳細は別途ドラゴンブックとかを頼らないといけない その辺も含めて、巻末に関連書籍の紹介が載ってたはず
でもこの本高校生か大学1年程度の レベルの本だから意味なくね?
>>349 この本はそのレベルの人には非常に良い本だし、その良き本を糞本扱いできる程高度な知識を持つものなら手にとって数ページ眺めるだけで自分に必要ないことを理解するハズだよね?
それがわからないという事、つまり
>>345 の中の人は……(以下自粛
よっぽどデカい本屋じゃないと、置いてなくない?
関数型言語をラムダ算法を元に解説するのはもう古いの? 真っ先に出てくると思ったのに。
理論背景って研究者にしか意味無いからな…
でもそういう基礎理論があれば関数型は動作を類推できるじゃないか コンパイラの設計法にも関わる事だと思うけどな そういうのを知らないとRubyみたいに仕様が破綻することになる
>>352 破壊的リスト操作をラムダ算法で解説できるんですかあなたは?
>>352 C#はラムダ式があるから関数型言語だ、ということにしたくないんだろうな。
無名関数はPerlにもある。
もう「値を返すサブルーチン」と同じくらい当たり前になってしまった。
ラムダがありゃ関数型言語、という新説が登場しますた
文法のlambdaとラムダ計算は別物だよね
>>358 それはlambdaのない言語が言い訳するときのセリフ
大事なのはクロージャ
Objective-Cの勝利。
>>352 ほとんどの言語はチューリング完全
チューリング完全ということはチューリングマシンと同じ計算能力を持つ
チューリングマシンとラムダ計算は等価
よってほとんどの言語は関数型である
なんてことになって不都合とか
SQLいいよSQL
上向き構文解析って遅いし 意味の無い概念じゃないですか 還元とか意味が全くないし
オマエが意味を理解できなくても、LALR(1) パーサは現実に働いているわけだが
俺のは左向き
誰もお前のつむじの向きなんか聞いてない
つむじの向きとか何馬鹿言ってんの?ちんこの向きだろ。
野暮がすべてを台無しにする
371 :
デフォルトの名無しさん :2010/02/09(火) 00:39:14
遅い
372 :
デフォルトの名無しさん :2010/02/10(水) 16:53:19
ゴスロリ言語
おい、Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages (Pragmatic Programmers) これ良書かおしえろ
やだ
>>375 嘘つくんじゃねーよ
ANTLR使い方書いてあるだけの
糞本じゃねーかよ
上付きとか下付きとか、マンコの形なんかどうだっていい
リンクの冒険の話はスレ違いだ
>>343 > でもCの再解釈分だけオーバーヘッドがある
そんな一般論は言えない。
381 :
デフォルトの名無しさん :2010/02/22(月) 17:10:32
Aanal ねぇ
しつもん Pythonみたいなインデント指向の言語を字句解析・構文解析するアプローチを教えてください
>>382 lexierでインデントを見て、begin、end的なダミーのスコープ限定子を出力すればいいんじゃね
>>382 どの言語だか忘れたが、
一旦、インデント数をひとつのパラメータ付き構文要素として、構文木に埋め込み、
これをもう一度構文解析して、構文木を再構成する実装を見たことがある。
実際はステートとして、現在のインデント数を持っておき、
>>383 のように、ソースには現れない隠れ構文要素を構文木に構成しながら、
解析するのが簡単だと思う。
CPythonの実装は
>>383 みたいな感じのようだね。INDENT, DEDENTっていうトークンが用意されてる。
indentの逆はででーんとdedentなのか 明日会社で自慢しよう
インデントでブロック構造なんて信じられない。バグは大丈夫なのか?
あと、いくらCPUパワーが上がっても、コンパイルスピードと実行スピードが言語仕様のせいで全く上がらない。 Cにキャリー機能を追加してライブラリと最適化を強化する方が良いのでは?
>>387 だれでも最初はそう思うんだよね
でも実際やってみるとほとんど問題ないってわかる
コピペ防止効果もあるのか、いいじゃないか
コードの移動に支障が出るんだから良い訳無いだろw
インデントブロック構造はネストしたブロックから抜ける構造の表現に難があるよな。 ネストが深くなるだけの構造だとキレイだけど。
例外処理を作るときに、いちいちインデントを気にし、 少しでも気楽にコピペで作るときにインデントを気にし、 良いこと少ないね
>>389 pretty printできないから嫌い
>>390-392 pythonはモジュール化が簡単だからそこは問題にならない
>>393 try: except: else: finaly: で問題なし
>>394 お前の能力が低いことはわかった
人間の目には錯覚がある。例外処理もいっぱいある。 さあ、何から議論しようか。坊や。 人間工学か? それとも実行スピードを無視した方法か?
おれは388だ。Cにキャリーをいれるのが最適のアセンブラに成ると思っている。
インデントでブロック構造なんて、tab2かw
時々このスレがわからなくなる
言語を作ることがスレの本分だったな。 ちんこの前のエロゲの言語が本分だったな。
しかし、9??の言うとおりのコンパイラが発売されたときは、 このスレ、もしかして馬鹿の集まりじゃないかっておもったよw
しかしコンパイラスレのエロゲコンパイラが発想も実装も凄いよな。本当なら。
>>398 アーキテクチャによっては無いんじゃなかったっけ?
移植性を落とさないのだろうか
>>396 コードの字面上の話だから、モジュールは関係無いよ。
コードを書いていて、一つのブロックの行数が多く、ネストも深くなってしまった時に、
処理を別の関数に外出ししようとすれば必ずコピペは発生する物だし、そういう時に
インデントの修正は避けられない。
技術の良い面だけじゃなく、悪い面も認められないとね。
>396 try: except: else: finaly: で回避できるの? ネストしたブロックから抜けるときは依然としてインデントを合わせなきゃいけない気がするけど?
プログラミング言語の文法には認知科学的な視点も必要さ。 そういう意味ではHaskellとかPerlは基地外。
PerlはまだかしくもHaskellは問題ない
まあ何でGoogleがPythonマンセーなのか考えればいい
pythonはもうちょっとライブラリを整理して欲しい。 せめてリスト操作に副作用ありとなしの関数を両方用意して欲しいな。
副作用あり:list.sort 副作用なし: sorted 副作用あり:list.reverse 副作用なし: reversed これでは駄目なのか?
simple common sense is going to limit Python's applicability when operating at Google's scale
>>412 読んだけど、元々速度が要求される場面ではPythonは用いてないと思うし、そもそもそれは憶測の域を出ないよね。
つ コリンは中の人
その Google Groups も Python でなかったか?
>>398 >Cにキャリーをいれるのが最適のアセンブラに成ると思っている。
64bit版TL/1まだ〜?
> Cにキャリーをいれるのが最適のアセンブラに成る Cには関数GOTOがないんでいまいち
419 :
デフォルトの名無しさん :2010/02/28(日) 09:00:27
Multi-entry も無いな
>>418 関数GOTOってなんだ? setjump, longjump?
ああ、CALLとかBSRとかGOSUBのことか。いらんな。
関数GOTOってtail callのこと言ってると違う? BASICでいうと GOSUB GOSUB RETURN RETURN こういう入れ子になるのを GOSUB GOTO RETURN ← この RETURN でいっぺんに戻る みたいな
関数と関数の間のgotoのことだろ。たぶん。 call a call b ret を call a jmp b ではなくて。これはコンパイラレベルで最適化してくれるよ。
> ではなくて。これはコンパイラレベルで最適化してくれるよ。 C言語の場合、普通、関数の入り口でフレームを伸ばすので、ごく特殊な場合しか 最適化できないのが普通かと。 関数をまたいだGOTOはGCCなら独自拡張のLabels as Valuesを使ってポインタに してやればできるね。できるってだけで何が起こるかはわからないけど。
>>424 末尾再帰だけやってくれれば十分。ま、それなら自分でgoto文入れればいいんだけど。
>>424 え、goto、gosubってbasicじゃなかったの?
なぁ、C言語の関数をgotoに変換できないかな
え?コンパイラはcallに変換してるんじゃないの?
>>429 CALLは、PUSHとJUMPの短縮表現
8086に至っては、FAR CALLよりもPUSH JUMPの方が速かった
enter/leave涙目
CPS変換すれば全部単にGOTOでOK
ええっと。 いろんなスクリプト言語に変換できるという機能に特化した スクリプト言語を以前見かけたような気がするんだけど、失念してしまった。 誰か知らない?
インテルアーキテクチャで語られると悲しくなる
ブラウザが調子悪くて返事遅れた。スマン。
>>438 おー、これこれ! サンクス。
.NETにはまだ対応しないんかのう。
ゲームの演出スクリプトをコンバートして.NET FrameworkのDLLにコンパイルするシステムを作ったはいいが、
自動生成して巨大化したクラスの読み込みに秒単位で時間かかって意味ない罠。
まさかJITコンパイラがパフォーマンスの足をひっぱるとは思わんかった。
インタプリタ実装に逆コースだな……とほほ。
ブラウザの長子とかじゃなくて、2chが攻撃喰らってたせいだな。
>>439 その用途だと中間言語コンパイラが一番だと思うが。
前スレのエロゲプログラマみたいに一瞬でコンパイル出来るのならインタプリタでも良いが、
前方参照とか、テキストでやってるとホットスポットになるぞ。
>>439 LCG使えば速いよ
直接IL吐かなくてもDLRのExpression Tree使えば超簡単に使える
>>442 >>443 ううーん。C#+DLR単体で開発してるならともかく、IronPython込みで使ってるので
IL吐かせたってほとんど意味が無いんだ。
どうせならPythonスクリプトを吐かせて直接実行させた方が早い、ということになる。
いずれにせよクラスの実体の読み込み時にJITコンパイルが実行されて、
しかもコード自体はガベージコレクションされないと来た。
大元のスクリプトから比べたら、JIT化されたコードって5〜6倍のサイズになってるんだぜ。
じゃあ普通に実行時に必要な分だけ直接スクリプトからコンパイルしたら? IronPythonだったらプリコンパイルしたってどうせランタイム同梱しないと動かないでしょ それならコードはちゃんとGCされるし
>>445 それはインタプリタと一体どう違うのよ。
>>446 ILにコンパイルされたあとJITで実行されるから実行速度はDLLにプリコンパイルしておくのと変わらない
動的にコンパイルするなら一度に全部読みこむ必要はないからILへのコンパイルのコストも
そんなに問題にはならないんじゃないかな
448 :
444 :2010/03/03(水) 22:37:04
議論どうもありがと。 今のところ、構造化したデータをシリアライズしてDBに入れておき、 読み込み時にデシリアイズしながら固定的なコードで動けるようにしようと思ってる。 元々自動生成してたコードは非常に定型的なものだったからね。
>ゲームの演出スクリプト ずいぶん前にコンシューマ用で同じような事をした そのときはメモリのフットプリントを最小にするのが目的だったのでスクリプト->バイトコードコンパイラでバイトコードインタプリタを実装って方式だった バイトコードの環境をPC上でエミュっておくとスクリプターのコンソールでテストやデバッグができるので開発時間の短縮もできた 今時のマシンだったらその場でコンパイルしても良いのじゃないかとおもったりするんだけどどうなんだろう?
>>449 用途に応じてコンパイラを作り直せば、
1つのゲームスクリプトでマルチプラットフォームに対応できる。
今回はPC向けだからRDB化するけど、DS向けとかだったら
バイトコードっぽくコンパクトなバイナリ構造にするのがいいと思う。
もちろんコンパイラもコンパイルされたスクリプトの実行環境も
全部自分で用意するんですがねorz
クラウドコンパイラがあれば 全て解決するらしいし 難しいことを考えるのはバカが 頭のいいところを見せようとしているだけだな
ブラウザの皮をかぶってシンクライアントの復活か。
ゲームなんぞ、適当なバイトコードインタプリタを作れば十分そうだが
そそ、if elseif else endを実装して、 表記式も簡略化して、r20>=10とかr5==r10だけにして、 式もLET、or、not、sub、add、sto、lodの命令にしちゃえば楽。 評価式と式は逆ポーランドで書けるようにしても、そんなに大変じゃない。
うちのプロデューサーが簡単にコンパイラの拡張を要求してきたよ。 マクロを実装して欲しいとのことだが、MASM並の者を要求してきてる。 プログラマ上がりのプロデューサーだから仕方ないが、 MASM並のマクロがどれだけ大変か分かっていない。 文字セットの問題もあるし。ヘタに知識があると手に負えない。 しょうがないのでダメ元でこの前のエロゲプログッラマにプリプロセッサのソースを 売って貰えないか聞いてる最中。
macroもmasm以上の仕様で、こんなの作れるかって言ってやった。 コンパイルスピードは5万行を1秒だってさ。
ソースを貰えたのだけど、アセンブラ部分が多くて読めない。 マクロも先読みして展開を繰り返している。 凄く速い。50万行1秒くらいのコンパイルスピードだった。 とにかく凄い。このまま自社用に改造していただけるか交渉中。
YOUはどうして交渉中なのにそんなことをペラペラしゃべってるんですかと小一時間
あなたの会社は先方と守秘義務契約を結んでいないのですかと小一時間
エロゲ会社のPGにそんなモラル期待するなよ
過剰な性能だ。 C#のように機械的に処理できる定型的な構文を用意して 分割コンパイルできるように考えるのが本道なんじゃないか。
何で C Sharp?
>>462 > C#のように機械的に処理できる定型的な構文を用意して
意味分からん
特にC#って相当複雑な部類じゃないか
んん、C#のコンパイルは相当高速だぞ。 アセンブラなんかでカリカリにチューンするのが大事なのではなく、 コンパイルしやすい構文を用意することが大事だ、ということ。
類似のほかの言語に比べてC#がコンパイルしやすいってことはないでしょ コンテキストキーワードだらけだし
パーサを書いたことのない人の発言。
ヒント:C#はTurboPascal出身
Mono のC#コンパイラのコードを見ればわかるが、レキサー、パーサーだけでも大そうなことになってる。 パースが簡単なのは、PASCALやBASIC、LISP。
varという名前の型が存在したらvarがキーワードじゃなくなったりするんでしょ
演算子の優先順位を変えられるのって、haskellだっけ? 普通じゃないっぽいけど、実装は簡単なの?難しいの?
優先順位毎に演算子のリストを持って、ソースコード中に演算子を見つけたら その都度マッチングすれば良いだけじゃないの。
パーサーはともかく、レキサー(っていうの?)が複雑なのはいやだなぁ。 あー、あれか?途中でSQLやXMLなどが書けるからとか?
スマン、興奮しすぎて秘酒義務を守らなかった。 あと、俺はエロゲじゃない。 macroは#define程度にして自分で作ることにした。
秘酒義務->守秘義務 ゴメン間違えた。
会社の人間がこいつを特定したらクビかな?やっぱり
先方の情報も流したから多分……orz
正直何一つ有用な情報は含まれてない
真偽はどうであれ宣伝乙でいいよもうめんどくさい
向こうは別に良いですとといってくれたが言及になりそう。 やはり簡易式で作ろうと思う。マクロも完全置換の#defineで。 みなさん、#defineを実装するときには文脈を見てますか?
言及->減給 すまん。
C#のspaced keywordは正気の沙汰とは思えない。
>>481 m4マクロを先に勉強しといたら?
C#は 後方互換>>>バージョン管理>>>>>(越えられない壁)>>>>>>>>言語仕様の簡潔さ だから仕方ない
>>483 m4マクロのソースならどうにかなりそうです。ありがとう御座いました。
>>484 大規模開発に耐えるよう厳格な規格で作られたC#やJavaのような言語の仕様が簡潔なものに収まるはずがない。
でもC#の開発効率の良さやコンパイラの鬼速さは本物。
あれはいいものだ。
Javaなんかそんなに複雑じゃないだろ C#の文法が複雑なのは既存のコードの互換性を維持しながら無理矢理拡張しまくってるから
>>487 > C#の文法が複雑なのは既存のコードの互換性を維持しながら無理矢理拡張しまくってるから
C#のどこらへんが複雑? パースが難しいところもあるが、文法自体は単純だと思うが。
Ironyのサンプルにパース用のC#構文定義クラスがあるけど、RubyやPython向けより簡単なくらいだよ。
結局C#のコンパイルが激速な理由については語られないのか
cs.exe
ILへのコンパイルの段階ではほとんど最適化やらないし
どの言語と比べて?
>>496 dくす。元々はmixinみたいなことをやりたかった
>At the same time, it allows users of the new functionality to have a
>first-class experience of the additional language feature something
>we felt was missing from the original language design.
#define value class class
けど副産物として
>It literally pairs an existing keyword with a contextual modifier separated
>by a space. The pair is treated as a single unit, such as value class, rather
>than as two separate keywords.
spaced keyword も考案されたと、ふむ
C#で2語以上まとめて一つのキーワードになるのはextern aliasとyield returnとyield breakだけじゃね
>>500 そういった意味では構文の拡張そのものは大したこと無さそうだね>spaced keyword
むしろ拡張されるまで従来aliasやyieldが変数名として認められてたので
そういったレガシーなコードとの共存が大変そうだ。
文脈依存のキーワードは他にも沢山あるよ 予約語を増やすことがあるJavaとは違ってC#の言語使用を拡張する際は 過去のコードがそのままコンパイルできることが最優先されるので 予約語を増やさずにキーワードを増やすという無茶な事をしている結果
旧バージョンでコンパイルするモードとか搭載すればいい気がする
var var = from from in in select (global::Hoge)from.where.global; foreach (var var in in) { yield return in.yield; } 試してないけど多分通る
506 :
505 :2010/03/08(月) 12:04:53
すまんいろいろ間違えてる
頭の中でロンドン橋落ちるが流れた
漏れの頭では「インッ!インッ!」と再生された
re2c でUTF32対応すべく頑張ってるが、charだと動くのにUTF32だと 挙動が変。cursorが進まず無限ループになったりする。もう限界。 どこかサンプルあったら教えてください。
ひげぽん氏のschemeがre2cでUTF32やってるはずだが
511 :
509 :2010/03/13(土) 09:03:33
UTF32のBOMでしたorz。 BOMなしだと動いた。3日悩んだ。
迷惑な香具師だな
ADVのシナリオ記述にXML使ってる例って結構たくさんある
パーサ作るの楽だからな。
しかしスクリプタの能力はXMLの方が大変。
スクリプトをXMLで記述してそのまま実行って……ないよな? 元ソースや中間データとしてならともかく、 プレーンテキストでもメガ単位になるんだぞ、あれ。
そこはエロゲの程度の低さ。自分で規格を作れないなんてな。
いまどき数メガなんて誤差にすぎん
少なくともここにいる奴らからは支持を得ないだろうね。
エロゲごときに、自分でPG言語作るなんてアホくさ
このスレには、よほどエロゲにコンプレックスを持ってるやつが居るようだなw
上に乗っかるコンテンツを、俺らの作業領域にあんま関係づけて語ってもな。 なんかド素人のゲーヲタ視点っぽい。
>514 XMLのパーザ簡単じゃないと思うけどなぁ。 セパレーターを調整したS式が一番良いと思う。
最近はJSONやYAMLのパーザも増えてる。
書く側に複雑な知識は期待できないとなれば、 wikiやTeXぐらいの記法が限界なんだろうか?
>>523 汎用のパーサを使わなくても(デ)シリアライザに直接食わせられるのが魅力かも。
オレはスクリプト記述の用途としては使わないが、
スクリプトの文法定義にXMLをコンパイラの設定ファイルとして使ってるよ。
S式はどーだろ?
>526 ライブラリが充実していればそうだけど、パーザを自分で組むとしたらXMLは無駄に複雑過ぎるよ。 要素と属性値みたいに無駄に種類が多かったり、終了タグに名前を書かなきゃいけないとか…… S式が嫌われているのは ・グループ化で使っている()が字面として強い ・セパレータとしてスペースが使われているから、普通の英文と相性が悪い 辺りだと思うんだけど、これを改善すればずいぶんと受けが良くなるんじゃないのかな? 昔こんなの作ったけど、なかなか悪くなかったと思う。XMLと相性も良かったし。 |要素名;要素の中身|: (|を表現するときは||を使う)
>>527 そもそもXMLはシリアライザやテンプレートエンジンに
吐かせるかしかせず、手では触らないことにしている。
XMLは静的型付き言語、JSONやYAMLは動的型付言語と相性がいいという印象。
>|要素名;要素の中身|:
悪くないんじゃないかな。縦棒は比較的使用頻度が少ない記号だし。
オレは
[コマンド名 param1=arg1 param2=arg2]
の形式にしてる。計算式は原則としてスクリプト中では使用させない。
これでも案外実用になる。
>>527 > 要素と属性値みたいに無駄に種類が多かったり
冗談だろ?
>529 マジ、マジ。属性値は本質的に制限付き要素なんだけど、わざわざ構文分けて別物にするほどのものじゃ無いよ。 『<element>属性値</element>なんて書きたくないよ』なんて思うかもしれないけど、それは要素の表記が 重すぎるのが問題なわけで。
それはあなたのDTD定義が適切でないだけ。 plistみたいにやりたければ、どんどんやればいい。 XMLの問題は「構文が単純すぎて」冗長になること。 組み込みタイプとリテラル表現がないのも一因。
え?DTD解析までやれと?どんだけ難易度高いんだよ。 やっぱりXML使うんだったらライブラリ必須じゃない?
>>528 「=」を「:」にすればObj-Cだな。
534 :
509 :2010/03/20(土) 08:24:31
質問です。 re2c+bisonでAST作成までだいたい出来たところまで来ました。 この先の最適化ってところが、まだ良くわかりません。 解説しているサイトとか、参考になりそうな所を教えてください。 (constant同士の演算くらいしか思いつきません)
コンパイラ作ってるの? とりあえず中田先生の「コンパイラの構成と最適化」は見た?
最適かなんか後回しでいいのに
>>534 最適化は後回しにした方がいいと思うけど、いずれにせよASTから中間言語に直す方がいいな。
命令型言語なら3番地コード
大体どの教科書にも最適化は三番地コードに対するアルゴリズムとして書いてある
先にある程度知っておいてからでも遅くは無いよね どうせ最初から作り直しになるんだけど
最終的にどんなコードになるのかどうやって実行されるのかとかわかってないと 最適化なんかやりようがない
540 :
509 :2010/03/20(土) 12:04:43
コメントありがとうございます。 >535 >コンパイラ作ってるの? いえ、今考えているのは仮想マシン書いてバイトコード実行、って 感じのスクリプトエンジンです。スタックマシンていうのが小さく 書けるみたいくらいの知識しかなくて・・・ なるほど・・・。とりあえず本買ってみます。
まずASTを直接評価するインタプリタを書いてみれば?
>>540 中間言語のニーモニックを多少最適化することより、
仮想マシン自体の性能アップの方が遥かに大事だよ。
ニーモニックの最適化が重要になるのは、吐き出すのがネイティブコードの場合だね。
543 :
513 :2010/03/21(日) 22:55:18
>>513 でまさかこんなにレスが付くとは
XMLでスクリプト書く場合の負荷については
能力の低いマシンならともかく、PC上でのプログラムだからそんなに性能を気にすることはなかった。
パーサーは自作なんて無理なので既成のを使用。
XML全体と同じ内容の木構造データにして実行する方式
(バイトコードとか仮想マシンを作るような知識はないので)
なので、実行はそれなりに速いと思うけど
ファイルサイズが大きくなると、最初の読み込みに時間がかかってしまいそう。
メリットは妥当性検証のあるエディタが使える事。実行する前にエラーが分かるのって大きい。
>>543 >ファイルサイズが大きくなると、最初の読み込みに時間がかかってしまいそう。
試してないのかね。
5MBぐらいのスクリプト作って読ませてみれ。
545 :
513 :2010/03/21(日) 23:58:08
>>544 そんな大きいのは試した事ない・・これから作って試すわ。
150KBぐらいのがあるけど、それだとCeleron 1.4Ghzで40msぐらい。
150KBで単純に40msずつ増えていくとして、5MBだと1350msぐらいかな。
こんな感じの構造にしているんだけど、block直下にある要素をコマンドとして実行させたり、
クリック待ちなどで中断するのは簡単なんだけど(要素のインデックスを保存して行ってる)、
ifの中でクリック待ちで中断するような時はどうすりゃいいんだろう・・
if文の中まで実行しなくちゃいけないし、セーブで途中の要素から実行しなくちゃいけないときはどうするんだろう。
中断すること考えなければ簡単なのに。
読み込み時に、XMLの要素全部にIDを割り当てて、ロード時はそれをもとに再開するとかだろうか。
<function name="main">
<element param="1"/>
表示するテキスト
<if expr="a=6">
変数aが6のときの処理
<else>そうでないとき</else>
</if>
</function>
546 :
デフォルトの名無しさん :2010/03/22(月) 06:17:07
先日のエロゲプログラマの方が全然凄いな。 今のプログラマはアリモノを使いすぎるんじゃない?
今時のプログラマは有りモノを活用するのが基本だろ。
548 :
デフォルトの名無しさん :2010/03/22(月) 08:08:42
それって、基礎が出来てないけどブラックボックスを触るようなもんだね。 はまったときや改編時は、自己コードじゃないと大変そうだね。 あと、実行スピードはスクラッチに負けるよね。 JAVAとか使ってると遅くて敵わないね。
他人のコードだからといってブラックボックスな訳じゃないし、 多数の人間が使っているコードなら実行スピードもむしろ最適化 されてると思うけど。実装スピードは格段に速くなる訳だし、 自前主義に拘る理由は無いでしょ。
> それって、基礎が出来てないけどブラックボックスを触るようなもんだね。 基礎ができている/できてないことと、有りモノを使うかどうかの判断は 関係ありませんね。 材木を山で切ってくることから始める大工しか、基礎ができてない、 なんて考える人のことを「バカ」と言います。 > JAVAとか使ってると遅くて敵わないね。 使ってない奴の妄想だから相手にしないほうがいいよ。
551 :
デフォルトの名無しさん :2010/03/22(月) 08:35:48
はあ? ブラックボックスで困るのは事実だろ。 あとJAVAがいくら頑張っても前のエロゲプログラマのスピード(50000行を1秒でコンパイル)には敵わないだろ。 エロゲプログラマにコンプレックスでも持ってるのか? 今は遅いネットブックが2割をしめるんだぞ。
単純な言語仕様ならそりゃコンパイルも速いさ
>>551 >ブラックボックスで困るのは事実だろ。
オープンソースの物を使うという発想は無いのかな
ちゃんとドキュメントも整備されている物もあるよ
おかしな人は放置で。
555 :
デフォルトの名無しさん :2010/03/22(月) 08:47:19
>>552 あれが単純な言語仕様に見えたのなら、お前の目は節穴だよ。
>>553 そろってるものもある、だろ?
無い物はソースから読み直しだ。それでも効率はブラックボックスの方が上だと思うが、
至高のコンパイラスレで技術力を言及しないのはどうしてだ?
前のエロゲ屋は音声も画像もシナリオも独自圧縮と書いてたぞ。
それでも既存の物を使う方が優秀というのか?
有り物だけを使うのは技術向上の否定になるわけで、このスレでもスクラッチから作る方が高度だと認められてるだろ?
速いバージョンのmp3の展開ルーチンでももたつくな。
JAVA厨ちんこだから、相手にしない方が。 それと、エロゲの人は低スペックでも動くようにチューンしてるだけだと思う。 様は適材適所で、スピードを求められないのならYACCとLEXを使えば良いだけだと思う。 たしかに技術力の向上のためにスクラッチから作るのも趣味としてはありだとは思うけど、 開発効率と実行スピードのどちらが求められるかは現場次第。
JAVAが早いって言うのは嘘だな。
>>555 コンパイラにとっての言語の単純さってのは
人間の感じるものとは異なるということさ
>>555 >至高のコンパイラスレで技術力を言及しないのはどうしてだ?
技術は『使いどころ』が重要だから。
何にでも技術力を投入すれば良いという物でもない。
まあ、前のエロゲ屋は長い間の蓄積があって、ああなったんだから、今と時代は違うよ。
でも、圧縮関連の技術を自社開発にしているところは純粋に凄いな。認めるべきだと思う。
>>561 この人はそこが技術の使い所と思ったんだろう。
>>560 前のエロゲ屋のコンパイラは十分複雑だと思うが。
圧縮なんかは確立してる理論をベースに特許関係を避けて使うのがセオリー。 自前でやる意味があるのは枝葉末節の細かい部分だけ。
どちらにしろ、エロゲの人の技術は凄いかも知れないけど、今は時代が違うではないし終わりにしないか? スレの内容を逸脱してる。
実装が手元にないのにそれをぐだぐだ論じても仕方ない
>>563 ロースペックなマシンに合わせて展開スピードをあげ、マスターに向けて圧縮スピードを上げている。
このエロゲ会社独自だろ?
>>566 どうしてそれだけで独自だと分かるの?
既存の技術を組み合わせることで圧縮効率を上げるってのはよくあることだけど
>>565 その通り。
>>566 長いエロゲ屋歴でそういう風にしたんだろ。
去年は新作6本、DL12本(?)作ってる会社だから、他の会社に当てはめられない。
>>567 本人かブログかで独自圧縮といってただろ。
信じるか信じないかは自由だが。
571 :
568 :2010/03/22(月) 09:55:19
>>570 ああ、OHPとDLSITE.COMで確かめた。すさまじい数だ。
>>566 たとえば gzip の -1, -2, ..., -9 オプションですな。
圧縮処理の対象とするブロックの大きさを加減することにより、必要とするメモリ量+計算量と、
圧縮性能のトレードオフを加減する。
情報理論的にごくあたりまえの話ですが何か?
wikiで見ると社長兼メインプログラマみたいだな。 そりゃ本数出すためならプログラむくむわな。
>>572 この会社は圧縮率も高い。
良く社長と兼任してそんな本数出せたか不思議。
普通のエロゲはもっと時間を掛けて作られる。
その痛々しい名前欄はなんなんだw
>>574 単純にもっと昔に理論は確立してたからじゃないか?
実装もASMとC++だったよな。古い言語だ。
予告通り出ないというのが常態化しているエロゲ業界で、そんだけリリース し続けてるのはすごいな。 OpenBSD が「半年ごとにリリース版を出す」を10年続けているのを知った時も すごいと思ったが。
>>575 うるさいw
でも、この会社の評判は流通が必ず言ってくるくらい良いんだよな。
マスターが確実でバグはないって。延期とバグがつきものの俺らはいつも言われるw
>>578 やっぱり流通って口出してくるんですね。
エロゲ界の摩訶不思議です。
どういう仕組みなんですか?
久方北エロゲ産業
もうそろそろ止めようぜ。
>>581 すまん。
昔提案のあった、TinyCの定義でもしないか?
大学の学生実験でTinyCなる言語のコンパイラ作らされたなあ - 型はintだけ。void型やポインタ・配列はなし - 演算子は論理和積、加減乗除、比較だけ - 制御文はif, while, returnだけ 手習いにはちょうどいいサイズだったと思う
TinyCは目新しさがないんだよな。みんな最初に通る道だし。
逆にHugeCを作れば
D言語w
C言語にクラスって必用かな。ネットのコピペで良いから、クラスのありがたみがいまいち理解できない。 スコープの厳密さは良いと思うけど。
RAIIが使えるだけで随分差が出てくると思う
コンストラクタとデストラクタってRAIIって言われるんだ。 たしかにエラー処理が楽ですね。
>>587 最初は C with Classes という名前だった処理系を作った人の
「C++の設計と進化」の最初のあたりだけとか読んでみたら?
RAIIは、コンストラクタとデストラクタを使ったリソース管理、だな
>>589 コンストラクタとデストラクタのことではない。
ウィキペディアからの引用になるが、
(引用者注: C++では)自動変数がスコープを離れるときデストラクタが呼ばれるため、
変数の寿命が終わるとすぐに資源が返却されることが保障できるようになった。これは
例外が起こったときでも同様であるため、RAIIは例外安全なコードを書くための鍵となる
概念となった (Sutter 1999)。
C#でもusing構文を使えばRAIIできるね Javaはこれができないから困る
Javaでもtry/finallyを抽象化したシンタックスシュガーないし何かを作れば いいんだろうけど、そういうものは提供しないポリシなんじゃないかな? メソッドの設計で抽象化するか。
>>587 ポリモーフィズムが使えるだけで随分差が出てくると思う
RAIIが重要なのはリソース解放を言語側に保証させることができるから。 名前に反して初期化時のリソース確保は重要じゃないよね。
>>594 言語仕様を単純化したいんじゃないかね
せっかくGCがあるんだから、
全てのオブジェクトの寿命は無限ということにすれば話が単純になる
元々は初期化側がRAIIの主眼だったんだろうけど、 正直そこはどうでもいいよね
>>597 RAIIに必要なのはオブジェクトの寿命管理じゃなくて
あくまでオブジェクトの持ってるリソースの寿命管理だから
オブジェクトは死ぬ必要ないのよ。
C#だってそう
どんだけ時代遅れ。 ガベコレを搭載してる実装系ではガベコレがアプリ本体と別スレッドで動いていることすらある。 すると削除するタイミングなんかは全く保証されないから、 デストラクタ自体を書かないのが推奨される作法になる。
は? RAIIはガベコレを通さないんだが
いや通してもいいだろ 終了処理をメモリ破棄のタイミングより早く行えばいいだけ
C#で実現できてるんだから 全く問題ないわな
オブジェクトが不要になったときにユーザが任意で呼ぶのがデストラクタ、GCが呼ぶのはファイナライザ(ときにデストラクタ)
>>600 が言ってるのは後者で、RAIIで使うのは前者
RAIIで管理するのはメモリだけじゃない。
典型的なのがファイルのclose。
GCとRAIIは共存できる。
>>600 は無知。
まあファイルのcloseは失敗する事もあるので なるべく自前でcloseした方がいいんだけどね ネットワークドライブ上のファイルとか
デストラクタの中で自前でcloseしてるだろ・・・
ファイルのクローズって失敗してもほとんど対処のしようがないよね? 以後の動作を保証できないとしてアプリを異常終了させるぐらい?
で?
自前でクローズしてもいいことないって話だろ?
自前でクローズしないで誰がクローズするの
ファイナライザ
ガベージコレクションはいつ起こるかわからないから、 気がついたらファイルハンドルが足りないかもしれない。
>>613 明示的に呼び出せばいいじゃないか
System::gc(System::GC_FULL);
とか
ユーザが把握してる変数から参照がにたたれたとしても内部的には参照が残ってる可能性ってあるし 実装によってはFalse Pointerの影響で回収しきれない可能性とかもあるしなー GCに完全に任せきってしまうってのはこわいよ
>>616 表紙が派手になった
最新のコンパイラ技術に基づいて若干修正されている
初版を読了後に論文誌を漁っている人は買わなくてもOK
言語処理系に興味があって初版知らない人は読むべき
組版がきれいになった 訳語も現代語により近く、読みやすくなった気がする 本質的な部分ではないかもしれんが、こういう改良は大切だと思う
このスレは居心地良いな。スレの内容も面白いし話題の切換も引きずらない。
しかし目新しい話題は少ない
でも、意見が違うからと言って、アスペルガーと言って意見を封鎖するのは止めないか? 医療関係のプログラムを組んでるけど、複数のドクターが言うには簡単にそんな診療、簡単にできないし、 相手が傷ついて、まともな論争に出来ないという。 相手の反論を封じるために、言っている、自己中心者が多くて困ってると複数のドクターが言っている。
デザインかっこいいのもいいな 英語のソフトカバー版買ったら表紙がちっともドラゴンじゃなくて後悔してるw
逆に、そう言う方がアスペルガーに近いと言われた。
>>620 まあ、枯れた技術だけど、実装には興味がある。
OSとコンパイラはプログラミングの中でも特別視されるしね。
少ししか進まなくとも議論の余地がある。
次はmanycoreの時代だし、議論の余地はいっぱいあるよ。
しかし、ネットッブックのおかげで、ボトムが4-5年前に戻ってしまったのが不幸。
ネットブックだとJAVAは凄く重い。
こんなのが2-3割の市場だとすれば、進化は遠のく。
Javaなんてネットブックが出る前から企業向けでしか使われてないじゃん
>>623 ネットブックで使いたくなるようなJavaアプリケーションなんてあるの?
Javaはただの喩えでしょ メニーコア前提の言語や処理系が出てきてもそれが生かせない貧弱な プラットフォーム(ネットブック)が一定のパイを持ってるのは足かせになって 不幸って話だと思うぞ
そもそもネットブックをPCと考えるからいけないのであって、 図体のでかいスマートフォン程度とおもっとればいいんだけど、 問題はPCと思って買っちゃう残念な消費者が殆どなこと
やはり最適化は今も必用か。
アセンブラもねw
> 逆に、そう言う方がアスペルガーに近いと言われた。 ↑典型的な議論封鎖ではある。
バッテリーとかなくても機器が動けば もっと無茶できる t-01a, nexus one 眺めながら
アスペルガーだと指摘される方も指摘する方もアスペルガー。
自己言及的
べつにガオガイガーでもハンバーガーでもいいよ 良い処理系作れれば
オパオパ
637 :
616 :2010/03/25(木) 00:41:36
>>617-618 ありがと、実は大学時代にお世話になった先生が訳した本なんで気になってたんだ。
昨日、図書館でドラゴンブックの第二版を借りてきたんで
初めの方をじっくり読んで、買おうかどうか決めたいと思います。
こんなところで言及されたら先生は迷惑だろw
天才は何かに固執する人が多いから、アスペと勘違いされている人が多いね。
まだそのネタ引っ張るんだキミ。
すまん。今は翻訳者の先生の話だよなw
いい加減うぜえな エロゲばっかやってるとこうなるのか?
何故エロゲに結びつける。コンプレックスかw
エロゲ用エンジンぐらいしか、言語設計をする機会がない現実。
ま、わざわざDSLを自前で定義するより、 こなれた汎用スクリプト言語を埋込みで使った方が楽だからな。
それにしても前のエロゲ屋の技術は中々良かったな。 他の会社はXMLか。それも凄いな。 エロゲ、侮れない。
ネットブックという足かせがエロゲにある限り最適化は進むんだろうな。
その昔パソコンゲームがApple][にとりつかれてたようなものか?
6502か。ゼロページは便利だった。FCでも使われたな。
エロが世界最先端な国は日本ぐらいのもの
FPSがPCの性能を先導してる国もどうかとw
エロゲも侮れないんだな。
>6502か。ゼロページは便利だった。FCでも使われたな。 65C02拡張のPC-Engineは作ってて楽しかった 65816のスーファミはVDPが楽しいけどCPUはいまいちだった 今だとARMプロセッサ向けのコンパイラ作るのが割と楽しい 86系だと自力でコード出さないでCとかを中間言語にしてintelCにコンパイルさせるような形の方がいいコードできるから
今ARM勢いあるよな。
>>655 勢いがあるのもあるが
ARMのアーキテクチャがstackマシンの素性からそんなに離れていないのでJITのコード変換がすごくやりやすい
マルチスレッドでGC付きの言語をJITで落とし込む際にクリティカルセクションなしでもコンパクションGC作ったりできるような事とかができておもしろすぎる
X86みたいに命令が複雑多岐じゃないせいでもあるけど、実装自体が楽しいのは本当に久方ぶりだよ
657 :
デフォルトの名無しさん :2010/03/26(金) 20:35:57
なるほど、エロゲ向けだな。
特にインタプリタの話なんだけど、ベースライブラリは何を使ってる? 日付/時間とか、スレッドとか、ネットワークとか、いろいろ 自前でマルチプラットフォームにする気は起きないし、 ライセンスの問題もあるから難しいよな。 wxはいいけどC++になっちゃうし、glibだとGPL食らうし
boost
660 :
デフォルトの名無しさん :2010/03/28(日) 03:50:47
自前。
俺も自前だな。
Cで自前。会社じゃ当たり前。
会社じゃ安全なライブラリを買うか自前だよな。
>GLibを動的リンクにて使用する場合に限り、ソフトウェアを >製造、販売が可能になります。 DLLに固めて使うなら大丈夫でなかたっけか…lgpl ver2.1+だっけ… まるまるスタティックとかOSごと積むとかは また違うとは思う。でもできれば自前が一番いい
LGPLで外部DLLはよく使われる手だよね。 何かあっても外部DLLのソースの公開だけで済む。
ていうか、コンパイラスレでこんな論議必用か? コンパイラ組めるなら自前で全部出来るだろう。
ライブラリは外部のものを流用できるように作るものだ
投入できるリソースは限られているのだから、 一番注力したいところに集中的に投入するのが良い。
>>666 そりゃ何だって自分でできるさ。
自分の家だって時間さえあれば自分で作ってみせる。
そんなにたいした共有ライブラリじゃないだろ? せいぜい2週間しかかからないよ。
「共有」ってわざわざ付ける意味は?
頭痛が痛いと同じ表現だったな。すまそ。
673 :
デフォルトの名無しさん :2010/03/28(日) 18:51:26
つか、そのままGPLじゃまずいのか?
>>673 「秘すれば花なり、秘せずば花なるべからず」
>>673 そりゃフリーな実装ならいいけどさ
バイナリ納品でメンテ契約あり、ようするにソースコードでの自社のノウハウは出したくないとかあるときはGPLは使えないだろ
いや、それはわかるんだけど いままで請求されたことないし ぶっちゃけ、ソース出てもノウハウは出ないってw
最低だなお前 すべてにおいて
>>656 armはcpuは普通につかえるが
ペリフェラルが使いにくいのが多いんよね
>>678 組み込みのCPUはDMA,IRQ以外って高機能なデバイスを無理矢理つっこんでるのでレジスタの設定がメチャクチャめんどくさかったりするけど
そういう意味の使いにくいってことかな?
PICは使いづらいね。そー言えばエロゲ屋の人もPICは無理でAVRは作ったって行ってたね。 PICのレジスタは地獄。PIC16でようやくまともになった。
picはウンコ ARM使えよ
どっかのarmでdmaが一転送あたり32回しか回らないのあったな 毎回チェーン使うのは無駄くさい
組み込みCPUはたいてい 外部ピンがMuxされてるから 余計にめんどいんだよな
>>682 ポーリングするのかw
PIOで素直に転送した方がましだねw
基本はHLTだよな
687 :
デフォルトの名無しさん :2010/03/30(火) 02:26:12
だよなampmだよな。
>>684 最大32回をチェーンでつないだら
たくさん送ってくれるから
PIOよりゃましだがチェーン必須はめんどいw
中田育夫氏の最適化の本ってどうなんでしょうか? 基本的な機能を備えた言語で論理的な部分からどの様な最適化が一般に可能か、について調べています。 定価が10000円だったみたいですが、そんなに特別な本なのでしょうか?
日本語しか読めなければ、他に選択肢はない。 ドラゴンブックくらいしか。
中田さん懐かしいな
どのような方法があるかを調べるだけならググるで十分な気もするが。
美しい日本のMLコンパイラとかね。
ドラゴンブックにのってて中田本にないものってある?
逆はあるな りんご園とか
りんご園てなに?
>>696 スモールコンパイラの制作で学ぶプログラムのしくみ
りんご園とコンパイラでぐぐってみたら変わった本が出てきたけど、そういうことか。thx
>>695 あれは監修だけだから中田本とは違うんじゃ?
「これは文系のセンスで書かれたコンパイラの本です。」 --中田氏推薦の言葉はこの一文から始まる。 この言葉に魅力を感じつつ、実際に購入して読んでみたが、 読み進むにつれ、この言葉の皮相さがだんだんと理解されてる ことになる。 どうやら、ここで言う「文系のセンス」とは、 1.「ストーリー仕立て」でとっつきやす「そうな」文章、 2.全編を通して出てくるリンゴの比喩 主としてこのことを指しているようだ。 しかし、まったくもって残念ながら、 1.は決して名文とはいえない拙い言い回しが散見されるところどころ設定に無理がある稚拙な「ストーリー」であり、 2.はかならずしも的を得た比喩とはいいがたい代物で読み進めるにあたってかえって理解の邪魔になるといったものだ。 とりわけ2.を称揚しているかにも見える「推薦の言葉」は少なからぬ問題を孕んでさえいると思う。 比喩において、喩えられる対象と喩えそのものにおいては、 互いの概念の抽象度合い(というか抽象化のレベル)がきちんと符合しているべきである。しかしながら本書においては、そのレベルがまちまち、バラバラであり、必ずしも適切な比喩でないものが実に多い。 読み進むにつれ、拙い比喩表現を「文系のセンス」などと言ってしまう無神経な理系の教授と、「文系の持ち味を生かした」と悦に入っている無神経な文型の学生。どうしてもそういう印象がもたれてならないのだ。 本来よい比喩のための「センス」に文系も理系もないのであり、あるのは明晰な概念把握、適切な抽象化、適切な想像力これらに関する「センス」があいまってはじめてよい比喩表現が可能になるのだと思う。 そしてよい比喩表現だけが、複雑な物事を理解する助けとなるのである。 「ただ単にたとえればいいってもんじゃないんだ!」と声を大にして言いたい。
りんご園
りんご園は読まない方が良いよ 教科書の丸写しに訳の分からない説明を加え JAVAで書き直した。そんな本
というか比喩なんてどうでもいい。 比喩を排除するために数学的記述があるのだから。
>>699 監修しちゃった以上責任はあるだろw
推薦の言葉なんて書いてる場合じゃなくて出版止めるべきだったとしか思えないレベル
>>705 学術書じゃなくて一般人向けの本に何を期待したんだ?
関数型言語のコンパイラを解説した本てある?
Modern Compiler Design in ML 分量はたいしたことないけど後ろの方にあった 最近和訳出てたよね?
>>708 少し違ってModern Compiler Implementation in MLのことだろうか。
その翻訳本の「最新コンパイラ構成技法」を見てきたけど1章が関数型に費やされてたわ。
まあでも頁数のためか、思いつくような事が難しく高級に書いてある感じで終わってたが
>>710 俺も立ち読みしたけど、訳が悪いと思うなぁ。
いや、悪くはないんだけど、堅い。
原文はそんなに難しい英語ではないし、学部生向けの教科書
だと思った
GPPGでBisonのYYDEBUGでのデバッグ機能を使用したいのですが、同様の機能がありますでしょうか? どんな解析がされたのかがわからなくて辛いです(。>д<。) 今はConsole.Writeを実行して、どのような解析がされたかを確認してます。 お忙しいところ申し訳ありませんが、どなたかよろしくお願いいたします。
身内ならなおさら、こんぐらい教えたれやw
ドキュメント読めば書いてあるよ HTML吐かせたりできたはず
( 。>д<。) (。>д<。 ) ( ゚д゚ )
最初はちゃんと読んでいんじゃない そのうち斜め読み出来るようになるし
719 :
712 :2010/04/29(木) 12:47:45
皆様返信ありがとうございます。 GW中に調べてみますv(^ ^ ちなみに、私はサラリーマンなので713さんの後輩ではないと思いますよ。 私の場合は自力で調べてみますが、後輩には優しく教えてあげてくださいね。
やさしく教えるのって結局質問者のためになってるのかな 突き放した方が良い場合もある(そっちの方が多い)んじゃないか
>>720 要は主体的に動かすための動機づけが重要なんだよ。
手取り足取り何もかも用意してやるのも害になるし、
突き放して何も与えないのも害になる。
さじ加減が重要だよ。
教育には、○○をすれば必ずうまくいく、なんていう銀の弾丸はなくて、 人それぞれさじ加減を変えないとうまくいかないんだよ。
組み込み系言語総合スレは何処に
725 :
デフォルトの名無しさん :2010/05/08(土) 02:33:42
ANTLRの質問です。 JAVAも初心者なんですが、日本語(UTF-8)のコメントが入った*.gを ANTLRにかけるとエラーが出るんですが、何とかならないでしょうか?
>>725 options 節でcharVocabularyの範囲を指定すると通るよ
charVocabulary = '\u0000' .. '\uFFFE';
727 :
725 :2010/05/09(日) 21:54:07
>>726 charVocabularyの指定ではダメでした。
後出しですいませんが、使っているのはANTLR3で、
何となく、ANTLR3から使えないような気もします。
FORTH系でスタックの深さをインデントの深さで表現するって言うのはどうだろう 1 + 2 * 3 + 4 / 5 1 2 3 * + 4 5 / + を 1 2 3 あれ?
あんまり見栄え良くないよ。 1 2 3 * + 4 5 / +
>>728 積んでから帰ってくるとか消費して帰ってくるのとかがキモく見えるだけじゃないか?
今まで通りスタックの伸縮についてコメントで記す方式で十分な気がする
だいたいわかんなくなる位巨大なワード組まないようにすべきだと思うし
731 :
728 :2010/05/22(土) 17:56:42
いや、 1 2 3 4 5 + で、(1+2+3+4+5)が計算できると、いいかと思ったんだ。 このスタック位置まで繰り返しみたいな。
本格的にparserを実装したいならIronyを使う。 ただ計算だけできればいいならなにかインタプリタを使えばいい。 個人的にBooをおすすめしておく。 コンパイラにインタプリタに標準ライブラリまでついて1.45MBと軽くていい。
>731 検討したことあるけど、後置のメリットをダメにするから止めたほうが良い。結局カッコ付けるのと変わらなくなるし。
++ とやったらスタック内が1つになるまで加算する、 とかしたらいいんじゃない
>>731 それ括弧でくくってから呼び出し関数の名前を最初に書いたら単なるLISPじゃないのかな?
>>735 >それ括弧でくくってから呼び出し関数の名前を最初に書いたら単なるLISPじゃないのかな?
しー!、黙っていればわからないって!
見た目がPython風にならないかと思っただけ。
>>730 >今まで通りスタックの伸縮についてコメントで記す方式で十分な気がする
これで、IDEでワードを打ち込むと、前のキーワードの色が変わったりすると便利だな
でも、深さが任意のキーワードとかがあったらだめだろうけどな。
lemonとかcaperとかのプッシュ型パーサージェネレーター使ってる人いる?
caperは使ってる、でかいの書いたらコンパイル時間がたまらん事になった
739 :
737 :2010/05/26(水) 12:48:47
プッシュ型パーサーって入力の終わりを示すトークンを自分で入れるでしょ。 あれがどうもやりにくいというかピンとこないというか。 対話型でスクリプトを入力するようなやつ(ぶっちゃけるとlisp)で 単純に改行を入力の終わりと出来ないやつは一体いつ終了トークンをプッシュするんだと。 「全ての左括弧と右括弧が対応したかを自分で検査してtoken_eofをプッシュ」ってやんのかな?あれ?
それでいいんじゃね、字句解析機でネストレベルを覚えとくのは普通にやる。 あと、プッシュ型パーサは字句解析と構文解析の間で小細工できるのが便利だと思う
なるほど…… スペース的なトークンを用意したら なんとかなったりしないかな? それはそれで文法作るの面倒かしら あるいは、改行のところでパーサのインスタンスを保存して、 改行にあわせて無理やりeof打ち込んで、 エラーになったら保存したインスタンスを復帰してどうにかするってのは どうでしょう
742 :
737 :2010/05/26(水) 23:46:56
>>740 > それでいいんじゃね、字句解析機でネストレベルを覚えとくのは普通にやる。
即効性で言っても多分それが一番かなぁ。
>>741 > スペース的なトークンを用意したら
> なんとかなったりしないかな?
外側の都合が文法に影響するのはなんとなく気持ち悪い気が…。
> あるいは、改行のところでパーサのインスタンスを保存して、
> 改行にあわせて無理やりeof打ち込んで、
> エラーになったら保存したインスタンスを復帰してどうにかするってのは
概念的には一番わかりやすいと思うけど、
括弧が閉じられた後、改行が来るまでに別のトークンが来ないとも限らないのが…。
(defun foo ()
5) (foo)
とかだったら
==> foo
==> 5
みたいにfooの定義とfoo呼び出しの戻り値5が返って欲しいし。
それはトップレベルがS式のリストじゃだめ? それも気持ち悪いor実はそんなことじゃ解決しない ということであれば、何をどうできればいいかなあ eofを仮にpostしてacceptするかどうかだけ判定する メソッドとか? 一切コーディングせずに妄想だけで言ってるけど!
744 :
737 :2010/05/27(木) 08:56:44
> それはトップレベルがS式のリストじゃだめ? あ、なるほど。そう考えたら「パーサのインスタンスを保存して〜」で問題ないのかな…。 まだやってないけどメソッドの追加はいらなさそうな気がします。 実際試すまでちょっと間が空くかも知れないけどまた報告に来ます。
745 :
737 :2010/05/30(日) 14:46:41
とりあえずやったこと書いてみます。 まず、字句解析器から受け取ったトークンをcaperにプッシュするループのところに以下の部分を挟みました。 if( token == token_LINE_FEED ){ Parser< Value, SemanticAction > backup = parser; if( parser.post( token_eof, 0 ) ){ break; } parser = backup; } と、backupを書き戻そうとしたところでoperator=使えないというエラーが。 で、Parserクラスに代入演算子を入れました。 public: self_type& operator!=(const self_type& other) { if (this != &other) { accepted_ = this->accepted_; error_ = this->error_; accepted_value_ = this->accepted_value_; stack_ = this->stack_; } return *this; } }; これでエラーは無くなりました。 (つづく)
じゃあさ、SQLでViewが画面とかどうだろう。 入力困るけど。
747 :
737 :2010/06/01(火) 10:44:02
次に今までS式が最上位だった所へ更に上を追加しました。 Top<int> : [] | [] Top Datum(0) ; とここでふと疑問が。 ・全体をS式の列として受理するとして、スタックに積む値の型はどうなるの? typedef boost::variant<std::string, int, bool, Sexp *> Value; となっていたのが typedef boost::variant< std::string, int, bool, Sexp *, std::list< boost::variant< std::string, int, bool, Sexp * > > > Value; とでもなるのかな?えー。 …SemanticAction内でYYACCEPTに相当する何かを行った時にも postでtrueを返せばbisonの置き換えが楽そうな気がするんだけど。
中田の新しい本は何が変わりましたか?
>748 ちょっと自分で調べといて おれ忙しいから
>750 ちょっと自分で調べといて おれも忙しいから
>>751 そんなこと書き込んでる間に調べられるだろう
>>745 >>747 型に関しては、単にリストをオブジェクトを用意すればよいのではないかな?
代入演算子とかはこれから実装しますです
YYACCEPT云々についてはちと考えます。
良く見たらoperator!=になってるw
パーサー・コンパイラについては何も知らない初心者で、書籍の購入を検討しているのですが
>>6 の中でどれを読めばいいのか教えていただけませんか。
コード生成よりも字句解析・構文解析に重点を置き、チュートリアル形式の本ではなく学問よりの本で勉強したいと思っています。
>>756 6の中なら「ドラゴンブック」と「コンパイラの構成と最適化」
高くて困るのなら
オーム社からでてる[新コンピュータサイエンス講座]シリーズの「コンパイラ」ってのが割とお勧め
高くて困るなら違法ダウンロードすればいいじゃん
オートマトンで字句解析してる人っている? いつもDirectCodeを出力させてるんだけど、日曜プログラマだからわざわざオートマトン構築する理由がわかんないです(><*)
よくわからんが普通は正規表現だろう
まぁ理論的にはオートマトンと等価だが、たぶん
>>759 の言う意味で
オートマトンを構築しているやつはいないと思われ
haskellのparsecってオートマトンじゃないの
オートマトンは処理速度遅いからね。
「最新コンパイラ構成技法」という本に「lex系の'/'演算子を利用した"zx*/xy*"という式は、Aho(1975)とPaxsonのflex(1997)の実装では適切に処理できない」として、 適切な処理の実装を練習問題として読者に委ねています。 そこで考えたんですが、例えば "Exp_0/Exp_1" という式を解析対象 str = c_0 c_1 c_2 ... c_n に適応する場合はまずExp_1を c_0 を始点としたstrに適応していき、 マッチが成功したら今度は c_1 を始点として解析、同じようにマッチが失敗する m まで c_m を次々に始点として解析してmを決定し、 次は c_0 〜 c_(m-1) = str' を Exp_0 でマッチするかどうかを調べ、Exp_0のマッチ終了まで入力を戻せばいいんでしょうか?
今月の日経ソフトウエアはスクリプトエンジンだ ちなみに一緒に買ったキスシスを読んでたらチンコが濡れてしまった。
板違いだ愚か者
俺765だけど759も俺だよ
>>757 どうもありがとうございます。ちょっと書店で見てきます。
日本語のドラゴンブックのPDF下さい。
旧版もうフリーになってるの?
フリーになっていないけど、コピーできるものをコピーするのは「できる」ことだよ。 コピーがネットで共有される現状を考えたら今の著作権は古い概念だ。 人がコピーできることを望んでいるのだから著作権もそれにあわせて変えるべきだね。
知的財産を保護してるのが著作権なんだから、情報の生産が容易になった今こそお前の言う「古い概念」によりそって生きていかないとだめなんだがね
>>772 変えるべきだね、と言っているんだよ。
俺が著作権を今風に変えるべきだと言っているのに対して、君は著作権を全否定していると受け取ったんだよ。
今風にw スレチ
今風の著作権って何よ
torrentとshareが今風著作権です! つーか板違いだしどっか行けよ池沼
皮肉なのか本気でそういってるのか良く分からない
荒らしに反応するなって
荒らしにばかり反応して肝心のコンパイラ・スクリプトエンジンには何の反応もないクソスレ
>>776 マジレスだけど、
そういうソフトウェアは将来的に認められていくと思うよ。
ちんこっぽいな
俺が著作権だ!
私が新しい著作権よ
構文解析でいま一番ホットな方法って何ですか?
独断と偏見で packrat
それ話題になって勉強会が開かれたりしたの数年前のような
方法って書いてあるんだから 方法でヨロ
LR解析 なんと左再帰を気にしなくて良い
方法というなら
>>785 のはPEGでんな。今ホットかどうかは知らんが
PEGは文法の名前であって、パース手法としてはpackratでいいんでないの?
なるほど、昔の本でも十分通用するということですね(笑)
packrat の解説が載ってる本ってあったか? ふつパイラで名前だけ挙がってるぐらいだろ。
いわゆるコンビネータパーサの魅力がぴんとこない 文法を宣言的に書く旧来のやり方の方が美しく感じるんだけど
文法をプログラマブルに構築できる(つまり動的に変えられる)こととか
>>794 そんなことできるのか。packratだかコンビネータパーサっておもしろそうですね。
勉強したい。
>>795 要するに手書きのパーサなんだから、なんだってできるのは当然
>>793 宣言的に書けるよ。
ただオペレータオーバーロードのない言語ではきつい。
足し算と掛け算の式の構文 Exp ::= Num | Var | Exp + Exp | Exp * Exp ただし優先順位は* > + をコンビネータパーサで宣言的に書くとどうなるの?
Exp ::= Exp + Term | Term Term ::= Term * Fact | Fact Fact ::= Num | Var | ( Exp )
岩波講座のプログラミング言語処理系って他の入門用の教科書と比較してどうですか?
>>799 節子、それコンビネータパーサちゃう。
BNFや。
ドラゴンブック(パープル)の練習問題の解答ってどこかwebに載ってますか? 英語でいいです。
じゃあ、英語で探せば?
>>804 一通り読んだし、ライブラリもよく使ってるが>798を宣言的に書く方法は知らない
論文って一般人でも読めるの?
読めるよ。 だから読んでね。
どうやれば読むのか分からないから読みたくてもよめません。
なんだ金払わないと読めないのか・・・・
parsec paser paper で検索すると pdf が見つかるけど?
えっ、日本語じゃないの?止めた。
英語くらい読め まあ,parsecの論文を読んでも>798の疑問は解決しないが
"parsec 電卓"あたりで検索すればいくらでもサンプル出てくると思う
自作lexと自作yaccをフルスクラッチで書いたのができたやったー こんどはこれで変数機能付き電卓作りゅー
jayって %token YToken.AA "aa" とかで YToken.AA の別名として"aa"使うこと出来ないの?
自己解決… キャストの例外出るからおかしいと思ったら文字列に変換したものをvalue()で返してた… あほすぎる
parsecという文字列を見ると天文学を思い出す
道のりは長いじゃないの?
どうでもいい。 それよりコンパイラ生成系作ったらやる事がなくなった。 死のう。
もしかしてyaccとlex作ったという人? 電卓つくったんじゃないの?
>>823 読まなくても問題ないけど金に余裕があるなら買っておいても良いというレベル。
ドラゴンブックからはじめて問題ない。
じゃあ。ノシ
パサーのみに的を絞った本ってない?
形式言語とオートマトンとか
夢をかなえるサッカーノート
スタックベースのVMを適当に作ってるんですが、 関数とその引数、関数のローカル変数を実装する場合、 下のような感じでいいのかな?呼び出し規約はcdeclのみです。 ヒープと共有するために末尾から伸ばすべきかな。 Stack ← StackPointer(SP) ------- local-var2 (BP+2) ------- local-var1 (BP+1) ------- local-var0 (BP+0) ←BasePointer(BP) ------- return-addr (BP-1) ------- arg0 (BP-2) ------- arg1 (BP-3) -------
386そっくりに作りたいならいいけど BPって要らなくね?SPに統合しちゃえばいいと思うんだけど
関数内のローカル領域が静的にしか決まらないという言語ならSPだけで十分だけど alloca的なのやサイズ未定のローカル配列を使うみたいな言語なら SP相対よりフレームポインタ相対でアクセスする方が管理が楽でしょ
あ、直前のBPの退避も要るね BPないと頭がパンクしそうです 暑さで既に思考に異常が・・
なんとかできた。 レジスタマシンならmov使うところを全部PUSHでやることになるね。 大雑把に定数、絶対アドレスの変数、相対アドレスの変数。 あとは条件ジャンプ周りだだ
SP相対のアドレッシングがあればBPは必須ってこともないけど。
BPがあったほうがスタックフレーム歩きしやすいよな。
MSのコンパイラは通常はBPを使用せずSPのみでコード構成するな 何かの判断基準を上回った関数のみBPを併用
ほんとにか。へー
gccも-Oつければ基本そうだけど、i386用は-fomit-frame-pointerがないと省略しない
ジャンプ関係もできた あとはぱーさ・・はすぐできた 終わり
なかなかすばやいな
おまえら、コンパイル終わった後のバイトコードをどうやって管理してる? オレはセクションごとにSQLiteのレコードにシリアライズして放り込んでるんだが。
中田買ってから PDFで英語版のエイホのやつ読んでみたら 日本語版にのエイホのやつ買っておけばよかったと後悔してしまった。
アホの中田
日本語のAHO>>英語のAHO>>>>>>>中田氏の ってことだろ
日本語が得手の方のみお願いします
848 :
デフォルトの名無しさん :2010/08/07(土) 23:31:13
スタックベースのVMで、関数の戻り値ってどう設計すべきでしょう? 構造体や多値をスタックで返したいけど、その型は事前に判りません。 今は別の戻り値スタックに置いて、 その頭に関数が返した型の情報を置いてます。(スタックを1本にしたい) | SP ↑ヒープ ------------------- |local2 BP-3 ------------------- |local1 BP-2 ------------------- |local0 BP-1 ------------------- |親BP BP+0 ------------------- |関数戻りaddr BP+1 ------------------- ←関数リターン後のSPの位置(cdecl) |arg0 BP+2 ------------------- |arg1 BP+3 ------------------- 事前に型が判ってればarg0の上に呼び出し側で空きを作れますが、 判らない場合は、SP上の戻り値情報の位置を入れるスペースを作って、 0なら戻り値なし、0以外(N)ならSP-Nの位置に戻り値があるとかかなあ? スタックトップ以降にも有効な値があるってのはどうなんだろう。
>>848 COMのVARIANTのようにするのが簡単だろうね。
関数リターンのアドレスを取っておく データとサイズををプッシュしる さっき取っておいたアドレスにジャンプする っていうのはどうだろうか。
>>848 > スタックトップ以降にも有効な値があるってのはどうなんだろう。
戻値がスタックトップの上にあるか、下にあるかってのは、
意識の問題に過ぎないのでは?
有効な値のある場所をスタックトップと思えばいい。
KL1、ガード部の単一化ってどうやって実装するのがセオリーなんでしょうか。 というより、ガード部での単一化、コミットとチョイスをどうやって実装するのかが一番謎で……
>>852 セオリーは知らないけどSTMでやってみたら?
コンパイラ作るのって楽しいですね。ラムダ計算インタープリタつくるのとっても大変でした。つぎはリスプからラムダ式に変換するコンパイラをかこうとおもいます(;゚∀゚)=3ハァハァ
GCを使わない方法を考えてみて
856 :
デフォルトの名無しさん :2010/08/21(土) 19:34:46
>>852 セオリーがあるほど処理系はないのではないかと思います。あるとしたら、
www.klic.org にある Inside KLIC ドキュメントと KLIC 処理系がそうでしょうか。
KLIC が生成する C ソースを見てみるのが一番早いかもしれません。
> ガード部での単一化、コミットとチョイスをどうやって実装するのかが一番謎で……
ガード部の「単一化」という言葉に引きずられるとわかりにくいですが、
要するに一致するかしないかチェックすればよいのだと思います。
例えば、
foo([A|B], C) :- A = 1, list(B) | C = 2.
みたいなホーン節があったら、このガード節を
1. 第一引数がリストかチェックする
2. 第一引数に与えられたリストの CAR/CDR をそれぞれローカル変数 A, B に入れる
3. A が数値 1 かチェックする
4. B がリストかチェックする
のような手続きに書き換えれば良いのではないかと。
これら全部のチェックに通ったら、ガード部単一化成功と看做して
ボディ部の単一化を実行します。
どれかのチェックにひっかかったら、ガード部単一化失敗ということになります。
foo/2 のホーン節定義が複数あったら、各ホーン節定義についてチェックを行い、
チェックに失敗したら次のホーン節定義のチェックにジャンプする、という格好に
なります。
boost::spiritとかだとパースした部分で アクションってのが設定出来ますが バックトラックが起きると、 アクション時に追加したデータは残ったままになてしまいますよね こういう時ってどういう風に対応するのが普通なんでしょうか (そもそもバックトラックしない文法にする以外で) パーサは手書きで作ってるんですが 全てのパース関連の関数に、 バースが失敗したら、その関数での構文木への追加を消して 巻き戻すような処理を入れる、みたいなのでいいんでしょうか
そういう手もあったなぁ。俺は昔やったとき、先読みさせて、関数自体にとばさなかったな。 パーサーが参照するスキャナ(トークナイザ)にトークンを消費しないPeekTokenみたいな メソッドを追加して。それを使って必要な分だけトークンを先読みさせてた。まぁ、いわいる。LL(∞)の文法に 対応できるよう。
LL(∞)の部分は、まずアクション無しでやって 文法に合致すれば、こんどはアクションありでやり直す。 LL(k)の部分はそんなことしなくてもいいけど。 Antlrとかはそんな感じ。 途中までの結果を記憶して効率化してるけど。
Language Implementation Patternって本に書いてある。 英語だしJavaだしAntlrの話題も多いけど。
sが抜けてる
日本人の複数形嫌いは異常
datum
mice
medium
bacterium
somu
sperma
フフフフフフフフフフフフフフフフフフ
?
捕手
GC本以降、なんか本出てたっけ?
Tiny CコンパイラのBNFくれ
tcc.c見て解析すれ
保守
単発スレ立てた人に聞きたいわけだが、何をしたいわけさ。 まずはそのスクリプトとやらがチューリング完全である必要があるか否かとか。
MMOのサーバーにスクリプト的な何かをつけたいのですが、相談に乗っていただけませんか?
スクリプト言語に求める要件は以下です。
@既にサーバー側に定義されている変数のみを使用し、スクリプト内では変数の定義を行わない。
Aメモリ削減のため、命令が行単位で表現されるインタプリタ
B分岐と行のジャンプを持つこと。
Cゲームのシナリオ進行に必要な内容を搭載できること。
が、現在求めているものです。
今Bの部分の実行の効率について悩んでいます。それ以外は大丈夫です。
>>879 上記の事から、チューリング完全である必要はないです。
あちらではお手数をかけてすみませんでした。
forthで十分な気がするが条件分岐とかの習得が面倒かもな
>>880 アセンブラのマクロとして命令を定義して、ラベル処理はアセンブラに押しつけるって手がある
>>880 仕様が全然わからん。
変数の値変更は可能なのか?
利用できる型は何か?
データの動的生成はあるのか?
中間表現は許容するのか?
>>882 あっ、実は言い忘れていたことがありまして、
Cゲームのシナリオ進行に必要な内容を搭載できること。
で、主に文章を扱うことになるんです。
なので、アセンブラだとちょっと厳しいかもしれません。
あと、言語を書き忘れていましたが現在実装に使用しているのはC++です。
そして、スクリプト言語の仕様を自作して、
今分岐やラベルなどの処理の無駄と記述のし難さに悩んでます。
配列に命令収めて、 インデックスをジャンプ指標にしてオシマイじゃないの?
>>883 >変数の値変更は可能なのか?
変数の値変更は可能ですが、新しく宣言することができません。
>利用できる型は何か?
サーバー側が使える型なら、なんでもOKです。
>データの動的生成はあるのか?
それは、サポートしない予定です。やろうと思えばできるでしょうけれど。
>中間表現は許容するのか?
なにの中間表現かはわかりませんが、
テキストを変換して、実行しやすいバイナリにします。
中途半端な説明ばかりで申し訳ありませんorz
>>885 そうしたいのですが、
飛ぶ場所などの情報が、スクリプトの編集中にあまりにも扱いにくいので、困ってます。
変換するコードの問題かもしれませんが・・・。
スクリプト書くのは誰(どんな立場、想定スキル)?
>>887 ソースでは名前、「実行しやすいバイナリ」ではインデックスにすればいいんでしょ。
後方参照は後からスロット埋めればいい。
試しに簡単なソースを提示してもらったらいいんじゃないかな。
今のままだといろいろ想像の余地がありすぎて曖昧な答えになりそう。
>>880 が考えた書式自体がまずいって可能性もあったりして。
動的生成を許容すると、 プログラムが全てジェントルであると仮定しない限り、 ゴミ集めを実装しなくてはならない。 そうしないとDoSを食らう。
>>880 MMOのサーバーとやらが何で実装されてるのかによるが、
一般的にはLuaがおすすめ。
最近ならmod_luaでapacheの中までいじれる。
JavaならGroovyとか。
893 :
880 :2010/12/02(木) 15:21:59
>>890 コードですか・・・。
理論モデルなので、まだこれといった明確な形がありません。
なので、簡単なソースも出せません。
ですが、用途はMOBやNPCの移動と行動の内容記述などや、イベント全般の進行順の記述ですね。
計算部分や複雑な検索はホスト側にすべて任せますので、
スクリプト側には四則演算もいらないレベルです。
最初から、インデックスを作ったモデルを考えていますが、
どんな記述法則をすれば、編集しやすくなるかがわからない状態です。
出力したバイナリの実行方法(仮想マシーンの仕様)ならほぼ固まっていますけど。
>>891 はい。なので、プログラム全体の必要な初期メモリ確保以外は、
newによる動的なメモリの取得をしていません。
>>892 このサーバーにLuaは、ちょっと無理ですね。
MOBの1つ1つに仮想マシンをつくると、メモリ資源があっという間に枯渇します。
Luaの記述では長すぎて、サーバー用の機能を盛り込むとさらに冗長さが・・・。
それに、動的なメモリ取得はメモリリークになる可能性があるので避けたいです。
キャラ毎にプロセス立ち上げるのは富豪的すぎないか? それともMMOでは一般的なアーキテクチャなのかな
そのバイナリに対応したアセンブラ的な記述を設計するだけじゃないの? ありがちな記述は上で誰かが書いたマクロで。
896 :
880 :2010/12/02(木) 15:51:27
>>894 えーと、Luaだと、キャラ毎に仮想マシーンが必要ですね・・・。
違う内容を並列処理させるには、今考えているようなものが必要で、Luaだけではどうにも・・・。
今考えているやつだと、実行中の部分のカウンタだけ保持してればOKなので・・・。
>>895 ですね、実行用バイナリは、まるっきり機械語のような姿ですし・・・。
アセンブラ的な記述を挟んで、Basic的なテキストを入力側言語に・・・。
897 :
880 :2010/12/02(木) 16:00:09
となると、コンパイラの設計が必要か・・・。 ・・・・なんとか、上手くいきそうです。 みなさんどうもありがとうございました orz
>>896 LuaのVMってワークエリアは数KBだよ。
仮に多めに見積もって50kb程度だとして、
これに5000ユーザーつないでも250MB。余裕じゃん。
この程度のメモリ量を捻出できないってどんだけチープなサーバーだ。
899 :
880 :2010/12/02(木) 16:20:51
>>898 MOB 1万とNPC 100も忘れないでください。
あと、全員分のLuaのコードをキャッシュしないといけないので、
Luaコードのキャッシュだけで1GB超えることもありえます。
スペックアップを予定しているけど、現状は利用可能RAMは680MBくらいです。
忘れているようですが、クライアントのオブジェクトは、LuaのVMだけではありません。
そして、仮想マシーンを作るたびに動的に作成されるメモリの行き先のことも忘れずに・・・。
5000ユーザーといいますが、実際には枠内で絶えず入れ替わるので、最大の見積りも一週間という時間の前には・・・。
>>899 俺達はお前の無料コンサルタントじゃねえ。情報を後出しにすんな。
インスタンス1万なんて今はじめて書いてるじゃないか。
>既にサーバー側に定義されている変数のみを使用し、スクリプト内では変数の定義を行わない
って言ってるんだからスクリプトやらテキストやらはC++側で共通にもたせたらいいじゃないか。
別に全部LuaVMに持たせる必要はない。
サーバー本体側からVM側にAPIを用意しといて、適宜読むようにすればいい。
それからインスタンスごとにVMを分けるのは
全体をリエントラントにしてスケービリティーを確保したいからで、
他の制限事項があるならVMを使い回すなりして節約すればいい。
901 :
880 :2010/12/02(木) 16:49:37
>>900 えーと、そちらが言い出したユーザー5000と仮定すると、MOBの量も1万〜2万と考えられるのではないでしょうか?
システムとして全体があるのですから、ある程度現実的なユーザーの数字を上げるなら、
それくらいのMOBの量を考えての発言だと思いましたが・・・。
基本、性悪説で実装していますので、Luaの仕様がメモリリークなしでも、
私には信じる気にはなれませんので、危険な事になる可能性があるならすべて排します。
Luaの便利さが、私の心をくすぐって危険なコードを書いてしまわないように・・・。
>えーと、そちらが言い出したユーザー5000と仮定すると、MOBの量も1万〜2万と考えられるのではないでしょうか? 意味がわからんMMPサーバーのサポートユーザー量なんて開発側が自分で決めることだろ。 外野が仮に出した数字を真に受けてどうする。
903 :
880 :2010/12/02(木) 17:19:18
>>902 あなたの試算に合わせたから、この数字での計算なのに・・・。
あなたへの反論だから、あなたの数字を適用したまでです。
設計では、最大限のサポートユーザーになるように設計を切り詰めるでしょう?
そして、実際の数値は、スペックに合わせての可変でしょう。
それは、こちらが決めたことではなく、必然的な数値ではないでしょうか?
そのため、こちら側の考えているサポート人数の予定なんて無意味です。
結局のところ私は、あなたの考える数値で反論するほかありません。
もうええやん。 技術的な本論なら言い合いになっても面白いけど。
ちなみに俺もLuaは悪くない選択だと思う。 プロトタイプをmod_luaで作ってみるのもいいんじゃないかな。
煽り耐性がないと損するよ
907 :
880 :2010/12/03(金) 08:07:42
>>905 最初は、私もそう思ったのですが、Luaだと記述が長い上に、
自作でスクリプトを規格した場合と同じ位の工数なので、やめたんです。
いつも使っている自作のプロトコルを改造して作った、バイナリタイプの
自作スクリプトを走らせるほうが速度もフィット感もよかったので、なおさらでした。
あと、この質問は、多分、最初から導きだされた苦渋の結論があって、
それよりいいものを探そうと悪あがきしていただけかもせれません。
やっぱり、バイナリをインデックス付きで、それに沿ったコンパイラが必要だった。
あの結論からは、逃れられませんでしたね・・・。どうも、お騒がせしました。
4K BASICインタプリターでさえ、 その程度の「コンパイラ」は付いていたしね。
まあ最終的に判断するのは自分自身だから好きにすればいいが、 Luaインタプリタの性能を過小評価してる嫌いがあるな。 今回の課題の場合は大半の機能を本体側に持たせてAPI化し、 Lua側はそれを順番に呼んでいく、という実装法が適切で、単純かつ軽くなるだろう。 とはいえ自作に固執するなら止めはしない。 元々このスレの連中は自作ダイスキーなわけだしな!
910 :
880 :2010/12/04(土) 13:05:15
>>909 サーバーのスペックアップが決まったので、Luaを試す余裕ができそうです。
APIは、サーバー側の関数を呼ぶ形式にしたらいいのかな?
ところで、頻繁に一時停止をするのですが、同期どうすればいいんでしょうか?
911 :
880 :2010/12/04(土) 18:07:27
Luaのスレに行ってきます・・・。 Luaでダメだったら、また来るかもしれません。
>>7 で紹介されている
「プログラミング言語を作る」は
このスレ的にはどの様な評価になるのでしょうか?
Amazonのレビューも1件しかないので購入しようか迷っています。
>912のレベルが判らんのにコメントできる訳ないだろ。 竜本と虎本買っとけ。
虎や竜とは違う方向
>>913 私のレベルは気にせずに貴方の評価を聴かせてください。
俺は本のことはどうでもいいから、
>>912 のレベルが知りたい。
>917 それなら過去スレ見れば良い。 話題にもなっていなかったんじゃね?
過去スレなんて誰でも見れるものでもないに
>>918 話題になってないんじゃ過去スレ見る意味ねーだろw 頭大丈夫か?
読んでない・評価できないやつは黙っててやれよ
>920 話題にもならなかった程度ということだろ
読んでもいないのに低評価にしたがるって著者に恨みでもあるのか? それともしたり顔したいだけか?
>>912 とりあえず著者のサイトくらい見ろよ。amazonに書いてあるだろ。
>>923 著者のサイトは見ています。
このスレの住人で本を読んだ人はいないのですか?
それで何をききたいわけ? 悪くないと思うよ、と言ってもらいたいわけ? それで期待したものと違ったとか言って逆恨みされるわけ?
なんだコイツ? 頭可笑しいのか。
読んでないならスルーしろよ。
このスレの評価は「この本じゃなくてドラゴンブックとタイガーブック買っとけ」つうことだろ。 中田本でも良いかもしれんが。 リンゴ本と同じ方向性の本だから、立ち読みして良かったら買えば?
著者のサイトに前のバージョンがまるごとあるのに、 なんで買う必要があるのか分からんし、 自分で判断できない理由も分からない。 網羅的な知識を学ぶ本ではなくて、実装本なので、 自分で買いたいと思えば買えばいい。 何度も読む本ではないのだから。
まあまあ。 いまは、疑問が出たら、とりあえず聞いてみる時代ですよ。 聞いといて、待ち時間にぐぐったりして情報収集すれば並行処理できるし。
>>930 分からないなら黙ってろよ。誰かお前に質問したのか? 黙ってろよ。
返答はないみたいですね。おつかれさんでした。
冬休みか
冬休みですな。 >931 聞くにしたって効率の良い聞き方というのがあるだろうに。 それに>912は単なるネタだろ? 投げっぱなしで真面目にコミュニケーションしてないし。
聞き方より聞いた場所が悪かったな まともにコミュニケーションする相手もいなかった いたのはマジキチだけ
937 :
880 :2010/12/27(月) 01:29:48
どうも皆様、お久しぶりです。前の件では、どうもありがとうございました。 ちょっと色々やってみたのですが、Luaだと実行途中でVMを保ったまま強制終了しにくいのと、 あまりにも実行部分で融通がきかないので、自分で言語を作ることにしました。
リンゴ園は最悪だからやめれ
>>938 最悪?
技術書じゃなく一般向け書籍っしょ?
「ふつうのコンパイラ」よりまし
読みたいやつは読めばいいよ。単なる読み物だから。 実装解説の本で、人に勧められるのは、虎本とGCの本くらいだろ。
低レベルな奴しか集まっていない2chで経験を要するモノ選びを頼むとか アホとしかおもえないわ
竜本 虎本 田中本(高くね?) リンゴ農園(田中本2)
インタプリタを作りたいのですが ・明快入門コンパイラ・インタプリタ開発 という本で実行エンジンの実装まで学べますか? 他にいい本があれば教えてください。 よろしくお願いします。
>>945 その本はしらないので何ともいえないしおまえさんの技能がどこまであるのかもわからないので示唆も与えられない
極々原始的な実装なら昔の8bit機の書籍が参考になる
モダンな実装を自分のものにしたいなら今のおまえさんには内容が理解できないような本を繰り返し読み下す努力をしたほうがよいので中途半端な本は薦めたくない。
>>945 その本を読んで簡易コンパイラを作ってみた者です。
その本のインタプリタは、その前段階で作ったコンパイラが出力した
VMのマシンコードを実行するだけのものだから、
インタプリタとしてはあまり参考にならないと思う。
インタプリタ制作の本当に初歩の初歩でいいなら
>>7 の「やさしいインタープリタの作り方入門」がオススメ
>>948 > その前段階で作ったコンパイラが出力した
> VMのマシンコードを実行するだけのものだから、
最近のインタプリタってこんなんばっかりでしょ。
いや別に最近に限った話でもないし つーか素朴なインタプリタの方がむしろ例外なんじゃね
素朴な疑問なんだけれども perlやrubyみたいなスクリプト言語ってインタプリタじゃないの?
perlのインタプリタは中間言語インタプリタだから、その中間言語のインタプリタであってperlのインタプリタとは言えない rubyも最近のはそうなってるらしい
「インタプリタ」を定義しろ
C/C++で処理系を作る場合には、yacc&lex(bison&flex)が一般的なのでしょうか? もっと新しくて便利なツールが普及してたりしますか?
新しくて便利なのならBoost::Spirit 慣れるまでは大変かもしれない
>>955 ありがとう。Boost::Spiritでググってきます。
内部表現にASTやバイトコードを使うインタプリタはどうなるんだ?
ウィキペディアより 「インタプリタ(interpreter)とは、プログラミング言語で書かれたソースコード、 ないし中間表現を逐次解釈しながら実行するプログラムのこと」
それによると、機械語にコンパイルされない言語は総てインタプリタか
最近は機械語に変換するものだけをコンパイラとは呼ばなくなってるんじゃないっけ 英語版のwikipediaみてみ
Javaみたいに、バイトコードにするのがコンパイラ。 バイトコードを実行するのがインタプリタ。 というものもある。
実行するのが目的か、別の何かで実行されるものを出力するのが目的かだろ。 自分自身で実行するなら内部で何に変換していようがインタプリタじゃないのか。
javacがコンパイラで javaがインタプリタ
じゃあJITはコンパイラで機械はインタプリタか
マシンコードでもCPUエミュレータは逐次解釈している。
中間コードしか吐かないコンパイラなんて昔からあるが
つまらん話題ほどレスがつくな
普段と比べて恐ろしく敷居の低い話題だからだろうな
じゃあ流れでこっからは二村射影について
DSLって二村射影だと何にあたるん?
単に処理系の一つ。
一気にスレが止まったな
うめとくか
にちゃんねらのコンパイラ離れ
Dominance frontier に関して質問です。 3つの基本ブロックが下図のように繋がっているとき、 immediately dominate は 1:なし 2:1 3:1 になると思うのですが、Dominance frontier はどうなるでしょうか? 'A Simple, Fast Dominance Algorithm' の方法で試したら 1:なし 2:2、3 3:なし となりましたが、2のDFに2が含まれるのはアリなんでしょうか? 1──┐ ↓ │ 2←┐│ 2 ││ 2─┘│ ↓ │ 3←─┘ ※作図の都合で2が3行になっています
アリです。 DFの定義通りです。
>>977 お答えありがとうございます。
おかげさまで定義をよく読み返して理解できました。
SWIGある故か、まったく名前聞かないけど、これってどうなんだろうねえ。
DynCall - 仮想マシンを経由するC関数呼び出しライブラリ(元々はR向けに開発されたもの)
ttp://dyncall.org/
981 :
デフォルトの名無しさん :2011/01/26(水) 20:41:45
ドラゴンブックの改訂2版を買ってきたんだけど、 Rubyの表記がRubbyとなってるのが気になる。 もしかしてRubbyという言語があるの? それとも誤植?
982 :
デフォルトの名無しさん :2011/01/26(水) 21:04:03
>>981 自己レスだけど、翻訳者の原田賢一さんって経歴から察するに60歳から70歳くらいのお年なのね。
こういう翻訳のお仕事はできれば若い方に譲ってもらいたいなー。
随所に引っかかる訳が多い。More Effective C++の訳を思い出す感じがイヤ。
「メモリ漏れ」よりかは「メモリリーク」の方が分かりやすいでしょ。
伝統的な工学系の翻訳も今の時代にあわない気がする。
正直、字句や構文、意味に関してはトークン、シンタックス、セマンティクスの方が分かりやすくね?
「系」とか「器」もなんだかなー。
「前処理系」よりもプリプロセッサ。
「解析器」よりもアナライザ。
「通訳系」よりもインタプリタの方が分かりやすい。
まあ、原著を読めって話か。
ゴミ集めよりガベージ・コレクション
2chに書いてるだけじゃ改善されませんよ?
トークンは分かりやすいけど シンタックスやセマンティクスは分かりにくい
トークンも字句の方がいいなぁ
>>982 おっしゃることはもっともだと思うので、勝手に添削してみた。
>セルフレスだけど、トランスレータのミスター原田賢一ってヒストリーから察するに
>60歳から70歳くらいのエージなのね。
>こういうトランスレーションのワークはできればヤングメンに譲ってもらいたいなー。
自分のような今時のナウイヤングマンからすると、こっちの方が分かりやすくね?
翻訳はいい訳が出来るのなら、古い人がやっても、編集が修正出来ればいいのでは? 用語選択の問題くらいじゃ。若いだけじゃ困るし。
>>982 俺は年取ってるせいかメモリリークよりメモリ漏れの方がしっくりするな
ガベージコレクションをゴミ集めっていうのはちょっと抵抗あるんだけど、和田先生とかがゴミ集めって言ういいかたしてたの思い出したらそうでもないかも
古い奴はとっとと失せろ
カタカナ表記は地味に字数を食うから、書籍ではレイアウト上の利便性って都合もあるんじゃないだろうか 章のタイトルなんかだと文字の大きさ自体が変わりそう 個人的には「字句(token)」みたいな最初の登場時のみ原典補足するスタイルが一番好みだし後々便利だ どうしてもやるならいっそカタカナなしで原典表記のみの方がいいな
原書読め原書
ume
ume
ume
ume
ume sosi
1000 :
デフォルトの名無しさん :2011/01/28(金) 21:42:05
EOF
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。