SlideShare uma empresa Scribd logo
1 de 17
Baixar para ler offline
音 ゲー を 作 って い た と 思 っ た ら
い つ の ま に か 言 語 を 作 って い た
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

Mais conteúdo relacionado

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

我々はどこから来たのか 我々は何者か 我々はどこに行くのか
我々はどこから来たのか 我々は何者か 我々はどこに行くのか我々はどこから来たのか 我々は何者か 我々はどこに行くのか
我々はどこから来たのか 我々は何者か 我々はどこに行くのかwizstargaer
 
おとなのテキストマイニング
おとなのテキストマイニングおとなのテキストマイニング
おとなのテキストマイニングMunenori Sugimura
 
オープンセミナー香川2012 LT
オープンセミナー香川2012 LTオープンセミナー香川2012 LT
オープンセミナー香川2012 LTKouta Imanaka
 
Goで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろうGoで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろうEsehara Shigeo
 
Macで快適にプログラミング
Macで快適にプログラミングMacで快適にプログラミング
Macで快適にプログラミングYusuke Sakurai
 
cocos2d ☓ OpenOffice
cocos2d ☓ OpenOfficecocos2d ☓ OpenOffice
cocos2d ☓ OpenOfficeKazunori Nanji
 
最近のフロントエンドツールの紹介
最近のフロントエンドツールの紹介最近のフロントエンドツールの紹介
最近のフロントエンドツールの紹介Ryo Iinuma
 
opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2Takuya Nishimoto
 
ゲーム組み込み用スクリプト言語を作ってみた
ゲーム組み込み用スクリプト言語を作ってみたゲーム組み込み用スクリプト言語を作ってみた
ゲーム組み込み用スクリプト言語を作ってみたMASA_T_O
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyoShuyo Nakatani
 
捗るリコメンドシステムの裏事情(ハッカドール)
捗るリコメンドシステムの裏事情(ハッカドール)捗るリコメンドシステムの裏事情(ハッカドール)
捗るリコメンドシステムの裏事情(ハッカドール)mosa siru
 

Semelhante a 音ゲーを作っていたと思ったらいつのまにか言語を作っていた (15)

我々はどこから来たのか 我々は何者か 我々はどこに行くのか
我々はどこから来たのか 我々は何者か 我々はどこに行くのか我々はどこから来たのか 我々は何者か 我々はどこに行くのか
我々はどこから来たのか 我々は何者か 我々はどこに行くのか
 
おとなのテキストマイニング
おとなのテキストマイニングおとなのテキストマイニング
おとなのテキストマイニング
 
オープンセミナー香川2012 LT
オープンセミナー香川2012 LTオープンセミナー香川2012 LT
オープンセミナー香川2012 LT
 
Recommend scala
Recommend scalaRecommend scala
Recommend scala
 
Goで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろうGoで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろう
 
Macで快適にプログラミング
Macで快適にプログラミングMacで快適にプログラミング
Macで快適にプログラミング
 
Swift Scriptingのすゝめ
Swift ScriptingのすゝめSwift Scriptingのすゝめ
Swift Scriptingのすゝめ
 
cocos2d ☓ OpenOffice
cocos2d ☓ OpenOfficecocos2d ☓ OpenOffice
cocos2d ☓ OpenOffice
 
最近のフロントエンドツールの紹介
最近のフロントエンドツールの紹介最近のフロントエンドツールの紹介
最近のフロントエンドツールの紹介
 
opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2opensource and accessibility (Dec2000) Part 2
opensource and accessibility (Dec2000) Part 2
 
Python勉強会 2015-12-02
Python勉強会 2015-12-02Python勉強会 2015-12-02
Python勉強会 2015-12-02
 
Hiroshima.rb on github
Hiroshima.rb on githubHiroshima.rb on github
Hiroshima.rb on github
 
ゲーム組み込み用スクリプト言語を作ってみた
ゲーム組み込み用スクリプト言語を作ってみたゲーム組み込み用スクリプト言語を作ってみた
ゲーム組み込み用スクリプト言語を作ってみた
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
 
捗るリコメンドシステムの裏事情(ハッカドール)
捗るリコメンドシステムの裏事情(ハッカドール)捗るリコメンドシステムの裏事情(ハッカドール)
捗るリコメンドシステムの裏事情(ハッカドール)
 

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

  • 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