Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
祐司 伊藤
PDF, PPTX
2,676 views
C/C++とWebAssemblyを利用したライブラリ開発
Emscripten & WebAssembly night !! #7での発表資料です
Technology
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 34
2
/ 34
3
/ 34
4
/ 34
5
/ 34
6
/ 34
7
/ 34
8
/ 34
9
/ 34
10
/ 34
11
/ 34
12
/ 34
13
/ 34
14
/ 34
15
/ 34
16
/ 34
17
/ 34
18
/ 34
19
/ 34
20
/ 34
21
/ 34
22
/ 34
23
/ 34
24
/ 34
25
/ 34
26
/ 34
27
/ 34
28
/ 34
29
/ 34
30
/ 34
31
/ 34
32
/ 34
33
/ 34
34
/ 34
More Related Content
PDF
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
by
Unity Technologies Japan K.K.
PDF
llvm入門
by
MITSUNARI Shigeo
PDF
.NET Core 3.0時代のメモリ管理
by
KageShiron
PDF
C++ マルチスレッド 入門
by
京大 マイコンクラブ
PDF
20分くらいでわかった気分になれるC++20コルーチン
by
yohhoy
PDF
空間分割
by
amusementcreators
PDF
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
by
Yoshifumi Kawai
PDF
Railsで作るBFFの功罪
by
Recruit Lifestyle Co., Ltd.
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
by
Unity Technologies Japan K.K.
llvm入門
by
MITSUNARI Shigeo
.NET Core 3.0時代のメモリ管理
by
KageShiron
C++ マルチスレッド 入門
by
京大 マイコンクラブ
20分くらいでわかった気分になれるC++20コルーチン
by
yohhoy
空間分割
by
amusementcreators
.NET最先端技術によるハイパフォーマンスウェブアプリケーション
by
Yoshifumi Kawai
Railsで作るBFFの功罪
by
Recruit Lifestyle Co., Ltd.
What's hot
PDF
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
PDF
Apache Arrow - データ処理ツールの次世代プラットフォーム
by
Kouhei Sutou
PPTX
非同期処理の基礎
by
信之 岩永
PDF
条件分岐とcmovとmaxps
by
MITSUNARI Shigeo
PDF
プログラムを高速化する話
by
京大 マイコンクラブ
PDF
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
by
祐司 伊藤
PDF
暗号文のままで計算しよう - 準同型暗号入門 -
by
MITSUNARI Shigeo
PDF
Xbyakの紹介とその周辺
by
MITSUNARI Shigeo
PDF
暗号化したまま計算できる暗号技術とOSS開発による広がり
by
MITSUNARI Shigeo
PDF
Pythonによる黒魔術入門
by
大樹 小倉
PDF
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
by
Hiroshi Yamaguchi
PDF
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
by
MITSUNARI Shigeo
PDF
新しい暗号技術
by
MITSUNARI Shigeo
PPTX
SIMDで整数除算
by
shobomaru
PDF
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
by
Yoshifumi Kawai
PDF
デキるプログラマだけが知っているコードレビュー7つの秘訣
by
Masahiro Nishimi
PPTX
[DL輪読会] “Asymmetric Tri-training for Unsupervised Domain Adaptation (ICML2017...
by
Yusuke Iwasawa
PDF
RSA暗号運用でやってはいけない n のこと #ssmjp
by
sonickun
PPTX
冬のLock free祭り safe
by
Kumazaki Hiroki
PDF
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
by
Kohei Tokunaga
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
Apache Arrow - データ処理ツールの次世代プラットフォーム
by
Kouhei Sutou
非同期処理の基礎
by
信之 岩永
条件分岐とcmovとmaxps
by
MITSUNARI Shigeo
プログラムを高速化する話
by
京大 マイコンクラブ
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
by
祐司 伊藤
暗号文のままで計算しよう - 準同型暗号入門 -
by
MITSUNARI Shigeo
Xbyakの紹介とその周辺
by
MITSUNARI Shigeo
暗号化したまま計算できる暗号技術とOSS開発による広がり
by
MITSUNARI Shigeo
Pythonによる黒魔術入門
by
大樹 小倉
VisualSFMとMeshLabとCloudCompareによるドローン撮影画像を用いたデジタル地図作成
by
Hiroshi Yamaguchi
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
by
MITSUNARI Shigeo
新しい暗号技術
by
MITSUNARI Shigeo
SIMDで整数除算
by
shobomaru
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
by
Yoshifumi Kawai
デキるプログラマだけが知っているコードレビュー7つの秘訣
by
Masahiro Nishimi
[DL輪読会] “Asymmetric Tri-training for Unsupervised Domain Adaptation (ICML2017...
by
Yusuke Iwasawa
RSA暗号運用でやってはいけない n のこと #ssmjp
by
sonickun
冬のLock free祭り safe
by
Kumazaki Hiroki
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
by
Kohei Tokunaga
More from 祐司 伊藤
PDF
Container Storage Interface のすべて
by
祐司 伊藤
PDF
C++からWebRTC (DataChannel)を利用する
by
祐司 伊藤
PDF
詳説WebAssembly
by
祐司 伊藤
PDF
シンプル Processing !
by
祐司 伊藤
PDF
PROCESS WARP「プロセスがデバイス間で移動する」仕組みを作る
by
祐司 伊藤
PDF
PROCESS WARP
by
祐司 伊藤
PDF
Webブラウザで使えるいろんな処理系
by
祐司 伊藤
PDF
PROCESS WARP
by
祐司 伊藤
PDF
PIAXで作る P2Pネットワーク
by
祐司 伊藤
PDF
新しい分散実行の仕組み PROCESS WARPについて
by
祐司 伊藤
Container Storage Interface のすべて
by
祐司 伊藤
C++からWebRTC (DataChannel)を利用する
by
祐司 伊藤
詳説WebAssembly
by
祐司 伊藤
シンプル Processing !
by
祐司 伊藤
PROCESS WARP「プロセスがデバイス間で移動する」仕組みを作る
by
祐司 伊藤
PROCESS WARP
by
祐司 伊藤
Webブラウザで使えるいろんな処理系
by
祐司 伊藤
PROCESS WARP
by
祐司 伊藤
PIAXで作る P2Pネットワーク
by
祐司 伊藤
新しい分散実行の仕組み PROCESS WARPについて
by
祐司 伊藤
C/C++とWebAssemblyを利用したライブラリ開発
1.
C/C++ WebAssembly / @llamerada_jp 2019/04/19
Emscripten & WebAssembly night !! #7
2.
• • ; SE •
, Java, Cloud, VMWare • ; • C/C++, go, WebAssembly, WebRTC, WebSocket • PROCESS WARP • twitter ; @llamerada_jp • facebook ; https://www.facebook.com/ito.yuuji • github ; https://github.com/llamerada-jp
3.
• WebAssembly • • JavaScript
C/C++ API • C/C++ JavaScript API • CallBack • • • •
4.
@SlideShare https://www.slideshare.net/llamerada-jp/webassembly-75175349 https://www.slideshare.net/llamerada-jp/cmu29
5.
• WebAssembly • • JavaScript
C/C++ API • C/C++ JavaScript API • CallBack • • • •
6.
C/C++( ) WebAssembly(emscripten) web
export • •
7.
• WebAssembly • • JavaScript
C/C++ API • C/C++ JavaScript API • CallBack • • • •
8.
C/C++ • C++ name
mangling extern "C" export • EMSCRIPTEN_KEEPALIVE -s 'EXPORTED_FUNCTIONS=["_<C >", …]' ( ) extern "C" { EMSCRIPTEN_KEEPALIVE int c_func(int p_int, void* p_ptr); }
9.
Build • $ emcc … -s
'EXTRA_EXPORTED_RUNTIME_METHODS=["ccall", “cwrap"]'
10.
JavaScript • ccall, cwrap
; emscripten (.wasm WebAssembly.Instance.exports) let r = ccall( 'c_func', // C 'number', // number(pointer ), array, string, boolean ['number', 'number'], // [< >, < >] // ); let f = cwrap('c_func', 'number', ['number', 'number']); f(< >, < >);
11.
• WebAssembly • • JavaScript
C/C++ API • C/C++ JavaScript API • CallBack • • • •
12.
JavaScript • C/C++ export
JavaScript API <api > mergeInto(LibraryManager.library, { js_func: function(p1, p2) { // … }, … });
13.
Build • $ emcc …
--js-library <api >
14.
C/C++ • C/C++ extern "C"
{ extern void js_func(int p1, void* p2); } • js_func(100, &val);
15.
• WebAssembly • • JavaScript
C/C++ API • C/C++ JavaScript API • CallBack • • • •
16.
JavaScript • JavaScript C •
addFunction ; JavaScript emscripten • ccall C/C++ • C/C++ let f_ptr = addFunction( js_func.bind(this), // bind 'vi' // (1 ), (2 ) // v:void, i:int32, j:int64, f:float, d:double );
17.
Build • $ emcc …
-s 'RESERVED_FUNCTION_POINTERS=< >' • • JavaScript on Callback
18.
• Promise (※
) connect(url, token) { const promise = new Promise((resolve, reject) => { // resolve/reject let onSuccess = addFunction((veinPtr) => { resolve(); }, 'vi'); let onFailure = addFunction((veinPtr) => { reject(); }, 'vi'); let [urlPtr] = allocPtrString(url); let [tokenPtr] = allocPtrString(token); // C/C++ Callback ccall('js_connect', 'null', ['number', 'number', 'number', 'number'], [this._veinPtr, urlPtr, tokenPtr, onSuccess, onFailure]); freePtr(url); freePtr(token); }); return promise; }
19.
• WebAssembly • • JavaScript
C/C++ API • C/C++ JavaScript API • CallBack • • • •
20.
C++ class • ID
JavaScript • JavaScript C++ ID • C ID C++ ('A`)
21.
get/set <C/C++> extern "C" { EMSCRIPTEN_KEEPALIVE
int64_t get_int(PTR_T value_ptr); EMSCRIPTEN_KEEPALIVE void set_int(PTR_T value_ptr, int64_t v); } <JavaScript> get() { return ccall('get_int', 'number', ['number'], [this._valuePtr]); } set(v) { ccall('set_int', 'void', ['number', 'number'], [this._valuePtr, v]); }
22.
• get/set • • • • (
) • Module.HEAPU8 • • JavaScript get/set
23.
• WebAssembly • • JavaScript
C/C++ API • C/C++ JavaScript API • CallBack • • • •
24.
• , • new,
delete • alloc, free • , • open, close
25.
• JavaScript • WebAssembly
JavaScript GC (2019/04 ) • • JavaScript API
26.
connect(url, token) { const
promise = new Promise((resolve, reject) => { let onSuccess = addFunction((veinPtr) => { resolve(); }, 'vi'); let onFailure = addFunction((veinPtr) => { reject(); }, 'vi'); // JavaScript C/C++ let [urlPtr] = allocPtrString(url); let [tokenPtr] = allocPtrString(token); // ccall('js_connect', 'null', ['number', 'number', 'number', 'number'], // !C/C++ [this._veinPtr, urlPtr, tokenPtr, onSuccess, onFailure]); // freePtr(url); freePtr(token); }); return promise; }
27.
disconnect() { // if (this._timerInvoke)
{ clearTimeout(this._timerInvoke); this._timerInvoke = false; } // C++ ccall('js_disconnect', 'null', ['number'], [this._veinPtr]); // JS delete this._instanceCache; }
28.
• WebAssembly • • JavaScript
C/C++ API • C/C++ JavaScript API • CallBack • • • •
29.
libvein • • KVS, 2
PubSub • C/C++, Python, web ( )
30.
oinari • https://www.oinari.app • https://github.com/llamerada-jp/ oinari • •
libvein
31.
Seed/Server (WebRTC ) Application API Application API Application API Node ( ) Application API Node
Node Node Routing KVS, 2 PubSub WebSocket WebRTC
32.
Core(C++) Application(JavaScript) API(JavaScript) I/F(C/C++) I/F(C/C++, JavaScript) WebSocket WebRTC Core(C++) Application(Native) API(C++) I/F(C++) WebRTC WebSocket API(C) Seed/Server(golang) WebAssembly (emscripten) =
Download