* プログラミング言語 Essen #1
-(by [[K]], 2016.07.20)
** これはなに?
-まずは[[Essen]]を読んでね。ここは続きを書きます。

** Essenの基本コンセプト
-(1)C言語風の言語であること
--LISPみたいなのはすごいけどやりすぎで自分に使いこなせる自信がない。代入はa=1みたいに書きたい。
-(2)文法規則がシンプルで例外が少ないこと
--C言語はそれほどシンプルではない。なぜfor構文の時だけカッコの中にセミコロンが書けるの?
-(3)ifやforなどの構文や演算子の規則が、固定されたルールではなく、C言語で言うところのライブラリみたいなものであること
--つまり制御構文を増やすこともできる。

** 基本以外のコンセプト
-インタプリタ。evalがやりたい。
-ローカル変数はある。
-変数に型はなく、値に型がある。
-gotoもある。ただしスコープのネストの内側にはジャンプできない。同じスコープか、外側のスコープならジャンプできる。
-gotoもある。ただしスコープのネストの内側にはジャンプできない。同じスコープか
、外側のスコープならジャンプできる(このスコープのルールさえ満たしていれば、関数の中から脱出することも可能だし、前方参照・後方参照も自由自在)。
-主にC言語で実装するが、できるだけシンプルに書きたい。

** [[Essen]]からの差分
-式評価アルゴリズムの変更:
--a=2*3+4*(5+6); という式があったときに、[[Essen]]に書いたアルゴリズムではまず5+6=11を計算してしまう。
--でも世間一般で期待されているのは、おそらく2*3を先にやることだと思う。
 #1:  2*3=6
 #2:  5+6=11
 #3:  4*11=44
 #4:  6+44=50
--ということでこの順序で計算させることにした。

-整数の精度を256ビットから無制限可変長に:
--nvが可変長整数を採用するらしく、それが非常にうらやましかったため(笑)。

** C言語とは明らかに違う仕様
-(1)if文、for文、while文で、たとえコード片(コードブロックのこと)が1文しかなくても、{ }を省略することができない。
-(2)カッコは関数の引数の範囲を指定するか、もしくは配列や構造体を作る記号としての役目が割り当てられており、純粋に計算順位だけを指定したい場合は、直前にアンダスコアを付ける。
 [例] a=2*_(3+4);
-(3)C言語では、単に変数スコープを一段深くするために{ }を書くことがあるが、これをやるときは{ }で書くのではなく、_{ }と書くようにする。
--アンダスコアを付けないと、ただのコード片定数となってしまい、実行されない。
--アンダスコアは実は「関数」で、アンダースコア関数は、引数がコード片だったらそれを実行するし、コード片でなければその中身をそのまま返す。これにより(2)や(3)を達成している。




* こめんと欄
#comment


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS