wasm in Zen

wasm in Zen

6bb0559d2066b868dab09e435f488c6c?s=128

tomoyuki-nakabayashi

June 22, 2019
Tweet

Transcript

  1. Zen言語でWebAssembly 中林 智之(connectFree株式会社) 2019/6/22 v-kansai Vue.js/Nuxt.js meetup #7 スポンサーLT

  2. connectFree株式会社とは? セキュアな第二インターネット Zen™言語 柔軟かつ多目的な 暗号化認証済中継方式 NET BOY™ セキュアなハード セキュアな言語 低レイヤからセキュアなITインフラ構築を目指す会社です

  3. 充電器をお忘れの方は お声がけ下さい 弊社代表が 責任を持って お作りいたします!

  4. 自己紹介 • 中林智之 (connectFree株式会社 組込みエンジニア) • Twitter: @LDScell 4 →

    普段の仕事風景 CPU: 72MHz RAM: 256KB マイコン世界の住人
  5. スポンサーLTを承諾したけど、 困った… 片や、闇に隠れて生きる組込みエンジニア 片や、なうでやんぐな フロントエンドエンジニアの皆様 とにかくVue.jsとNuxtが何か調べよう! (一昨日夜) Vue.jsとNuxt、名前はよく見かけるけど…

  6. とにかく公式サイト! おしゃれ!住む世界が違う! → 兎に角、左上から 順番に…

  7. とにかく公式サイト! C言語とアセンブリ しかわかりません! (そっとじ)

  8. な、何か共通点は…

  9. そうだWebAssembly! Zenはwasmをターゲットにコンパイル可能 wasmの話をすれば、スタンディングオベーショ ン間違いなし! Zenでwasmを使う例を紹介

  10. connectFreeで開発しているプログラミング言語 言語開発のモチベーション 低レイヤや組込み開発において、 安全なC言語が必要!

  11. ★ PFごとに コード/ツールを整備 ★ 危険なメモリ操作がコ ンパイル可能 ★ 未定義動作 ★ エラー処理構文の欠如

    ★ 無秩序なエラー処理 ★ テストFWの欠如 ★ 一か八か開発
  12. ・C / Zen コードを  同時コンパイル ・テストフレームワーク 豊富な標準ライブラリ& ソフトウェアモジュール エラー発生時、 瞬時にヘルプを得られる

    安全で善いコードを漸進的に構築可能な Zen が誕生 危険なコードを コンパイル時に検出 1つのコードベースと1つのツールで マルチプラットフォーム対応 開発者向けのトータルサポート 明瞭なエラー処理構文 善いコード 漸進 便利 安全
  13. Zenの特徴 • 言語組込みのテストフレームワーク • C言語資産の活用が容易 • マルチプラットフォームサポート • 危険なコードをコンパイル時に検出 •

    明瞭なエラー処理構文
  14. Zenのターゲット $ zen targets Architectures: arm v8_5a … x86_64 (native)

    … wasm32 wasm64 ← バックエンドがLLVMなので wasmにも対応している!
  15. Zenでwasmをターゲットに ビルドできるけど、 困った… Zenは書けるが、 JavaScriptなんもわからん ブラウザで実行する方法わからん

  16. 詰んだ…

  17. Hey you! Meの上でwasmしなよ! Webブラウザでの動かし方がわからないなら、 マイコンで動かせばいいじゃない!

  18. NETBOYでWebAssembly!! できます! WebAssembly Micro Runtimeを使う! https://github.com/intel/wasm-micro-runtime 2019/5にintelが公開したOSS 組込みOS上で 動く! ←

  19. 早速Hello Worldを用意して… pub extern fn printf([*c]const u8, ...) c_int; pub

    export fn main() c_int { _ = printf(c"Hello NETBOY. I'm Zen!\n"); return 0; } wasm.zen ※ベースの組込みOSがC言語なので、C FFIを利用
  20. ビルド! $ zen build-lib --release-small --strip \ -target wasm32-freestanding wasm.zen

    $ ls -lha wasm.wasm -rwxr-xr-x 255 Jun 21 10:25 wasm.wasm 255バイトのwasmバイナリが完成!
  21. WASM Micro Runtimeの サンプルアプリを修正してビルド unsigned char wasm_test_file[] = { 0x00,

    0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x03, 0x60, 0x02, 0x7f, 0x7f, 0x01, ... 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x03, 0x04, 0x6d, 0x61, 0x69, 0x6e }; test_wasm.h NETBOYのファームウェアをビルド!
  22. NETBOYに書き込んで…

  23. 動いたぁ!

  24. wasm合体 NETBOY!!!

  25. ところで皆さん ネットワークに接続できて WebAssemblyが動かせるもの、 なーんだ?

  26. ところで皆さん ネットワークに接続できて WebAssemblyが動かせるもの、 なーんだ? Webブラウザ!!!

  27. つまり… ネットワークに接続できて、 WebAssemblyが動くNETBOYは 実質Webブラウザ! 違和感なし!

  28. ところで皆さん Webブラウザで動くものを 作る人、 だーれだ?

  29. ところで皆さん Webブラウザで動くものを 作る人、 だーれだ? フロントエンド エンジニア!!!

  30. つまり… 実質Webブラウザである NETBOYで動くものを作る 私は… 自己紹介 • 中林智之 (connectFree株式会社 組込みエンジニア) •

    Twitter: @LDScell 実質フロントエンド
  31. 求人情報 connectFreeではフロントエンドエンジニアを募 集しています。 • ZenのwasmをWebブラウザで動かしたい • 常に新しいことがやりたい • 低レイヤ技術にも興味がある