以下の作業は完了して、1.0をリリースしました。 ⇒ LLPML
当初計画ではXMLだけですべて記述する方針でしたが、あまりに非効率で自分自身を記述できないと判断しました。1.0までは共存状態のままで進めますが、1.0以降ではXMLはASTのシリアライズ用に特化して、Andromedaを独立した言語として扱えるようにする予定です。
初期のバージョンではXMLでの記述がメインでしたが、記述性の低さから簡略記法(Andromeda言語)に移行しました。以下の記述は古い例です。
図形言語の内部処理用を想定しているため記述性は低いです。ASTをXMLで記述するというイメージです。しかしあまりにも記述性が低くてサンプルの作成だけでも苦労したため、簡略記法を導入しました。
以下のC言語と同等のものを作成します。
LLPMLでは以下のようになります。
XMLだけでは記述が大変なので、簡略記法が用意されています。
- 【済】
ASTのオブジェクト化 - 【済】
ブロックによる変数のスコープ - 【済】
関数 - 【済】
構造体 - 【済】
制御構造、算術演算 - 【済】
メンバ関数 - 【済】
コンストラクタ・デストラクタ - 【済】
継承 - 【済】
簡略記法 - 【済】
配列 - 【済】
整数型 - 【済】
プロパティ - 【済】
無名関数 - 【済】
仮想関数 - 【済】
関数の戻り値の型 - 【済】
ラムダ式 - 【済】
委譲 - 【済】
クロージャ - 【済】
静的メンバ - 【済】
new/delete - 【済】
クラス - 【済】
スコープ解決演算子 - 【済】
文字列型 - 【済】
RTTI
- LLPML-0.99-20080914.zip - 文字列定数の前方参照、グローバル変数の前方参照、メンバ参照の修正
- LLPML-0.99-20080913.zip - 定数の前方参照、switchのdefaultを修正
- LLPML-0.99-20080828.zip - 単体コンパイラを追加、前置演算子を修正、定数をコンパイル時に計算
- LLPML-0.24-20080826.zip - 文字コード変換
- LLPML-0.24-20080825.zip - is, as
- LLPML-0.24-20080824.zip - RTTI、typeofでType型を返す
- LLPML-0.23-20080824.zip - 参照カウントの修正
- LLPML-0.23-20080822.zip - 文字列操作、参照カウントの修正
- LLPML-0.23-20080819.zip - 文字列をクラス化
- LLPML-0.22-20080818.zip - スコープ解決演算子、参照型配列の型指定
- LLPML-0.21-20080817.zip - クラス、参照型配列、参照カウント ⇒ 関連日記
- LLPML-0.20-20080708.zip - メンバのオフセット、変数演算、委譲のリークを修正
- LLPML-0.20-20080514.zip - 配列のnew/delete
- LLPML-0.20-20080512.zip - new/delete
- LLPML-0.19-20080511.zip - 静的メンバ、base
- LLPML-0.18-20080421.zip - クロージャ ⇒ 関連日記
- LLPML-0.17-20080421.zip - 委譲、デストラクタのバグ修正 ⇒ 関連日記
- LLPML-0.16-20080410.zip - ラムダ式、パイプ演算子、パーサの演算子周りを整理 ⇒ 関連日記
- LLPML-0.15-20080406.zip - 引数の型チェック、bool型の追加、キャストのバグ修正
- LLPML-0.15-20080403.zip - 関数の戻り値の型 ⇒ 関連日記
- LLPML-0.14-20080402.zip - 型周りの実装を整理
- LLPML-0.14-20080329.zip - 仮想関数、JITによる関数型もどき ⇒ 関連日記
- LLPML-0.13-20080327.zip - 無名関数、メンバ参照のバグ修正、コンストラクタとデストラクタの実装を見直し ⇒ 関連日記
- LLPML-0.12-20080325.zip - プロパティ、値なしreturnのサポート、代入時の符号変換、エラー箇所情報の拡充 ⇒ 関連日記
- LLPML-0.11-20080324.zip - メニュー、Win32ラッパー
- LLPML-0.11-20080323.zip - MMXとSSE2の一部サポート、キャストと構造体初期化のバグ修正 ⇒ 関連日記
- LLPML-0.11-20080314.zip - 演算子の処理を分離、符号、ポインタ演算、サンプルのタイトル
- LLPML-0.11-20080307.zip - 初期化と型推論のバグ修正
- LLPML-0.11-20080306.zip - 整数型のbyteとshortをサポート ⇒ 関連日記
- LLPML-0.11-20080218.zip - 【暫定】CompilerLibに8bitと16bitの命令を追加
- LLPML-0.10-20080212.zip - ラッパー風のシンタックスシュガー ⇒ 関連日記
- LLPML-0.10-20080211.zip - 配列アクセス、型推論 ⇒ 関連日記
- LLPML-0.10-20080205.zip - 埋め込みを<?llp ?>に変更、引数チェックの強制、externの簡略記法、相互参照、ヒープ、サンプルの整理
- LLPML-0.10-20080203.zip - 配列の宣言、Win32サンプル(17.xml)で描画処理 ⇒ 関連日記
- LLPML-0.9-20080127.zip - PHP風の<?llpml ?>に簡略記法を埋め込み、HTML風の<script>は廃止
- LLPML-0.9-20080123.zip - Visual C# 2008に移行、簡略記法の適用範囲を拡大 ⇒ 関連日記
- LLPML-0.9-20071021.zip - ブロックベースの構造体(移行完了)、サンプルを簡略記法で書き換え ⇒ 関連日記
- LLPML-0.9-20071016.zip - ブロックベースの構造体(移行途中)、簡略記法の適用範囲を拡大 ⇒ 関連日記
- LLPML-0.9-20071014.zip - 名前空間の統一、プロジェクト構成の整理
- LLPML-0.9-20070930.zip - 中置記法による数式の簡略化 ⇒ 関連日記
- LLPML-0.8-20070926.zip - エラー表示の改善、castとnullの追加、浮動小数点数算出のサンプル ⇒ 関連日記
- LLPML-0.8-20070924.zip - 継承 ⇒ 関連日記
- LLPML-0.7-20070917.zip - コンストラクタ・デストラクタ ⇒ 関連日記
- LLPML-0.6-20070904.zip - var-ptrを廃止してptrに統合、struct-member-ptrを追加
- LLPML-0.6-20070830.zip - メンバ関数 ⇒ 関連日記
- LLPML-0.5-20070829.zip - var-intをvarに改名して型情報を付加
- LLPML-0.5-20070826.zip - 構造体内構造体
- LLPML-0.5-20070821.zip - switch/break/returnの修正、continueの追加、無駄なスタックフレームを抑制
- LLPML-0.5-20070819.zip - 制御構造、算術演算、ウィンドウ表示 ⇒ 関連日記
- LLPML-0.4-20070817.zip - IIntValueで変数処理を抽象化
- LLPML-0.4-20070816.zip - 構造体、変数処理の抽象化 ⇒ 関連日記
- LLPML-0.3-20070815.zip - 関数の戻り値、コールバック、変数宣言タグの分離、サンプルの整理 ⇒ 関連日記
- LLPML-0.3-20070814.zip - 関数 ⇒ 関連日記
- LLPML-0.2-20070806.zip - BASIC風forの追加(0.5でC言語風に仕様変更)
- LLPML-0.2-20070805.zip - ブロックとスコープ ⇒ 関連日記
- LLPML-0.1-20070729.zip - ASTオブジェクト ⇒ 関連日記
- LLPML-0.1-20070722.zip - 最初のリリース ⇒ 関連日記
当初計画ではXMLだけですべて記述する方針でしたが、あまりに非効率で自分自身を記述できないと判断しました。1.0までは共存状態のままで進めますが、1.0以降ではXMLはASTのシリアライズ用に特化して、Andromedaを独立した言語として扱えるようにする予定です。
初期のバージョンではXMLでの記述がメインでしたが、記述性の低さから簡略記法(Andromeda言語)に移行しました。以下の記述は古い例です。
図形言語の内部処理用を想定しているため記述性は低いです。ASTをXMLで記述するというイメージです。しかしあまりにも記述性が低くてサンプルの作成だけでも苦労したため、簡略記法を導入しました。
以下の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>
最新コメント