Queen

型修飾 (妄想パート)

Queenタグは妄想俺言語用。とりあえずAdaベースで。静的割付け何度も、いくらstd::stringが頑張っても言語組み込みの文字列には敵わないという話をしていますが、それでももう少し頑張ろうという一環です。 To_Unbounded_Stringやstd::stringのコンストラク…

例外とlongjmp

この辺を読んで、前から言っていたことではあるのですが、例外がどうにも扱いにくいというか精神的負荷が高い理由が説明できる形になった気がします。 例外を単純に(メンバ値とかfinallyとか継承とか抜きで)longjmpで実装しようとすれば、こうなるんですよね…

欲しい言語機能メモ

示す先がconstantかどうかが親の値がconstantかどうかに連動するポインタ。 これがあればC++なんかでメンバ関数のconst版オーバーロードを書き分ける場面も減ると思う。Copy-On-Writeとか仕掛けるならやはりオーバーロードも必要だけども。

名前付き引数

Queenの文法紹介(に見せかけた何かへの言及)第二回は名前付き引数です。 名前付き引数への反応といったら大抵拒否反応で、かなり前にも別の話の中でしたがこんなコメントをいただいたことがあります。 http://d.hatena.ne.jp/ytqwerty/20040626#p1 だもんで…

題すら思いつかないので徒然と

http://www.kmonos.net/wlog/55.php#_1446051108 どちらかといえば、その辺の2以上の要素を持つ構造体を、後付けで、この要素がfirst、この要素がsecond、と指名して、pairとしても使えるようにする機能、のほうが欲しいのです。概念としてはHaskellのclass-…

識別子の一致規則

今まで、バックエンド無いかなーとかif文できたーとかそんなのばっかでまともにQueenそのものを説明したことは無かったのですが、某記事に影響以下略晴れて許可が以下略と、意味不明な前書きを置いた上で、Queenの識別子の一致規則を説明したいと思います。

ILogScript

id:w_oさんが作っておられるスクリプト。 直接gccをバックエンドにするだけの技術力が(私のように)無い場合、ILogScriptを吐くのもいいですね。 Queenは前述*1の通り例外処理が特殊なので、gccの想定に合うかどうか心配ですが。あと関数内関数での親ebpの使…

if

ようやくif実装です。 今は小さな声でしか言えませんが、Dで書かれた世界初のコンパイラ、と、おおっぴらに言える日は来るのでしょうか?

さらにバックエンド

http://a.hatena.ne.jp/include?http://d.hatena.ne.jp/ytqwerty/より、いつの間にかこのNoteを読んでくださってるJ-Kleinさんの生存記録http://d.hatena.ne.jp/kt-blackout/20040721#p1より、COINShttp://www.coins-project.org/今まで見た中で一番良さそう…

retry

http://p22.aaacafe.ne.jp/~qwerty/private/queen/page/0054.html構造化例外処理のついでで、retry文です。私は、gotoは他の構文で書けるならば好き好んで使ったりしませんが、わざわざそのためだけのフラグ変数を設けるぐらいであれば問答無用でジャンプさ…

例外クラスを外から指定

昨日適当に書いたC++の例ではだめでした。 #include<cstdio> class exception { virtual void dummy(){} //for VMT }; void func(exception const & error) { throw error; } int main() { class a : public exception { }; try{ func(a()); }catch(a&){ std::printf</cstdio>…

The LLVM Compiler Infrastructure

バックエンド候補その2。http://llvm.cs.uiuc.edu/ただしWindows向けには作られて無かったです。Linux/Sparc/Mac。

構造化例外処理

D版にてbreakを再実装。http://p22.aaacafe.ne.jp/~qwerty/private/queen/page/0047.htmlhttp://p22.aaacafe.ne.jp/~qwerty/private/queen/page/0049.htmlこれで例外処理も済ませてしまう事にしました。現行の例外処理の問題点として、どの関数がどの例外を…

デバッグ情報

Borland形式の.mapファイルからMSのデバッグ情報を吐くツール!ソースつき!http://www.wischik.com/lu/programmer/こいつを解析できたら、自作コンパイラもデバッグ情報が吐けるかも!?追記: WinDbgやVS.NETが外部.dbgを認識してくれない….exeに納めないと…

Boolean

現実逃避の度合=開発の進み具合。構文は順に対処していくだけですので、今のところは特に問題は無いのですが、吐いた機械語の無駄具合がなんとも。最適化は後回しと決めているにしても…。 このコンパイラでは、ソースコード→構文木→三番地文(このレベルで雀…

整数の四則演算を実装

あとはBooleanと比較式と制御文ができればTiny Compilerのレベルに到達できるかな。構文木を手で書いていると、静的グローバル変数ともTLSとも異なる、オブジェクト群の塊単位で使用できる変数が欲しいと思ってきました。インスタンス毎に参照を持たせたら、…

esp

WriteFileはespが4の倍数じゃないと動かない。wvsprintfは動く。何が違うんでしょうね…。 ま、サボらずにアライメントしやがれって事なのでしょうが。

午前6時…あれ?まだ昨日扱い?→はてな

ようやく型解決作り直して同じところ(単項±演算子)まで到達。 次は二項±演算子かな。 簡単な数字当てゲームに到達するにも、他に、比較演算子(…ってことはBoolean型もだ)、ReadConsole、if文、loop文(…は再帰使えば要らないけど)ぐらいは必要。先は長い。

新しい型解決アルゴリズムの欠陥

改造が進んでから、今更のようにはたと気づく。 printfの類で、いきなり123とか書けなくなっちゃいました。 ↓で書いた型解決ですと、数値定数なんかは「求められた型」になるわけですが、C呼びだしの追加パラメータは型を求めないので、型が一意に決まらない…

型を解決するロジック変更

結局、構文木を一回なぞっただけで型を解決しようとするのは無理とは言い切らないけど辛いと判断、型解決をごそっと書き直すことにしました。まず(1)各項が取りうる型のうち確実なものをリストアップ(複数可)、(2)数値リテラルなどの型を明言できない項を前…

整数型を作る機能と通常関数扱いの演算子オーバーロード

よく考えると組み合わせ爆発が起きるよなーこれ。つくづく考え無しだ自分。二項演算子ひとつとっても、左辺の型と右辺の型と結果の型で… 整数型を組み込み型に限定するなら、1,2,4,8バイトの符号有無で、8通りの三乗…実際にはもっと減らせる…だけをあらかじ…

サンプル08まで

instance側で実体を定義してオーバーロードを解決するのは実装。 次は演算子に進むか、generic側での定義、要するに普通のテンプレートに進むか。

サンプル06まで

D版Queenもそろそろgenericを実装しはじめてもいい頃合いが来ました。 演算子をgenericで、って決めたので、template展開とかはどうでもよくて結びつきの解決だけでもできないと先へ進めないだけですけども。 で…Haskell風genericってどういうデータ構造をと…