みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

Rust

ループの速度を Python, Rust, Node.js で比較する

ループ(繰り返し処理)の書き方はプログラミング言語により様々です.使いやすい書き方を選択すればよいとは思いますが,気になったので処理速度を比較してみました. みーがよく使っている,Python, Rust, Node.js について,1千万個の要素を含む配列を用意…

Rust で queue を作ってみる

pub fn pop(&mut self) -> Option<T> Removes the last element from a vector and returns it, or None if it is empty. If you’d like to pop the first element, consider using VecDeque::pop_front instead. Vec in std::vec - Rust vectorから最後の要素</t>…

rusqlite を windows でコンパイルする

rusqlite を利用して Rust で作成したソフトウェアが,Ubuntu と macOS でコンパイルできるのに,Windows 11 だと以下のエラーでコンパイルできない問題に遭遇しました. note: LINK : fatal error LNK1181: cannot open input file 'sqlite3.lib' 公式ドキ…

Rust と Python で文字数を数える

環境 検証に使用した環境は,以下の通りです. Python 3.11.3 (main, Apr 11 2023, 16:14:10) [GCC 10.2.1 20210110] on linux rustc 1.68.2 (9eb3afe9e 2023-03-27) on linux 文字列を数える Python ならば len() 関数を使うだけです. >>> len("りんご") 3…

Rust で気軽に並列処理をする

Rust の rayon の紹介です.驚くほど簡単かつ安全に並列処理を行えます. Cargo.toml [package] name = "thread-pool-sample" version = "0.1.0" edition = "2021" [dependencies] chrono = "0.4.24" rayon = "1.7.0" rustc 1.68.2 main.rs use chrono::prel…

Dev Container で Tauri を用いた GUI 開発

Docker 環境で GUI の開発ができないだろうか,と思ったので調べてみたところ, fluxbox というウインドウマネージャーを使用した,ブラウザーで接続可能なデスクトップ環境があるそうで,これは Dev Container Features の Light-weight Desktop を使用すれ…

Dev Container Features で全部入り開発環境を作成する

Dev Container を利用して Docker 環境で開発をすると,それぞれのプロジェクトについて自由に依存関係を構成することが可能になり,大変便利です.しかし,開発に必要なライブラリを1個のコンテナに準備する必要があり,準備が大変でした.それでも一度全部…

RustのPyO3がstableで動くようになっていた

pyo3 0.12.3 - Docs.rs 今まではRustのnightlyでなければ動きませんでしたが,2020年6月のリリースでstableでも動くようになったようです. Release PyO3 0.11.0 · PyO3/pyo3 · GitHub PythonとRustがより使いやすくなって嬉しいです. しかしながら,少しだ…

シングルトンを実装する

シングルトン とは,そのクラスのインスタンスが1つしか生成されないことを保証するデザインパターンのことであり,アプリケーション全体で1つの共通データがあればよい,という時に重宝します. シングルトンが必要になったので作ってみました. 通常のクラ…

RustのmuslなライブラリーをAlpine Linuxで実行する

Rustで作成した共有ライブラリをLinux環境で使用するには,ターゲットをx86_64-unknown-linux-muslでビルドします.これをAlpine Linuxで実行すると,依存関係でエラーがでます.Alpine Linuxは必要なパッケージを自分で明示しないと動かないからです. Impo…

Rust 対 Python

Pythonだと100分かかる処理があったので,Rustで書き直したら4秒で処理できるようになった. その処理を実装するのに,Pythonだと10日しかかからなかったが*1,Rustだと30日かかった*2. 実装するのが大変だったが,処理速度が1500倍にパワーアップして感動…

PyO3でRustのメモリが開放されるのを確認する

Rustで作成したPython用のクラスがPythonのタイミングで自動的にメモリ開放されるかを確認してみました. 環境 Windows 10 Pro 64bit CPU : Core i3-7100U CPU @ 2.40GHz Memory : 12.0 GB rustc 1.42.0-nightly (2020-01-17) cargo 1.42.0-nightly (2020-01…

RustとPythonの連携

PythonからRustを呼び出すために,PyO3を使用します. 環境 RustでPython用のClassを作成 Cargo.toml lib.rs Pythonのlistを扱う lib.rs tuple を含む list を扱う lib.rs exceptionを使う lib.rs 環境 Windows 10 Pro 64bit CPU : Core i3-7100U CPU @ 2.40…

Rustでx86_64-unknown-linux-musl向けにビルドができない

GitLab CIで,Rustで作ったプログラムを動かすときにハマったのでまとめます. GitLab CIで,docker image rust:alpine3.10 を使ってビルドしようとしたら, error: cannot produce proc-macro for `serde_derive v1.0.104` as the target `x86_64-unknown-l…

RustとPythonのベンチマーク比較

計算速度が重要なソフトウェア開発のために,Rustを勉強しています.Pythonと比較し速度を体感するために,簡単にベンチマークしてみました. 環境 CPU 3.2GHz Core i5 Memory 24GBytes macOS Mojave rustc 1.42.0-nightly Python 3.7.4 64bit 素数判定 Carg…

コピーするときの動作

変数aに文字列「これはテストです.」があり,これを変数bにコピーする,という動作には3つの選択肢があります. aとbが同じオブジェクトを参照する そんなややこしいことはするなとエラーにする オブジェクトを複製する aとbが同じオブジェクトを参照する …