*プログラミング言語 ASMI のアイディア
-(by [[ttwilb]], 2014-6-20)

**プログラミング言語 ASMI の目標
- ASKAの上位互換言語であり、OSECPUの機能を最大限に使える言語を目指す。
-- ASKAのプログラムは当然そのままコンパイルできるようになる予定。
- シンプルさよりもC言語を意識した構文により、既存の開発者が安心して移行できる環境。
- コンパイル時のパフォーマンスより、ASMIの開発では良心的なソースコードの記述を心がける。
- 今後ASKAでサポートされるであろう機能をASMIにも実装できるようにする。
-あくまで計画案なので、今のところは何ら確実なことは言えません。

*検討中の仕様
-ASMIは、OSECPUや第三世代OSASKともっとも密接な言語になることを目指しています。
-私の趣味ではなく、OSASKのため、と割り切って考えているので、少しでも以下の仕様に違和感をお持ちの方はコメント欄で指摘してください。

**if構文
OSECPUでの条件比較(CND)は下位一ビットのみの比較です。これはFALSEのみを特別視しない平等な仕様だと思いますが、C言語との互換性がない(if(--i){}みたいなトリッキーなコードを書くと問題になる)ので、デフォルトではASMIは条件比較の前にCMPNE0命令を入れて、下位一ビットだけの比較でなく、C言語と同様に0でなければtrueになるようにします。しかし、if文の式の前に'@'修飾子を入れると、このCMPNE命令を省略するので、下位一ビットのみの比較となります。

**二項演算子
-演算の際にprefix2f_0を立てたいときは、演算子の前に'@'修飾子を置きます。また、ASMIでは、式中で結果bitを変更する機能は設けません。その代わり、代入文で代入先の型に合わせてbitが設定されます。意図的に計算精度を落としたい場合は、新しい変数を宣言して、そこに代入する必要があります。(もしくはキャストするか。)

** 変数宣言
-変数宣言のフォーマットは以下の形式です。
 型指定子 変数名[:[bit数 @] レジスタ名] [= 右辺式 [, ...];
 型指定子 変数名[:[bit数 @] レジスタ名] [= 右辺式] [, ...];
--bit数が省略されると、型指定子に対応したbit数が指定されたものとみなします。
--レジスタ名が省略されると、優先度合いが高い変数から順に割付されます。
--ASMIコード内でASKAの関数を呼び出すときのため、変数名をレジスタ名に変換する互換関数を用意します。

**型指定子
-int, char, short, unsigned, int32s等
- ()で囲うとキャスト演算子になります。
- 以下のようなフォーマットもサポートします。
-- unsigned int : 16
--- 16bitという意味
-- char *
---これは実際にはラベルとなります。

*その他

** 予約済みの識別子

- asmi
- Asmi
- case
- char
- class
- exit
- final
- for
- if
- int
- let
- private
- protected
- public
- return
- short
- signed
- struct
- switch
- ttwilb
- unsigned
- var
- virtual
- void
- while

* rem
-楽しみにしています。 -- [[K]] SIZE(10){2014-06-21 (土) 07:19:43}
-ありがとうございます。できれば、なんとか夏までには成果を出したいと思います。 -- [[ttwilb]] SIZE(10){2014-06-21 (土) 14:32:36}
-@演算子は面白そう。あえてC言語に準拠せずにASKAっぽく書くこともできるんですね。 -- [[K]] SIZE(10){2014-06-23 (月) 17:42:53}
-というか、ASKAコードもそのまま動くコンパイラを目指しています。(まだ、どうなるかわかりませんが笑) @演算子(「修飾子」に変わるかも)は、C言語な人が違和感なくコーディングできるようにしたい、という気持ちと、OSECPUのパワーを出し切れる言語にしたい、という二つの考えから来たものです。ASKA互換といっても、構文解析自体はいまのところ普通のC処理系っぽく作っていますので、自由度は高いです。 -- [[ttwilb]] SIZE(10){2014-06-23 (月) 22:45:52}

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS