#topicpath 以下の作業は完了して、1.0をリリースしました。 ⇒ [[LLPML]] ** 1.0までの作業 [#s1fa4ed6] + 【済】%%ASTのオブジェクト化%% + 【済】%%ブロックによる変数のスコープ%% + 【済】%%関数%% + 【済】%%構造体%% + 【済】%%制御構造、算術演算%% + 【済】%%メンバ関数%% + 【済】%%コンストラクタ・デストラクタ%% + 【済】%%継承%% + 【済】%%簡略記法%% + 【済】%%配列%% + 【済】%%整数型%% + 【済】%%プロパティ%% + 【済】%%無名関数%% + 【済】%%仮想関数%% + 【済】%%関数の戻り値の型%% + 【済】%%ラムダ式%% + 【済】%%委譲%% + 【済】%%クロージャ%% + 【済】%%静的メンバ%% + 【済】%%new/delete%% + 【済】%%クラス%% + 【済】%%スコープ解決演算子%% + 【済】%%文字列型%% + 【済】%%RTTI%% *** 開発中のリリース [#d34b4a4d] - ソース: &ref(../LLPML-0.99-20080914.zip); - 文字列定数の前方参照、グローバル変数の前方参照、メンバ参照の修正 - ソース: &ref(../LLPML-0.99-20080913.zip); - 定数の前方参照、switchのdefaultを修正 - ソース: &ref(../LLPML-0.99-20080828.zip); - 単体コンパイラを追加、前置演算子を修正、定数をコンパイル時に計算 - ソース: &ref(../LLPML-0.24-20080826.zip); - 文字コード変換 - ソース: &ref(../LLPML-0.24-20080825.zip); - is, as - ソース: &ref(../LLPML-0.24-20080824.zip); - RTTI、typeofでType型を返す - ソース: &ref(../LLPML-0.23-20080824.zip); - 参照カウントの修正 - ソース: &ref(../LLPML-0.23-20080822.zip); - 文字列操作、参照カウントの修正 - ソース: &ref(../LLPML-0.23-20080819.zip); - 文字列をクラス化 - ソース: &ref(../LLPML-0.22-20080818.zip); - スコープ解決演算子、参照型配列の型指定 - ソース: &ref(../LLPML-0.21-20080817.zip); - クラス、参照型配列、参照カウント ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!852.entry]] - ソース: &ref(../LLPML-0.20-20080708.zip); - メンバのオフセット、変数演算、委譲のリークを修正 - ソース: &ref(../LLPML-0.20-20080514.zip); - 配列のnew/delete - ソース: &ref(../LLPML-0.20-20080512.zip); - new/delete - ソース: &ref(../LLPML-0.19-20080511.zip); - 静的メンバ、base - ソース: &ref(../LLPML-0.18-20080421.zip); - クロージャ ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!789.entry]] - ソース: &ref(../LLPML-0.17-20080421.zip); - 委譲、デストラクタのバグ修正 ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!787.entry]] - ソース: &ref(../LLPML-0.16-20080410.zip); - ラムダ式、パイプ演算子、パーサの演算子周りを整理 ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!779.entry]] - ソース: &ref(../LLPML-0.15-20080406.zip); - 引数の型チェック、bool型の追加、キャストのバグ修正 - ソース: &ref(../LLPML-0.15-20080403.zip); - 関数の戻り値の型 ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!776.entry]] - ソース: &ref(../LLPML-0.14-20080402.zip); - 型周りの実装を整理 - ソース: &ref(../LLPML-0.14-20080329.zip); - 仮想関数、JITによる関数型もどき ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!771.entry]] - ソース: &ref(../LLPML-0.13-20080327.zip); - 無名関数、メンバ参照のバグ修正、コンストラクタとデストラクタの実装を見直し ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!770.entry]] - ソース: &ref(../LLPML-0.12-20080325.zip); - プロパティ、値なしreturnのサポート、代入時の符号変換、エラー箇所情報の拡充 ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!766.entry]] - ソース: &ref(../LLPML-0.11-20080324.zip); - メニュー、Win32ラッパー - ソース: &ref(../LLPML-0.11-20080323.zip); - MMXとSSE2の一部サポート、キャストと構造体初期化のバグ修正 ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!763.entry]] - ソース: &ref(../LLPML-0.11-20080314.zip); - 演算子の処理を分離、符号、ポインタ演算、サンプルのタイトル - ソース: &ref(../LLPML-0.11-20080307.zip); - 初期化と型推論のバグ修正 - ソース: &ref(../LLPML-0.11-20080306.zip); - 整数型のbyteとshortをサポート ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!752.entry]] - ソース: &ref(../LLPML-0.11-20080218.zip); - 【暫定】CompilerLibに8bitと16bitの命令を追加 - ソース: &ref(../LLPML-0.10-20080212.zip); - ラッパー風のシンタックスシュガー ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!668.entry]] - ソース: &ref(../LLPML-0.10-20080211.zip); - 配列アクセス、型推論 ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!667.entry]] - ソース: &ref(../LLPML-0.10-20080205.zip); - 埋め込みを<?llp ?>に変更、引数チェックの強制、externの簡略記法、相互参照、ヒープ、サンプルの整理 - ソース: &ref(../LLPML-0.10-20080203.zip); - 配列の宣言、Win32サンプル(17.xml)で描画処理 ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!665.entry]] - ソース: &ref(../LLPML-0.9-20080127.zip); - PHP風の<?llpml ?>に簡略記法を埋め込み、HTML風の<script>は廃止 - ソース: &ref(../LLPML-0.9-20080123.zip); - Visual C# 2008に移行、簡略記法の適用範囲を拡大 ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!663.entry]] - ソース: &ref(../LLPML-0.9-20071021.zip); - ブロックベースの構造体(移行完了)、サンプルを簡略記法で書き換え ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!637.entry]] - ソース: &ref(../LLPML-0.9-20071016.zip); - ブロックベースの構造体(移行途中)、簡略記法の適用範囲を拡大 ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!636.entry]] - ソース: &ref(../LLPML-0.9-20071014.zip); - 名前空間の統一、プロジェクト構成の整理 - ソース: &ref(../LLPML-0.9-20070930.zip); - [[中置記法による数式の簡略化>LLPML/簡略化]] ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!628.entry]] - ソース: &ref(../LLPML-0.8-20070926.zip); - エラー表示の改善、castとnullの追加、[[浮動小数点数算出のサンプル>IEEE 754]] ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!625.entry]] - ソース: &ref(../LLPML-0.8-20070924.zip); - 継承 ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!623.entry]] - ソース: &ref(../LLPML-0.7-20070917.zip); - コンストラクタ・デストラクタ ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!621.entry]] - ソース: &ref(../LLPML-0.6-20070904.zip); - var-ptrを廃止してptrに統合、struct-member-ptrを追加 - ソース: &ref(../LLPML-0.6-20070830.zip); - メンバ関数 ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!615.entry]] - ソース: &ref(../LLPML-0.5-20070829.zip); - var-intをvarに改名して型情報を付加 - ソース: &ref(../LLPML-0.5-20070826.zip); - 構造体内構造体 - ソース: &ref(../LLPML-0.5-20070821.zip); - switch/break/returnの修正、continueの追加、無駄なスタックフレームを抑制 - ソース: &ref(../LLPML-0.5-20070819.zip); - 制御構造、算術演算、ウィンドウ表示 ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!610.entry]] - ソース: &ref(../LLPML-0.4-20070817.zip); - IIntValueで変数処理を抽象化 - ソース: &ref(../LLPML-0.4-20070816.zip); - 構造体、変数処理の抽象化 ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!609.entry]] - ソース: &ref(../LLPML-0.3-20070815.zip); - 関数の戻り値、コールバック、変数宣言タグの分離、サンプルの整理 ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!608.entry]] - ソース: &ref(../LLPML-0.3-20070814.zip); - 関数 ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!607.entry]] - ソース: &ref(../LLPML-0.2-20070806.zip); - BASIC風forの追加(0.5でC言語風に仕様変更) - ソース: &ref(../LLPML-0.2-20070805.zip); - ブロックとスコープ ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!600.entry]] - ソース: &ref(../LLPML-0.1-20070729.zip); - ASTオブジェクト ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!598.entry]] - ソース: &ref(../LLPML-0.1-20070722.zip); - 最初のリリース ⇒ [[関連日記>http://gir-lab.spaces.live.com/blog/cns!63A4C32EDA5CF2F7!595.entry]] ** XMLからの移行 [#n7e5d4c8] 当初計画ではXMLだけですべて記述する方針でしたが、あまりに非効率で自分自身を記述できないと判断しました。1.0までは共存状態のままで進めますが、1.0以降ではXMLはASTのシリアライズ用に特化して、Andromedaを独立した言語として扱えるようにする予定です。 ** 例 [#a5a2a600] &color(red){''初期のバージョンではXMLでの記述がメインでしたが、記述性の低さから簡略記法(Andromeda言語)に移行しました。以下の記述は古い例です。''}; 図形言語の内部処理用を想定しているため記述性は低いです。ASTをXMLで記述するというイメージです。しかしあまりにも記述性が低くてサンプルの作成だけでも苦労したため、簡略記法を導入しました。 以下にもサンプルがあります。 - [[IEEE 754]] 以下には細かい部分でのC言語との比較があります。 - [[IEEE 754/比較]] *** 標準出力 [#a1f62321] 以下のC言語と同等のものを作成します。 #include <windows.h> int main() { HANDLE stdout = GetStdHandle(STD_OUTPUT_HANDLE); const char *hello = "Hello, World!\r\n"; DWORD dummy; WriteConsole(stdout, hello, lstrlen(hello), &dummy, NULL); return 0; } LLPMLでは以下のようになります。 <?xml version="1.0" encoding="utf-8" ?> <llpml version="0.10.20080205"> <extern module="kernel32.dll" type="std" name="GetStdHandle"> <arg name="nStdHandle" /> </extern> <extern module="kernel32.dll" type="std" suffix="W" name="WriteConsole"> <arg name="hConsoleOutput" /> <arg name="lpBuffer" /> <arg name="nNumberOfCharsToWrite" /> <arg name="lpNumberOfCharsWritten" /> <arg name="lpReserved" /> </extern> <extern module="kernel32.dll" type="std" suffix="W" name="lstrlen"> <arg name="lpString" /> </extern> <int-declare name="STD_OUTPUT_HANDLE">-11</int-declare> <var-declare name="stdout"> <call name="GetStdHandle"> <int name="STD_OUTPUT_HANDLE" /> </call> </var-declare> <string-declare name="hello">Hello, World! </string-declare> <var-declare name="length" /> <call name="WriteConsole"> <var name="stdout" /> <string name="hello" /> <call name="lstrlen"><string name="hello" /></call> <ptr name="length" /> <int>0</int> </call> </llpml> XMLだけでは記述が大変なので、簡略記法が用意されています。 <?xml version="1.0" encoding="utf-8" ?> <llpml version="0.10.20080205"> <?llp extern "kernel32.dll" __stdcall { GetStdHandle(nStdHandle); __widecharset WriteConsole( hConsoleOutput, lpBuffer, nNumberOfCharsToWrite, lpNumberOfCharsWritten, lpReserved); __widecharset lstrlen(lpString); } const int STD_OUTPUT_HANDLE = -11; var stdout = GetStdHandle(STD_OUTPUT_HANDLE); const string hello = "Hello, World!\n"; var length; WriteConsole(stdout, hello, lstrlen(hello), addrof(length), null); ?> </llpml>