Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
音 ゲー を 作 って い た と 思 っ た ら
い つ の ま に か 言 語 を 作 って い た
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; -...
コ ー ド 例 ( オ ブ ジェ ク ト 指 向 )
Person = Class:new:extends Object;
Person!new $ this name ->
Class.proto.new this name;
Person!...
ま と め
• 自作言語作るの楽しいので
みんなやりましょう
顧 客 が 本 当 に 必 要 だ っ た も の
_人人人人_  
> 音ゲー <  
‾ ̄^Y^Y^Y^Y‾ ̄
寄 付
• お願いします (切実)
• お金と技術ときんいろモザ
イクが不足
• www.amazon.co.jp/registry/
wishlist/3FX8NJ35LKRGC
Upcoming SlideShare
Loading in …5
×

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

9,043 views

Published on

2015年7月11日 OUCC LTの会
http://oucc.org/
JavaScript で自作言語インタプリタを作った話です

Published in: Engineering
  • Be the first to comment

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

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

×