タグ

関連タグで絞り込む (262)

タグの絞り込みを解除

Rustとrustに関するigrepのブックマーク (507)

  • GitHub - tomaka/redshirt: 🧑‍🔬 Operating system

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - tomaka/redshirt: 🧑‍🔬 Operating system
    igrep
    igrep 2020/01/07
    "The redshirt operating system is an experiment to build some kind of operating-system-like environment where executables are all in WASM and are loaded from an IPFS-like decentralized network."
  • Rustのゼロコスト抽象化の効果をアセンブラで確認

    これは Rust その3 Advent Calendar 2019 の24日目のエントリです。 Rustのゼロコスト抽象化が期待どおりに働いていることを、コンパイラが出力した機械語(アセンブリコード)で確認します。 ゼロコスト抽象化とは ゼロコスト抽象化(zero-cost abstraction)とは、Rustが持つ抽象化のしくみが実行時の追加コストなしに動作することです。 ここでいう追加コストとは、メモリ使用量の増加や実行速度の低下などの、いわゆるオーバーヘッドを指します。 では抽象化とはなんでしょうか? プログラミングにおける抽象化とは、共通な部分を抽出し、その詳細をブラックボックス化することです。 これにより仕様変更に強く、再利用性の高いソフトウェアを開発できます。 Rustが提供する抽象化のしくみには、たとえば以下のようなものがあります。 ポリモーフィズム:いくつかの型に共通する

  • Rust meets Lucet:ネイティブアプリでwasm形式の動的リンクプラグインを実行する

    はじめに これはWebAssembly Advent Calendar 2019の8日目のエントリです。 (空いていたので飛び入り参加です) 12月28日にコードを書き始めて、大晦日に記事公開となりました。 この記事ではRust製アプリにwasm形式のプラグインを動的にリンクして実行する方法を紹介します。 WebAssemblyのランタイム環境にはFastlyが開発したLucetを用います。 これによりWebブラウザを通さず、Rustアプリ上で直接WebAssemblyコードが実行できます。 WebAssemblyコードはLucetのコンパイラで事前にネイティブコードにコンパイルしますので、Rustで書かれたコードに近い速度で実行できます1。 プラグインにwasm形式を採用すると、特定の言語に縛られずにプラグインを開発できるというメリットがあります。 またファイルアクセスなどの制限のかかっ

    igrep
    igrep 2020/01/03
    wasmerならとりあえず動かすだけなら簡単なのに。ARMでも動くし。
  • GitHub - rust-lang/rustlings: :crab: Small exercises to get you used to reading and writing Rust code!

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - rust-lang/rustlings: :crab: Small exercises to get you used to reading and writing Rust code!
  • Rustの(FFIまわりの安全性を考慮した)プラグインシステム - Qiita

    let plugin: Box<dyn Plugin> = unsafe { let load_plugin: Symbol<unsafe extern "C" fn() -> Box<dyn Plugin>> = lib.get(b"load_plugin")?; load_plugin() }; let name: String = plugin.name(); println!("1 {} 2 = {}", plugin.operator(), plugin.calc(1, 2)); // drop(plugin); // (2) 上の方法でトレイトオブジェクトを扱うことは(コンパイルエラーを生じないため)一見問題ないように見えます。しかし、load_plugin の戻り値型を Box にしてしまっているせいで所有権がプラグインとローダ間で移動し、(1) においてプラグイン側のアロケ

    Rustの(FFIまわりの安全性を考慮した)プラグインシステム - Qiita
    igrep
    igrep 2019/12/27
  • Rustの便利クレート - Qiita

    RustにはCargoという優れたパッケージマネージャーがあるので細かい多数の依存パッケージが問題になることはあまりありません。というより同一のアプリケーションでもパッケージを細かく分割することが推奨されています。ちょっとしたボイラープレートを取り除くような小さなライブラリも大量にあります。これらは積極的に使うべきです。 問題があるとすれば悪意のあるようなパッケージの存在ですが、これらに対処するcargo-auditやcargo-crevというツールもあります。 Rustの依存関係の信頼性を検証する (crev) - Qiita cargo crev でコードレビューをしてみたらバグを見付けた話など - 何とは言わない天然水飲みたさ 記事では 誰かがTwitterやブログで紹介するか誰かが使っているのを見る、あるいは何かのtrendingに載っているのを見るなどしない限り出会わない 日

    Rustの便利クレート - Qiita
    igrep
    igrep 2019/12/26
    Rustもメタプログラミングが得意だなぁ
  • async/await 時代の新しい HTTP サーバーフレームワーク tide を試す - Don't Repeat Yourself

    Rust Advent Calendar 2019 25日目の記事です。 tide は現在開発途中の、 Rust の async/await に対応した HTTP サーバーを構築するフレームワークです。not ready for production yet なので番にこれを使用するのは難しいかもしれませんが、いろいろな例を見てみた感じとても使いやすそうで、注目に値するフレームワークの一つです。 記事を少し読んでみたのですが、どうやら 2018 年に RustNetwork Service Working Group が開発に着手したフレームワークのようですね。現在のステータスを追いかけていないので詳しくはわかりませんが、Rust チームの方々が何かしら関わっているフレームワークということで、少し安心感がもてるかなと私は思っています。async/await が今年無事安定化されたの

    async/await 時代の新しい HTTP サーバーフレームワーク tide を試す - Don't Repeat Yourself
    igrep
    igrep 2019/12/25
  • 自作lintルールとcargo fixでRustのコードをリファクタする | κeenのHappy Hacκing Blog

    このエントリはRustその2 Advent Calendar 2019 - Qiita 25日目の記事です。 κeenです。私は既に冬休みに突入してます。Happy Holiday! 「Rustで簡単なコードの書き換えを自動化したいよなー」と思っていたら cargo fix でできるよという啓示を貰ったのでやってみました。 ↓ 啓示。リプライ元は私じゃないですけどね :) write a lint plugin that uses the diagnostics API, then just use cargo fix — Manish (@ManishEarth) December 12, 2019 なるほど。Lintプラグインとcargo fixを使えばいいようです。 コンパイラプラグイン unstable featureですがRustにはコンパイラプラグインの仕組みがあります。 pl

    自作lintルールとcargo fixでRustのコードをリファクタする | κeenのHappy Hacκing Blog
    igrep
    igrep 2019/12/25
  • RustのCLIツールにバージョン情報を出力するオプションを追加する方法 - matsu7874のブログ

    Rust Advent Calendar 2019の24日目の記事です。 バイナリファイルを配布して運用してもらうとなると、version情報の出力は必須オプションですね。 この記事ではCargo.tomlのversionを出力する方法を、RustでCLIツールを開発する際の標準的なcrateであるClapとgetoptsそれぞれについて解説していきます。 その後gitのコミットハッシュなどの追加情報を出力する方法を検討します。 Cargo.tomlのversionを表示したい場合 Cargo.tomlにはversion属性があるので、semantic versioningを信じるのであれば、この値を確認しておけば大丈夫です。 Clapを使っている場合 clap-rs/clap: A full featured, fast Command Line Argument Parser for

    RustのCLIツールにバージョン情報を出力するオプションを追加する方法 - matsu7874のブログ
    igrep
    igrep 2019/12/24
  • GitHub - rust-lang/rustfix: Automatically apply the suggestions made by rustc

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - rust-lang/rustfix: Automatically apply the suggestions made by rustc
    igrep
    igrep 2019/12/24
  • Rustのリンク集 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? Rustのリンク集です。学習や書くときに参照するページ等をまとめています。 公式ドキュメントの和訳のリストを見たい場合はRustの日語ドキュメントにまとめられています。 学習 入門 The Rust Programming Language (和訳: プログラミング言語Rust語版): 略してTRPLと呼ばれることが多いRust公式の入門書です。2020/09現在、日語版もほぼ最新の内容に追従しているようです。PDF版もあります。 実践Rust入門: 日発のRust入門書です。破壊的変更後のRust (2018 edition

    Rustのリンク集 - Qiita
  • RustのLLVM IRでプログラム分析ことはじめ - Toshihiro YAMAGUCHI’s Diary

    この記事は、Rustその2 Advent Calendar 2019の22日目の記事です。 はじめに Rustのコンパイラは内部でLLVMを利用しています。 LLVMとはいわゆるコンパイラ基盤というもので、Rustのコンパイル側でLLVMの中間コード(IR)まで生成できたら、あとはLLVM側が最適化や実行ファイルの作成までを行ってくれます。 Rust Blogの記事「Introducing MIR」の中にある画像が大変わかりやすいので、そちらを引用させていただきます。 ビルドの流れ このコンパイラ基盤の視点から言うと、Rustコンパイラはフロントエンド、LLVM側はバックエンドという位置づけです。 LLVMが様々な環境で動くプログラムを生成できるからこそ、Rustも多くの環境で動くプログラムを比較的容易に生成できるわけです。 プログラムの最適化技術についても、LLVM側でそのノウハウを洗練

    RustのLLVM IRでプログラム分析ことはじめ - Toshihiro YAMAGUCHI’s Diary
  • 並列Rustコンパイラ(β)を試そう! - Qiita

    概要: Rustコンパイラはすでに部分的に並列に動作していますが、命であるフロントエンドの並列化の実用化が進んでいます。エンドユーザーが気軽に試せる状況になったようなので紹介します。 12月7日のアドベントカレンダーの枠が空いていたので、かわりに書きました。(執筆日は12月21日です) 端的に言うと internalsのアナウンス記事に全てがまとまっています。以下のようにして「並列化対応版」と「並列化未対応版」の両方でコンパイルして、その結果を比較することができます。 コンパイル結果がおかしくないか、またコンパイル時のパフォーマンスなどを調べてほしいようなので、上記のコマンドを実行したらスレッドに投稿すると大変な貢献になると思います。 はじめに Rustコンパイラは現在、部分的に並列に動作しています。具体的には以下のようになっています。 パッケージマネージャ Cargo は、依存関係のな

    並列Rustコンパイラ(β)を試そう! - Qiita
    igrep
    igrep 2019/12/21
  • Rust で実装する Average Hash を使った類似画像検索 - Qiita

    こんにちは pon です。今日はRustで類似画像検知の実装方法を紹介します。 類似画像検知には様々な方法がありますが、今回は基礎的なアルゴリズムである Average Hash を使った類似画像判定を実装を紹介します。 実際に僕が作った個人サービスでも連写で取られた写真かどうかを判定する箇所で同じアルゴリズムが動いています。 筆者はRust初心者なのでもっと良い書き方や実装があれば教えてください! Average Hash とは 下記のような処理で画像をハッシュ化します。 上記のように画像を0と1だけの一次元配列に変換できれば、あとは0と1が一致している数が多いほど似ていると判断します。かなりシンプルなアルゴリズムですが、それなりに精度が出ます。連写で撮影された画像の判定なんかでは十分な精度が出ます。 下記の画像なんかは簡単に類似画像と判断できます。 Rust で類似画像検索を実装する

    Rust で実装する Average Hash を使った類似画像検索 - Qiita
  • wasmのEventListenerの実装をコードとともに見てみる - Qiita

    はじめに この記事は Rustその2 Advent Calendar 2019の18日目の記事です。 自己紹介などについては、以前に書いた記事を読んでみてください 今回のゴール 来、jsで実装されているaddEventListenerをwasmで登録して使えるようにするところまでを簡単に説明できればと思います。 web_sys の ライブラリを見ていく rustwasm crateである wasm-bindgen には web_sysというものがある。これはRustからDOM APIを触るためのラッパー(ライブラリ)を担っている This is a procedurally generated crate from browser WebIDL which provides a binding to all APIs that browser provide on the web. w

    wasmのEventListenerの実装をコードとともに見てみる - Qiita
  • RustによるIntel SGXプログラミングとSDKの内部実装 - Qiita

    いつもお世話になっております。この記事は[Rust Advent Calendar 2019](Rust Advent Calendar 2019)の18日目の記事です。 この記事では、Rustを使ったIntel SGXプログラミングとそのRust-SGX-SDKライブラリの内部実装を紹介していきます。 Intel SGXとは Intel SGXはセキュアハードウェアの代表例であるTEEの一種です。Intelが提供する第六世代Skylakeシリーズ以降のプロセッサに搭載しており、EPCと呼ばれる物理メモリ領域を隔離・保護しています。つまり、EPC領域へのアクセスは全てCPUがコントロールし、DMAによるアクセスもできません。(Enclaveの仮想メモリ空間のELRANGE領域がEPCmappingされます。)また、SGXにおいてはこのメモリは暗号化されており、on-chipのキャッシュで

    RustによるIntel SGXプログラミングとSDKの内部実装 - Qiita
  • ゼロからRust+WasmをFirebaseでデプロイするまでを簡単に - Qiita

    0. はじめに この記事は Rustその2 Advent Calendar 2019 19日目 の記事です。 JavaのWORAじゃないですけど、RustWebAssemblyは書いたものをブラウザで実行できるのでとても魅力的です! しかしデプロイまでとなると結構苦戦します。少なくとも筆者は。そこで一連の流れを今回の記事に自分なりにまとめることにしました。よろしくお願いします。 Wasmには Tutorial - Rust and WebAssembly というライフゲームを題材にした素晴らしいチュートリアルがあるのですが、記事はこれをかなーり簡略化したものです。英語が得意で時間に余裕がある方はこっちのチュートリアルをやったほうがいいです。 対象読者はRustJavaScriptの基的な事項とCargoの基的な役割を理解しているものとします1。また記事での使用OSは Ubunt

    ゼロからRust+WasmをFirebaseでデプロイするまでを簡単に - Qiita
  • Panic を恐れるべからず

    Panic を恐れるべからず Rust で panic! や assert! の利用を躊躇うべきでないという話。 個人の見解マシマシでお送りします。 この記事は Rustその3 Advent Calendar 2019 の18日目の記事である[0]。 TL;DR 不正な値の存在の存在を許してはいけない。 不正な値が存在できてしまう時点で、未定義動作を覚悟するくらいのつもりでいるべきである。 満たされるべき条件を満たさない時点で、プログラムの内部的な整合性は既に破綻しており、未定義動作も同然の状態である。 これ以上余計なことをする前にさっさとクラッシュせよ。 整合性破壊バグから「うまく復帰」できると思うのは甘え (極論)。 もうちょっと詳しくは 題、大雑把な指針、まとめ を参照。 いろいろな panic Rust で panic させるにも様々な方法がある。 まずはそれらを見ていこう。 O

    Panic を恐れるべからず
  • Rust で Bluetooth Low Energy デバイスと通信 (Windows10) - Qiita

    この記事はRust素人がWindows10上でBLE通信(GATTのみ)を行った記録です。 実はRustにもWindowsAPIにも詳しくないので、とりあえず通信に成功した方法を書きました。 詳しい方からのツッコミをお待ちしております。 やりたいこと RustBluetooth Low Energy(以下BLE)デバイスと通信したい。 対象OSはWindows10です。 接続対象デバイスはソニー (Sony Interactive Entertainment) から出ているtoioのコアキューブです。 Windows10でBLE crates.ioではWindows上でBLEが扱えるパッケージを見つけられませんでした。 Windows10でBLEを使うにはどうやらUWP経由で使うのが正攻法らしいです。 次はcrates.ioでuwpを探してみました。 uwpというパッケージは存在したの

    Rust で Bluetooth Low Energy デバイスと通信 (Windows10) - Qiita
  • Rustの `Arc` を読む(2): Rcを読む基本編 - Qiita

    概要: Rustの Arc 型の実装は宝の宝庫です。そこで、これを隅から隅まで解説してみます。 第2回「Rcを読む基編」では、 Arc のシングルスレッド版である Rc のソースコードを読み、 Rc の基的なライフサイクルを掴みます。 第1回 Arc/Rcの基 第2回 Rcを読む基編 第3回 Rcを読む発展編 第4回 アトミック変数とメモリ順序 第5回 Arcを読む はじめに 「Arc を読む」というタイトルですが、実際にいきなり Arc を読むと多くの関心事を同時に理解する必要があり大変です。 Arc のシングルスレッド版である Rc を先に読むことで、ある程度段階的に理解することを目指します。 まとめ Rc と Weak はどちらも同じヒープ領域に対するポインタで、ヒープ領域には「強参照カウンタ」「弱参照カウンタ」「実体」の3つが乗っている。 参照カウンタは共有書き換えの対象の

    Rustの `Arc` を読む(2): Rcを読む基本編 - Qiita
    igrep
    igrep 2019/12/17
    やっと読めた + 質問した。まだまだ続くが頑張って読もう