Skip to content

Instantly share code, notes, and snippets.

@kubosho
Last active March 24, 2021 14:46
Show Gist options
  • Save kubosho/6b150e5b8a1397b8e9ac9611e9f7480f to your computer and use it in GitHub Desktop.
Save kubosho/6b150e5b8a1397b8e9ac9611e9f7480f to your computer and use it in GitHub Desktop.
Rustを初めて触ってコンパイラをつくるまでの記録

Rustを初めて触ってコンパイラをつくるまでの記録

https://hayato.io/2017/faq/#programming

C++ への理解が足りない (というよりコンピュータの基礎がわかっていない)人にとっては、とても学習曲線が高いプログラミング言語だと思います

という文章を見て、C++も書いたことがない、コンピュータの基礎が分かっていない自分にとっては良さそうな言語だと思いやり始めることにしました。

寿命という概念

次のコードは a という変数よりも b という変数のほうが寿命が短いです。 具体的には blet a; の次にあるカッコ内でしか生きられないですが、aは main() 内だと生きられます。

fn main() {
    let a;
    {
        let b = "foo";
        a = &b;
    }
    println!("{}", a);
}

そのため先ほどのコードを実行すると寿命が足りないというエラーが出力されます。

error: `b` does not live long enough
 --> prog.rs:6:5
  |
5 |         a = &b;
  |              - borrow occurs here
6 |     }
  |     ^ `b` dropped here while still borrowed
7 |     println!("{}", a);
8 | }
  | - borrowed value needs to live until here

error: aborting due to previous error

cargo new

Rustの標準パッケージマネージャであるCargoを使って cargo new <package name> とすると次のようなファイルができます。

.
├── .gitignore
├── Cargo.toml
└── src
    └── lib.rs

1 directory, 3 files
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment