皆様、ごきげんよう。 わたくし、Rustaceanお嬢様の白山風露と申しますわ[1]。 本日はセバスチャン[2]マクロの作成を通して、皆様と一緒にRustの手続きマクロの作り方を学んでいこうと思いますの。 手続きマクロとは何ですの? 皆様の中にはそんな疑問を抱いている方もいらっしゃるのではないかしら? 手続きマクロは、英語の"Procedural macro"の訳語ですわ。 こちらはRustのバージョン1.15.0で安定化された、以前は"Macros 1.1"なんて呼ばれていた機能ですの。 手続きマクロが1.1なのですから、以前にもRustにはマクロが存在しておりまして、macro_rules!マクロ[3]を使って定義するのがそれになりますわ。 macro_rules!を使ったマクロ定義はトークン列をパターンマッチして置き換えルールを記述するものですが、手続きマクロはトークン列を受け取って
この記事はhey Advent Calendarの3日目です。 データチームの @komi_edtr_1230 です。 僕はRustが好きで、かつ最近はブロックチェーン周りの技術が楽しくなってきているので、そんなわけで今回のアドベントカレンダーの企画としてRustで公開鍵暗号を実装しました。 データチームはデータ分析の際には個人情報などを取り扱うこともあり、セキュリティについての知識をつけておくのはマストであるので、公開鍵暗号について理解を深めておくのは非常に有用です。 なので今回の記事ではブロックチェーンにも使われている公開鍵暗号の理論的な話、そしてその実装についてまとめていきます。 ※説明の中でちょっとだけ算数がありますので算数アレルギーの方はご注意ください。 ブロックチェーンと公開鍵暗号 ブロックチェーンとは何かというと、ネットワークのトランザクションを時系列に沿って保存していくデー
概要: Rustの型推論の大枠を説明する。 なお、筆者もRustの型推論の動作を詳細に把握しているわけではない。 短くまとめると Rustの型推論はHindley-Milner型推論ベースである。したがって後方の式や文の内容から手前の型が推論されることもある。しかし以下に挙げるようなRust独自の特徴をもつ。 型推論は原則として関数定義の中で閉じており、関数の引数型や戻り値型は推論されない。これは、関数を抽象化の境界とするための意図的なものである。この意味で「局所的」というのであれば間違いではない。 ただし、let多相を含む型推論を避ける意図もあるかもしれない。 関数呼び出しや一部の演算子などは、その部分の制約を立てる段階で、型の一部分が判明している必要がある。この動作は推論順序の影響を受ける。 トレイトによりオーバーロード可能になっている関数や演算子は、射影型を使っている場合、ボトムアッ
これは以前からつくっていたErkOSという自作OSでの経験を元にして、どうやったらRustで自作組込みOSの最初の一歩を踏み出せるか、というものをドキュメントにしたものです。 このドキュメントはこの前の技術書展の告知が来たあたりから構想を練っていて、すきま時間にちまちまと書き進めていたものですが、とりあえず、プロセスの切り替えっぽいところまでの説明を終えることができたので公開しました。 組込みでRustをやる話や自作OSを書く話というのは先駆者がたくさんいて、僕自身もそれらの資料を参考にしつつ書き進めて来ました。 一応、それらの既存のものとは差別化はしているつもりではあるものの、既存のものを完全に上回るというものではないです。内容もまだまだ足りない。 以前、RustでOSを書くプロジェクトもろもろでいくつかOSを書く際に参考になりそうなプロジェクトをまとめましたが、情報も古くなってきたので
本記事は Rust Internal Advent Calendar 2017 第10日目の記事です. 本記事では,Rust の主要な機能の一つである「マクロ」および「構文拡張」についての現状認識と,将来的な導入のために検討が進んでいる Macros 2.0 についての概略をまとめる. 記事執筆時における情報をもとに記述しているため,将来的にその仕様が(大幅に)変更される可能性があることに注意されたい. はじめにRust のマクロ・構文拡張Rust は,構文解析後に抽象構文木 (AST) を書き換える操作を注入するために マクロ (macro) および 構文拡張 (syntax extension) という仕組みを提供している. Rust のマクロは,それが構文解析後に行われるという点で C や C++ におけるプリプロセッサとは対照的なものである.マクロの仕様に関する詳細は Rust 公
!!この記事の内容はもう古いです。 詳しくはコメント参照!! こんにちは。 Rust記事です。 Rust、比較的新しい言語じゃないですか。 頑張ってチュートリアル読んで、じゃあなんかちょっとしたアルゴリズムでも書いてみるか、ってなるじゃないですか。 で、大体のちょっとしたアルゴリズムって、まぁ普通は配列とかマップとか、そういうデータ集合のデータ構造が出てきますよね。 もちろんそんなデータ構造を関数間で受け渡ししたくなるじゃないですか。 で、『Vec作って返すよりもイテレータの状態で返したほうがパフォーマンスいいんじゃない?』って場面はまぁあると思うんですよ。 やめとけ、死ぬぞ。 っていうのが今回の主旨です。 イテレータを返す関数って、どんな定義になると思いますか? ここでは適当に、Vec<i32>を2つ受け取って、それらを連結した上で3の倍数の要素のみを返したい、とか考えましょう。 たぶん
Rust v.0.11pre時点での情報です。 Rustにおけるムーブセマンティクス だいたいC++のそれと同じものと理解してるんだけど、おさらいとして。 Rustの言語セマンティクスの一つに、メモリの所有権(Ownership)というものがある。これは「このメモリ領域を自身のもの所有しているものは常に一つ(ユニーク)になる」というもので、これが保証されると、特定のメモリの領域は、所有する変数ひいては所有するタスクが決定されるようになる。原則として、各タスクごとの単位でしか、その所有権の貸し借り(borrowing)ができないため、タスクAから他の非同期に動作するタスクBの所有するメモリ領域の変更は不可能になる。タスクAからタスクBに向けてデータを送信した場合、データの所有権ごと送信されるので、結果としてデータ競合が発生しないことが保証される(もちろんArc<T>とか使ったり、生ポインタを
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く