【お知らせ】プログラミング記事の投稿はQiitaに移行しました。Win32独自言語Andromedaのコンパイラver.1.0をリリースしました。Andromeda自作言語AndromedaをSilverlightに移植しました。Win32バイナリを出力するネイティブコンパイラです。動作確認とソースのダウンロードは以下です。AndromedaLLPMLからAndromedaまでの開発を振り返って、アーキテクチャをスライドにまとめました。LLPMLSlideShareははてなダイアリー対応なので、embedコードをブログの本文にコピペするだけで貼り付けることができました。まとめ2009-01-15無名クラスLLPML無名クラスを実装しました。局所的な型に名前を付ける手間を省きます。同じ書式で継承(Java風)と初期化(C#風)を記述できます。LLPMLAndromedaにGUIコントロール(Win32ラッパー)を追加しました。LLPMLの問題もいくつか修正しました。ボタンを押すと終了する簡単なアプリケーションは次のようになります。FreeBSDMonoでLLPMLが動くようになったので、FreeBSD上でid:m107さんのh01をコンパイルして動かしてみました。FreeBSDMonoでビルドして実行できるようになりました。UNIX系OS上ではLLPMLで出力したバイナリをWineで実行することができます。FreeBSDで動作確認しました。System.Collections.Generics.Dictionaryの挙動にハマりました。CE(x86)のバイナリが出力できるようになりました。PEとしての構造は同じなので、ヘッダのサブシステムを変更しただけです。x86にしか対応していないため、実質的にエミュレータでしか動きません。1.0リリースを記念して、id:m107さんのh01を移植しました。自分でテストコードを書くと無意識に問題を避けてしまうので、今回の移植はとても参考になりました。このようにコンパイラ同梱でソース配布を行うことも、コンパイラを自作し...h01の移植2008-09-151.0リリースLLPML独自言語コンパイラLLPMLの1.0をリリースしました。それに伴い、内部でネイティブコードの生成に使用しているCompilerLibもLLPMLで使用しているバージョンに更新しました。今後はIDEを実装しながら、自分...1.0リリース2008-08-17クラスLLPMLクラスを実装しました。クラスには参照カウントが働きます。循環参照への対策は行っていません。.NETと同じようにstructとclassを区別します。structは値型、classは参照型です。クラス2008-04-23クイックソートLLPMLクロージャが使えるようになったので、クイックソートを書いてみました。クイックソート2008-04-22クロージャLLPMLクロージャを実装しました。レキシカルスコープによるアクセスを検出して、自動的に引数を追加してdelegateを生成しています。パーサの側でdelegateを挿入することで簡単に実装できました。クロージャ2008-04-21委譲LLPML委譲を実装しました。機能的にはC++のbindに近いです。JITを利用して実行時にコードを生成しています。そのためC言語にコールバックとして渡せます。ATLで利用されているサンクと同じ手法です。委譲2008-04-10ラムダ式LLPMLラムダ式が記述できるようになりました。実装としては無名関数のシンタックスシュガーです。パーサを色々と整理しました。今まで特別扱いだったメンバアクセス演算子や関数呼び出しなどを通常の演算子と同列に扱うようにしたため...ラムダ式2008-04-03関数の戻り値の型LLPML関数の戻り値の型が指定できるようになりました。(0.15-20080403)関数の戻り値の型2008-03-29仮想関数とJITLLPML仮想関数を実装しました。無名関数で実現していたものを言語仕様に盛り込んで、内部で同等のコードに展開すれば簡単にできるかと思ったのですが、内部構造に柔軟性がなかったため予想以上に手間取りました。仮想関数とJIT2008-03-27無名関数LLPML無名関数を実装しました。当初は難易度が高いので後回しにしようと思っていたのですが、関数定義に関数ポインタの値を持たせれば式の中で扱えることに気付きました。そのためすぐに実装できました。無名関数2008-03-25プロパティLLPMLプロパティをサポートしました。いう関数を定義します。呼び出し側のパースではメンバが見付からないときに関数に読み替えています。手軽に実装できて便利な...プロパティ2008-03-23アルファブレンドLLPMLMMXとSSE2を一部サポートしました。LLPMLには最適化機能がありません。アルファブレンドのコードを少し工夫するだけで動作速度が目に見えて変わりました。MMXやSSE2をサポートしたところ、MMXで3倍、SSE2で4.5倍程度の速度向...アルファブレンド2008-03-06整数型LLPML整数型のbyteとshortをサポートしました。(0.11-20080306)整数型2008-02-12ラッパー風のシンタックスシュガーLLPML関数呼び出しのシンタックスシュガーを実装しました。ラッパーを書かずにC言語のAPIをオブジェクト風に呼び出すことができます。ラッパー風のシンタックスシュガー2008-02-11配列LLPML配列が使えるようになりました。ようにアクセスできます。ような配列も宣言できますが、byte型をサポートしていないためアクセスするとおかしくなります。次の0.11でサポートする予定...配列2008-02-03配列の宣言LLPML配列が宣言できるようになりました。配列の要素に添え字でアクセスすることはできません。PAINTSTRUCT構造体が定義できるようになったので、Win32のサンプルで描画を試してみました。2008に移行LLPMLLLPMLの開発をVC#2008に移行しました。簡略記法で構造体や関数が記述できるようになりました。C#とJavaScriptを混ぜたような構文です。2008に移行2007-10-21コンストラクタ名LLPML構造体の実装の移行が完了しました。ブロックベースの実装のため、メンバ変数の初期化を普通の変数宣言と同じ書式で行えます。初期値代入やコンストラクタとの兼ね合いで、仕様を変更しています。コンストラクタ名2007-10-16構造体を再実装LLPMLクロージャを検討したときに、関数を関数オブジェクトに見立てれば構造体を表現できるということに気付きました。それに沿ってブロックベースで構造体を再実装しています。プロトタイプベースの考え方でメソッドを定義すると、クロ...構造体を再実装2007-10-02クロージャLLPML今の仕組みのまま、特別な拡張なしにクロージャを実現できないか考えてみました。結論から言うと見送りですが、せっかく検討したので記録を残しておきます。クロージャ2007-09-30簡略化LLPML数式に中置記法を取り入れて簡略化しました。使用できるのはタグの子要素に限られます。フローなどはXMLのままです。そのため一見あまり変わらないように見えますが、数式部分は劇的に書きやすくなっています。HTML内のJavaScript...簡略化2007-09-26記述性LLPML昨日作ったC言語の浮動小数点数算出プログラムをLLPMLに移植してみました。出力するコードは問題なさそうです。ちなみに出力するコードに最適化はまったく施されていませんが、仕様が完全に固まるまでは最適化は行わない予定です。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。