Open29

開発者がもっとも好きなプログラミング言語 1 位 Rustに入門してみる

toromo@フルスタックエンジニアtoromo@フルスタックエンジニア

Rustとは

  • 2015(最近!)にリリースされた言語
  • 静的型付け
  • C/C++の代わりになる次世代言語
  • 鬼ほど実行スピードが速い(最速言語のC/C++と同等)
  • C/C++の弱みであるメモリ安全性がRustでは保証されている
    • コンパイルが通る=メモリ安全性が保証
    • C/C++の重大セキュリティ脆弱性の70%はメモリ安全性に起因する

toromo@フルスタックエンジニアtoromo@フルスタックエンジニア

Rust すげぇ

  • 速い
  • GAFAMが採用、後押し
    • Google: AndroidやLinuxと言った基底のシステムにも採用される
      • 2021/04から
    • Microsoft: Windows10から部分的にC/C++からRustへ置き換え
    • Rust Foundamationの顔ぶれが強すぎる
      • AWS
      • Google
      • HUAWEI
      • Microsoft
      • moz://a
      • FACEBOOK
toromo@フルスタックエンジニアtoromo@フルスタックエンジニア

モジュールのインポート・エクスポート

親モジュール

mod module_name;で取り込む
(typescriptのimportみたいな)
module_name::func_nameで実行

子モジュール

pub fn run()みたいにpubをつける
('typescriptのexportみたいな)

toromo@フルスタックエンジニアtoromo@フルスタックエンジニア

floatの精度気になったので見てみる
f32で精度的には7桁程度らしい
パフォーマンスの相当のこだわりがなければデフォルトのf64を使っておくのが無難か
長いリストデータをつかうときはこだわったほうがメモリ効率が良さそう

https://chortle.ccsu.edu/java5/notes/chap11/ch11_2.html

Floating Point Primitive Data Types
Type Size Range Accuracy
float 32 bits -3.4E+38 to +3.4E+38 about 7 decimal digits
double 64 bits -1.7E+308 to +1.7E+308 about 16 decimal digits

toromo@フルスタックエンジニアtoromo@フルスタックエンジニア

文字列(&str固定長)

Stack領域に入る
UTF-8が採用されている(素晴らしい)
&str型となる

let s1 = "test";

文字列のメモリ

  • 参照データ
  • 実データ
    に分かれる

文字列のメモリ詳細

  • 参照データ
    • ptr: 8byte
    • len: 8byte
  • 実データ
    • 静的領域
toromo@フルスタックエンジニアtoromo@フルスタックエンジニア

文字列 (str可変長)

Heap領域に入る

let mut s2 = String::from("test");

文字列のメモリ詳細

  • 参照データ
    • ptr: 8byte
    • len: 8byte
    • cap: 8byte
      • rustが自動的に余裕を持った領域を確保
  • 実データ
    • 静的領域
toromo@フルスタックエンジニアtoromo@フルスタックエンジニア

所有権

(肝の話きたー)

所有権の概念

  • 2重開放エラー
s1とs2が同じHeapを参照している状態
s1が役目を終えると、Heapを開放
s2はまだ使っているのに、、、