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
Submit search
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
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
by
祐司 伊藤
PPTX
競技プログラミングのためのC++入門
by
natrium11321
PPTX
冬のLock free祭り safe
by
Kumazaki Hiroki
PDF
元OracleMasterPlatinumがCloudSpanner触ってみた
by
Kumano Ryo
PDF
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
PPTX
Visual C++で使えるC++11
by
nekko1119
PPTX
Topological sort
by
HCPC: 北海道大学競技プログラミングサークル
PDF
C++ マルチスレッドプログラミング
by
Kohsuke Yuasa
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
by
祐司 伊藤
競技プログラミングのためのC++入門
by
natrium11321
冬のLock free祭り safe
by
Kumazaki Hiroki
元OracleMasterPlatinumがCloudSpanner触ってみた
by
Kumano Ryo
ゲーム開発者のための C++11/C++14
by
Ryo Suzuki
Visual C++で使えるC++11
by
nekko1119
Topological sort
by
HCPC: 北海道大学競技プログラミングサークル
C++ マルチスレッドプログラミング
by
Kohsuke Yuasa
What's hot
PDF
詳説WebAssembly
by
祐司 伊藤
PDF
Spaceships 解説
by
Masaki Hara
PDF
オブジェクト指向できていますか?
by
Moriharu Ohzu
PDF
例外設計における大罪
by
Takuto Wada
PDF
いまさら聞けない!CUDA高速化入門
by
Fixstars Corporation
PDF
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
by
Takuya Akiba
PDF
ウェーブレット木の世界
by
Preferred Networks
PDF
Docker Compose 徹底解説
by
Masahito Zembutsu
PDF
闇魔術を触ってみた
by
Satoshi Sato
PPTX
AtCoder Beginner Contest 002 解説
by
AtCoder Inc.
PDF
Where狙いのキー、order by狙いのキー
by
yoku0825
PDF
SFC Design theory 2012 6/20
by
Mitsuru Muramatsu
PDF
リッチなドメインモデル 名前探し
by
増田 亨
PDF
Constexpr 中3女子テクニック
by
Genya Murakami
PDF
入門Transducers
by
sohta
PDF
Pythonによる黒魔術入門
by
大樹 小倉
PDF
明日使えないすごいビット演算
by
京大 マイコンクラブ
PPTX
Verilator勉強会 2021/05/29
by
ryuz88
PDF
競技プログラミングにおけるコードの書き方とその利便性
by
Hibiki Yamashiro
PDF
深入淺出C語言
by
Simen Li
詳説WebAssembly
by
祐司 伊藤
Spaceships 解説
by
Masaki Hara
オブジェクト指向できていますか?
by
Moriharu Ohzu
例外設計における大罪
by
Takuto Wada
いまさら聞けない!CUDA高速化入門
by
Fixstars Corporation
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
by
Takuya Akiba
ウェーブレット木の世界
by
Preferred Networks
Docker Compose 徹底解説
by
Masahito Zembutsu
闇魔術を触ってみた
by
Satoshi Sato
AtCoder Beginner Contest 002 解説
by
AtCoder Inc.
Where狙いのキー、order by狙いのキー
by
yoku0825
SFC Design theory 2012 6/20
by
Mitsuru Muramatsu
リッチなドメインモデル 名前探し
by
増田 亨
Constexpr 中3女子テクニック
by
Genya Murakami
入門Transducers
by
sohta
Pythonによる黒魔術入門
by
大樹 小倉
明日使えないすごいビット演算
by
京大 マイコンクラブ
Verilator勉強会 2021/05/29
by
ryuz88
競技プログラミングにおけるコードの書き方とその利便性
by
Hibiki Yamashiro
深入淺出C語言
by
Simen Li
More from 祐司 伊藤
PDF
Container Storage Interface のすべて
by
祐司 伊藤
PDF
C++からWebRTC (DataChannel)を利用する
by
祐司 伊藤
PDF
PIAXで作る P2Pネットワーク
by
祐司 伊藤
PDF
新しい分散実行の仕組み PROCESS WARPについて
by
祐司 伊藤
PDF
Webブラウザで使えるいろんな処理系
by
祐司 伊藤
PDF
PROCESS WARP
by
祐司 伊藤
PDF
PROCESS WARP「プロセスがデバイス間で移動する」仕組みを作る
by
祐司 伊藤
PDF
シンプル Processing !
by
祐司 伊藤
PDF
PROCESS WARP
by
祐司 伊藤
Container Storage Interface のすべて
by
祐司 伊藤
C++からWebRTC (DataChannel)を利用する
by
祐司 伊藤
PIAXで作る P2Pネットワーク
by
祐司 伊藤
新しい分散実行の仕組み PROCESS WARPについて
by
祐司 伊藤
Webブラウザで使えるいろんな処理系
by
祐司 伊藤
PROCESS WARP
by
祐司 伊藤
PROCESS WARP「プロセスがデバイス間で移動する」仕組みを作る
by
祐司 伊藤
シンプル Processing !
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