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

Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 🦀はじめに🦀 はじめまして、🦀カニさん🦀です。 プログラミング歴2年目の趣味グラマーで、去年はDataCampでひたすらPythonをやっていました。 しかし途中で飽きてしまいRust入門🦀 現在はRustの学習とその備忘録も兼ねて「Rust入門」というブログを運営しています。 ブログは海外製の優良テーマを買ってマニュアル通りに設定し、Github から CloudFlare Pages に自動デプロイという感じです。 なので、JavaScriptに関しては全くと言っていい程理解していません。HTMLとCSSもチートシートが無
Rust入門者とif letとの出会い if let文は公式チュートリアルでは、パターンマッチングの章で初登場します。入門者はmatchによるパターンマッチングを学んだ後で、「値が一つのパターンにマッチした時の動作だけを書きたいなら、matchの代わりにif letという記法を使えば短く書けるよ」と習うことになります。 //https://doc.rust-jp.rs/book-ja/ch06-03-if-let.htmlから引用 // 値がSome(3)の時だけコードを実行するmatch: let some_u8_value = Some(0u8); match some_u8_value { Some(3) => println!("three"), _ => (), } // if letを使うと短く書くことができる: if let Some(3) = some_u8_value {
RomeプロジェクトのJavaScriptフォーマッターがリリースされました。 rome.tools ちょうどPrettier を使っているプロジェクトがあったので比較してみました。 本当にめちゃくちゃ速い。 prettierで8秒掛かるのが0.5秒とかで終わる。— ぎゃばん@手洗い (@ledsun) April 6, 2022 prettierを速く動かしたくてparallel-prettierに.prettierignoreを読む修正を加えて動かして速くなったか - Qiita でNode.jsのまま並列化したparallel-prettierを試したときは やったね1.25倍速くなりました! でした。 それと比べてるとRomeは10倍以上速くなっています。 驚異的です。 JavaScriptパーサーやASTを扱うライブラリーなどの資産がないrustで書き直すのは、大変な労力に思えま
はじめに この記事は下記イベントでの私の発表を、スライドだと、コードやコンパイラのエラーメッセージ、リンクのテキストが取得しづらかったり、当日、時間が足りなくて省略した部分も色々とあったため、別途、文字に書き起こしたものになります。 「コンセプトから理解するRust」という本 初期のLearning Curveがキツめと言われているRust、私も七転八倒しながら、あれこれとキャッチアップをしている中で、この本は、めちゃくちゃ見事な構成と言葉で説明してくれているな〜と、感銘を受けながら読みましたし、表紙の「エラーメッセージをよく読み、所有権の感覚をつかみ、豊富な型に精通し、トレイトの実体を捉えられれば、Rustはもう怖くない」は至言ではないかと感じます。 ここでは、「第5章 Rustの抽象化プログラミング」のサンプルコードを元に、"エラーメッセージをよく読む"、"型に精通する"、"トレイトの
動機 The Rust Performance Book という書きものを見つけました。いろいろなパフォーマンス改善テクニックが書かれているわけですが、実際に普段書いてる Rust コードの中で一体何がパフォーマンスに与える影響が大きいのか?という点が気になってベンチマークを取ってみました。 今回パフォーマンスを計測するプログラムはビットマップ画像(1600px x 1200px)をグレースケールに変換する処理です。I/O のパフォーマンスは無視します。&[u8]から RGB をそれぞれ 1byte ずつ(合計 3bytes)取ってきて、それをグレースケールの 1byte に変換してVec<u8>にする時間を計測します。イメージとしては下記のような関数です。 // source が カラーのビットマップ画像のデータ fn sample(source: &[u8]) -> Result<Ve
この記事は、Supershipグループ Advent Calendar 2021の17日目の記事になります。 はじめに この記事ではeBPFを活用してLinuxカーネルにフック用プログラムを注入することにより、ネットワークパケット処理を拡張する例を示します。 その実装にあたり、Rustとlibbpfの統合を行うlibbpf-rsを使った開発体験を記したいと思います。 TL;DR libbpf-rsによってRustとeBPFを組み合わせたプログラムのコンパイルやロード処理の手間は省けるようになります。実際、システムコールの呼び出し部分はほとんど意識する必要がありませんでした。 一方でeBPFプログラミングで特に苦労したのは以下の点でした。 デバッグとテスト つまりeBPFプログラミングにおいて周辺的な問題がツールによって解決されていき、よりプログラムの機能そのものの問題に時間を割くことができ
概要 この記事ではRust初心者が驚いたり混乱させられたりするようなRustの文法を10項目集めてみました。 これらの項目は知らないと理解できなかったりコンパイルエラーに悩まされたりする一見厄介なものたちなのですが、そのような直感的でない挙動を敢えてさせているところには重要な意味が込められていることが多いです。 そのため、これらの項目を通してRustが目指しているものや実現したい機能の一部を垣間見ることができると思います。 1. デフォルトの代入がムーブ Rustの最大の特徴が所有権の概念であることは有名ですが、それでもなお初心者殺しになるのがムーブです。 以下のコードがコンパイルエラーになるメジャーな言語は現状Rustくらいしか無いでしょう。 let mut a = vec![1, 2, 3]; let mut b = a; // ここでaの持つベクタの所有権がbにムーブされ、aは無効に
Rustを使っていくうちにやらないほうがいいと気づいたことを挙げていこうと思います。 少なくとも自分は『プログラミング言語Rust』を読んだだけでは以下で説明することに気づけませんでした。 v: Vec<T>を&[T]に変換するためにいちいちv.as_slice()や&v[..]と書く 解説 Vec<T>が[T]へのDerefトレイトを実装しているので、v: Vec<T>は&をつけるだけで必要に応じて&[T]に変換されます。(参照: TRPL, 1st ed, Derefによる型強制) Vecか&[T]どちらであるべきかコンパイラが判断できない文脈では、スライスがほしい場合明示的に&v[..]などと書いてやる必要がありますが、基本的には適当に&をつけるだけで問題ありません。 Vecへのイミュータブルな参照を関数の引数にする 例 解説 イミュータブルな場合、スライスとVecの違いはcapac
はじめに rust-unofficialというところの出しているRust Design Patternsの日本語訳が見つからなかったため、理解のために翻訳してみました(分からないところは DeepL に頼りました)。 今回は Introduction と Idioms の部分です(デザインパターン・アンチパターン編の翻訳はこちらにあります)。 FFI の部分はよく分からなかったためスキップしています。 不慣れなため翻訳間違いなどある可能性が高いです(教えていただきたいです)。 以下から本文です。 Introduction デザインパターン プログラムを開発するとき、私たちは多くの問題を解決しなければなりません。プログラムは問題の解決方法と見ることができます。また、プログラムは多くの異なった問題の解決方法の集まりと見ることもできます。これらの解決方法の全てが一緒に大きな問題の解決へと働きかけ
Greenやyentaなどを運営する株式会社アトラエという会社でエンジニアをしているタガミショウゴです。弊社ではほぼ毎月LT大会を開き、事業部内外でエンジニアの情報共有をしています。そのなかで個人的に感じた「LT慣れするためのポイント」みたいなことをまとめます。 是非みなさんのご提案・ご意見もコメントにていただけると嬉しいです! ほとんどのLTは雑談 さて、エンジニアという職業柄、社内外でLTや大きなカンファレンスなどで登壇する機会が多いですよね。世間一般を見渡しても、ここまで"個人として"人前で話す機会が多い職業は珍しいのではないかと思います。 とはいえ、全てのエンジニアがLTが得意なわけではなく、日頃からLTに慣れているのは1,2割くらいなんじゃないかなと感じています。残りの大多数は 人前で話すのが苦手 資料作るのが面倒臭い わざわざ話すようなネタがない アウトプットしてマサカリ投げら
-tでTemplate FlowSetのフィールドを設定し、-oでOptions Template FlowSetのフィールドを設定しています。 Netflow Collectorの実装 Rustの tokio を用いて非同期で動くNetflow Collectorを実装していきます。Rustを使用する理由として、まず第一に素早くpacketを捌く性能がCollectorに求められるからです。さらにテンプレートベースのプロトコルでは、テンプレートをスレッド間で共有するのでデータ競合がおきないことが保証されているRustを選択しました。 本記事のコードは、main関数などの重複を覗いて一つのfileに上から順にコピペしても動くようになっています(適宜crateは追加してください)。 FlowMessage 以下のように、packetをparseした結果を格納する構造体を定義します。 (多くの
概要: 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 1.39 からは async/await が安定化され、非同期処理がぐっと書きやすくなりました。 Futureトレイトを自分で実装したり、loop_fnで所有権を取り回したりmap_errでエラー型を魔改造したり することはもうありません! おもむろに await していきましょう この記事は Rust 1.46 と tokio 0.2.22 に基づいています Rust での非同期処理 Rust では、非同期な計算は Future トレイトとして抽象化されています。JavaScript などでは Promise と呼ばれるものです。以前は非同期処理を扱うときに、場合によっては Future トレイトを実装する必要があることがありましたが、現在では async キーワードを使うことで簡潔に記述することができるようになりました。 async キーワードを使い、 非同期関数 async
自己紹介 趣味でRustをやっている Twitter https://twitter.com/hatookov Github https://github.com/hatoo SoundCloud https://soundcloud.com/gfyxxqjngkze ネットワーク初心者なので誤りがあるかも知れません Rustで高速に大量のHTTPリクエストを投げる モチベーション oha HTTPロードジェネレータ Apache Bench(ab)みたいな tui-rsでリアルタイム表示 とにかくいっぱいリクエストを投げたい! ベンチマーク環境 WSL 2 Ryzen 3950x 今回はtokio https://github.com/hatoo/rust_http_benchmarks ベンチマーク雛形 ベンチマーク系のライブラリは複数回実行してしまい、時間がかかるのでやめた ざっくり
Repos: https://github.com/usagi/rust-memory-container-cs 文字で読み書きするとやや大変です。しばらく間を開けてRustを触ったりするとスコシ混乱するかもしれません。と、いうわけでRustでメモリーコンテナー系に触れるモードになった時用に1枚絵のチートシートを整理しました。 文字を書けるQiitaにポストするのでちょっとだけチートシートの解説も乗せます。 おまけ解説 Threads; スレッド群 (rev.0 -> rev.1 でこのチートシート上で最初に現れる選択肢に切り替わりました ⇔ Ownership; 所有権) Rustではマルチスレッディング実行の安全性を向上するため、 適当に確保したメモリーをスレッド間でうっかり共有できない(少なくとも簡単にはうっかりできない程度に難しい)仕組みがあります。その仕組みの核心は標準ライブラリ
先日AWS lambdaをRustで実装する案件をやった。工数的には1ヶ月もないくらい。 Rustは6,7年前にちらっと勉強しただけで、実質未経験だったけど、ちょっとした案件だったので、わからないことはRust by exampleなどを見ながらどうにかなると思ってた。 実際は、ライブラリの作法や事情/背景を知らず混乱したり、雰囲気で分かったと思っていても裏側の仕組みを認識してなくて、後々ハマることが多かった。そこで少し前の自分向けに事前にこういうこと知っておきたかったと思ったことをまとめておく。 識者の方々には不正確なところ、間違ってはいないがミスリードしそう、言い回しが不自然、これも触れたほうが親切、等々、ご指摘いただけると助かります。 Resultに関する諸々 Rustにはtry-catchの例外機構はない。他の言語でいうところのEither型と同じ構造のResult型を使う。
新しいプログラミング言語に入門するためには、やはり手を動かすことが大事です。本を読んで体系的に学ぶのももちろん重要ですが、それは言語の魅力を知ってからでも遅くはありません。 しかし「Hello World」レベルだと簡単すぎて言語の違いを味わえず、ネットワークプログラミングのような高度なプログラミングはフレームワークの力が大きすぎて言語とフレームワークの狭間で立ち往生することになります。 そこで登場するのが**「FizzBuzz」です。「FizzBuzz」は単純なプログラムでありながら、プログラムの真髄である「順次」、「分岐」、「繰り返し」**があり、数値計算も学べる興味深い題材です。 その「FizzBuzz」を利用して**「Rust」という言語を学んでみようのが本記事の趣旨です。「FizzBuzz」というシンプルなプログラムで「Rust」のような表現力が豊かな言語**の機能をどこまで使い
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く