タグ

Rustと勉強に関するzyzyのブックマーク (10)

  • bevy/crates/bevy_ecs/src/system/query.rs at main · bevyengine/bevy

    zyzy
    zyzy 2023/05/01
    bevy使ってる時&mut queryのforのパターンマッチの挙動謎だと思ってたら、&や&mutにinto_iter実装して、そこでself.iterとかself.iter_mutとか呼んでるのかコレ。
  • bevy/bevy_legion at 129a9747bba8484c614d95e0d0719f0c6bcc5c28 · bevyengine/bevy

    zyzy
    zyzy 2022/12/29
    最初はLegion使って途中からLegionを自腹で取り込んで、そこから自腹実装でECS入れてたのか。
  • セバスチャンマクロを作って学ぶRustの手続きマクロ

    皆様、ごきげんよう。 わたくし、Rustaceanお嬢様の白山風露と申しますわ[1]。 日はセバスチャン[2]マクロの作成を通して、皆様と一緒にRustの手続きマクロの作り方を学んでいこうと思いますの。 手続きマクロとは何ですの? 皆様の中にはそんな疑問を抱いている方もいらっしゃるのではないかしら? 手続きマクロは、英語の"Procedural macro"の訳語ですわ。 こちらはRustのバージョン1.15.0で安定化された、以前は"Macros 1.1"なんて呼ばれていた機能ですの。 手続きマクロが1.1なのですから、以前にもRustにはマクロが存在しておりまして、macro_rules!マクロ[3]を使って定義するのがそれになりますわ。 macro_rules!を使ったマクロ定義はトークン列をパターンマッチして置き換えルールを記述するものですが、手続きマクロはトークン列を受け取って

    セバスチャンマクロを作って学ぶRustの手続きマクロ
    zyzy
    zyzy 2022/07/01
    手続きmacroの解説はなんぼあってもいい(特殊度高いので)かもしれない
  • Rustで作る公開鍵暗号 - STORES Product Blog

    この記事はhey Advent Calendarの3日目です。 データチームの @komi_edtr_1230 です。 僕はRustが好きで、かつ最近はブロックチェーン周りの技術が楽しくなってきているので、そんなわけで今回のアドベントカレンダーの企画としてRustで公開鍵暗号を実装しました。 データチームはデータ分析の際には個人情報などを取り扱うこともあり、セキュリティについての知識をつけておくのはマストであるので、公開鍵暗号について理解を深めておくのは非常に有用です。 なので今回の記事ではブロックチェーンにも使われている公開鍵暗号の理論的な話、そしてその実装についてまとめていきます。 ※説明の中でちょっとだけ算数がありますので算数アレルギーの方はご注意ください。 ブロックチェーンと公開鍵暗号 ブロックチェーンとは何かというと、ネットワークのトランザクションを時系列に沿って保存していくデー

    Rustで作る公開鍵暗号 - STORES Product Blog
    zyzy
    zyzy 2021/12/08
    代数学なら多少興味持てるけど楕円曲線って代数学関係ないんでしょ? と思って勝手に敬遠してたので、凄いありがたい。ただフェルマーの小定理書き方それだと意味違ってしまってるような……?
  • ちいさな Web ブラウザを作ってみよう

    ちいさな Web ブラウザを作ってみよう
    zyzy
    zyzy 2021/11/13
    うわこれはやりたいけどなかなか大変そうだ
  • Rustの型推論の概略 - 簡潔なQ

    概要: Rustの型推論の大枠を説明する。 なお、筆者もRustの型推論の動作を詳細に把握しているわけではない。 短くまとめると Rustの型推論はHindley-Milner型推論ベースである。したがって後方の式や文の内容から手前の型が推論されることもある。しかし以下に挙げるようなRust独自の特徴をもつ。 型推論は原則として関数定義の中で閉じており、関数の引数型や戻り値型は推論されない。これは、関数を抽象化の境界とするための意図的なものである。この意味で「局所的」というのであれば間違いではない。 ただし、let多相を含む型推論を避ける意図もあるかもしれない。 関数呼び出しや一部の演算子などは、その部分の制約を立てる段階で、型の一部分が判明している必要がある。この動作は推論順序の影響を受ける。 トレイトによりオーバーロード可能になっている関数や演算子は、射影型を使っている場合、ボトムアッ

    Rustの型推論の概略 - 簡潔なQ
    zyzy
    zyzy 2020/07/09
    いじっている間に気づいては忘れることがまとまってる
  • Rustで組込みプログラミングや自作OS作成をするには

    これは以前からつくっていたErkOSという自作OSでの経験を元にして、どうやったらRustで自作組込みOSの最初の一歩を踏み出せるか、というものをドキュメントにしたものです。 このドキュメントはこの前の技術書展の告知が来たあたりから構想を練っていて、すきま時間にちまちまと書き進めていたものですが、とりあえず、プロセスの切り替えっぽいところまでの説明を終えることができたので公開しました。 組込みでRustをやる話や自作OSを書く話というのは先駆者がたくさんいて、僕自身もそれらの資料を参考にしつつ書き進めて来ました。 一応、それらの既存のものとは差別化はしているつもりではあるものの、既存のものを完全に上回るというものではないです。内容もまだまだ足りない。 以前、RustでOSを書くプロジェクトもろもろでいくつかOSを書く際に参考になりそうなプロジェクトをまとめましたが、情報も古くなってきたので

    Rustで組込みプログラミングや自作OS作成をするには
    zyzy
    zyzy 2020/05/24
    入口として。
  • Rust のマクロ・構文拡張,および Macros 2.0 について | ubnt-intrepid's blog

    記事は Rust Internal Advent Calendar 2017 第10日目の記事です. 記事では,Rust の主要な機能の一つである「マクロ」および「構文拡張」についての現状認識と,将来的な導入のために検討が進んでいる Macros 2.0 についての概略をまとめる. 記事執筆時における情報をもとに記述しているため,将来的にその仕様が(大幅に)変更される可能性があることに注意されたい. はじめにRust のマクロ・構文拡張Rust は,構文解析後に抽象構文木 (AST) を書き換える操作を注入するために マクロ (macro) および 構文拡張 (syntax extension) という仕組みを提供している. Rust のマクロは,それが構文解析後に行われるという点で C や C++ におけるプリプロセッサとは対照的なものである.マクロの仕様に関する詳細は Rust

    zyzy
    zyzy 2018/04/13
    今までマクロがnightlyから出てこなかったのは、マクロの構造的にstableの条件を満たしようがないから、というのは目から鱗。
  • イテレータを返す関数を書きたいんですけど? → やめとけ。 死ぬぞ。 - Qiita

    !!この記事の内容はもう古いです。 詳しくはコメント参照!! こんにちは。 Rust記事です。 Rust、比較的新しい言語じゃないですか。 頑張ってチュートリアル読んで、じゃあなんかちょっとしたアルゴリズムでも書いてみるか、ってなるじゃないですか。 で、大体のちょっとしたアルゴリズムって、まぁ普通は配列とかマップとか、そういうデータ集合のデータ構造が出てきますよね。 もちろんそんなデータ構造を関数間で受け渡ししたくなるじゃないですか。 で、『Vec作って返すよりもイテレータの状態で返したほうがパフォーマンスいいんじゃない?』って場面はまぁあると思うんですよ。 やめとけ、死ぬぞ。 っていうのが今回の主旨です。 イテレータを返す関数って、どんな定義になると思いますか? ここでは適当に、Vec<i32>を2つ受け取って、それらを連結した上で3の倍数の要素のみを返したい、とか考えましょう。 たぶん

    イテレータを返す関数を書きたいんですけど? → やめとけ。 死ぬぞ。 - Qiita
    zyzy
    zyzy 2015/02/25
    ぎゃあ……意外なところに落とし穴が。
  • Rustで値のmoveが起こる場合 - saneyuki_s log

    Rust v.0.11pre時点での情報です。 Rustにおけるムーブセマンティクス だいたいC++のそれと同じものと理解してるんだけど、おさらいとして。 Rustの言語セマンティクスの一つに、メモリの所有権(Ownership)というものがある。これは「このメモリ領域を自身のもの所有しているものは常に一つ(ユニーク)になる」というもので、これが保証されると、特定のメモリの領域は、所有する変数ひいては所有するタスクが決定されるようになる。原則として、各タスクごとの単位でしか、その所有権の貸し借り(borrowing)ができないため、タスクAから他の非同期に動作するタスクBの所有するメモリ領域の変更は不可能になる。タスクAからタスクBに向けてデータを送信した場合、データの所有権ごと送信されるので、結果としてデータ競合が発生しないことが保証される(もちろんArc<T>とか使ったり、生ポインタを

    Rustで値のmoveが起こる場合 - saneyuki_s log
    zyzy
    zyzy 2014/08/06
    最初に気になる部分の分かりやすいまとめ
  • 1