Webブラウザで使える
いろんな処理系
伊藤 祐司
2016/01/16 Creators MeetUp #36
C/C++, Java, Rubyなどの
プログラムをWebブラウザで
動かすお話です
動機なんて人それぞれ
• C/C++やJavaで開発した資産を活用したい
• 複数プラットフォームで動作するアプリケーションを同時開発
したい
• ロジックが複雑だったり、バイナリデータを使ったり、
JavaScriptには不向きな処理もある
• サーバはデータの保存だけで、他の処理をすべてクライアント
に投げたくならない?
• 趣味、ライフワーク
C/C++
• https://github.com/kripken/emscripten
• C/C++をLLVM-IR経由でJavaScriptに変換する
• OpenGLやSDLが使えるので、過去のゲーム作品の移植など
に使われるらしい
• C/C++で書かれたライブラリをWebブラウザから使う
• 過去の発表スライド
• http://www.slideshare.net/llamerada-jp/cmu29
C/C++
JavaScript!
emscripten
emscripten(converter)
LLVM-IR(AST)
Clang
C/C++のJavaScript変換
ができるということは…
C/C++で書かれたVMは
ブラウザ上で動く?
Lua lua.vm.js
mruby webruby
python
repl.it
emscriptenのテスト
ruby repl.it
Java系は?
Google Web Toolkit
• http://www.gwtproject.org/
• 本来はアプリケーションサーバからフロントエンドまでの使用言語を
Javaに統一したかったらしい
• JavaからJavaScriptに変換する
• フレームワークとコンバータを併せたようなシステム、既存資産を
Web上で動かせるかは微妙
• サーバ側のJavaAPIをブラウザから呼ぶ(ように見える)ことが可能
• エンタープライズで利用実績あり
doppio
• https://github.com/plasma-umass/doppio
• TypeScriptで書かれたJVM
• JVM上はAPIがあるのに、呼び出してみると未実装
だった経験あり、カバレージを気にしながらテスト
する
• 日本語資料はほぼ皆無
その他の可能性
• ScalaのようなJVM上で動く言語は、doppio(など)
経由でWebブラウザで動かせないか
• PCエミュレータやOSそのものをブラウザで動かし
てしまう(js/linux by Fabrice Bellard)
その他の可能性
• DragonEgg(gccにLLVM-IRを吐き出させる仕組み)
を使って、Fortranや他の言語からJavaScriptに変
換する
• PystonのようなLLVMを利用する処理系の出力を
JavaScriptに変換する
WebAssembly
C/C++
wasm(WAST)
Browser
Clang etc
Interpreter
JavaScript
VM / JIT
Compiler-X
Language-X
まとめ
Webブラウザといえど、目的に合わせて
開発言語を選んで良いと思うのです
伊藤 祐司
• バックエンドの設計・開発 フレームワークの作成
バイナリ・テキスト変換 クローラー アルゴリズム
仮想マシン
• PROCESS WARP http://www.processwarp.org/
• だいたい下北沢OSSカフェで作業してる
• 総務省 異能vationプログラム
• GitHub https://github.com/llamerada-jp
• facebook https://www.facebook.com/ito.yuuji
• blog http://llamerad-jp.hatenablog.com/
以上
ありがとうございました

Webブラウザで使えるいろんな処理系