* 2016年11月05日のプレゼン下書き -(by [[K]], 2016.10.11) ** Essenまでの歴史[3分] -OSASK計画とは? --OSASK計画とは、超軽量OSである「OSASK(おさすく)」を開発するためのオープンソースコミュニティ。川合秀実が代表。 -2000年: OSASKをせっせと開発。 --一定の成果を達成。 ---OSのインストールサイズ:100KB未満 ---インベーダーゲーム: 1108バイト -2008年: 第二世代OSASKを開発。 --川合は優秀なAPIを使いたいからOSを作ったのであって、OSを作ることはそのための一つの方法でしかないと気付いた。だからOSではない方法でもやってみた。 --これも一応の成果を達成。 ---処理系のサイズ: 14.5KB -2013年: OSECPU-VM(おせくぷ・ぶいえむ)(第三世代OSASK)を開発。 --x86にこだわらずJavaみたいなものを作れば、さらに限界が突破できるのではないかと考えた。 ---理想のAPIを考えているうちに、理想の命令セットを追及してみたくなった感じ。 --これも一応の成果を達成。 ---VM処理系:29.0KB。 ---インベーダゲーム : 430バイト -2016年: 理想のプログラミング言語がほしくなって開発を開始した。「Essen」(えっせん)。 --詳細は後述。 ** Essenの基本的な考え方[4分] -川合の主張: --RubyやPythonは本当に素晴らしい言語だと思うけど、処理系が大きすぎると感じる。 ---(註)川合は何でも小さく作るのが得意。 --何万行、何十万行と、たくさん書けば、いろいろできるようになるのは「当たり前」では? --処理系の行数が少ないのに、意外にあれこれできてしまうような処理系こそ良い処理系なのでは? ---移植しやすい ---結果的に仕様がシンプルなので例外が少なく仕様を理解しやすい -どんな言語を目指すか? --プログラミング初心者がEssenを勉強して覚えた後、もしEssenには不得意なことをやりたくなったら、他の言語にスムーズに移行できるような言語。 ---だからビジュアルなプログラミング言語は目指さない。 ---C言語やJavaにある程度似ていることが望ましい(スムーズな移行)。 --八方美人は目指さない。 ---不得意なことがあってもよい。 --構文や演算子を自由に定義できる言語。 ---既存の構文を再定義することができる。新規の構文を定義することもできる。 ---既存の演算子を再定義することができる。新規の演算子を定義することもできる。 ---C言語は関数を自由に定義できる。C++は型を自由に定義できる。 ---でもC++では演算子は既存の物をオーバーライドできるだけで新規には作れない。 ---C++もJavaも構文は自由には作れない。 ---これからは演算子や構文も自由に作る時代だー。 --Essenはシンプルなインタプリタ。 ---実行速度は遅い。 ---変数は型を持たない(変数宣言をさせたくなかったので)。 ---対話式で操作できる。 ---初心者にはそのほうが分かりやすいのではないかと川合は考えた。 --既存言語との共存を目指す言語。 ---「Essenひとつで何でもできるようになる」を目指さない。 ---Essenの中で既存言語を混ぜて書くことができる(インライン・アセンブラみたいな感覚、インラインC++とか)。 ---スピードが必要な部分だけをC++などの高速な言語で書けばいいのでは? ---スピードが必要な部分なんて全体のうちの1~2割程度のはず。残りの8~9割をEssenで書けばいい。 ---この仕様はEssenの後に他の言語を学ぶ際にも敷居を下げるはず。 ** 基本機能紹介[3分] -1単語コメント。バッククォートを使う。 -- `abc は /* abc */ と同じ。 --コメントが目立ちすぎないところが良い。 -{ ... }はコード片。コード片は関数呼び出しの直後に続けて書くと、関数の引数になる。 if (a > b) `then { c = a } `else { c = b } → if((a < b), { c = a }, { c = b }); → つまりif文は関数呼び出しとして扱われている。 d = { print a }; // コード片をdに代入。dをevalすると実行できる。 --コード片は入れ子にできる。 --コード片は基本的にただの文字列。ダブルクォートでくくるか { } でくくるかの違い程度しかない。余計な空白や改行、コメントは削除される。 -{{ ... }}は入れ子にできないコード片。括弧の対応やコメントやスペースや改行なども一切パースせずに単純に切り出される。インラインで他の言語を書くときに使う。 --<<< ... >>> など、他の記号に切り替えることも可能。 -エラーオブジェクト。 --エラーがあってもプログラムは中断せず、値が「エラーオブジェクト」になる。 --エラーオブジェクトの例: 関数abc内でのゼロ割エラー --エラーオブジェクトに加減乗除をしてもエラーオブジェクトのまま(更新しない)。 ---これによってどこのエラーが発端なのかが分かる。 -どうやって既存言語を実行するか? --(作文中) ** つなぎ -残りの時間では、Essenのよきライバル言語を作ってくれている学生2名に発表してもらいます。Essenのアイデアも彼らとの競争の過程で生まれたものや、彼らの言語仕様をまねしたものがあります。 * こめんと欄 #comment