Rust

またRustでB+Treeかいたよ

Rust標準ライブラリのBTreeMapの実装コードを参考にB+Treeをフルスクラッチで実装しました。 get, insert, remove, rangeなどの基本的な操作は実装できているので、ひとまずここに記録します。 ソースコードはGitHubリポジトリに公開しています。そちらもみ…

RustでB+Treeかいたよ

2021年2月24日4月18日追記: 新しいほうがあります。 (見返すと大分筋が悪く思えてはずかしかったので再実装しました) totechite.hatenablog.com 素の二分木とかAVL木かいたりと細々と継続していた、アルゴリズムとデータ構造の学習の延長です。こいつ木しか…

AVL木かいた

以前プレーンな二分探索木をかいたことがあって、今回もそんな感じ。 totechite.hatenablog.com AVL構造体にinsert, search, deleteメソッドが生えてて、それぞれNode構造体の要素の挿入と探索と削除処理のインターフェースになるみたいな雰囲気。 なおこの…

Vcpkg-rsでCargoからVcpkgをいい感じに利用する

github.com 以前SnappyをFFIで利用するプログラムをつくった際、ビルドスクリプトを書く機会があって下のようなコードを書いた Before //build.rs fn main{ // static library(*.lib) println!("cargo:rustc-link-search=native=<path_to_vcpkg>/installed/x64-windows/lib/</path_to_vcpkg>…

データ圧縮ライブラリSnappyをRustで利用する

概要 タイトル通りです。というかTRPLのここの内容まんまです。 旧版日本語訳:https://doc.rust-jp.rs/the-rust-programming-language-ja/1.9/book/ffi.html 本家:https://doc.rust-lang.org/nomicon/ffi.html いわゆるやってみた系ですがWindowsでやるとな…

Rustで二分探索木かいた

最近C言語勉強してみたりしてアルゴリズムとデータ構造に興味持ってきたんだけど、そういや二分木かいたことないなーと思いRustでやってみた。 「二分探索木」で検索して一番上にレコメンドされたサイトみながらやったけど、正直雰囲気でかいたので自分のこ…

ドキュメンテーションテストでコードスぺニットを実行しないには

事情あってテストで実行したくないコードスぺニットが出てきた時の解決記事です。 結論 no_runアトリビュートを使う。以上。詳細は以下 doc.rust-lang.org 余談 Rustにはrustdocというドキュメント自動生成ツールがある。 markdownを書くとhtmlとしていい感…

Kotlinからネイティブコードを呼んでAndroidで動かす

totechite.hatenablog.com 前回は共有ライブラリをつくって終わりました。 今回はAndroidで動かす編です。 はじめに 環境 Windows10 Home Android Studio3.2.1 Kotlin 1.3.2 この記事のゴール 共有ライブラリをAndroid/Kotlinで利用できるようになる やるこ…

RustをクロスコンパイルしてAndroidで動かす

RustのコードがAndroidで動くとか動かないとかいう話をtwitterでみて興味が湧きました。 調べたところmozillaが記事を書いててくれてたので読みながら手を動かしてみた記事です。 読みながらといっても自分はフィーリングでやってた感が多分にあるので、英語…

rustlingsでRust筋のストレッチ

github.com 今夏からRustの筋トレをしてて、いまいち所有権やポインタ周りが咀嚼できてない感があり、 良さげなチュートリアルで手を動かしたいと色々ググってたらみつけたやつです。 なにこれ Rustの基礎ドリルみたいなの 構文が間違ってたりなんか足りてな…

crates.ioのTravisCIバッジはtravis-ci".com"じゃなくてtravis-ci".org"なので気をつけよ

はまりました 要点 TravisCIにはtravis.comとtravis.orgの二つドメインがある Cargo.toml[badges] travis-ciでcrate.ioに貼れるバッジはtravis.orgのステータスをみてる .orgから.comに移行予定らしい The Travis CI Blog: Announcing support for open sour…

RustでオレオレMarkdownパーサーつくった

github.com MarkdownのString与えるとそれっぽいHTMLのStringを吐くライブラリです。 せつめい CommonMarkの仕様を見ながらよく使いそうな機能をかいつまんで実装した。 オレオレとあるのはこの仕様を網羅してないからだ。なんか細かい挙動の仕様は気にせず…

collect()とか::<T>構文とか

collect()はイテレータを指定のコレクション型にキャストするメソッド 利用場面はこんな感じだと思う //処理をして再びコレクションとして扱う let v = vec![1u8, 2, 3, 4, 5, 6, 7, 8, 9]; let closure = ここで処理内容は重要ではない ; let result: Vec<u8> =</u8>…

イテレータの要素をフィルタリングして返すやつ

イテレータの中から条件にマッチする要素をフィルタリングして、別のイテレータオブジェクトにつめこみたいとき Rubyではselectというメソッドをつかって簡単に書くことができる array = [1, 2, 3, 4, 5, 6, 7, 8, 9] a_result = array.select { |n| n%3 == …