タグ

Rustに関するnharukiのブックマーク (41)

  • PythonのRuff LinterをVSCodeで使う

    Ruffはrust製の高速なPythonLinterです。 README上部に記載の通り既存のPython Linterに比べてはるかに高速であると謳っています。 PylintやFlake8, banditなどのlinter拡張機能を入れなくてもVSCodeのsettings.jsonに記述すれば使用できるようになります。[1] RuffをVSCodeと統合するには公式のVSCode拡張をインストールします。 またlint指摘だけではなく実行時に"--fix"オプションが指定されるとコードの自動修正まで行ってくれます。 ※ 2024/03/06追記 editor.codeActionsOnSaveの各設定項目の値がtrue/falseからexplicit/always/neverの3パターンに変わりました 値 説明

    PythonのRuff LinterをVSCodeで使う
  • 2022年のRustの進捗の話をしましょう ~TechFeed Experts Night#9講演より | gihyo.jp

    記事は、2022年11月に開催された「TechFeed Experts Night#9 〜 Rust/WebAssemblyの「いま」を探る」のセッション書き起こし記事「年末ですし、2022年のRustの進捗の話をしましょう」を転載したものです。オリジナルはTechFeedをご覧ください。 私はマップボックスジャパン合同会社という会社でソフトウェアエンジニアをしているyukiです。Twitterでは@helloyuki_で、TechFeedではRustの公認エキスパートとして活動しています。最近はや連載記事を書くことも多かったのですが、そのほかにはRust Tokyoの運営をしたり、「⁠This Week in Rust」というRustの注目記事をピックアップしたWebマガジンの日語記事レビュアーをしたり、TwitterRustのお役立ち情報を発信したりしています。 Mapboxで

    2022年のRustの進捗の話をしましょう ~TechFeed Experts Night#9講演より | gihyo.jp
    nharuki
    nharuki 2023/03/07
    地味にこの変更は熱いな → “従来、MutexはBox<pthread_mutex_t>をラップしたものでしたが、pthread_mutex_tを直接利用することはやめ、Linuxにおいてはfutexを直接扱うように調整したことでBoxを剥がすことに成功しています”
  • Error Handling in Rust - Andrew Gallant's Blog

    Like most programming languages, Rust encourages the programmer to handle errors in a particular way. Generally speaking, error handling is divided into two broad categories: exceptions and return values. Rust opts for return values. In this article, I intend to provide a comprehensive treatment of how to deal with errors in Rust. More than that, I will attempt to introduce error handling one piec

    nharuki
    nharuki 2023/02/02
  • Rustの実用性が理解できる図を作成してみた 〜C/C++/Java/JS/Python/Go/TS/Elixirとの比較〜

    エディタ支援 言語の公式がエディタ支援(LSP等)を提供しているかを示しています。 自動テスト 言語の公式が自動テスト(ユニットテスト等)を備えているかを示しています。 リンタ 言語の公式がリンタを提供しているかを示しています。 ビルドシステム 言語の公式がビルドシステムを提供しているかを示しています。 パッケージマネージャ 言語の公式がパッケージマネージャを提供しているかを示しています。 フォーマッタ 言語の公式がフォーマッタを提供しているかを示しています。 手続き型 言語のプログラミングパラダイムが手続き型プログラミングを強くサポートしているかどうかを示しています。 オブジェクト指向 言語のプログラミングパラダイムがオブジェクト指向プログラミングを強くサポートしているかどうかを示しています。 関数型 言語のプログラミングパラダイムが関数型プログラミングを強くサポートしているかどうかを示

    Rustの実用性が理解できる図を作成してみた 〜C/C++/Java/JS/Python/Go/TS/Elixirとの比較〜
    nharuki
    nharuki 2022/12/13
  • Rust Memory Container Cheat-sheet - Qiita

    Repos: https://github.com/usagi/rust-memory-container-cs 文字で読み書きするとやや大変です。しばらく間を開けてRustを触ったりするとスコシ混乱するかもしれません。と、いうわけでRustでメモリーコンテナー系に触れるモードになった時用に1枚絵のチートシートを整理しました。 文字を書けるQiitaにポストするのでちょっとだけチートシートの解説も乗せます。 おまけ解説 Threads; スレッド群 (rev.0 -> rev.1 でこのチートシート上で最初に現れる選択肢に切り替わりました ⇔ Ownership; 所有権) Rustではマルチスレッディング実行の安全性を向上するため、 適当に確保したメモリーをスレッド間でうっかり共有できない(少なくとも簡単にはうっかりできない程度に難しい)仕組みがあります。その仕組みの核心は標準ライブラリ

    Rust Memory Container Cheat-sheet - Qiita
  • データでわかるRustの開発者達 〜Rust Survey 2021の深堀 | gihyo.jp

    Rustの開発チームは毎年末にRustユーザのサーベイを行っています。このサーベイは開発者のバックグラウンドから普段使っているツールまで幅広く問うもので、コミュニティの中心がどこにあるのか理解するのに大変役立ちます。特に、周りにRustaceanがいない方にとっては「こういうのってみんなどうしてるの?」という疑問はよく発生するでしょう。そういうときにサーベイの結果はコミュニティのトレンドを追う一助になります。 2021年は2021/12/08から2021/12/22の期間にサーベイが行われました。そこで実施されるアンケートは、英語の他、中国語(簡体字、繁体字⁠)⁠、フランス語、ドイツ語、日語、韓国語、ポルトガル語、ロシア語、スペイン語に翻訳されました。 例年なら詳細なレポートが提出されるのですが、今年は比較的簡素なもののみであったため、大きな注目は浴びませんでした。その代わりにサーベイの

    データでわかるRustの開発者達 〜Rust Survey 2021の深堀 | gihyo.jp
    nharuki
    nharuki 2022/09/22
    なるほどな~・・・“Rustは型を使って強力に不変条件を表明できる言語なので、デバッガを使わないとどうしようもないバグはあまり発生しません”
  • PydanticがRustで爆速になるという話 - Qiita

    はじめに 最近ポッドキャスト聴く時間が少し減ってしまったんだけど、久しぶりに Talk Python to Me を聴いたらPydanticの話題でした(エピソードのリンクはこちら)。作者のSamuel Colvinさんが秋に予定しているメジャーバージョンアップの話をし始めたのですが、冒頭で「コアをRustで実装して17倍速くなる」と言っていて、リンク張られていたドキュメントを読みました。この記事はそこで語られていた内容を中心にPydantic v2についてご紹介します。 Pydanticとは v2の話の前に、そもそもPydanticとは何かについて簡単に触れておきます。PydanticはPythonの型ヒント情報を使ってデータバリデーション(データの妥当性検証)を行うライブラリです。予めデータの構造を定義しておいて、入力されたデータがその構造に合っているかを調べてくれます。 例えば、id

    PydanticがRustで爆速になるという話 - Qiita
  • プログラム解析入門、もしくはC/C++を安全に書くのが難しすぎる話

    プログラム解析入門 もしくはC/C++を安全に書くのが難しすぎる話 Last updated: Jul 30, 2022 Kinuko Yasuda <@kinu>

    プログラム解析入門、もしくはC/C++を安全に書くのが難しすぎる話
  • [Rust] 簡単なFFI実験(Rust ~ C, Python) - Qiita

    RustでFFI関連の練習をした。 すべてWindows MSVC環境。 FFI = Foreign Function Interface(他言語の関数を使うためのインターフェイス)。 異なる言語を組み合わせて使うための技術的仕様。 簡単に言えば「C言語の仕様に合わせる」ことで実現している。 ※7/26追記 コメントでの指摘を受けて、誤っていた箇所を訂正。 ※8/5追記 Pythonスクリプトの不具合を修正。 要点 Rust製ライブラリをC言語で使う Rust製ライブラリをPythonで使う C言語製ライブラリをRustで使う 補足 参考 要点 C言語をコンパイルするには「x64 Native Tools Command Prompt」を使う。 Rust~C言語間では静的リンク(.lib)で連携させる。 ※7/26訂正 RustPython間では動的リンク(.dll)で連携させる。 リン

    [Rust] 簡単なFFI実験(Rust ~ C, Python) - Qiita
    nharuki
    nharuki 2022/07/26
  • Rust製の高性能コマンド3選

    Rustで作られたコマンドラインツールに良いものが多いと聞いて、Rust製の便利なコマンドをまとめてみます。RustがC/C++を置き換える言語というのもありますが、GNUの伝統的なツールをブラッシュアップしたツールがRustでいろいろ出てきているのはとても興味深いです。 findコマンドを置き換える fd fdはGNUの伝統的な検索ツールfindの置き換えです。findよりも簡潔にファイルの検索が可能です。 GitHubのリポジトリはこちらで、インストールも各パッケージマネージャーから使えます。 # mac $ brew install fd # ubuntu $ sudo apt install fd-find # win $ choco install fd 使い方は、検索したりディレクトリでfd キーワードと書くだけです。ポイントはfindと違って特にオプションをしていしなくても良

    Rust製の高性能コマンド3選
    nharuki
    nharuki 2022/07/21
  • Rustのスレッドとチャネルと共有メモリの話

    この記事ではRustのスレッドとチャネルについてご紹介します。最後に共有メモリについても少しだけ触れます。対象としてはgolangを書ける程度の中級者レベルを想定しています。 公式ドキュメントについて Rustの公式ドキュメントはとても良く書けており英語の勉強にもなります。プログラミング・チュートリアルは圧巻ですのでぜひ原文で読んでみてください。 スレッド RustのスレッドはOSスレッド(1:1 threading)になります。GolangJavaはグリーンスレッドです。 This model where a language calls the operating system APIs to create threads is sometimes called 1:1, meaning one operating system thread per one language thr

    Rustのスレッドとチャネルと共有メモリの話
    nharuki
    nharuki 2022/06/28
  • Rust初心者殺しの文法10選 - Qiita

    概要 この記事ではRust初心者が驚いたり混乱させられたりするようなRustの文法を10項目集めてみました。 これらの項目は知らないと理解できなかったりコンパイルエラーに悩まされたりする一見厄介なものたちなのですが、そのような直感的でない挙動を敢えてさせているところには重要な意味が込められていることが多いです。 そのため、これらの項目を通してRustが目指しているものや実現したい機能の一部を垣間見ることができると思います。 1. デフォルトの代入がムーブ Rustの最大の特徴が所有権の概念であることは有名ですが、それでもなお初心者殺しになるのがムーブです。 以下のコードがコンパイルエラーになるメジャーな言語は現状Rustくらいしか無いでしょう。 let mut a = vec![1, 2, 3]; let mut b = a; // ここでaの持つベクタの所有権がbにムーブされ、aは無効に

    Rust初心者殺しの文法10選 - Qiita
    nharuki
    nharuki 2022/06/09
  • 多コピーの原罪

    Rust 分かんないッピ ・ε・ Rust の文字列周りのプラクティスを基礎から勉強してみようと思って勉強したのでそのときのメモをまとめます。 Rust は GC を持たない なぜ Rust の文字列周りの型があんなに大変なことになっているかは、Rust のメモリモデルと Copy の仕組みを学ぶことで理解できた気がしたので、メモリの話から始めます。 FYI: https://www.reddit.com/r/rustjerk/comments/ovx0uq/the_two_major_ways_rust_changed_my_life/ GC とは まずは GC からです。 GC とは Wikipedia をそのまま引用すると ガベージコレクション(英: garbage collection; GC)とは、コンピュータプログラムが動的に確保したメモリ領域のうち、不要になった領域を自動的に

    多コピーの原罪
    nharuki
    nharuki 2022/03/24
    タイトルずるいだろww
  • Effective Rust

    Release date: April 2024 Page count: 280 pages ISBN: 9781098151409 Available at: 🇺🇸 Amazon.com 🇬🇧 Amazon.co.uk 🇺🇸 Barnes & Noble 🇬🇧 Waterstones and many other book stores.

    nharuki
    nharuki 2022/03/11
  • 「Rustでやると知らないうちに詰む設計」を避けるためのTipsを集めてみる

    とりあえず、よく言われてるやつから埋めていこうと思う。 構造体にライフタイムを持たせない 構造体にライフタイムを持たせるのは「基的に」避けよ、というのが重要なのは間違いないのだけど、これをもう少し実践的な内容にしたい。ちょっと考えてみたけど、こういうのはどうだろうか。 ある関数呼び出しの中でしか絶対に使わない。returnするまでにその構造体のデータは全て破棄される。static変数に退避させることもできない。アロケーションもその関数が面倒を見る。そういう一蓮托生できる関数呼び出しに心当たりはあるか? ある→ 構造体にライフタイムを持たせてもよい。 ない→ ライフタイム禁止。 そう考えてみると、DIとかReduxとかとも通じるところがあるかもしれない。「つべこべ言ってないで全部の責務を一番外側に持っていく」という決断ができるときは構造体ライフタイムが選択肢に入る。

    「Rustでやると知らないうちに詰む設計」を避けるためのTipsを集めてみる
  • Rustで実装するmalloc - NTT Communications Engineers' Blog

    この記事は、NTT Communications Advent Calendar 2021 21日目の記事です。 はじめに こんにちは、イノベーションセンターの鈴ヶ嶺(@suzu_3_14159265)です。普段は、クラウド・ハイブリッドクラウド・エッジデバイスなどを利用したAI/MLシステムに関する業務に従事しています。日は、Rustで動的メモリ確保(dynamic memory allocation)のmallocを実装してPythonvimを動かしてみようという内容をお届けします。 また、去年もRustネタのアドベントカレンダーを書いているのでぜひ見ていただけると嬉しいです! NTTコミュニケーションズ Advent Calendar 2020 Rustで実装するNetflow Collector 実装するmallocのアルゴリズム 今回実装するmallocのアルゴリズムは小さな

    Rustで実装するmalloc - NTT Communications Engineers' Blog
    nharuki
    nharuki 2021/12/22
  • Rustのイテレータの網羅的かつ大雑把な紹介 - Qiita

    はじめに 正直なところ、公式ドキュメント std::iter::Iterator - Rust を読めば終了、この記事は不要、という感じはある。 しかしこのページ、例とかは豊富だし良いのだが、関数の並べ順がどうにも微妙な感じがするので、メモを兼ねて用途別(独断と偏見による分類)で紹介してみることにする。 あと、関数の型はHaskell風に書くと流れる感じがあって良い(イテレータの用途とマッチしている気がする)ので、 T -> U -> V のように書くことがある。 とはいえ、わかりやすさ優先で書くと FnMut とか FromA: Default + Extend<A> みたいな独特の情報が失われてしまったため、やはり公式のドキュメントをあわせて見ることをおすすめする。(リンクを沢山張ったので、発見次第別ウィンドウで開くくらいの勢いが良い。) それから、以下で Iterator<T> と書

    Rustのイテレータの網羅的かつ大雑把な紹介 - Qiita
    nharuki
    nharuki 2021/11/17
  • Rustのメモリ管理機能とその特徴

    初出:技術評論社刊「ソフトウェアデザイン 2021年9月号」 先日、技術評論社よりRustのメモリ管理機能についての特集に寄稿させて頂きました。 この記事は自分が寄稿させていただいた記事をブログ用に一部推敲・加筆を加えたものです。 なお、ソフトウェアデザインでの特集ではより実践的な例でのメモリ管理についての解説もあるので、興味のある方は誌のほうも手にとっていただければと思います。 プログラム言語におけるメモリ管理の課題プログラミングにおける課題の一つとしてどうやってメモリ領域(ヒープ領域)を管理するかというものがあります。 C言語ではmalloc/free関数などを用いて手動でメモリを管理しています。 これらの関数はメモリアドレスを示すポインタを介してメモリ管理を行います。 malloc関数は必要なメモリ領域を確保してその先頭番地のポインタを返し、プログラム内ではその番地のメモリを読み書

    nharuki
    nharuki 2021/11/11
  • C++erのためのRust入門(未完) - Qiita

    新しい言語を勉強したかったので、Rustを始めてみる。 Rustを選んだ理由 候補言語としては、D, Go, Rustがあった。 そのうちでRustを選んだのは次のような理由からだった。 演算子オーバーロードが使いたかった Goには演算子オーバーロードがない ジェネリクス(テンプレート?)が欲しかった Goにはジェネリクスがないらしい ガーベッジコレクタ(GC)が気に入らない GoもDもGCをオフにすることはできるらしいが、たぶん普通のことではないだろう 念の為に言っておくと、GoとDには何の非もない。 私が大きな変化についていけないだけのことである。 Rustのリリースの種類 Nightly masterブランチの日ごとの最終成功ビルド、新機能が追加される。 Beta 6週ごとにNightlyから昇格、Stableに向けてバグフィックスが行われる。 Stable 6週経ったBetaが昇格

    C++erのためのRust入門(未完) - Qiita
  • Rustのturbofishを理解する | κeenのHappy Hacκing Blog

    このエントリはRustその3 Advent Calendar 20193日目に飛び入り参加しているエントリです。 Rustの型パラメータ指定の構文、通称ターボフィッシュ(turbofish)について。 Rustでジェネリクス関数は以下のように関数名に続いて <パラメータ名> で指定しますよね?

    Rustのturbofishを理解する | κeenのHappy Hacκing Blog
    nharuki
    nharuki 2021/09/17