下記に登壇した際の資料です。 https://findy.connpass.com/event/331621/ スライドはメモ書き程度のものとなっており、実際には講演の中で口頭で数多くの補足が入っています。講演の内容をまとめた記事も近日公開される予定なので、あわせてご覧ください。
Rust の HashMap の entry とは 「Rust entry」などで検索すると HashMap の entry を説明してくださっている記事は多く出てくるので、ここでは簡単な説明にとどめます。 参考: RustのHashMapはentryが便利 参考: Rustでdefaultdict マップや辞書などのデータ構造を扱う際、「あるキーの値が、あればなんらかの処理、なければ新たにデータを追加してから処理」という操作をしたいことは多いと思います。 たとえば、「キーの出現回数をマップに保存する」というケースを考えます。愚直に実装をすると、条件分岐を用いて、「マップにキーがあるか判定し、あれば処理、なければ追加」という操作を記述するかと思います。 let mut map = std::collections::HashMap::new(); let key = "one"; // m
TL;DR エラーハンドリングを行う目的 エラーハンドリングが適切に行われているとどう嬉しいか 1. エラーの発生原因が分かる 2. レスポンスステータスを型安全に出し分けることが可能になる どうエラーハンドリングを行うのか 実装方法 エラー型の定義で気を付けるべきポイント なぜanyhowを利用しないのか エラーハンドリングを行う上で持っている課題感 Drawer Growth グループ バックエンドエンジニアの中野です。今回は、私が所属するチームで gRPC API を開発する際に実践している Rust でのエラーハンドリングについて紹介していきます。 TL;DR エラーの発生原因がわかるようにエラー型を定義することが大切。 anyhow は使わずに自前のエラー型を定義して利用する。 エラーハンドリングを行う目的 そもそもなぜエラーハンドリングを行う必要があるのでしょうか。私が所属する
Last updated: Rust 1.17.0, Itertools 0.6.0. To-do: Improve formatting. Try to fix display bugs (lines through cells). Add sorting... somehow How you can help: I need feedback on what does and doesn't work. Can you understand the summaries? Do they mesh with how you perceive the methods in question work? What other information could/should be included? If you have any corrections or suggestions, yo
本書はAtCoderのコンテストにRustで参加するためのガイドブックです。 AtCoderとは? AtCoderは、オンラインで参加できるプログラミングコンテスト(競技プログラミング)のサイトです。リアルタイムのコンテストで競い合ったり、約3000問のコンテストの過去問にいつでも挑戦することが出来ます。 (AtCoderのトップページより引用) Note: 競技プログラミングはプログラミングで解決できるような問題をなるべく早く正確に解く競技です。競技プログラミングについてよく知らないが興味があるという方は、インターネット上に初心者向けの詳しい情報がたくさんありますので検索してみてください。AtCoderで開催されているものでは、大きく分けて二種類あります。 与えられる問題に対して、その解を出力するようなプログラムを書く競技 (アルゴリズム系) 定期開催のもの: AtCoder Begin
Variables and Mutability As mentioned in the “Storing Values with Variables” section, by default, variables are immutable. This is one of many nudges Rust gives you to write your code in a way that takes advantage of the safety and easy concurrency that Rust offers. However, you still have the option to make your variables mutable. Let’s explore how and why Rust encourages you to favor immutabilit
Just a few more seconds... or minutes... or hours...
お手伝いの yuki です。今日はクレートを使った小ネタです。claim という、アサーション関連の便利なマクロを提供するクレートがあります。意外と知られていない気もするので紹介しておこうと思います。 claim assert_matches! や Result の結果を判定するのに便利な assert_ok! 、Option の結果を判定するのに便利な assert_some! 、非同期処理周りで用いられる Poll の準備完了判定を行える assert_ready! などの便利なアサーションに関連するマクロを提供するクレートです。シンプルながらも強力なクレートです。 下記から利用することができます。 github.com 今回はテスト用として説明しますが、もちろん本流の処理にも利用できます。リリースビルド時には挿入されない debug_* で始まるマクロも、すべてのマクロに対して提供さ
はじめに 最近Wasmの勢いがすごくて、ブラウザでPostgreSQLを動かせたり、DockerでWasmを動かせたりできます。 以前からWasm自体に興味があって、動作原理を知りたいと思ってchibiwasmというRuntimeを実装してみました。 Rustを選んだのは、最近Rustを勉強していてそれに慣れるためです。 苦労しましたが、*.wasmがどのようにして実行されるのかを理解できたので良かったです。 今回はWasmのバージョン1の仕様を満たすように実装して、テストスイートは正常系と実行時異常系のテストは通しましたが、バリデーションなどのテストはスキップしています。 また、少しだけバージョン2の命令とWASIを実装していて、RustからビルドしたHello Worldを標準出力するwasmバイナリも動きます。 本記事は実装したWasm Runtimeの概要と、実装を通して学んだこと
はじめに こんにちは。株式会社エモーションテックのよしかわです。今回は Rust の tracing クレートを使った Actix Web 用のカスタム JSON ログの実装例を紹介いたします。 この記事は エモーションテック Advent Calendar 2022 の 10 日目の記事です。 動機 今回の実装を行った目的の一つは、Rust で書かれた API サーバーで文脈情報つきのログを出力する方法について学ぶことです。ここでは文脈情報としてどの API が呼ばれたか(例: URL)や誰に API を呼ばれたか(例: ユーザーエージェント)といったものを想定しています。ログにこうした文脈情報をつけることは難しいわけではありません。例えば log クレートを使って出力するメッセージに文脈情報も埋め込んでしまう実装もあり得ます。しかしそのような実装だと関数呼び出しの階層が深いとき文脈情報
イントロ はじめまして。ペイルドの中川です。 弊社はサーバーサイドの開発に Rust を採用しています。 運用監視ツールには Datadog を採用しているのですが、Datadog 公式の SDK には Rust が含まれていません。なんてこった。 この記事では Rust で Datadog と連携する方法を紹介します。記事中に登場するソースコードは GitHub で公開していますので併せてご覧ください。Rust のバージョンは執筆時点(2023 年 4 月)で最新の 1.68.2 を使いました。 github.com OpenTelemetry Datadog は OpenTelemetry1 形式のテレメトリデータ(メトリクス、ログ、トレース)に対応しています。 OpenTelemetry が Rust 用 SDK を提供してくれているのでこれを使います。 次の axum を使ったシン
RustのGeneric associated types(GATs)が1.65.0でstabilizeとなりました。 ということで本記事では、GATsについての各種解説等を読みながら、GATsの理解を少しでも進めることを目指します。 Rustのversionは1.69.0を利用しました。 The push for GATs stabilizationまずは、2021年8月Rust blogの記事The push for GATs stabilizationから読んでいきます。 そこでは、GATsの具体例として以下のcodeが挙げられています。 trait Foo { type Bar<'a>; } 今までは、traitのassociated typeにはgenericsやlifetimeは書けなかったのですが、GATsによって書けるようになりました。 以前、Rustのlifetimeとv
Share Rust Types With TypeScript for WebAssembly in 30 Seconds In this article 💡 We'll learn why the official Rust and WebAssembly toolchain is not sufficient for TypeScript. 🤹 I'll show you how to auto-generate TypeScript definition with minimum change in your Rust code. 🧪 We'll refactor a real world WebAssembly library on npm together. Let's go. The Typing Problem with wasm-bindgen Generating
I will no longer be speaking at RustConf 2023 about A (Possible) Future for Compile-Time Programming. What? The decision happened after I was reached out to by RustConf 2023 organizers in a call on May 26, 2023 around 11:45 AM US Pacific Time. The call was about taking my talk and degrading it from a “Keynote” to a “Regular Talk”. I figured this was for scheduling or timeslot reasons or because th
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く