SlideShare a Scribd company logo
1 of 25
Download to read offline
Scalalr:
Scala上でいい感じの見た目の

DSLを作るためのライブラリ
• Twitter: @phenan
• Github: phenan
• 今日の話: 面白いライブラリを作ったので紹介します
こんな感じでDSLを定義する
JValue

のDSL
こうかいて
これをよびたい
JValue

のDSL
こうかいて
これをよびたい
カンマくぎり
JValue

のDSL
JValue

のDSL
JSONのObjectの
かきかた
Objectのそれぞれの
プロパティ
こんな感じで使える!
こんな感じで使える!
これ
これ
こんな感じで使える!
これ
こんな感じで使える!
これ
括弧がいっぱいある
括弧は言語の境界を表す
JSON DSLに

Scala value

をわたしている
括弧は言語の境界を表す
Scalaに

JSON DSLを

わたしている
1ライナーのDSLなら()はいらない
注目してほしい点
Scala でこんなの書けたっけ?
Scala でこんなの書けたっけ?
[a, b] ?
Scala でこんなの書けたっけ?
[a, b] ?
: のあとは

タイプでは?
Scala でこんなの書けたっけ?
[a, b] ?
: のあとは

タイプでは?
{a, b} ?
コンパイラ拡張?
いいえ、

素のScalaです
Font Ligature
実は…
Font Ligature
ValidなScalaコード
Scalalr
• 専用フォントScaligの利用を前提としたコードを生成する
• DSLの見た目を自由に変えられるよ!やったね!
• コンパイルに時間がかかるのがちょっとした問題

* 100要素のJSONの配列のコンパイルに3時間以上かかった
• 地味に打つのが面倒なのでエディタサポートも開発したい
• https://github.com/phenan/scalalr
技術的詳細
• @dsl はアノテーションマクロ
• implicit parameter を悪用してコンパイル時 LALR 構文解析
• 型 → 非終端記号 (文法を表現するやつ)
• 任意の部分式を括弧で括ったScala式で置き換え可能にするために

ちょっと複雑なことをしている
• この手法を応用して字句解析を変更可能にすることもできる (はず)
• アンカンファレンスで話してみたい (けどスライドは用意してない)

More Related Content

What's hot

Scala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LTScala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LTpocketberserker
 
Lets scala
Lets scalaLets scala
Lets scalasmdkk
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Taisuke Shiratori
 
ADVENTAR の Bot を作る with Haskell
ADVENTAR の Bot を作る with HaskellADVENTAR の Bot を作る with Haskell
ADVENTAR の Bot を作る with HaskellNobutada Matsubara
 
頑張りすぎないScala
頑張りすぎないScala頑張りすぎないScala
頑張りすぎないScalatakezoe
 
SQLドリルの話(仮)
SQLドリルの話(仮)SQLドリルの話(仮)
SQLドリルの話(仮)Yuuki Tan-nai
 
[Scalamatsuri2016]あ、社内コミュニティ
[Scalamatsuri2016]あ、社内コミュニティ[Scalamatsuri2016]あ、社内コミュニティ
[Scalamatsuri2016]あ、社内コミュニティhirotakanosato
 

What's hot (7)

Scala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LTScala基礎勉強会 懇親会LT
Scala基礎勉強会 懇親会LT
 
Lets scala
Lets scalaLets scala
Lets scala
 
Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009Beginners Scala in FAN 20121009
Beginners Scala in FAN 20121009
 
ADVENTAR の Bot を作る with Haskell
ADVENTAR の Bot を作る with HaskellADVENTAR の Bot を作る with Haskell
ADVENTAR の Bot を作る with Haskell
 
頑張りすぎないScala
頑張りすぎないScala頑張りすぎないScala
頑張りすぎないScala
 
SQLドリルの話(仮)
SQLドリルの話(仮)SQLドリルの話(仮)
SQLドリルの話(仮)
 
[Scalamatsuri2016]あ、社内コミュニティ
[Scalamatsuri2016]あ、社内コミュニティ[Scalamatsuri2016]あ、社内コミュニティ
[Scalamatsuri2016]あ、社内コミュニティ
 

Similar to Scalalr

Scalaの現状と今後
Scalaの現状と今後Scalaの現状と今後
Scalaの現状と今後Kota Mizushima
 
Scalaによるドメイン特化言語を使ったソフトウェアの動作解析
Scalaによるドメイン特化言語を使ったソフトウェアの動作解析Scalaによるドメイン特化言語を使ったソフトウェアの動作解析
Scalaによるドメイン特化言語を使ったソフトウェアの動作解析Yamagata Yoriyuki
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!K Kinzal
 
セマンテックウェブとRDFDB
セマンテックウェブとRDFDBセマンテックウェブとRDFDB
セマンテックウェブとRDFDBHirosuke Asano
 
Scala Performance Tuning Tips
Scala Performance Tuning TipsScala Performance Tuning Tips
Scala Performance Tuning TipsKota Mizushima
 
Javascript as an Embedded DSL - Expression Problemの解法例
Javascript as an Embedded DSL - Expression Problemの解法例Javascript as an Embedded DSL - Expression Problemの解法例
Javascript as an Embedded DSL - Expression Problemの解法例Yasuyuki Maeda
 
こわくないScala
こわくないScalaこわくないScala
こわくないScalaFScoward
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみてKota Mizushima
 
ScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChiselScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChiselKei Nakazawa
 
SDL2の紹介
SDL2の紹介SDL2の紹介
SDL2の紹介nyaocat
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Ra Zon
 

Similar to Scalalr (11)

Scalaの現状と今後
Scalaの現状と今後Scalaの現状と今後
Scalaの現状と今後
 
Scalaによるドメイン特化言語を使ったソフトウェアの動作解析
Scalaによるドメイン特化言語を使ったソフトウェアの動作解析Scalaによるドメイン特化言語を使ったソフトウェアの動作解析
Scalaによるドメイン特化言語を使ったソフトウェアの動作解析
 
Scala.jsはじめました!
Scala.jsはじめました!Scala.jsはじめました!
Scala.jsはじめました!
 
セマンテックウェブとRDFDB
セマンテックウェブとRDFDBセマンテックウェブとRDFDB
セマンテックウェブとRDFDB
 
Scala Performance Tuning Tips
Scala Performance Tuning TipsScala Performance Tuning Tips
Scala Performance Tuning Tips
 
Javascript as an Embedded DSL - Expression Problemの解法例
Javascript as an Embedded DSL - Expression Problemの解法例Javascript as an Embedded DSL - Expression Problemの解法例
Javascript as an Embedded DSL - Expression Problemの解法例
 
こわくないScala
こわくないScalaこわくないScala
こわくないScala
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
 
ScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChiselScalaでASICやFPGA用の回路を設計するChisel
ScalaでASICやFPGA用の回路を設計するChisel
 
SDL2の紹介
SDL2の紹介SDL2の紹介
SDL2の紹介
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
 

Scalalr