Essenの歴史

  • (by K, 2020.06.11)

(1)

  • Essen(えっせん)は、OSASK計画のサブプロジェクトで、新しい言語を作ることによって、プログラミングをより容易にしようという試みです。

(2) 歴史(概要)

  • [2020.04.23] ES-BASIC ver.0.2a : ES-BASICのかなりまともなバージョン → esbasic02a

(3) 歴史(詳細)

  • これは時系列を追いかけたいときのためのものであって、基本的に読む必要のないものです。上記の概要だけで、たいていは事足ります。
  • [2016.10.24] Essen (Essen Rev1) : セキュリティキャンプ2017で作っていたバージョン1 → http://khfdpl.osask.jp/wiki/?Essen
  • [2017.07.31] Essen Rev2 : セキュリティキャンプ2017で作っていたバージョン2 JITコンパイル方式 → http://khfdpl.osask.jp/wiki/?EssenR2
  • [201?.??.??] Essen Rev3 : その後迷走したバージョン
  • [2018.03.05] Essen Rev4 : SecHack365 / セキュリティキャンプ2018で作っていたバージョン → EssenRev4
  • [2019.02.09] Essen2019-A : OSC2019東京・春で発表したもの(展示) → http://k.osask.jp/wiki/?p20190209b
  • [2019.07.16] ES-BASIC ver.0.0a : SecHack365で作っていたバージョン → esbasic0001
  • [2020.04.23] ES-BASIC ver.0.2a : ES-BASICのかなりまともなバージョン → esbasic02a

(4) 説明

  • あるとき私はプログラミング言語を作ろうと思いました。しかし、どんな言語にしたらいいのか事前に決められません。それで、「言語を簡単に作るための言語」を作ろうと考えました。これができれば、仕様が決まった後で短期間で作れるはずです。これがKH-FDPLです。
  • KH-FDPLはあまりうまくいかなくて、それで作り直すことにしました。今度は、関数や構造体を宣言するように、新しい構文や新しい演算子を自由に宣言できるような言語を作ろうと考えました。それがEssen Rev1です。
  • しかし、途中でJITコンパイラの実行速度に魅せられてしまい(笑)、言語はJITコンパイラ方式で作らねばならないと信じるようになり、次はJITコンパイラな言語を作り始めます。これがEssen Rev2です。
  • その後、作っているうちに「うーん、作りたいのはこれじゃない・・・」というのを繰り返して、度重なる作り直しに嫌気がさして、言語開発を休止する決意をします。
  • そして、今まで作ってきて事前にどういう関数があれば作りやすくなりそうかが分かってきたので、それを一度整理してみることにしました。
  • そんな自作のライブラリがある程度できたところで、「試しにこれで言語を一つ作ってみるか」と気楽に作り始めたのがES-BASIC ver.0.0aです。もちろんJITコンパイラです。
  • これは3日間で、「とても3日で作ったとは思えない」ほどの出来栄えになり、私は気をよくしてさらに改良を続けます。
  • 結局、言語を作りやすくするために言語を作るのではなく、ライブラリを作ればよかったのです。やっとそれに気づけたわけです。
  • ES-BASICはその後も成長を続けて、ES-BASIC ver.0.2aで一区切りつけることができました。この先はBASICではなく、C言語として作りたいと思っています。

(5) 言語に盛り込もうとしているアイデアのリスト [ES-BASIC ver.0.2b時点]

No.アイデアesb02b
#01[KH-FDPL]インタプリタで分かりやすい。
#02[KH-FDPL]変数宣言とかをしなくてもいきなり代入できる。
#03[KH-FDPL]オブジェクトの永続性。
#04[KH-FDPL]オブジェクトシステム(変数システム)がファイルシステムみたいになっている。×
#05[KH-FDPL]独自のオブジェクト寿命システム。
#06[KH-FDPL]自己拡張可能型の文法。
#07[KH-FDPL]セキュリティ。
#03[persistent-C]オブジェクトの永続性。
#08[persistent-C]プログラムを中断しても途中から再開できる。
#01[EssenR1]対話式のインタプリタ。
#04[EssenR1]入れ子になった構造体変数がファイルシステムの代わりになる。×
#03[EssenR1]変数は永続化される。
#06[EssenR1]構文や演算子を自由に作れる言語。
#09[EssenR1]同時に複数のプログラムを動かすことができる。優先順位も付けられる。×
#10[EssenR1]インラインで複数の言語を混ぜられる。
#11[EssenR2]実行速度は重要だと思うようになったのでJITコンパイラ方式を採用
#12[EssenR4]静的型付き言語に変更
#13[EssenR4]インタプリタだけではなく、コンパイラとしても機能できる。
#09[Essen2019-A]同時に複数のプログラムを動かすことができる。優先順位も付けられる。×
#14[Essen2019-A]実行中のプログラムの変数を監視できる。
#15[Essen2019-A]実行中のプログラムの状態を保存できる。復元して再開できる。×
#16[EsBasicV02]オーバーフローの検出。
#17[EsBasicV02]行ごとに実行回数をカウントできる。
#18[EsBasicV02]グラフィックが簡単に扱える。
#19[EsBasicV02]自作OS上でも動く。
  • 補足
    • #03のオブジェクトの永続性については、ES-BASICではプログラムを終了しても変数が消えないというだけであり、ファイルに保存できるところまではいっていない。
    • #05のオブジェクトの寿命については、ES-BASICでのサポートは全くできていないものの、自作ライブラリ上ではできるようになっているので、サポートするのは難しくない段階にきている。
    • #06については、ES-BASICの機能としては拡張可能なレベルにはなっていないものの、言語処理系は簡単な仕組みになっていて、改造が容易であり、だから結果的には及第点だと思っている。
    • #09の複数のプログラムを同時に動かせることについては、Essen2019-Aで実現したものの、ES-BASICには入っていない。
  • まとめ
    • #04と#09と#15を取り込むことが長期的な課題である。
    • この一連の開発の中でEssen2019-Aはやや外れた位置にあるが、これはずっと実装できていなかったアイデアを試すためのものだったからである(#09と#15)。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-06-11 (木) 09:51:46 (1409d)