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
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? Rust 1.39.0 でasync/.awaitが安定化され、今後はサーバーサイドの用途で Rust が採用されるケースが増えそうですね(期待を込めて)。 そのなかでも今回は、マイクロサービス指向で作成されたプロジェジェクトで採用されることが多い gRPC にフォーカスし、Rust の gRPC ライブラリである hyperium/tonic について紹介します。 Rust の gRPC ライブラリ Tonicのことを紹介する前に、他の gRPC ライブラリについても軽く触れておきます。 2019 年 12 月時点で、grpc-eco
はじめに この記事は Rustその2 Advent Calendar 2019 15日目 の記事です。小ネタになります。 以前、macOS 上の Rust でしっかりとスタティックリンクした時、どれだけバイナリがスリム化できるかにトライしてみましたが、固定文字列とシステムコール2発だけなのに、4,096バイトを消費してしまい、いまいち不満が残りました。だって、"Hello, World!\n\0" で15バイト、システムコール2発で2ワード、計50バイトぐらい、リロケーション情報が色々ついても、3桁バイトにまでいかずとも。もちろん、PC や Mac ではメインメモリが GB が当たり前ですから、そんなことを気にしてもしょうがないので、ターゲットを変えてみることにしました。けれども、組込系はやっている人が多そうだし... 良いターゲットはないかなぁと github 上をぷらぷらしていたら、S
はじめに VSTとはDAWなどの音楽ソフト上で動くプラグインの規格の一つです。 シンセサイザーやオーディオフィルターなどを作ることができて、DAW上から簡単に利用することができます。 画像はVSTHost上で動いている有名なシンセサイザープラグイン、Serum 余談ですがSerumは有料ソフトで、2万円位します。結構いい市場なのでは? この記事ではRustでGUI付きのVSTプラグインを作っていきます。 各OSのAPIの仕様が関わってくるため、本記事の対象プラットフォームはWindowsのみです 他のプラットフォームで成功した方はコメント下さい vst-rs vst-rsを使うとRustでVSTプラグインを作ることができます。 ここで説明すると長くなってしまうので、簡単な使い方をCreating a simple synthesizer VST plugin in Rustで各自参照してく
概要 dereferenceable_globally NonZeroUXXのLower 空無限ループ 終わりに 概要 この記事はRust Advent Calendar 2019の12日目の記事として書かれました。 qiita.com 遅刻してしまった...すいません(最悪)。 言わずもがなRustはLLVMをバックエンドに持つ言語です。 なのでバグがLLVMの最適化のせいだったりします。有名な例はnoaliasとか無限ループとかです。この辺りは定期的(2ヶ月一回くらい?)にTwitterとかで話題になりますね。またRustでの強い制約がLLVMにおける意味とのギャップで弱く表現せざるを得なかったりもします。そんな感じのこと少しだけ掘り下げて、RustのIssueとかLLVMのPhabricatorから幾つかまとめてみます。怪しいこと言ってたら教えて下さい。 dereferenceabl
Rustその3 Advent Calendar 2019 この記事は、Rustその3 Advent Calendar 2019 5日目の記事です。 4日目 -> cargo publishできないRustプロジェクト 6日目 -> [Rust] IntegerとFloatの両方でmaxが必要なとき はじめに C/C++/Fortranなどのプログラミング言語の経験がある人がRustに触れたときに、次のような疑問は誰しも感じると思います。 Rustの文字列はなぜstrではなく&strなの? Rustのスライスが何を指しているのかよく分からない 実際、C++における部分文字列の参照はstd::basic_string_viewという普通のクラスで表現されていますし、配列に関してもvector_viewという外部のライブラリまで存在しています。 そもそも参照型とは何らかの変数への参照を表すものな
誰? 名前: r-chaser53 GitHub: https://github.com/rchaser53 Twitter: https://twitter.com/rChaser53 所属: LINE株式会社 言語開発とか好きな人(歴は1.5年くらい) rustfmtのお手伝いを今年はしてます 概要 Rustで作成したJVMをwasm-packを使ってブラウザで動かした 何も使わないで動かすよりはるかに楽だった ついでに見つけた便利なmoduleの紹介 JVM作成については別スライドをどうぞ 今回の成果物 Rust製JVM。wasmとしてブラウザで動かすこともできる https://github.com/rchaser53/rust-jvm wasm-packとは wasm-bindgenを使って生成したwasmファイルにRustとJavaScriptのFFIのランタイムを追加するビル
以下補足です。 効率 トレードオフを強調するために、相対的な効率を星の個数で表しています。しかし、効率をことさら気にする必要はありません。他の多くのプログラミング言語では、Rustでいうところの Arc<Mutex<T>> をデフォルトで使っているような状況です。要件にあったものを使うことが大事です。 ライフタイム 「短命」とついているものは基本的に、ある関数のスコープに紐付いた形でしか使えません。特に慣れないうちは、これらの型を構造体に入れて使うのはやめておいたほうが無難でしょう。 例外として、グローバル変数 (static, lazy_static!) は &'static 参照として扱うことができます 共有 「ポインタ」と聞くと、参照先が共有されている様子を思い浮かべる人が多いと思いますが、所有権の概念のあるRustでは必ずしもそのイメージは当てはまりません。 &mut T と Bo
この記事は Rustその3 Advent Calendarの10日目の記事です。空いていたのでちょっとしたツールをご紹介します。 Rustのマクロについて Rustのマクロは、Rustの他の要素と比べて変わった文法なので最初は戸惑うかもしれません。しかし、やっていることは「どういう構文にマッチするのかを定義する」「その構文がコンパイル時にどう変換されるか定義する」の2つです。このうち、前者の「どういう構文にマッチするのか」がイメージしやすくなれば、マクロを書きやすくなるでしょう。というわけで、この部分を可視化します。 railroad railroadは、その名の通り鉄道の線路のようにマクロの構文を可視化してくれます。ありがたいことに、Webブラウザで動くデモがありますので、以下から使わせてもらいます。 試しに、頻繁に使うマクロであるvec!を可視化してみます。vec!の定義は以下の通りで
Rust Advent Calendar 2019 10日目の記事です。 本記事では、拙作の FUSE ライブラリである polyfuse を紹介します。 FUSE の概略 FUSE (Filesystem in Userspace) とは、ユーザ空間でファイルシステムを実装するための仕組みです。 本来ならカーネルモジュールとして実装する必要があるファイルシステムを(ユーザ空間で動作する)実行ファイルとして動作させることで、ファイルシステムを簡単に作成・配布することが出来るようになります。 同様の仕組みとして、NetBSD の puffs や、 WSL が Windows 側に rootfs を公開するためのプロトコルとして採用したことでも知られる 9P などがあります。 FUSE を用いたファイルシステムの実装として、SSH 経由でネットワーク越しにディレクトリをマウントする SSHFS
概要: Rustの Arc 型の実装は宝の宝庫です。そこで、これを隅から隅まで解説してみます。 第1回「Arc/Rcの基本」では、実際に Arc のソースを読む前に Arc/Rc の使い方を解説します。 第1回 Arc/Rcの基本 第2回 Rcを読む基本編 第3回 Rcを読む発展編 第4回 アトミック変数とメモリ順序 第5回 Arcを読む はじめに Arc<T> はRustの基本的な型のひとつですが、 Box<T> のようにコンパイラに特別扱いされているわけでもなく、実装も比較的コンパクトです(コメントやテスト、安定性に関する指示などを除いて500LOC程度) その一方で Arc は並行性制御や Deref, ドロップチェッカー, Unpin, Layoutの扱いなどRustをよりよく理解するための題材を多く含んでいます。そこで本記事では Arc<T> の実装を読んでいきます。 とはいえ、
Rustでバイナリをパースする方法はいくつかありますが、nomでやってみたら以外と簡単だったので記事にします。 nomとは GitHub: https://github.com/Geal/nom Rustのパーサコンビネータライブラリのデファクトスタンダード的な存在です。昔はマクロ中心の記述が中心で、マクロに慣れないと辛いところもありましたが、バージョン5からimpl Traitを活用した関数中心の記述に変更されました。マクロを使わないと書けないところも残っていたりしますが、かなり簡単にパーサコンビネータを使うことができます。文字列だけでなくバイナリのパーサを書くのにも使えます。 目標 バイナリを読む練習として、今回は仕様がかなり簡単な部類のバイナリファイルであるbmp(Windows Bitmap)ファイルを読むことを目標とします。フォーマットはWikipediaを読めばわかります。bm
κeenです。このエントリはRust Advent Calendar 2019 - Qiita 8日目の記事です。 昔書いたRustのコードをもけもけ漁ってたら、しばらく前にRustでCPS変換しようとしてた下書きをたまたま発見しました。 当時はコンパイラの制約で簡単には書けなかったのですが今見ると簡単に書けるようになってたのでRustも進歩してるね、という確認をしたいと思います。 CPS変換とは CPS変換とは、プログラムを継続渡し形式(Continuation-Passing Style)に変換することです。 じゃあCPSとはというと、雑に言えば「ネストした関数の呼び出し禁止」の形式です。 …ちょっと雑すぎますね。 プログラムのコントロールフロー(if 式や 関数呼出)を陽に受け取った継続で記述する形式です。 この形式はよくコンパイラの内部表現なんかに使われます。 変数束縛の右側に i
これは Rustその3 Advent Calendar 2019 — Qiita の8日目の記事です。 Rustのx86_64-unknown-linux-muslターゲットを使って、libc(標準Cライブラリ)やSQLiteなどの外部ライブラリに静的リンクしたバイナリを作成する方法を紹介します。 こうして作ったバイナリは、Alpine Linuxを含むさまざまなx86_64 Linux環境で実行できます1。 またUbuntuやCentOSなどの一般的なLinuxディストリビューションを使っている場合でも、実行環境にSQLiteやOpenSSLなどを別途インストールしなくてすみますので、バイナリの配布が楽になります。 さらにこれらを極小のDockerイメージに入れることで、Webアプリケーションなどではデプロイが容易になるかもしれません。 以下の内容を2回に分けて説明します。 今回:Alp
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く