Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OSASK計画が考える新しいプログラミング言語の構想

Avatar for Hidemi KAWAI Hidemi KAWAI
November 08, 2016

 OSASK計画が考える新しいプログラミング言語の構想

OSC2016東京秋での発表資料

Avatar for Hidemi KAWAI

Hidemi KAWAI

November 08, 2016
Tweet

More Decks by Hidemi KAWAI

Other Decks in Programming

Transcript

  1. OSASKは「まだ」生きていた! • 簡単な歴史(リリースできた期間のみ) ・①第一世代OSASK 2000年05月~2005年01月 ・②「30日でできる! OS自作入門」 2006年02月 ・③第二世代OSASK 2008年04月~2009年10月

    ・④OSASK公開停止 2009年11月 ・⑤blikeライブラリ(描画ライブラリ) 2010年10月~2011年03月 ・⑥川合が就職 2011年09月 ・⑦第三世代OSASK(OSECPU-VM) 2013年03月~2014年08月 ・⑧プログラミング言語Essen 2016年11月~(予定) ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ 今日 2000年
  2. 第三世代OSASK • WindowsやLinuxでもアプリが動く – Win版のシステムは29.0KB (Javaみたいなバイトコード方式) インベーダ: 430バイト フラクタル: 111バイト

    charsだけが小さいわけではない(ズルじゃないから) アプリサイズは第一世代の半分以下! しかもx86もARMもOK
  3. 特徴(1) • インタプリタ言語 • 速度は追及しない – どうせCやアセンブラには勝てない – シンプルな実装を心がける •

    プログラム内に既存言語を混ぜられる(関数単位) – インライン機械語 – インラインアセンブラ – インラインC++ – インラインRuby – などなど
  4. 内部アルゴリズム a = 1 + 2 * 3 a =

    1 + 2 * 3 // この掛け算が選ばれる a = 1 + 6 // 6に置換される a = 1 + 6 // この足し算が選ばれる a = 7 // 7 に置換される a = 7 // この代入命令が選ばれる 構文木とかは作らずに、優先順位と結合方向を意 識して式をたどって、演算して結果に置換 これを置換できなくなるまで繰り返す・・・シンプル!
  5. Essenにおける関数と演算子の違い • 関数: – f(a) とか g(x, y) とか h()

    のように必ず()で呼び出される – 引数はかっこでくくられているので明白 – 優先順位とか結合方向とかそういう面倒なものはない • 演算子: – 2 + 3 とか i++ のように()がなくても呼び出される – 引数は演算子の前後からもぎ取る – 優先順位や結合方向がある
  6. 作ってみたい演算子 • y = sin x // sin(x) と同じように機能する •

    a = b mod c // %よりはmodが好き • z = e ** x // powよりは**が好き • 複素数を扱う文脈では、iという演算子があると 便利そう (これはカッコがなくても発動してほしい ので演算子にするしかない) – z = 1+2i – でも普段は i は for のカウンタなどで使うので、この 定義が常にほしいわけじゃない • 時間があると、どんどんアイデアが出てくる!
  7. 作ってみたい制御構文 • 1~9の数字が書かれたカードが、それぞれ1枚ずつある。 ここから3枚を選ぶ。 • 3枚の数字の合計が10になるのは何パターンあるか? – Essenでは、セミコロンは省略できる。引数区切りのカンマも省略できる。 – 文が1文しかなくても、中カッコは省略できない。

    – 型宣言は不要。 – combiFor(f 9 3)は9個の中から3つを選ぶ組わせをすべて列挙するforループ。変数 fに(1 1 1 0 0 0 0 0 0)などが格納される。 – sum(k 1 9) { ... } は、k=1~9に対して、{ } の中を計算してその和を取る。 – Essenは制御構文を自由に作れるので、combiForやsumのような構文も思いつきで すぐに作れる。 c = 0 combiFor(f 9 3) { if (sum(k 1 9) { f[k - 1] * k } == 10) { c++ } } print(c)
  8. ライバルとの競争の例 • オープンソースはみんなで仲良く作るから すばらしい・・・だけじゃない! 競争だ!! • OSASKの川合 vs MEG-OSのsakky氏 •

    charsという簡単なプログラムを小さくしたい • もしOS側も改造してよいとしたらどこまで行け るのか? • 双方にテクニックを盗みあう
  9. 競争の成果 2008年 Kが31バイトを達成 2008年 Sは13バイトを達成 2008年 Kは14バイトを達成 2008年 Sは12バイトを達成 2008年

    Kは12バイトを達成 2008年 Kは11バイトを達成 2013年 Sはなんと8バイトを達成 2013年 Kは7バイトを達成 2014年 Sは6バイトを達成 2014年 Kは5バイトを達成 第二世代 OSASK 第三世代 OSASK CLE COM64+ 競い合ったおかげで、世界一位&世界二位の実力に到達。
  10. そういえば第一世代OSASKも競争してた • 2000年05月01日 OSASKの最初のリリース • 2002年06月18日 MonaOSの開発開始 • 2002年07月13日 NWSOSの最初のリリース

    • 2002年07月28日 MEG-OSの最初のリリース • これらは「2ちゃんねる4大和製OS」と呼ばれ、 よく比較された(互いに意識もした) • OSASKとMonaOSはオープンソース
  11. まとめ • [1] ねえ、OSASKって終わったの? • [2] プログラミング言語Essen • [3] 競争型の開発スタイル

    • ホームページ http://osask.jp/ • 次は学生の発表です(ライバル) – hikaliumさん – 小津さん