SlideShare une entreprise Scribd logo
1  sur  87
コンパイルターゲット⾔語としての

WEBASSEMBLY、

そしてLINEでの実践
Jun, LINE Corp.
kawasako, LINE Corp.
⾃⼰紹介
@uta_tti
https://github.com/utatti
•プログラミング⾔語を作る、とは
•Wasmをターゲット⾔語*にする

WEB⾔語の設計
•Wasmバイトコードを⽣成する

コンパイラの作成
•LINEでの実践
Agenda
*コンパイルターゲット⾔語: コンパイラがコードジェネレーションで吐き出す⾔語
e.g. TypeScriptのターゲット⾔語はJavaScript
プログラミング⾔語を作る
● Wasmのコンパイルターゲット⾔語としての可能性を調査

● Wasmに直接コンパイルする (v.s. LLVM IR)
● 容量をへらす
● ユースケースを考慮した設計
なぜ作る必要があるのか
● https://github.com/utatti/kou
● A minimal language compiled into wasm bytecode
The kou Programming Language
● ⾔語を設計する
● ⾔語のコンパイラを書く
プログラミング⾔語を作る
● 機能と⽂法を決める

● 想定しているユースケース
● 好み
プログラミング⾔語の設計
● どういう⾔語を作りたいのか
● 他の⾔語のいいところを考えてみる
好みは重要
let fac = fn (n int) int {
let res = if n == 1 {
1
} else {
n * fac(n - 1)
};
res
}
Example
let fac = fn (n int) int {
let res = if n == 1 {
1
} else {
n * fac(n - 1)
};
res
}
好み1: 型安全性
let fac = fn (n int) int {
let res = if n == 1 {
1
} else {
n * fac(n - 1)
};
res
}
好み2: Braces over indents
Easier to parse
let fac = fn (n int) int {
let res = if n == 1 {
1
} else {
n * fac(n - 1)
};
res
}
好み3: Expression-oriented
From Rust
● Wasm: 現在仕様で作りやすいように

● WEB上動く: バイトコードの容量を⼩さく

● 想定ユーザー: JS開発者
ユースケース
let arr = [1, 2, 3, 4, 5];
let i = 0;
while i < len(arr) {
...
i = i + 1;
}
ユースケース1: Wasm
Smaller bytecode output
let arr = [1, 2, 3, 4, 5];
let i = 0;
while i < len(arr) {
...
i = i + 1;
}
ユースケース2: ⽂法
C-like
● ⾔語仕様書を書く
● EBNF (Extended Backus-Naur Form)
● | alternation
● () grouping
● [] option (0 or 1 times)
● {} repetition (0 to n times)
● 他の⾔語の仕様書を参考にすると良い
● The Go Programming Language
● https://golang.org/ref/spec
設計を形にする
いったんDEMO
kouのリポジトリでも⾒れます!

https://github.com/utatti/kou
● The real work starts here...

● 😇
コンパイラを書く
Optim.
Code gen.
コンパイラの構造
ParserLexer
Source
code
Target
code
コンパイラ

フロントエンド
コンパイラ

バックエンド
Desugarer Type
Optim.
Code gen.ParserLexer
Source
code
Target
code
コンパイラ

フロントエンド
コンパイラ

バックエンド
Desugarer Type
● Lexical analyzer
● Source code → Token* stream
● *Token: プログラミング⾔語のalphabet
● e.g. "hello", 1234, if, else, {, }
Lexer
Optim.
Code gen.ParserLexer
Source
code
Target
code
コンパイラ

フロントエンド
コンパイラ

バックエンド
Desugarer Type
● Syntactic analyzer
● Token stream → *AST
● *AST: Abstract syntax tree
● コードをツリー化したもの
Parser
Example: AST
main
Declaration ...
Module
Identifier
Params FunctionExpr
let main = fn () void {
..
}
● Parser generator
● EBNF → Parser

● Parser combinator
● e.g. Parsec in Haskell
● DSL for parser
● kou uses this

● Or just write from scratch
How to write parser
Optim.
Code gen.ParserLexer
Source
code
Target
code
コンパイラ

フロントエンド
コンパイラ

バックエンド
Desugarer Type
● Syntactic sugarの解除

● 難しくいうと: Isomorphismの適⽤
● 簡単にいうと: あれとこれって同じっしょ、の適⽤
Desugarer
● Unary +の解除
● +1234 == 1234
● 1-tupleの解除
● (1234) == 1234
Example: Desugarer
Optim.
Code gen.ParserLexer
Source
code
Target
code
コンパイラ

フロントエンド
コンパイラ

バックエンド
Desugarer Type
● Semantic analyzer
● Hindley-Milner type system
Type checker
● App for function application 

let x: A
function f(x: A): B
f(x): B
Example: Hindley-Milner type system
Optim.
Code gen.ParserLexer
Source
code
Target
code
コンパイラ

フロントエンド
コンパイラ

バックエンド
Desugarer Type
● AST → Target code (Wasm bytecode)
● 実際Wasmバイトコードを⽣成する部分
Code generator
Wasm

bytecodeWATASTkou
kou compiler
Source
code
Target
code
● Specification
● https://webassembly.github.io/spec/core/

● Stack machine
WebAssembly bytecode
● Use stack to pass/return values
● v.s. Register machine

● e.g. WebAssembly VM, JVM
Stack machine
Example: Stack machine
1 + 2 * 3
!
i32.const 1
i32.const 2
i32.const 3
i32.mul
i32.add
Stack
Example: Stack machine
1 + 2 * 3
!
i32.const 1
i32.const 2
i32.const 3
i32.mul
i32.add
Stack
1
Example: Stack machine
1 + 2 * 3
!
i32.const 1
i32.const 2
i32.const 3
i32.mul
i32.add
Stack
1
2
Example: Stack machine
1 + 2 * 3
!
i32.const 1
i32.const 2
i32.const 3
i32.mul
i32.add
Stack
1
2
3
Example: Stack machine
1 + 2 * 3
!
i32.const 1
i32.const 2
i32.const 3
i32.mul
i32.add
Stack
1
Example: Stack machine
1 + 2 * 3
!
i32.const 1
i32.const 2
i32.const 3
i32.mul
i32.add
Stack
1
6 ← 2 * 3
Example: Stack machine
1 + 2 * 3
!
i32.const 1
i32.const 2
i32.const 3
i32.mul
i32.add
Stack
Example: Stack machine
1 + 2 * 3
!
i32.const 1
i32.const 2
i32.const 3
i32.mul
i32.add
Stack
7 ← 1 + 6
Example: Stack machine
1 + 2 * 3
!
i32.const 1
i32.const 2
i32.const 3
i32.mul
i32.add
Stack
7
Example: Value types
1 + 2 * 3
!
i32.const 1
i32.const 2
i32.const 3
i32.mul
i32.add
Stack
7
● Integer
● i32, i64
● Floating-point number
● f32, f64
● kou uses i32 and f64
● i64 cannot be used directly in JS
WebAssembly value types
● Tuple
● (1, true, 1.5)

● Array
● [1, 2, 3, 4, 5]

● WebAssembly Memory
Complex types
● Linear

● Virtual

● JS⼜はWasmでメモリを宣⾔
● (memory 1)
WebAssembly Memory
● Wasm has no high-level support for memory allocation
● ⼿動で管理するしか無い
Memory allocation
Memory allocation
4
…
4 because the pointer itself uses i32
● Wasm has no high-level support for memory allocation
● ⼿動で管理するしか無い
Memory allocation
4
…
16バイトください‼
● Wasm has no high-level support for memory allocation
● ⼿動で管理するしか無い
Memory allocation
20
16 bytes …
● Wasm has no high-level support for memory allocation
● ⼿動で管理するしか無い
● Array
Complex type (again!)
[1.0, 2.0, 3.0, 4.0, 5.0]
!
"###$#######$#######$#######$#######$#######%
& 5 & 1.0 & 2.0 & 3.0 & 4.0 & 5.0 &
'###(#######(#######(#######(#######(#######)
4 + 8 * 5 = 44 bytes
● Tuple
Complex type (again!)
(9, false, 5.35)
!
"###$###$########%
& 9 & 0 & 5.35 &
'###(###(########)
4 + 4 + 8 = 16 bytes
● しない
● Garbage collection: runtime overhead
● Reference counting: memory (and operation) overhead
● Handling memory fragment

● ユースケース: そこまでは必要ない
Memory freeing
もう1回DEMO
kouのリポジトリでも⾒れます!

https://github.com/utatti/kou
● AssemblyScript
● https://assemblyscript.org
● A TypeScript to WebAssembly compiler

● WebAssembly Studio
● https://webassembly.studio
Wasm Code gen. tip
つづく
後編
LINEでの実践について @kawasako より
FRONT-END
STANDARDIZATION
組織横断的にフロントエンド開発を標準化する
IN
技術調査/実践
内製ツール開発
OUT
OSS活動
技術イベント協賛
イベント運営
ブログ執筆
LINE の Front-end Standardization Team における標準化とは
WHAT IS STANDARDIZATION
社内だけでやっていること
社内でできていないこと
社内の均⼀化 ×
社内外がシームレスな組織になること ○
本題
WASMをどう使っていくか?
⼤量の演算が必要な時
UIの利⽤状況をヒートマップ形式で可視化するツール
YAKIMOCHI
[{"x":0,"y":55,"value":42},{"x":0,"y":65,"value":36},{"x":0,"y":75,"value":17},{"x":
0,"y":85,"value":25},{"x":0,"y":95,"value":31},{"x":0,"y":105,"value":19},{"x":0,"y":
115,"value":27},{"x":0,"y":125,"value":41},{"x":0,"y":135,"value":30},{"x":0,"y":
145,"value":33},{"x":0,"y":155,"value":44},{"x":0,"y":165,"value":58},{"x":0,"y":
175,"value":91},{"x":0,"y":185,"value":64},{"x":0,"y":195,"value":97},{"x":0,"y":
205,"value":81},{"x":0,"y":215,"value":249},{"x":0,"y":225,"value":103},{"x":0,"y":
235,"value":114},{"x":0,"y":245,"value":63},{"x":0,"y":255,"value":64},{"x":0,"y":
265,"value":79},{"x":0,"y":275,"value":26},{"x":0,"y":285,"value":33},{"x":0,"y":
295,"value":9},{"x":0,"y":305,"value":29},{"x":0,"y":315,"value":6},{"x":0,"y":
325,"value":20},{"x":0,"y":335,"value":8},{"x":0,"y":345,"value":8},{"x":0,"y":
355,"value":38},{"x":0,"y":365,"value":19},{"x":0,"y":375,"value":5},{"x":0,"y":
385,"value":13},{"x":0,"y":395,"value":27},{"x":0,"y":405,"value":20},{"x":0,"y":
415,"value":8},{"x":0,"y":425,"value":19},{"x":0,"y":435,"value":7},{"x":0,"y":
445,"value":181},{"x":0,"y":455,"value":23},{"x":0,"y":465,"value":16},{"x":0,"y":
475,"value":29},{"x":0,"y":485,"value":63},{"x":0,"y":495,"value":34},{"x":0,"y":
505,"value":24},{"x":0,"y":515,"value":8},{"x":0,"y":525,"value":35},{"x":0,"y":
画⾯に対して⼤量のデータが必要
解決したい課題
mb単位のデータがカジュアルに通信されてしまう = 遅い
データ圧縮/解凍をWASM(kou)で実装
ENCODED DATA
ENCODER / DECODER
ENCODER
(WASM)
DECODER
(WASM)
RAW DATA
API SERVER (NODE.JS) CLIENT (BROWSER)
RAW DATA
圧縮された⼩さいデータ元データ 復元されたデータ
Step-1
やること
pixel毎にどのくらいtapされているかというデータがたくさんある
Step-1
やること
X: 4
Y: 1
VALUE: 5
ひとつひとつは x座標, y座標, その座標のtap数のデータ
Step-1
やること
X: 4
Y: 1
VALUE: 5
もしXとYを省略できればデータ量は1/3にできる
Step-2
やること
実はX,Yの座標は⾏列に変換すると必要なくなる
5
4px, 1px

value: 5
4px
1px
Step-2
やること
そのデータが何番⽬にあるかで座標がわかる 2x3の場合は12番⽬のデータになる
5
1
2px, 3px
value: 1
2px
3px
Step-2
やること
データを⾏列に埋めていくとデータの⼊らない場所ができる
0 1 2 3 5
5 6 7 8 9
10 1 12 13 14
15 16 17 18 19
20 21 22 23 24
Step-3
やること
連続したデータは何回連続するかという情報に変換して詰めちゃう(圧縮しちゃう)
*4 5 *6 1 *2 14 *4 19 21*1 *3
Step-4
やること
この⼩さいデータをブラウザで受け取って逆の処理をする (decode)
0 1 2 3 5
5 6 7 8 9
1 1 1 1 1
1 1 1 1 1
2 2 2 2 2
圧縮済データ
⾏列データ
元データ
の場合
WAT
全662⾏ 半年ほど前にflood-fillという簡単なアルゴリズムを実装したが苦⾏だった..
の場合
kou
全79⾏
let zip = fn (a [int], col int, row int) ([int], int) {
~ 中略 ~
while (i < l) {
if (a[i - 1] == a[i]) {
ct = ct + 1;
} else {
res = next(res, a[i - 1], ct);
ct = 0;
};
if (i == l - 1) {
res = next(res, a[i], ct);
} else {};
i = i + 1;
};
~ 中略 ~
res
}
の場合
kou
JSerであれば直感的に書ける
成果
じゃんじゃかじゃん
すごい
成果
約1/5まで圧縮 encode処理もJSで書くよりも3-4倍⾼速
1.4mb > 255kb
● ⾼階層な⾔語ではないので中で何をやっているかは想像しやすい
● わからなくても作者が近くにいたので最強になれる
● それは普段あまりない経験

● wat書くよりはるかに楽で感動すら覚える
● しかしlog関数がないのはしんどい (⾃分で追加しようとした)
● 型の問題があってちゃんとやろうとするとそこそこ⼤変

● 全てがUint32Array問題
● ⼤きな動画や画像データなど扱いたい時メモリを⾷いすぎる
● wasm使いたいモチベーションと相反する

● いつも⽂句いいながら書いてたけどJavaScriptって便利だな...なんでもあるやんけ...
所感
kou
● LINEでは実験的な社内プロダクトがいくつかありその中では様々な挑戦をしている
● wasmもその中のひとつ

● wasmを直接触ることになるエンジニアの数は少ないと思う
● しかし、間違いなくライブラリやフレームワークで利⽤することになる

● 今後こんなことができるようになるかも と可能性を⾒据えて置くことは⼤事
● 「これって実現可能なの?」を判断するのは開発者の⼤事な仕事

● それはwasmで⾔えば今まで扱えなかったような巨⼤なデータや処理を扱うことだっ
たりするかもしれない webp, webm
⾔いたいこと⾔う
まとめ
THANK YOU

Contenu connexe

Tendances

エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
「仮想マシンからの移⾏先としてPaaSとKaaS、どちらを選ぶか? #ヤフー名古屋」
「仮想マシンからの移⾏先としてPaaSとKaaS、どちらを選ぶか? #ヤフー名古屋」「仮想マシンからの移⾏先としてPaaSとKaaS、どちらを選ぶか? #ヤフー名古屋」
「仮想マシンからの移⾏先としてPaaSとKaaS、どちらを選ぶか? #ヤフー名古屋」Yahoo!デベロッパーネットワーク
 
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - 健人 井関
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門Hiroyuki Wada
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j昌桓 李
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みMasahiro Sakai
 
地理分散DBについて
地理分散DBについて地理分散DBについて
地理分散DBについてKumazaki Hiroki
 
推薦アルゴリズムの今までとこれから
推薦アルゴリズムの今までとこれから推薦アルゴリズムの今までとこれから
推薦アルゴリズムの今までとこれからcyberagent
 
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜gree_tech
 
Apache tinkerpopとグラフデータベースの世界
Apache tinkerpopとグラフデータベースの世界Apache tinkerpopとグラフデータベースの世界
Apache tinkerpopとグラフデータベースの世界Yuki Morishita
 
Amazon SageMaker 推論エンドポイントを利用したアプリケーション開発
Amazon SageMaker 推論エンドポイントを利用したアプリケーション開発Amazon SageMaker 推論エンドポイントを利用したアプリケーション開発
Amazon SageMaker 推論エンドポイントを利用したアプリケーション開発Amazon Web Services Japan
 
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかRustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかShunsukeNakamura17
 
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回Yoshiki Hayama
 
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Ryuichi Sakamoto
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるとにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるMasatoshi Tada
 

Tendances (20)

エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
「仮想マシンからの移⾏先としてPaaSとKaaS、どちらを選ぶか? #ヤフー名古屋」
「仮想マシンからの移⾏先としてPaaSとKaaS、どちらを選ぶか? #ヤフー名古屋」「仮想マシンからの移⾏先としてPaaSとKaaS、どちらを選ぶか? #ヤフー名古屋」
「仮想マシンからの移⾏先としてPaaSとKaaS、どちらを選ぶか? #ヤフー名古屋」
 
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? - なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
なぜ初心者は webpackが解らないのか?- Why can’t you understand the webpack? -
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
地理分散DBについて
地理分散DBについて地理分散DBについて
地理分散DBについて
 
nginx入門
nginx入門nginx入門
nginx入門
 
推薦アルゴリズムの今までとこれから
推薦アルゴリズムの今までとこれから推薦アルゴリズムの今までとこれから
推薦アルゴリズムの今までとこれから
 
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
 
Apache tinkerpopとグラフデータベースの世界
Apache tinkerpopとグラフデータベースの世界Apache tinkerpopとグラフデータベースの世界
Apache tinkerpopとグラフデータベースの世界
 
Amazon SageMaker 推論エンドポイントを利用したアプリケーション開発
Amazon SageMaker 推論エンドポイントを利用したアプリケーション開発Amazon SageMaker 推論エンドポイントを利用したアプリケーション開発
Amazon SageMaker 推論エンドポイントを利用したアプリケーション開発
 
Paxos
PaxosPaxos
Paxos
 
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかRustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったか
 
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
 
Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装Slurmのジョブスケジューリングと実装
Slurmのジョブスケジューリングと実装
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みるとにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みる
 

Similaire à コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践

第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライドkoturn 0;
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるHideyuki Tanaka
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成Akineko Shimizu
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 
卒研発表
卒研発表卒研発表
卒研発表yayugu
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, CodereadingHiro Yoshioka
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているpocketberserker
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるKoichi Sakata
 
Stan勉強会資料(前編)
Stan勉強会資料(前編) Stan勉強会資料(前編)
Stan勉強会資料(前編) daiki hojo
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform信之 岩永
 
Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011 Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011 Hiro Yoshioka
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライドkoturn 0;
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)Yoshifumi Yamaguchi
 
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!Jun-ichi Sakamoto
 
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3Masahiro Wakame
 
Programming camp 2010 debug hacks
Programming camp 2010 debug hacksProgramming camp 2010 debug hacks
Programming camp 2010 debug hacksHiro Yoshioka
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テストKen Morishita
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Kei IWASAKI
 
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49shoma h
 

Similaire à コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践 (20)

第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライド
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
卒研発表
卒研発表卒研発表
卒研発表
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
 
Stan勉強会資料(前編)
Stan勉強会資料(前編) Stan勉強会資料(前編)
Stan勉強会資料(前編)
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
 
Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011 Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライド
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
 
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
 
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3
 
Programming camp 2010 debug hacks
Programming camp 2010 debug hacksProgramming camp 2010 debug hacks
Programming camp 2010 debug hacks
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テスト
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
 
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
 

Plus de LINE Corporation

JJUG CCC 2018 Fall 懇親会LT
JJUG CCC 2018 Fall 懇親会LTJJUG CCC 2018 Fall 懇親会LT
JJUG CCC 2018 Fall 懇親会LTLINE Corporation
 
Reduce dependency on Rx with Kotlin Coroutines
Reduce dependency on Rx with Kotlin CoroutinesReduce dependency on Rx with Kotlin Coroutines
Reduce dependency on Rx with Kotlin CoroutinesLINE Corporation
 
Kotlin/NativeでAndroidのNativeメソッドを実装してみた
Kotlin/NativeでAndroidのNativeメソッドを実装してみたKotlin/NativeでAndroidのNativeメソッドを実装してみた
Kotlin/NativeでAndroidのNativeメソッドを実装してみたLINE Corporation
 
Use Kotlin scripts and Clova SDK to build your Clova extension
Use Kotlin scripts and Clova SDK to build your Clova extensionUse Kotlin scripts and Clova SDK to build your Clova extension
Use Kotlin scripts and Clova SDK to build your Clova extensionLINE Corporation
 
The Magic of LINE 購物 Testing
The Magic of LINE 購物 TestingThe Magic of LINE 購物 Testing
The Magic of LINE 購物 TestingLINE Corporation
 
UI Automation Test with JUnit5
UI Automation Test with JUnit5UI Automation Test with JUnit5
UI Automation Test with JUnit5LINE Corporation
 
Feature Detection for UI Testing
Feature Detection for UI TestingFeature Detection for UI Testing
Feature Detection for UI TestingLINE Corporation
 
LINE 新星計劃介紹與新創團隊分享
LINE 新星計劃介紹與新創團隊分享LINE 新星計劃介紹與新創團隊分享
LINE 新星計劃介紹與新創團隊分享LINE Corporation
 
​LINE 技術合作夥伴與應用分享
​LINE 技術合作夥伴與應用分享​LINE 技術合作夥伴與應用分享
​LINE 技術合作夥伴與應用分享LINE Corporation
 
LINE 開發者社群經營與技術推廣
LINE 開發者社群經營與技術推廣LINE 開發者社群經營與技術推廣
LINE 開發者社群經營與技術推廣LINE Corporation
 
日本開發者大會短講分享
日本開發者大會短講分享日本開發者大會短講分享
日本開發者大會短講分享LINE Corporation
 
LINE Chatbot - 活動報名報到設計分享
LINE Chatbot - 活動報名報到設計分享LINE Chatbot - 活動報名報到設計分享
LINE Chatbot - 活動報名報到設計分享LINE Corporation
 
在 LINE 私有雲中使用 Managed Kubernetes
在 LINE 私有雲中使用 Managed Kubernetes在 LINE 私有雲中使用 Managed Kubernetes
在 LINE 私有雲中使用 Managed KubernetesLINE Corporation
 
LINE TODAY高效率的敏捷測試開發技巧
LINE TODAY高效率的敏捷測試開發技巧LINE TODAY高效率的敏捷測試開發技巧
LINE TODAY高效率的敏捷測試開發技巧LINE Corporation
 
LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹
LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹
LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹LINE Corporation
 
LINE Things - LINE IoT平台新技術分享
LINE Things - LINE IoT平台新技術分享LINE Things - LINE IoT平台新技術分享
LINE Things - LINE IoT平台新技術分享LINE Corporation
 
LINE Pay - 一卡通支付新體驗
LINE Pay - 一卡通支付新體驗LINE Pay - 一卡通支付新體驗
LINE Pay - 一卡通支付新體驗LINE Corporation
 
LINE Platform API Update - 打造一個更好的Chatbot服務
LINE Platform API Update - 打造一個更好的Chatbot服務LINE Platform API Update - 打造一個更好的Chatbot服務
LINE Platform API Update - 打造一個更好的Chatbot服務LINE Corporation
 
Keynote - ​LINE 的技術策略佈局與跨國產品開發
Keynote - ​LINE 的技術策略佈局與跨國產品開發Keynote - ​LINE 的技術策略佈局與跨國產品開發
Keynote - ​LINE 的技術策略佈局與跨國產品開發LINE Corporation
 

Plus de LINE Corporation (20)

JJUG CCC 2018 Fall 懇親会LT
JJUG CCC 2018 Fall 懇親会LTJJUG CCC 2018 Fall 懇親会LT
JJUG CCC 2018 Fall 懇親会LT
 
Reduce dependency on Rx with Kotlin Coroutines
Reduce dependency on Rx with Kotlin CoroutinesReduce dependency on Rx with Kotlin Coroutines
Reduce dependency on Rx with Kotlin Coroutines
 
Kotlin/NativeでAndroidのNativeメソッドを実装してみた
Kotlin/NativeでAndroidのNativeメソッドを実装してみたKotlin/NativeでAndroidのNativeメソッドを実装してみた
Kotlin/NativeでAndroidのNativeメソッドを実装してみた
 
Use Kotlin scripts and Clova SDK to build your Clova extension
Use Kotlin scripts and Clova SDK to build your Clova extensionUse Kotlin scripts and Clova SDK to build your Clova extension
Use Kotlin scripts and Clova SDK to build your Clova extension
 
The Magic of LINE 購物 Testing
The Magic of LINE 購物 TestingThe Magic of LINE 購物 Testing
The Magic of LINE 購物 Testing
 
GA Test Automation
GA Test AutomationGA Test Automation
GA Test Automation
 
UI Automation Test with JUnit5
UI Automation Test with JUnit5UI Automation Test with JUnit5
UI Automation Test with JUnit5
 
Feature Detection for UI Testing
Feature Detection for UI TestingFeature Detection for UI Testing
Feature Detection for UI Testing
 
LINE 新星計劃介紹與新創團隊分享
LINE 新星計劃介紹與新創團隊分享LINE 新星計劃介紹與新創團隊分享
LINE 新星計劃介紹與新創團隊分享
 
​LINE 技術合作夥伴與應用分享
​LINE 技術合作夥伴與應用分享​LINE 技術合作夥伴與應用分享
​LINE 技術合作夥伴與應用分享
 
LINE 開發者社群經營與技術推廣
LINE 開發者社群經營與技術推廣LINE 開發者社群經營與技術推廣
LINE 開發者社群經營與技術推廣
 
日本開發者大會短講分享
日本開發者大會短講分享日本開發者大會短講分享
日本開發者大會短講分享
 
LINE Chatbot - 活動報名報到設計分享
LINE Chatbot - 活動報名報到設計分享LINE Chatbot - 活動報名報到設計分享
LINE Chatbot - 活動報名報到設計分享
 
在 LINE 私有雲中使用 Managed Kubernetes
在 LINE 私有雲中使用 Managed Kubernetes在 LINE 私有雲中使用 Managed Kubernetes
在 LINE 私有雲中使用 Managed Kubernetes
 
LINE TODAY高效率的敏捷測試開發技巧
LINE TODAY高效率的敏捷測試開發技巧LINE TODAY高效率的敏捷測試開發技巧
LINE TODAY高效率的敏捷測試開發技巧
 
LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹
LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹
LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹
 
LINE Things - LINE IoT平台新技術分享
LINE Things - LINE IoT平台新技術分享LINE Things - LINE IoT平台新技術分享
LINE Things - LINE IoT平台新技術分享
 
LINE Pay - 一卡通支付新體驗
LINE Pay - 一卡通支付新體驗LINE Pay - 一卡通支付新體驗
LINE Pay - 一卡通支付新體驗
 
LINE Platform API Update - 打造一個更好的Chatbot服務
LINE Platform API Update - 打造一個更好的Chatbot服務LINE Platform API Update - 打造一個更好的Chatbot服務
LINE Platform API Update - 打造一個更好的Chatbot服務
 
Keynote - ​LINE 的技術策略佈局與跨國產品開發
Keynote - ​LINE 的技術策略佈局與跨國產品開發Keynote - ​LINE 的技術策略佈局與跨國產品開發
Keynote - ​LINE 的技術策略佈局與跨國產品開發
 

Dernier

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 

Dernier (9)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 

コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践