Today we’re looking at the rust borrow checker from a different perspective. As you may know, the borrow checker is designed to safely handle memory allocation and ownership, preventing accessess to invalid memory and ensuring data-race freedom. This is a form of resource management: the borrow checker is tracking who’s in charge of a chunk of memory, and who is currently allowed to read or write
実用的なプログラミングにおいて、名前と概念を結びつける「束縛」はほぼ必須の概念である。しかし、その言葉には大きな誤解と混乱が根付いていた。 事の発端となったのは「Haskellにおいては、変数は値を代入するものではなく、値に束縛するものである」という議論である*1 *2。しかし、これは大きな誤解を孕んでいる。言葉の定義に立ち返ってその誤解を解いていこう。 束縛とバインディング 実は「束縛」には二つの意味がある。一つは、数学的な意味での変数の束縛*3、もう一つは、識別子と実体の結合という意味での束縛*4だ。 前者は変数の導入と言い換えることもできる。ラムダ計算におけるラムダ抽象と変数の関係もこれである。重要なのは、これはあくまで変数とそれを導入する抽象の関係であり、変数と実体の関係ではないことだ。 「AをBに束縛する」と言った場合後者で、プログラミングの文脈ではこちらを耳にすることが多いだろ
25 Oct 2018 Parsing logs 230x faster with Rust Perhaps surprisingly, one of the most challenging things about operating RubyGems.org is the logs. Unlike most Rails applications, RubyGems sees between 4,000 and 25,000 requests per second, all day long, every single day. As you can probably imagine, this creates… a lot of logs. A single day of request logs is usually around 500 gigabytes on disk. We
はじめに ドワンゴではniconicoの配信系サービスのバックエンドで利用するために、Frugalosという名前の分散オブジェクトストレージを開発しているのですが、この度OSSとして公開することとなりましたので、この場を借りて軽く紹介させて貰います。 FrugalosはRustで実装されており、現時点では以下のリポジトリが公開されています: raftlog_protobuf: raftlogへのProtocol Buffersサポートの追加 “Frugalos"って何? “Frugal object storage"の略です。 “frugal"は日本語では「倹約な」や「節約する」といった意味となり、「読み書き性能を犠牲にせずに、膨大な数のBLOB(Binary Large OBject)を、容量効率良く保持する」ことを目指して開発されているオブジェクトストレージです。 提供されている機能は
以前から WebAssembly を使ってレトロシンセ音源をエミュレートしてブラウザーで発声させてみたいと思っていたのですが、Rust が WebAssembly に直接コンパイルできるようになったのをきっかけに挑戦し、なんとか動かすことができました。 以下からデモを見ることができます。 🙂 WebAssembly 非対応の IE を除く、PC とモバイルのほとんどのブラウザーで動作すると思います。(なお、iOS 11 Safari と Android Chrome はサンプリングレートを無視してしまう処理があるようで高め・速めで再生されています。iOS 12 Safari では修正されたようです。) https://h1romas4.github.io/rust-synth-emulation/index.html ソースコードも github にコミットしました。 https://g
Learn Rust and WebAssembly Read the Rust and WebAssembly documentation to learn how to design, develop, test, debug, profile, and publish Rust and WebAssembly libraries and applications. Get Involved Join the Rust and WebAssembly domain working group! Help us craft the future of Rust and WebAssembly. Blog Posts Mar 28, 2019 This Week in Rust and WebAssembly 15 Mar 26, 2019 Gloo Update: Onion Layer
Table of Contents はじめに 経緯 二週間前にRustでツールを作り始めた記事を書きました。 本文にもある通り、シングルバイナリを作成できどこでも実行できると思ったのが理由の1つです。 しかし世の中はそう甘くありませんでした。 何が起きたかは次章で説明します。 筆者の環境 WindowsをホストOSとして、VMで16.04.5 LTS (Xenial Xerus)を使っています。 Rustのコンパイルも上記VMのUbuntu上で行っています。 筆者のスペック 先の記事にある通り、C系やローレイヤーの知識に疎いです。 そのおかげで随分と苦戦しました。 対象ツール 今回対象としたのは以下のツールです。 Miroirをお使いでなければ利用価値は全く無いと思いますので参考程度に.. 普通にビルドしてはどこでも実行できない 有識者の方なら当たり前の話なのですが、私の中ではシングルバイ
In the past few months, and in particular in the past two weeks, I’ve gotten a number of people asking me the question: Is Rust a functional programming language? This makes sense: I’m a big advocate of functional programming, I work at a company with FP in its name, my primary programming language is Haskell, and yet I use and enjoy Rust. So is Rust consistent with everything else in my FP-centri
Update: Rust Tooling for Workers has improved significantly since this post. Go here to check out Wrangler, our new Rust+Workers cli The Workers team just announced support for WebAssembly (WASM) within Workers. If you saw my post on Internet Native Apps, you'll know that I believe WebAssembly will play a big part in the apps of the future. It's exciting times for Rust developers. Cloudflare's Ser
Pijul is a free and open source (GPL2) distributed version control system. Its distinctive feature is to be based on a theory of patches, while still being fast and scalable. This makes it easy to learn and use, without any compromise on power or features. Commutation In Pijul, independent changes can be applied in any order without changing the result or the version's identifier. This makes Pijul
先日の記事の続き。 RustでLinuxのinput eventをダンプする (bindgen使用) ビルド時にbindgenするように変更 bindgen users guide のチュートリアルに従って、cargoでビルドするときにbindgenを実行するようにbuild.rsを作りました。 そのソースコードはgithubに置きました。 クロスビルドに対応できるようにbuild.rs を修正 ARM64向けにクロスビルドするとbindgenでエラーが発生するようになりました。 クロスビルドのときには参照するシステムのヘッダファイルもそれに応じて変える必要がありますが、それがbindgenに伝わっていないのが原因です。 環境変数 SYSROOTが設定されている場合には、それを--sysroot=に反映させるようにbuild.rs を書き直しました。 extern crate bindge
In theory u128 and i128 should match the ABI of __int128 but they don't right now due to a bug in llvm. Similarly we could probably define Rust's char to match C++'s char32_t but so far no one has cared enough to look into the details and champion the issue. Note that in practice primitives are usually aligned to their size. A smaller alignment is often an indication that the type is software-emul
I came across some interesting benchmark results recently, and I figured I'd give a short writeup. The benchmark is based on a subset of wc's functionality - we wish to traverse a directory, ignoring hidden files, and printing out the number of lines in each file as well as a total. Our ATS implementation is taken from the documentation, with a couple small changes to make it faster. %{^ #ifdef AT
Recommended reading: ownership, unsafe Rust Introduction🔗 This blog post covers my adventure in fixing a bug in the Rust bindings for the Capstone C library, a disassembly library that supports several CPU architectures. The capstone-rs crate attempts to provide a Rusty, object-oriented interface. You do not necessarily need previous experience in C code or foreign function (FFI) bindings to unde
Borrow checking, escape analysis, and the generational hypothesis Home Blog 2018-10-10 There’s a fairly common argument that pops up on programming forums, and it’s about the nature of what “garbage collection” means. In the research world, this is what GC means: Garbage collection (GC), also known as automatic memory management, is the automatic recycling of dynamically allocated memory(2). Garba
自作クレートを公開するにあたり気をつけている点をまとめておきます。自己流なものが多いので、問題がある場合はコメントなどで指摘してもらえると助かります… html_root_url を設定する cargo doc には依存しているクレートのドキュメントを生成しない --no-deps というオプションがあります。これを用いた場合、外部クレートで定義された構造体やトレイトへの定義へのリンクはそのクレートに指定された #![doc(html_root = "...")] という属性の値を使用します。この値が設定されていない場合は正しくリンクが設定されないため、クレート作者はこの属性を設定するよう努めるべきです。 指定する URL は自由ですが、通常は docs.rs で生成されるドキュメントのリンクを貼っておくのが良いでしょう。 docs.rs を用いる場合に限りますが、指定する URL に含ま
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く