@ledsun blog

無味の味は佳境に入らざればすなわち知れず

rust

rustのWASI用のThreadのsleep関数を読む

https://github.com/rust-lang/rust/blob/e9271846294c4ee5bd7706df68180320c0b5ff20/library/std/src/sys/wasi/thread.rs#L137 *1 pub fn sleep(dur: Duration) { let nanos = dur.as_nanos(); assert!(nanos <= u64::MAX as u128); const USERDATA: wasi::…

WSL上のUbuntuにrustをインストールする

Ruby 3.2.0がリリースされました。 rbenv + ruby-buildをつかってインストールできます。 Ruby 3.2.0のYJITを有効にするにはrustcがある環境でコンパイルする必要があります。 WSLにrustをインストールしていませんでした。 インストールします。 www.rust-l…

Romeは本当に速かった

RomeプロジェクトのJavaScriptフォーマッターがリリースされました。 rome.tools ちょうどPrettier を使っているプロジェクトがあったので比較してみました。 本当にめちゃくちゃ速い。prettierで8秒掛かるのが0.5秒とかで終わる。— ぎゃばん@手洗い (@ledsu…

rustでgrep-lite 2

行番号を出力する機能が増えました。 fn main() { let search_term = "picture"; let quote = "\ Every face, every shop, bedroom window, public-house, and dark square is a picture feverishly turned--in search of what? It is the same with books. …

rustでgrep-lite 1

詳解Rustプログラミング作者:Tim McNamara翔泳社Amazon 「2.9 grep-liteを作る」です。 fn main() { let search_term = "picture"; let quote = "\ Every face, every shop, bedroom window, public-house, and dark square is a picture feverishly turned-…

WindowsでrustupするならVS Codeを終わらせろ

rust 1.58がでたので、rustの環境を更新します。 PS C:\Users\led_l\rust_land\grep-lite> cargo --version cargo 1.57.0 (b2e52d7ca 2021-10-21) PS C:\Users\led_l\rust_land\grep-lite> rustc --version rustc 1.57.0 (f1edd0429 2021-11-29) PS C:\Users…

rustでマンデルブロー集合を描く

詳解Rustプログラミング作者:Tim McNamara翔泳社Amazon 「2.7 プロジェクト:マンデルブロ集合のレンダリング」です。 use num::complex::Complex; fn calculate_mandelbrot( max_iters: usize, x_min: f64, x_max: f64, y_min: f64, y_max: f64, width: usi…

cargo-edit

詳解Rustプログラミング作者:Tim McNamara翔泳社Amazon 2.7 プロジェクト:マンデルブロー集合のレンダリングのサンプルプログラムを動かしたいです。 numというクレートを使うようです。 rustにはクレートと呼ばれるJavaScriptでのnpmパッケージのようなも…

rustでFizzBuzz

詳解Rustプログラミング作者:Tim McNamara翔泳社Amazon の、2.4 フロー制御を読みました。 Rangeみたいな記法があったり、関数の最後の式のreturnが省略できたりRubyみたいです。 switch-case はなくパターンマッチングだけがあるそうです。 獲得した知識を…

rustを味見する 7

今回はスレッドのレースコンディションを検出する例です。 use std::thread; fn main() { let mut data = 100; thread::spawn(|| { data = 100; }); thread::spawn(|| { data = 100; }); println!("{}", data); } これをcargo runすると次のようにどどっとコ…

rustを味見する 6

1.6.1 Rustの目標:安全性 詳解Rustプログラミング作者:Tim McNamara翔泳社Amazon の15ページのサンプルプログラムです。 #[derive(Debug)] enum Cereal { Barely, Millet, Rice, Rye, Spalt, Wheat } fn main() { let mut grains: Vec<Cereal> = vec![]; grains.pus</cereal>…

cargo init

ディレクトリがすでにある状態でcargo newするとエラーになります。 cargo newのエラー エラーメッセージに従い、cargo initを使います。 すでにあるディレクトリの中にrustのパッケージ開発環境を作れます。 cargo initを実行したところ 次のようにパッケー…

rustを味見する 5

CSVを操作するプログラムを改造してみます。 細かい操作はよくわからないので、数値を2倍にして出力してみます。 fn main() { let penguin_data = "\ common name, length (cm) Little Penguin, 36 Yellow-eyed Penguin, 65 Fiordland Penguin, 76 Invalid, …

rustを味見する 4

rustのリファレンスをどうやって見れば良いのでしょうか? VSCodeでlinesメソッドの戻り値の型を表示したところ Vector型ではなくLine型という専用の型のようです。 ぐぐるとLines in std::io - Rustが見つかります。 このサイトに標準ライブラリのリファレ…

rustを味見する 3

引き続きサンプルプログラムを写経して実行します。 fn main() { let penguin_data = "\ common name, length (cm) Little Penguin, 36 Yellow-eyed Penguin, 65 Fiordland Penguin, 76 Invalid, data "; let records = penguin_data.lines(); for (i, recor…

rust を味見する 2

CSVを処理するサンプルプログラムを動かしてみます。 cargo new peguins cd penguins code . こんな感じでパッケージをつくってVSCodeで編集します。 VSCodeでパッケージを編集する 地道に写経します。 fn main() { let penguin_data = "\ common name, leng…

rustを味見する

詳解Rustプログラミング作者:Tim McNamara翔泳社Amazonの1章を眺めながらrustを味見します。 お正月なのでこんな感じで fn happy_new_year_world() { println!("Happy new year!"); let japanense = "謹賀新年"; let italian = "Buon anno!"; let chainese_t…