タグ

Rustに関するzyzyのブックマーク (164)

  • WebAssembly と JavaScript との間で自在にデータをやりとりする

    はじめに 引き続き Rust + WebAssembly + SolidJS で遊んでいます。前回は、Rust 側で作成した文字列を JavaScript 側で console.log に出力することを考えましたが、今回は JavaScript 側から何らかのデータを Rust 側へ渡すことを考えたいと思います。今回も、wasm-bindgen[1] に頼らずにやっていきましょう。 メモリの確保と管理 WebAssembly のメモリ空間は、シンプルな Linear Memory(線形メモリ)になっています。RustJavaScript との間で、「プリミティブな数値型」より大きなデータをやりとりするためには、この Linear Memory 上にデータを配置するのが良さそうです[2]。 単一のメモリバッファの確保 メモリの確保は Rust 側で実施します。線形メモリ上には WebA

    WebAssembly と JavaScript との間で自在にデータをやりとりする
    zyzy
    zyzy 2022/11/17
    面倒だがまぁ本来はbindgenが埋める奴ではあるので……
  • Announcing Rust 1.65.0 | Rust Blog

    The Rust team is happy to announce a new version of Rust, 1.65.0. Rust is a programming language empowering everyone to build reliable and efficient software. Before going into the details of the new Rust release, we'd like to draw attention to the tragic death of Mahsa Amini and the death and violent suppression of many others, by the religious morality police of Iran. See https://en.wikipedia.or

    Announcing Rust 1.65.0 | Rust Blog
    zyzy
    zyzy 2022/11/07
    ちょっと目を離した隙にGATsが!!
  • Rustのlet-else文気持ち良すぎだろ - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Rustのlet-else文気持ち良すぎだろ - Qiita
    zyzy
    zyzy 2022/11/06
    結局非同期は面倒くさい事になりがちという話になったw(streamでいいのでは? という言葉を抑えつつ)
  • グーグル、Rustで書かれたセキュアなOS「KataOS」を発表

    Googleが「KataOS」を発表した。これはオープンソースの「RISC-V」チップで動作する組み込みシステム向けに、新しいセキュアなOSを模索する初期段階の試みだ。 KataOSは「ほぼ完全にRustで」書かれているという。Rustは「Androidオープンソースプロジェクト」やLinuxカーネルプロジェクトで採用されているプログラミング言語だ。 Googleのオープンソースチームは、「KataOSはほぼ完全にRustで実装されており、Off-by-oneエラー(OBOE)やバッファオーバフローのようなバグのクラス全体を除去することで、ソフトウェアセキュリティの強力な出発点になる」と説明している。同チームは、インテリジェントなアンビエント機械学習(AmbiML)システムの構築を進めている。 プロジェクトGitHubページでは、KataOSとそれを包含するプロジェクト「Sparrow」

    グーグル、Rustで書かれたセキュアなOS「KataOS」を発表
    zyzy
    zyzy 2022/10/19
    組み込み向けOSとのこと。面白そうではある。
  • RustのサーバレスプラットフォームShuttleを使ってみる | DevelopersIO

    Introduction Shuttle は、Rustアプリを無料でデプロイ可能なクラウドプラットフォームです。 Shuttle は Rust ネイティブのクラウド開発プラットフォームで、 すべてのインフラストラクチャを管理しながらアプリをデプロイできます。 cargo shuttleコマンドでアプリケーションをパッケージ化し、 Shuttleのプラットフォームにデプロイ可能です。 そこでアプリがビルドされ、Shuttleから付与された 一意のサブドメインでアプリを公開できます。 Shuttleの主な特徴は以下になります。 Rustフレームワークのサポート cargo shuttleコマンドでアプリのコードを生成するとき、 現状では下記フレームワークを指定して生成することができます。 Axum Poem Rocket Salvo Serenity Tide Tower SerenityでD

    RustのサーバレスプラットフォームShuttleを使ってみる | DevelopersIO
    zyzy
    zyzy 2022/10/13
    小物作る用
  • https://twitter.com/mattn_jp/status/1575682437551575040

    https://twitter.com/mattn_jp/status/1575682437551575040
    zyzy
    zyzy 2022/10/01
    世に怪文書は尽きないもんだな……。
  • Announcing Rust 1.64.0 | Rust Blog

    The Rust team is happy to announce a new version of Rust, 1.64.0. Rust is a programming language empowering everyone to build reliable and efficient software. If you have a previous version of Rust installed via rustup, you can get 1.64.0 with: $ rustup update stable If you don't have it already, you can get rustup from the appropriate page on our website, and check out the detailed release notes

    Announcing Rust 1.64.0 | Rust Blog
    zyzy
    zyzy 2022/09/25
    お、rust-analyzerが組み込まれたのか
  • Rustで少しずつリバーシを作ってみた

    はじめに Rustの学習目的でリバーシを作ってみたいと思います。最初からすべての機能を作るのではなく、少しずつ機能を追加しながら解説していきます。また、できるだけよいコードを目指すために機能追加の度にリファクタリングをします。 最初の開発 仕様策定 まずはリバーシとして最低限遊べるうえで最も工数がかからなさそうな仕様を策定します。 cuiアプリ 矢印キーでカーソル移動 Wキーで白石を置き、Bキーで黒石を置き、Backspaseキーで石を取り除く Escキーでアプリ終了 とりあえずこれだけあればリバーシとして遊ぶことはできます。cuiアプリなので実行はWindowsTerminalを想定します。 実装 ソース とりあえずコードの良し悪しは置いといて動くものを作ります 実行結果 解説 cuiアプリとして実装するのでターミナルライブラリを導入します。今回はcrosstermを利用します。Carg

    Rustで少しずつリバーシを作ってみた
    zyzy
    zyzy 2022/09/23
    ちょっとずつ作る時こうやるよね、というのが分かる分かる、ってなる。
  • Cloudflare、NGINXに代えて自社開発のRust製HTTPプロキシ「Pingora」をグローバルCDNに採用。性能向上しつつCPUとメモリ消費を3分の1に

    CloudflareNGINXに代えて自社開発のRust製HTTPプロキシ「Pingora」をグローバルCDNに採用。性能向上しつつCPUとメモリ消費を3分の1に CDNプロバイダのCloudflareは、同社のグローバルなCDNの基盤として長らく利用してきたNGINXに代えて、同社自身がRust製のHTTPプロキシである「Pingora」を開発し利用していることを明らかにしました。 Pingoraはすでに同社のCDNに採用され、毎日1兆回以上のリクエストを処理し、性能向上や数多くの新機能の提供を実現しつつ、従来と比較してCPUとメモリリソースの消費はいずれも3分の1程度に収まっているとのこと。 Pingoraは現時点でコードなどは公開されていませんが、いずれオープンソース化の計画についても明らかにするとCloudflareは説明しています。 Today we are excited t

    Cloudflare、NGINXに代えて自社開発のRust製HTTPプロキシ「Pingora」をグローバルCDNに採用。性能向上しつつCPUとメモリ消費を3分の1に
    zyzy
    zyzy 2022/09/22
    nginxでやれるとは知っていたが、マジでここまでずっとやってたの凄いな
  • 「Linux」、バージョン6.1でRustを導入へ--トーバルズ氏が明言

    LinuxRustを導入するかどうかという議論は終わりを迎えた。Rustの実装は既に始まっている。Linuxの父であるLinus Torvalds氏は電子メールによる筆者との対話の中で「何かおかしなことが発生しない限り、それ(Rust)は6.1で導入される」と述べた。 Linuxカーネルの記述言語としてプログラミング言語Rustを導入するという議論は、かなり前から存在していた。Linuxカーネルの開発者らは、年次カンファレンス「Linux Plumbers Conference(LPC)2020」の場で、Linuxの新たなインラインコードでのRustの使用について検討を開始していた。また、「Android」(それ自体がLinuxのディストリビューションだ)の開発言語としてRustを支持しているGoogleは、2021年4月にLinuxカーネルへのRust導入の動きを後押しし始めていた。

    「Linux」、バージョン6.1でRustを導入へ--トーバルズ氏が明言
    zyzy
    zyzy 2022/09/21
    まぁすでに実装されつつあったし。
  • Rust for Linuxでは独自のallocライブラリを使っている

    Rustを第二言語として採用してデバイスドライバなどのモジュールをRustで書けるようにする「Rust for Linux」が近々マージされる予定だともLinus氏自身が発言しています。 そんな期待のかかるRust for Linuxですが、提案された当初は期待こそされていたものの、様々な懸念点も指摘されていました。 その1つが標準ライブラリの一部であるallocクレートの設計です。 このクレートはヒープ領域を扱うBox、Vec、StringなどRustではお馴染みの構造体を提供しています。 Rustの標準ライブラリはOSのサポートを前提とした構造体も多くあります。そのため、OSそのものを書くようなベアメタルプログラミングにおいて標準ライブラリをそのまま使うことはできません。 使えるのはcoreと呼ばれる依存関係のない全く無いライブラリがありますが、allocはOSのサポートが必要なヒープ

    Rust for Linuxでは独自のallocライブラリを使っている
    zyzy
    zyzy 2022/09/20
    面白いな。
  • Rustで型レベルプログラミング

    はじめに 通常のプログラムは実行時(ランタイム)に1 + 1など様々な計算を行う。一方でコンパイラーを持つ言語では、コンパイラーの型検査やジェネリクスなどの機構を利用して、コンパイル時にも計算を行うことができる。このようなプログラミングを、コンパイル時に検査・推論される“型”[1]に注目して型レベルプログラミングと呼ばれる。 ランタイムの計算の中にはたとえばwhile(1);のような簡単な計算で無限ループといった停止しない状況に陥いることがある。コンパイル時にできる計算でこのように無限ループに陥いってコンパイルが停止しなくなってしまったら、プログラムを実行することなく自明なエラー(型があってないとか、Rustであればfreeするタイミングが自明でないなど)を検出しようというモチベーションが崩壊してしまう。したがってコンパイル時にできる計算とはランタイムに比べて非常に限定された計算しか許可さ

    Rustで型レベルプログラミング
    zyzy
    zyzy 2022/09/05
    みんな大好きな奴
  • Rustの「うわ、swapできない」を解消するパッケージを作った

    次のようなパッケージ (クレート) を作ったので解説します。 動機 Rustには所有権があるため、普通のswapパターンが動かない場合があります。これに対応するため、std::mem::swapという関数が用意されています。 let mut x = 'a'; let mut y = 'b'; std::mem::swap(&mut x, &mut y); assert_eq!((x, y), ('b', 'a'));

    Rustの「うわ、swapできない」を解消するパッケージを作った
    zyzy
    zyzy 2022/08/23
    まぁまぁトリッキーな事してる奴
  • Linuxカーネルが難しい?Rustで実装できそう!

    「ついに、RustLinuxカーネルを実装できる!」 待ち望んだ感を出してみましたが、2年前に記事を書いてから、すっかり忘れていました。LinuxカーネルのRustサポートについての意見を求められたら、「技術的には面白いけど、実用レベルではないね。」と、上から目線の回答でエンジニアレベルの高さをアピールするつもりでしたが、2年間の間、誰にも聞かれませんでした。 近々、LinuxカーネルにRustサポートが取り込まれそう、ということで、デバイスドライバを実装してみました。 Rust対応カーネルのコンパイルまずは、Rust対応を有効にしたLinuxカーネルをコンパイルする必要があります。「カーネルってコンパイルするものなの?」という読者は、ネットの長老たちに叡智を求めましょう。「インストール直後に、メモリ削減のために不要な機能を無効にして、カーネルコンパイルしたんじゃ。」というような、太古の

    Linuxカーネルが難しい?Rustで実装できそう!
    zyzy
    zyzy 2022/07/27
    じわじわ出来る事増えてってるな
  • Rust で jemalloc を使ったら並列処理が速くなった

    Rust を使ってみたくなり、勉強のために簡単な CLI ツールを作ってみました。 そして無謀にも「どうせなら並列処理も試してみよう」と挑戦してみたのですが、ワーカースレッドを複数にするとガクっと遅くなってしまいました。 図 1 経過時間の比較 # ワーカースレッドが 1 の場合 $ time ./target/x86_64-unknown-linux-musl/release/xquo -w 1 < tmp/tmp_large.txt > /dev/null real 0m25.902s user 0m30.587s sys 0m1.637s # ワーカースレッドが 2 の場合 $ time ./target/x86_64-unknown-linux-musl/release/xquo -w 2 < tmp/tmp_large.txt > /dev/null real 0m45.006s

    Rust で jemalloc を使ったら並列処理が速くなった
    zyzy
    zyzy 2022/07/26
    並列処理やっぱ難しいな
  • nehan(縦書き文庫の組版エンジン)をWebAssembly化することで、約3倍の高速化を達成しました - anti scroll

    縦書き文庫の組版エンジンであるnehan(js製)をRustで書き換え、WebAssemblyで実行したところ、約3倍の高速化に成功しました。 現時点ですでに運用されています。 感想としては「当は10倍ぐらい速くなって欲しかったけど、そこまでは速度が出ずにトホホ…」という感じです。 3倍なら良いではないか、と思われる方もいるかもしれませんが、青空文庫の長編小説なんかは、だいたい40万字ぐらいあり、そのjsでの組版時間は(すごく遅い端末だと)27秒に達することもあります。 ちなみに手元のノートPC(メモリ8G)でjsに組版させると5秒ぐらいです。 この5秒が1.7秒ぐらいになるのは嬉しくても、27秒が9秒になっても、あんまり嬉しくないですよね。 だから、ずっと10倍を目標にしてきたのですが… まあこれから頑張って、Rust側のソースを最適化していこうと思います。 ビューアーの変更点 全ペー

    nehan(縦書き文庫の組版エンジン)をWebAssembly化することで、約3倍の高速化を達成しました - anti scroll
    zyzy
    zyzy 2022/07/25
    やっぱまとめてがっと処理する系だと効果的だな
  • PlayStationエミュレータ作りに取り組んだ

    最近暇だったのでPlayStationのエミュレータ作りに取り組みました。そのまとめをしたいと思います。 PlayStationエミュレータ作りと聞くと難しそうに聞こえますが、実はかなり分かりやすいガイドブックが存在し、これに従うことであまり詰まることなく実装できました。 結果として5日ほどで、懐かしいオレンジのロゴが見れる程度の必要最低限の実装が行えたので、紹介したいと思います。 ※テクスチャは未実装なのでロゴが赤い四角になってる The ガイドブック 以下のPDFは、CPUの仕組みの簡単な説明から入り、0からBIOSのオレンジのロゴが表示できることろまで網羅した神ガイドブックです。言語は英語Rustです。 https://svkt.org/~simias/guide.pdf 普段のエミュレータ作りで時間のかかる作業は: 地獄のデバッグ PCのタイミング調整(パイプラインがある場合)

    PlayStationエミュレータ作りに取り組んだ
    zyzy
    zyzy 2022/07/11
    新しい奴の方がアーキテクチャは綺麗なんかねやっぱ/biosないとブートできないが一般的なbiosでは対応してない、って所理解してない人がおるな
  • Rustのグラフィクス周りメモ/wgpuとその使い方

    はじめに Rustでグラフィクスプログラムをクロスプラットフォームに書く環境が、wgpuというクレート中心に揃っていて大変素晴らしいので、それについてメモします。 記事の後半では実際にwgpuを使って三角形の描画までを試してみます。 バージョン Rust: 1.62.0 wgpu: 0.13.1 グラフィクスAPI この記事ではグラフィクスプログラミングを、グラフィクスAPIを利用したプログラミングを指すものとします。 まずはグラフィクスAPIについて最初に説明をします。 グラフィクスAPI グラフィクスのAPIとは、具体例をあげるとOpenGLやDirctX的なやつです。 現代においてリアルタイムグラフィクスを利用するプログラムを書く場合、CPUだけで実行される普通のプログラムとは違い、GPUを使うプログラムを書くことになります。 GPUを使うプログラムを書くとはどういうことかというと、

    Rustのグラフィクス周りメモ/wgpuとその使い方
    zyzy
    zyzy 2022/07/06
    Bevy使ってwgpu直接触ることはあんまりないだろうけど、理解しておくのに越したことはなさそう
  • GitHub - mintlify/writer: ✍️ AI powered documentation writer

    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 - mintlify/writer: ✍️ AI powered documentation writer
    zyzy
    zyzy 2022/07/05
    ちょっと面白そう
  • Announcing Rust 1.62.0 | Rust Blog

    The Rust team is happy to announce a new version of Rust, 1.62.0. Rust is a programming language empowering everyone to build reliable and efficient software. If you have a previous version of Rust installed via rustup, you can get 1.62.0 with: $ rustup update stable If you don't have it already, you can get rustup from the appropriate page on our website, and check out the detailed release notes

    Announcing Rust 1.62.0 | Rust Blog
    zyzy
    zyzy 2022/07/01
    cargo addがstable入り