サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
災害への備え
qiita.com/tatsuya6502
内容 Rustの特徴 何に使えるのか? Rustの勘どころ 自己紹介 河野達也(かわの たつや) tatsuya6502 https://github.com/tatsuya6502 2016年ごろからRustコミュニティに生息 公式ドキュメントの和訳に参加 書籍『実践Rust入門』の共著者の1人 実践を重視した入門書 Rust 2018 Editionに対応 執筆に2年半以上かかった力作です! 昭和生まれ、昭和育ち 社会人歴約30年 独立系IT企業、銀行系IT企業、ベンチャーなどに所属 クレジットカードの国際システムの運用部門 シスアドミン - TANDEM NonStopシステムなど(分散OS) 開発チームリーダーの1人 - Apple WebObjects 銀行システム運用部門の担当部長(直属の部下 約20名) 法務コンプライアンス(リスクコントロール) ストレージシステムの更改 管
これはRustその3 Advent Calendar 2019の初日の記事です。 sccache — Mozillaが開発したRust製のコンパイルキャッシュ Rustはコンパイル言語です。個人的にはRustのコンパイル速度は遅くはない方だと思っていますが、依存しているクレートが多いとビルドにかかる時間が長くなります。特に非同期I/Oを行うWebクライアント/サーバーのクレートを使ったときや、Cargo自体をライブラリとして使うCargoサブコマンドをビルドするときなどは、依存クレートが200個くらいになることがあり、マシンの性能によってはビルドにかなりの時間を要します。 ビルド時間を短縮するためにコンパイルキャッシュという種類のソフトウェアがあります。これはコンパイルによって作られた成果物をディスクなどにキャッシュしておき、同じ条件のコンパイル要求があったときには、キャッシュしたものを返
(画像をクリックすると投稿が開きます) rustup だとプロジェクト内に .rust-toolchain ファイルが置けるよ。するとそのディレクトリでは指定したバージョンの rustc / cargo が使われるようになるんだ。 ちなみに正しくは rust-toolchain ファイル(先頭のドットなし) こんな方法があるとは知りませんでした。このことは rustup の現在の README にしっかり書いてあるのですが、私が README を最後に読んだのはたぶん1年以上前のこと。その頃にはこの機能はなかったような。 早速、使ってみましょう。すでに rustup で Rust ツールチェインのバージョンを管理している 前提で進めます。 rust-toolchain ファイルを使ってみる Rust で開発していると時々コンパイラのバージョンを固定したくなることがあります。たとえば使用して
これは Rustその2 Advent Calendar 2017 24日目の記事です。ARM Cortex-M アーキテクチャを採用した32ビット・マイクロコントローラ(マイコン)向けに、Rust でプログラムを開発する方法を紹介します。これらのマイコンでは Linux などの OS は動きませんので、OS なしで動作する「ベアメタル」なプログラムを書きます。 Rust を使うと、たとえマイコンであってもマルチスレッドでデータ競合のない「安全な」プログラムを簡単に開発できます。 今回は STM32F4 Discovery という Cortex-M4 を搭載した2千円台で買えるボードを使用します。Cortex-M0+ 以上のプロセッサを搭載したマイコンならどれでも同じ開発手法がとれるはずです。 高性能かつ低価格のマイコンを実現する Cortex-M アーキテクチャ ARM Cortex-M
べき乗(冪乗)とは $b^e$ のように $b$ の $e$ 乗で表される値を差す。ここで $b$ を底(base)、$e$ を冪指数(exponent)と呼ぶ。Rust の標準ライブラリでは3種類の冪演算が提供されている。 浮動小数点数どうしのべき乗 底、冪指数共に浮動小数点数型を取り、結果も浮動小数点数型で返す 例:2f64.powf(8f64) 浮動小数点数と整数のべき乗 底は浮動小数点数型、冪指数は整数型を取り、結果は浮動小数点数型で返す 例:2f64.powi(8i32) 整数どうしのべき乗 底、冪指数共に整数型を取り、結果も整数型で返す 例:2i64.pow(8u32) プラットフォーム(OS や CPU アーキテクチャ)によって、それぞれの演算速度に大きな違いがあることに気づいたので、いくつかの環境で試してみた。 試そうとしたきっかけ きっかけとなったのは以下の記事。そこでは
Rustで作ってみよう -- HyperLogLogと並列処理で、ウィキペディア全記事のユニーク単語数を見積もる(その1)アルゴリズムRust 今年の始め、私が Rust を習いはじめのころ、手本となるプログラムがあまり見つからないことが不満でした。GitHub で探せば、Rust で書かれた実用的なライブラリーが数多く見つかりますが、それらを読むのは入門者にとっては敷居が高過ぎます。私が欲しかったのは、学習用に書かれたプログラムで、入門者が手軽に試せて、いろいろといじれるプログラム例でした。 そんなわけで、そういうプログラム例を書いてみようと思います。2回に分けて、Rust で簡単なツールを作ります。 今回は乱択アルゴリズムの一種である、probability cardinarity estimatior(確率的カーディナリティ推定機)を実装します。HyperLogLog という名前のデ
Rust 1.13.0 が日本時間の本日(2016年11月11日)リリースされました。Rust は、安全性、スピード、並列プログラミングにフォーカスした、システムプログラミング向けの言語です。 オフィシャルブログの リリースアナウンス リリースノート(GitHubリリースページ) Rust の ダウンロードページ また同時に、次のバージョン 1.14.0 がベータ版になりました。1.14.0 は、6週間後の2016年12月23日(日本時間)にリリースされる予定です。 これから Rust を始める人には、以下の日本語翻訳版のドキュメントをおすすめします。 プログラミング言語 Rust 1.6 オフィシャルガイド The Rust Programming Language の日本語翻訳版 Rust by Example 日本語版 Rust by Example の日本語翻訳版 以下、リリースア
この記事は、「ElixirからRustの関数をつかう → はやい」の続編だ。今回は、前回の記事で最速だった Rust によるマルチスレッドプログラムを、少ない労力で SIMD 化して、さらなる高速化を図る。 実はコード自体は少し前に書いてあったのだが、なかなか本文を書き進める時間がとれず、今回は、駆け足で説明することになってしまった。説明不足な点があると思うので、疑問とか、試してみたけどうまくいかないとかあれば、コメント欄で質問してほしい。 前回やったこと 前回 の記事では、Elixir から Rust の関数を呼ぶことで、円周率の近似値を求める計算を高速化した。計算方法は「数値積分法の長方形近似」という、とても素朴な方法だった。 これを選んだのは次のような理由だった。 実装が非常に簡単 計算が適度に重い マルチコア CPU を活かしたプログラムを書きやすい 以下の段取りで、計算にかかった
Rust 1.10 が 2016年7月8日(日本時間)にリリースされました。Rust は、安全性、スピード、並列プログラミングにフォーカスした、システムプログラミング向けの言語です。 オフィシャルブログの リリースアナウンス リリースノート(GitHubリリースページ) Rust の ダウンロードページ また同時に、次のバージョン 1.11 がベータ版になりました。1.11 のリリース予定日は、6週間後の2016年8月19日(日本時間)です。 もしこれから Rust を始めるのなら、オフィシャルガイドの 日本語翻訳版 を読むのがいいでしょう。また、「Rust by Example」の 日本語翻訳 作業も現在進行中で、翻訳の 協力者を募集中 です。 リリースアナウンスに書かれている内容から、主なものを紹介します。(この記事は翻訳ではなく、リリースアナウンスをベースに大幅に加筆修正したものです
[翻訳] Rustの正式リリースから1年を振り返って(米Rust公式ブログより、DropboxやFirefoxの事例、開発状況やコミュニティの動向など)Rust この記事は、Rustの正式リリースから1年を記念して、Rust 公式ブログに2016年5月16日に投稿された、「One year of Rust1」を日本語に翻訳したものです2。 Rust における1年間 (One year of Rust) 2016年5月16日 Aaron Turon Rust とは、あなたに、こんな力を与えてくれる言語です: 妥協のないパフォーマンスとコントロール 古典的な並列プログラミングの落とし穴3 を含む、あらゆる種類のバグの回避 Python4 や Ruby5 といった言語に匹敵する使いやすさ Rust は、高い安定性と高速性を備えたソフトウェアを書くための言語であり、なによりも、楽しみながら使えるも
プログラムがある程度大きくなってくると、任意の場所からアクセスできる データが欲しくなります。いわゆる、グローバルな変数ですね。例えば、 設定情報を格納した HashMap アプリの状態(context や state と呼ばれるもの)を表す構造体 また、Rust ではマルチスレッドのプログラムが簡単に(しかも安全に)書けますが、個々のスレッドに属するグローバル変数(一般的に、Thread Local Storage / TLS と呼びます)も使いたいことがあります。例えば、 擬似乱数生成器のような、データ生成器の state この記事では、Rust で、このようなデータを安全に扱う方法を紹介します。 グローバルなデータ イミュータブル(不変)なデータ ミュータブル(可変)なデータと、使用上の注意 スレッドローカルなデータ ミュータブル(可変)なデータと、使用上の注意 Rust のバージョ
Rust 1.9 が本日(日本時間2016年5月27日)リリースされました。Rust は、安全性、スピード、並列プログラミングにフォーカスした、システムプログラミング向けの言語です。 オフィシャルブログの リリースアナウンス リリースノート(GitHubリリースページ) Rust の ダウンロードページ また同時に、次のバージョン 1.10 がベータ版になりました。1.10 のリリース予定日は、6週間後の2016年7月8日(日本時間)です。 もしこれから Rust を始めるのでしたら、オフィシャルマニュアルの 日本語翻訳版 を読むのがいいでしょう。また、@joemphilips さんが立ち上げた、「Rust by Example」の 日本語翻訳 作業も、現在進行中です。(翻訳の 協力者を募集中 です!) (これ以降はリリースアナウンスの抄訳です) 1.9 安定版の内容 アンワインド(unw
Rust の match が取る「式」と「ブランチ」の間で、所有権がどう扱われているのか考えたことはあるだろうか? 私はなかった。普段、コンパイルエラーにならないので、なんとなく使っていた、というのが正直なところだ。 でも知らないと困ることもあるだろう。そこで、まずデフォルトが、「借用」と「ムーブ」のどちらになっているのかを確認し、さらに、デフォルトと違う動作をさせるにはどうやるのかを紹介しよう。 なお、この記事を書くにあたり、以下を参考にした。 Stuff the Identity Function Does (in Rust) Rust Users -- Reborrow vs. move また、Rust の所有権システムについて、基本的なことを理解していると想定する。所有権システムについて学ぶには、日本語翻訳版のオフィシャルガイドを読むのがいいだろう。 プログラミング言語Rust -
StackOverflowのアンケートで好きな言語1位に選ばれたRustについて、開発の優先順位を決めるための別のアンケートが実施中です(2016年6月8日まで)Rustプログラミング言語 Rust は実行速度と、メモリ割り当てやマルチスレッドの安全性にフォーカスした、システムプログラミング向けの言語です。(日本語ドキュメント) 最初の安定版のリリース(2015年5月15日)から1年を迎え、Rust プロジェクトから、Rust の利用者向けのアンケートが実施されています。 アンケートの実施を告げるオフィシャルブログのポスト / Launching the 2016 State of Rust Survey • May 9, 2016 • The Rust Community Team) アンケート結果は、Rust のコア開発者たちが、今後1年で注力するべきエリアを決めるための、重要な指針と
Rust はガベージコレクタを持たない言語だ。コンパイル時に、構造体などのオブジェクトの所有権と生存状態(ライフタイム)を分析することで、オブジェクトを適切なタイミングでメモリから削除する仕組みになっている。この仕組みはとても良くできているが、時々、削除のタイミングを開発者が自分で制御したいこともある。 特にそれが必要になるのが、FFI(他言語関数インターフェイス)経由で、Rust のオブジェクトを他の言語に渡したい時だろう。この場合、他言語にはオブジェクトへのポインタを渡すことになるが、ライフタイムの分析をコンパイラに任せると、Rust の関数を抜けた時にオブジェクトの寿命が尽きたと判断されて、削除されてしまうことがある。これが起こると、他言語に渡したポインタは、参照先のオブジェクトが存在しない状態、いわゆる「ダングリングポインタ」になってしまう。 この記事では簡単な例を使って、ダングリ
Rust 1.8 が本日(日本時間2016年4月15日)リリースされました。Rust は、安全性、スピード、並列プログラミングにフォーカスした、システムプログラミング向けの言語です。 オフィシャルブログの リリースアナウンス リリースノート(GitHubリリースページ) Rust の ダウンロードページ また同時に、次のバージョン 1.9 がベータ版になりました。1.9 のリリース予定日は、6週間後の2016年5月27日(日本時間)です。 もしこれから Rust を始めるのでしたら、オフィシャルマニュアルの 日本語翻訳版 を読むのがいいでしょう。現状は Rust 1.6 をベースにしていますが、全体の 約93% が翻訳済みとなっています。また、近々、1.8 版のマニュアルへと更新する予定です。 (これ以降はリリースアナウンスの抄訳です) 1.8 安定版の内容 Rust 1.8 には言語上の
プログラミング言語ランキングより:2016年 動向を見守るべき言語は Elixir、Julia、Rust、Swift、TypeScriptRustTypeScriptElixirJuliaSwift 最新のRedMonkプログラミング言語ランキング1 によると、Swiftの成長ぶりと潜在的なポテンシャルは驚異的とのことだ。GoとSwiftは、トップ10に食い込む可能性もあると見られている。 また、トップ20圏外にいるが、今後の動向を見守るべき言語として、Elixir、Julia、Rust、TypeScriptが挙げられている。 ベストランキング 開発者が採用するプログラミング言語を調べるために、RedMonkはStack Overflowのディスカッション数や、GitHubで使用されている言語を分析している。RedMonkのアナリストおよび共同創設者のスティーブン・オグレディは、その結果を
この記事の概要 Option<T> 型や Result<T, E> 型の戻り値を、match 式で判別している以下のようなコードを、 fn double_arg(mut argv: env::Args) -> Result<i32, String> { match argv.nth(1) { None => Err("数字を1つ指定してください。".to_owned()), Some(arg1) => { match arg1.parse::<i32>() { Ok(n) => Ok(2 * n), Err(err) => Err(err.to_string()), } } } }
安全で実行効率のよい(という謳い文句の) Rust にすっかり惚れ込んでしまいましたが、快適に使えるまでの道のりは、まだ長いかもしれません。 Rust を使い始めてすぐに感じたのは、Haskell(GHC)、OCaml、Scala のような REPL が欲しい、ということでした。REPL は Read-Evaluate-Print Loop の頭文字をとったもので、いわゆる、対話型シェルのことです。 例: Haskell(GHC)の場合 % ghci GHCi, version 7.10.2: http://www.haskell.org/ghc/ :? for help Prelude> take 5 [1..] [1,2,3,4,5] Prelude> :type foldr foldr :: Foldable t => (a -> b -> b) -> b -> t a -> b P
Elixir から Rust の関数を呼ぶことで、円周率 $\pi$ の近似値を求める計算を高速化する。Erlang VM の NIF(Native Implemented Functions)という仕組みで実現するので、同じ方法で Erlang から Rust の関数を呼ぶこともできる。 Qiita では同じようなタイトルの記事が 各言語でシリーズ化(?) されているので、それに便乗させてもらった。ただそれらでは、重い処理として再帰型のフィボナッチ数列関数が使われているのだが、それだとマルチコアプロセッサで並行計算(parallel 計算)させるのが難しいので、今回は簡単に parallel 化できる、円周率の近似計算を行うことにした。 進めかた 計算にかかった時間を計りながら、以下の段取りで進めていく。 Elixir:シングルプロセスで計算 Elixir:マルチプロセスで計算 Elix
あけましておめでとうございます。 Elixir v1.2.0 がリリースされましたね。 主な特徴 Erlang/OTP 18 support v1.2.0 から Erlang/OTP 18 が必須に Erlang/OTP 18 で導入された数多くの機能をサポート Map に大量のキー・バリューを格納することが可能になった(よって、Dict、HashDict、Set、HashSetは将来廃止する予定) コンパイル時間の短縮、などなど Language improvements 数々の言語の改良。特に重要な4つの改良点を紹介 複数の aliases/imports/require マップのキー部分での変数の使用 マップのキー部分でピン演算子をサポート with スペシャルフォーム Getting started experience よくあるハマりどころでコンパイラーが警告を出すようになった
Elixir プログラムの再帰呼出しが、末尾呼び出し最適化されてるか確認するために、beam ファイルに格納されたマシン語からアセンブリ言語へ逆アセンブルする方法を調べてみた。 おまけとして、beam から Erlang のソースコードへ逆コンパイルする方法も紹介する。 Elixir や Erlang のプログラムをコンパイルすると、モジュールごとに beam ファイルができる。このファイルには、Erlang VM のマシン語に変換されたプログラムや、オプションでデバッグ情報が入っている。 今回調べてわかったのだが、Erlang の標準ライブラリーに用意された関数を使うと、このマシン語を逆アセンブルできる。また、デバッグ情報付きでコンパイルされている場合は、Erlang コードに逆コンパイルすることも可能だ。 末尾呼び出し最適化されているか確認したい Elixir や Erlang では、
(Elixir 向けの内容ですが、Erlang で書かれた recon_trace を紹介しているので、Erlang タグも付けてます) トレース機能、使ってますか? みなさんは Elixir のプログラムをどのようにデバッグしてますか? IEx.pry? それとも、IO.inspect を使った、いわゆる printf デバッグでしょうか? また、もし本番環境で次のような問題が起こったら、どう調査しますか? 特定の条件(ユーザーからの入力)でエラーになるようだが、その条件自体がわからない どこかが性能上のボトルネックになっているようだ ログを追加して、アプリケーションをデプロイし直すのもひとつの方法ですよね。 もちろん、どれも有効な手段です。でも、こんな時、まずは Erlang VM のトレース機能を使うことをお勧めします。それだけで原因がわかるかもしれません。 「すごいE本1」の原著者
Erlang/OTP 18 の実行環境(ERTS バージョン 7.0)では、時刻に関連する新しい API と、Time Warp(タイムワープ)モードが導入されました。この記事では、ERTS ユーザーガイドの「Time and Time Correction in Erlang」中でポイントとなる概念について、実験を通して確認しようと思います。 OTP 17 までは erlang:now/0 を使いまわしてきた OTP 18 より前のリリースでは、現在時刻のタイムスタンプを取得する API として、erlang:now/0 が使われてきました。また、類似のものに os:timestamp/0 もあります。前者は Erlang 実行環境(Erlang VM)の中で管理されているシステムクロックからタイムスタンプを取得し、後者は OS が管理するシステムクロックから取得します。 1> F =
最新版のchef-solo(11.10.1)で動かないcookbookがあるので、解決するまでの間は、1つ前のバージョンのchef-clientを使うことにした。以下のようにすれば、特定のバージョンのchef-clientがインストールできる。 $ CHEF_SOLO_VERSION=11.8.2 $ curl -L "https://www.getchef.com/chef/install.sh" | sudo bash -s -- -v $CHEF_SOLO_VERSION Register as a new user and use Qiita more conveniently You get articles that match your needsYou can efficiently read back useful informationYou can use dark
ErlangでHaskell風の Maybeモナド と do記法 を使う方法。エラーチェックなどを繰り返し行うコードが簡潔に記述できる。RabbitMQの開発者が公開した erlando で実現する。 erlandoにはListモナドやStateモナドなども含まれており、もちろん自分で新たにモナドを書くこともできる。また一部のモナドではMonadPlus型も実装されており guard/2 関数などが使える。さらに、関数の部分適用を読みやすく記述できる「cut」や、関数のインポート時に関数名を変更することで名前の衝突を避ける「import as」という機能もある。 maybe(A) 型 Erlang/OTPでは処理が失敗するかもしれない関数は、失敗したことを「例外」ではなく、「戻り値」で表現する。例えば lists:keyfined/3 ではキーが見つからない場合 false を、 file
GNU/LinuxでのErlang/OTPの導入手段はいくつかあるが、ここでは kerl を使う方法を採用する。以下のような利点がある。 簡単に導入できる ( build と install コマンドを実行するだけ) 最新版のErlang/OTPが使える (erlang.orgで配布されているソースコードからビルドするのでリリース直後から使える) 複数バージョンのErlang/OTPを導入・管理できる 特に3はErlangで複数のシステムを開発・保守する際に重宝する。Erlangの異なるバージョンだけでなく、同じバージョンでビルドオプションを変えたもの(HiPEのあり/なし、最小構成のアプリケーションのみなど)をいくつでも導入して、切り替えながら使える。 準備 Erlangのビルドに必要なパッケージを導入する。 Fedora、RHEL、CentOSの場合 $ sudo yum instal
Mac(OS X)でのErlang/OTPの導入手段はいくつかあるが、ここでは kerl を使う方法を採用する。以下のような利点がある。 簡単に導入できる ( build と install コマンドを実行するだけ) 最新版のErlang/OTPが使える (erlang.orgで配布されているソースコードからビルドするのでリリース直後から使える) 複数バージョンのErlang/OTPを導入・管理できる 特に3はErlangで複数のシステムを開発・保守する際に重宝する。Erlangの異なるバージョンだけでなく、同じバージョンでビルドオプションを変えたもの(HiPEのあり/なし、最小構成のアプリケーションのみなど)をいくつでも導入して、切り替えながら使える。 準備:Intelプロセッサ搭載Macの場合 OS X 10.8 Mountain Lionで検証済み。マシンはIntel Core i7
このページを最初にブックマークしてみませんか?
『@tatsuya6502のマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く