タグ

rustに関するrightgo09のブックマーク (9)

  • RustでWasm Runtimeを実装してみた

    はじめに 最近Wasmの勢いがすごくて、ブラウザでPostgreSQLを動かせたり、DockerWasmを動かせたりできます。 以前からWasm自体に興味があって、動作原理を知りたいと思ってchibiwasmというRuntimeを実装してみました。 Rustを選んだのは、最近Rustを勉強していてそれに慣れるためです。 苦労しましたが、*.wasmがどのようにして実行されるのかを理解できたので良かったです。 今回はWasmのバージョン1の仕様を満たすように実装して、テストスイートは正常系と実行時異常系のテストは通しましたが、バリデーションなどのテストはスキップしています。 また、少しだけバージョン2の命令とWASIを実装していて、RustからビルドしたHello Worldを標準出力するwasmバイナリも動きます。 記事は実装したWasm Runtimeの概要と、実装を通して学んだこと

    RustでWasm Runtimeを実装してみた
  • Rustで作るテトリス風ゲーム入門

    書では落ち物パズルゲームとして有名なテトリス風ゲームの開発を通してRust言語を学ぶことを目的としています。 テトリスを知らない方でも問題なく読み進めることができます。 先ずは理解しやすいコードでシンプルな落ちものパズルゲームを実装し、後にリファクタリングや機能追加、自動化をしていく流れで構成されています。 テトリスにも様々な種類がありますが書ではCUIでワールドルールを参考にして完成を目指します。

    Rustで作るテトリス風ゲーム入門
  • Rustのライフタイム推論入門

    はじめに 「ライフタイムなんもわからん」ので、勉強した内容を整理しました。 Rust初心者なので、間違いがあったらコメントにて指摘頂けるとうれぴっぴです。 ライフタイムのおさらい Rustはすべての参照にライフタイムを持ちます。 明示的にライフタイムを指定する場合は'aのような、ライフタイムパラメータを使用する必要があります。 しかし、すべての参照にライフタイムパラメータを書くのは手間がかかるので、 一定のルールに沿ってライフタイムを推論しルール外のものはコンパイルエラーという仕様になっています。 ライフタイムパラメータを書ける場所は「ライフタイムポジション」と呼ばれ、次の場所で書くことができます。

    Rustのライフタイム推論入門
  • RustのTokioで非同期とグリーンスレッドを理解する

    この記事はRust Advent Calendar 2022 - Qiitaの13日目の記事です。 はじめに Rustの非同期I/Oライブラリ tokio の解説記事になります。初めに概要説明をします。その後でちょっとしたソースコードを見せながら解説をしていきます。理論より実践、実際にどう書けば良いのか知りたい人向けの記事になります。 tokioはライブラリの一つに過ぎませんが、hyper、actix-webなどのWebフレームワーク、Denoのイベントループ、Solanaのツールなどで利用されており、デファクトスタンダード的な重要なライブラリになっています。 またDiscordはtokioのスポンサーをしており、GoからRust(Tokio)で書き換えた話は小説を一冊読み終えたかのようなブラボーな興奮がありました。 ちなみに、tokioのネーミングは開発者のCarl Lercheが東京観

    RustのTokioで非同期とグリーンスレッドを理解する
  • RustのカスタムLambdaランタイムでバイナリレスポンスを扱う

    このブログ投稿ではRustで書かれたAWS Lambdaカスタムランタイムでバイナリレスポンスを扱う方法を紹介します。 背景 Lambdaインテグレーションを使えばAmazon API Gateway REST API (REST API)から動的なレスポンスを返すことができます。 私はREST API用に動的なバイナリデータを生成するAWS Lambda (Lambda)関数を実装することにしました。 Rustを学習中なので、Lambda関数をRustで実装することにしました*。 このブログはNon-Proxyインテグレーション用のLambda関数を扱いますのでご留意ください。 * 私はPythonとNode.js (JavaScript)はバイナリデータを処理するのはあまり得意でないだろうと考えています。 Goはバイナリデータ処理によい選択かもしれず、AWSも公式なGoLambda

    RustのカスタムLambdaランタイムでバイナリレスポンスを扱う
  • QUICの参考書―ゼロから作るRust言語による実装解説―Initial Packet編:MishProto

    著者が実装したQUICプロトコルサーバー・クライアントの解説になります。 今回はInitialPacketを解析してClietnHelloを受け取り解析するところまでになります。(ServerHello返すところまで実装してますが、解説は残念ながら間に合いませんでした……!すみません!)

    QUICの参考書―ゼロから作るRust言語による実装解説―Initial Packet編:MishProto
  • Rustの日付時刻処理(std::time, time, chrono) - 簡潔なQ

    標準ライブラリ 標準ライブラリには時刻を扱うための基礎となる型のみが定義されている。暦やタイムゾーンなどを扱うときは後述の chrono を使うのがよい。 std::time::Duration ... 時間。 std::time::Instant ... 体内時計の時刻。 std::time::SystemTime ... 時計の時刻。 Duration 時間はOSとは無関係なのでlibcoreに定義されている。 src/libcore/time.rs pub struct Duration { secs: u64, nanos: u32, // Always 0 <= nanos < NANOS_PER_SEC } したがってこれは0秒以上264秒未満の範囲内の時間をナノ秒単位で正確に表現できる。 InstantとSystemTime 標準ライブラリには時刻を表す型が Instant

    Rustの日付時刻処理(std::time, time, chrono) - 簡潔なQ
  • [Rust] モジュールのベストプラクティス

    Rust のモジュールシステムは私の知る中でもトップクラスによくできた仕組みだと思います。特にリファクタリングによってモジュールを再構成するときのやりやすさは他の言語では経験できないものです。例えばそれなりの規模の Python プロジェクトを回帰バグを導入せずにモジュール構造のリファクタリングするのは不可能に近いですが、 Rust ではそのような不安を覚えたためしがありません。 Rust のモジュールシステムがどういうものかは、 The book にも書かれていますし、すでに大量のガイドが書かれていると思います。しかし、どのように使うべきかについては意外なほど情報が少なく感じます。 ベストプラクティスというのもおこがましいですが、数年使ってきて Rust のモジュールシステムを使う上でスムーズに感じる方法をまとめておきたいと思います。 Rust のモジュールシステム 稿の主題はモジュー

    [Rust] モジュールのベストプラクティス
  • GoとRust - 並行プログラミング編

    はじめに こんにちはnasaちゃんです。 goroutine何も分からん!async/await何も分からん!となったのでそれぞれを比較しつつ理解を深めてみよう。という考えのもとGo, Rustの並行プログラミングの解説記事を書いてみました。 ところどころふわっとしているため、補足や指摘を貰えると大変助かります。 今回話すこと goroutineとは結局何なの Goの並行処理の仕組み goroutine(Go)とasync/await(Rust)の比較 Goのランタイム、Rustのランタイムの話 話さないこと 構文の違いについては特に触れない どちらが優れているとい言う話はしない ベースになっている思想については特に触れない TL;DR Goには標準のランタイムがあるよ、Rustではランタイムライブラリを使う必要があるよ Goはランタイムが中断再開を管理するよ、Rustではプログラマーが管

    GoとRust - 並行プログラミング編
  • 1