SlideShare a Scribd company logo
音 ゲー を 作 って い た と 思 っ た ら
い つ の ま に か 言 語 を 作 って い た
2 0 1 5 年 7 月 1 1 日 O U C C LT の 会
わ た しで す
• すしす
• 情報系 (物理)
• Twitter: @susisu2413
• GitHub: susisu
手 段 の 目 的 化
• 目的
• 音ゲーの譜面を作りたい
• できれば楽に
• 手段
• DSL を作ろう
手 段 の 目 的 化
• 目的
• DSL を作ろう
• 手段
• なんかいろいろ
ほ し い も の リス ト
変数 制御文
関数配列
演算子
技術
末尾呼び出し最適化
オブジェクト指向
お金
折角だから汎用の言語にしましょう!
目 標
• JavaScript 上で動作
• そこそこの速度
• オブジェクト指向
• 関数型
作 っ た も の
• パーサ (構文解析器)
• AST インタプリタ
• 標準ライブラリ
パー サ
• なんかパーサコンビネータ
ライブラリを作ってあった
• github.com/susisu/Loquat
• ほぼ Parsec (Haskell の) の
クローン
• あとは書くだけ
イ ン タ プ リ タ
• パーサが吐き出した構文木
に従って実行
• JavaScript 組み込みの機能
をごにょごにょして高速化
標 準 ラ イ ブ ラ リ
• 今作ってる (8割くらい?)
で き た も の
• github.com/susisu/milktea
• 速度は V8 上で Flash ≦ 8
の VM と同じくらい?
コ ー ド 例 ( 階 乗 )
factorial n =
let itr n p =
if n >= 1 then itr (n - 1) (p * n)
else p
in itr n 1
;
print $ factorial 10; -- 3628800
コ ー ド 例 ( オ ブ ジェ ク ト 指 向 )
Person = Class:new:extends Object;
Person!new $ this name ->
Class.proto.new this name;
Person!ctor $ this name ->
const this $ this!name name;
Person.proto!printName $ this ->
print this.name;
!
alice = Person:new "Alice";
alice:printName; -- Alice
ま と め
• 自作言語作るの楽しいので
みんなやりましょう
顧 客 が 本 当 に 必 要 だ っ た も の
_人人人人_  
> 音ゲー <  
‾ ̄^Y^Y^Y^Y‾ ̄
寄 付
• お願いします (切実)
• お金と技術ときんいろモザ
イクが不足
• www.amazon.co.jp/registry/
wishlist/3FX8NJ35LKRGC

More Related Content

音ゲーを作っていたと思ったらいつのまにか言語を作っていた

  • 1. 音 ゲー を 作 って い た と 思 っ た ら い つ の ま に か 言 語 を 作 って い た 2 0 1 5 年 7 月 1 1 日 O U C C LT の 会
  • 2. わ た しで す • すしす • 情報系 (物理) • Twitter: @susisu2413 • GitHub: susisu
  • 3. 手 段 の 目 的 化 • 目的 • 音ゲーの譜面を作りたい • できれば楽に • 手段 • DSL を作ろう
  • 4. 手 段 の 目 的 化 • 目的 • DSL を作ろう • 手段 • なんかいろいろ
  • 5. ほ し い も の リス ト 変数 制御文 関数配列 演算子 技術 末尾呼び出し最適化 オブジェクト指向 お金
  • 7. 目 標 • JavaScript 上で動作 • そこそこの速度 • オブジェクト指向 • 関数型
  • 8. 作 っ た も の • パーサ (構文解析器) • AST インタプリタ • 標準ライブラリ
  • 9. パー サ • なんかパーサコンビネータ ライブラリを作ってあった • github.com/susisu/Loquat • ほぼ Parsec (Haskell の) の クローン • あとは書くだけ
  • 10. イ ン タ プ リ タ • パーサが吐き出した構文木 に従って実行 • JavaScript 組み込みの機能 をごにょごにょして高速化
  • 11. 標 準 ラ イ ブ ラ リ • 今作ってる (8割くらい?)
  • 12. で き た も の • github.com/susisu/milktea • 速度は V8 上で Flash ≦ 8 の VM と同じくらい?
  • 13. コ ー ド 例 ( 階 乗 ) factorial n = let itr n p = if n >= 1 then itr (n - 1) (p * n) else p in itr n 1 ; print $ factorial 10; -- 3628800
  • 14. コ ー ド 例 ( オ ブ ジェ ク ト 指 向 ) Person = Class:new:extends Object; Person!new $ this name -> Class.proto.new this name; Person!ctor $ this name -> const this $ this!name name; Person.proto!printName $ this -> print this.name; ! alice = Person:new "Alice"; alice:printName; -- Alice
  • 15. ま と め • 自作言語作るの楽しいので みんなやりましょう
  • 16. 顧 客 が 本 当 に 必 要 だ っ た も の _人人人人_   > 音ゲー <   ‾ ̄^Y^Y^Y^Y‾ ̄
  • 17. 寄 付 • お願いします (切実) • お金と技術ときんいろモザ イクが不足 • www.amazon.co.jp/registry/ wishlist/3FX8NJ35LKRGC