北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

今日は Roppongi.rs #1 の日です

職場から近いので Roppoingi.rs に来ました。自分のためにメモを残しておきます。ハッシュタグ#roppongirs

Rustがいかにエンジニアの脳を楽にさせているかをC++初心者が語る〜関数篇〜 / @natsu_no_yuki さん

  • C++歴15年の初心者
    • rvalue reference, template特殊化などが使えるのは初心者らしい
    • rust歴は3日
  • プログラミングの歴史からrustの良さを考える
  • C言語: メモリ管理を何もしてくれない
    • プログラマが明示的にメモリを確保したり・・・ (C、C++のことです)
  • C++ と rust の比較
  • C++で関数呼び出しをすると、コピーされてコンストラクタが二回呼ばれる例
    • スタックにローカル変数、戻り先アドレス、引数を積む
    • 引数を積むために2回インスタンスが作られるので、無駄
    • よって、参照渡しをする
  • C++で関数の戻り値で二度コンストラクタが呼ばれる例
    • (処理系によるが)EAXレジスタへコピーする。よってコンストラクタが二回呼ばれる
    • 戻り値を参照にする → 開放されたメモリを参照してしまう
    • スタックに実体があるが、関数から戻るときに破棄されてしまう
    • コンパイルが通ってしまう。 C++ では気が付きにくいバグ
    • ヒープにデータを作る (演算子 new で作る) → 問題ない
    • bad_alloc exception メモリ不足。開放しなければならない ( delete )
  • delete をどうするか
    • 同じレイヤで開放するのが鉄則
    • destroyedXxx のような名前の関数を用意する
    • C++ を書いているひとは、この問題とずっと戦っている
  • rust の場合は、普通に返すだけで所有権が移るので問題ない
    • 脳が嬉しい → Rust いいね

なぜBlockchainはRustを選ぶのか / @jkcomment さん

  • Blockchain の話は多いけど、細かい話はしない
  • rust について
  • なぜ rust の知名度が低いのか
    • OSSプロジェクト、サービスが少ない
    • goは k8s とか。 rust の場合は、 Rust が一番
    • システム系はC言語一強
    • 学習コストが高い、難しそう
  • Blockchainのプロジェクトでは、rustの採用率が高い
  • Blockchainとは?
    • P2Pで動作する分散型大腸システム。ブロックを一定時間ごとに生成してチェーンに。ハッシュで暗号化
    • bitcoin, Polkadot, libra
    • C++: bitcoin, EOS, zilliqa / Go: Ethereum Klaytn Quorum
    • rust: Ethereum(Parity), Polkadot(Substrate) ..他多数
  • なぜrust?
    • 特に理由はない
    • blockchain そのものは、言語はなんでもよい
    • rust のプロジェクトも、理由は明確にしてない
  • それでも理由を考えてみると
      1. 性能
      1. Blockchain に必要なモジュールが用意されている
      2. Networking(P2P), Cryptography, Consensus, Storage などに関する処理が必要
  • P2P (Peer to Peer)
    • 対等なやり取り。オーバレイネットワーク。実現するために必要な機能が多い
    • Transport, Discovery, Peer Routing, NAT超え
    • libp2p
      • すべてのPJが採用しているわけでもないが、多くのPJで採用
      • もともとrustが一番いい実装だったが、今はgo
  • Cryptography / 791 crateも登録されている
  • wasm / WebAssembly
    • VMではなくwasmを使う流れになってきている
    • go/C# はランタイムが大きすぎ、 C/C++ はめんどう
    • rust は楽でバイナリも小さい。安全。
  • Substrate
    • Parity社が開発した Blockchain Framework (wordpress的なもの)
    • 簡単に独自の Blockchain が作れる
    • Substrate ベースのプロジェクトは増えている (zero-chain, Plasm, Edgeware, shasper, ChainX ...)
  • rust の悪い使い方
    • Substrate ... マクロ使い過ぎ、トレイト地獄、 match 地獄
    • マクロは展開後のコードでエラーが起きるのでわかりにくい
  • rustの使いみち
    • OSが作れる
    • Webアプリケーションも作れる (Rocket, Iron, actix-web)
    • フロントエンド開発 feat wasm
  • rustがいいと思う理由
    • (個人的に) OOPが好きじゃない
    • 速さ、堅牢さは正義
  • rustで苦労した点
  • まとめ
    • ものづくりは楽しむべき。rustで楽しむ、Blockchainも楽しい

(LT) rustで実装されたLibra Move言語とは

  • Libra : FB の金融プラットフォーム。2019年6月
    • BFTモデルの Libra Blockchain が基盤
    • 組んでいるメンバーが強い
  • Move : Libra 上でスマートコントラクトを書く言語
    • 安全とセキュリティを重視
  • バイトコードを利用 : bytecode verifier でチェックするので安全
  • アセットをオープンシステムに乗せるの難しさ
    • Scarcity / 生み出せない、複製できない
    • Access control / 所有者のみがコントロールできる
  • block chain言語の問題
    • 資産をInteger で表現、型がない、エラーハンドリング
    • Scarcityの責任が開発者に
    • Access control が柔軟じゃない
  • Move での解決策
    • first-class assets: integer 以外を利用、コピーと履きを明示 ( copy/move )
    • flexibility: modules/resources/proceture (クラス、オブジェクト、メソッド)
    • safety : bytecode verifier
    • verifiability
      • 動的ディスパッチの禁止(コールグラフがたんじゅん、解析がしやすい)
      • mutability の制限 (value の変更はrefernce 経由のみ。所有権システムを利用)
      • モジュール化
  • 開発のエコシステムはまだこれから
    • Libra Blockchain へデプロイはできない
    • ドキュメントや開発ツールがない。
    • Collection や Generics は今はない