Don't Repeat Yourself

Don't Repeat Yourself (DRY) is a principle of software development aimed at reducing repetition of all kinds. -- wikipedia

Rustで型を強めにつけ、バリデーション情報を型に落とす方法

Rust を読んでいると、さまざまなものに型付けをするコードをよく見かけます。強めに(厳密に)型付けをする文化があるプログラミング言語、と言えるかもれません。 バリデーションチェックに対してもこうした強めの型付けが適用できます。具体的なバリデー…

『Amazon Web Services 基礎からのネットワーク&サーバー構築』を Terraform でチャレンジする

アプリケーションエンジニアではあるものの、AWS はかなり触る機会が多いです。アプリケーションエンジニアといえど、AWS に関してある程度知見をもっていないとよりよいアプリケーションを作ることができない時代になってきました。それだけ、AWS に依存し…

Multimap を Rust でも使う(と、クレートの選び方)

先日仕事で、Rust を使用してとあるアプリケーションを作っていたところ、Guava の Multimap のようなデータ構造がほしいと思う場面がありました。 Guava の Multimap というのは、Java のライブラリ Guava に存在する HashMap の value 側がリストやベクタ…

Vec::retain の最適化

先日 rustc に上がっていた PR にこんなものがありました。Vec::retain を最適化したという PR です。他の PR の様子なども見る限り、以前からここは取り組まれていたようですが、この度ようやく修正が入り、Vec::retain が高速化しました。 github.com 実際…

Rust でステートマシンを扱えるライブラリを書いてみた

TL; DR Rust でステートマシンをいい感じに扱えるようにするライブラリを書いてみた。 とくに他の言語のライブラリを調査したわけではないので、もう少しいいアイディアがあるかもしれない。 何を作ったか Rust でマクロや他のライブラリを一切使わずにステ…

Rust を始めるための資料集

かとじゅんさんのお誘いで、私塾匠真堂にて登壇させていただき、Rust に関する話をさせていただきました。ありがとうございました。 今回のセッションを通じて Rust を始めたくなった方向けに、Rust をはじめるための資料をいくつかリストアップしてます。よ…

CPUエミュレータをRustで自作する

この記事は Rust Advent Calendar 2020 ならびに CyberAgent Developers Advent Calendar 25日目の記事です。 今年のはじめの頃になりますが、『CPUの創り方』という本に載っている TD4 という CPU を実装してみました。TD4 は「とりあえず動作するだけの4bi…

Rustでもモナドは実装できるのか?(再)

この記事は言語実装Advent Calendar 2020 25日目の記事です。 前提知識 高階カインド型 モナド 従来のエミュレーション方法 Generic Associated Types を用いたエミュレーション(new!) 型クラスを定義する Functor を用意する Pointed を用意する Applicat…

RustFest Global を開催しました

この記事は Rust Advent Calendar 2020 その3の4日目の記事です。今日は Rust に関する話ではあるのですが、技術的な話ではない記事になってしまうことをお許しください。 1ヶ月ほど経ってしまいましたが、Rust の全世界的なカンファレンス RustFest Global …

Mac かつ VSCode で Idris の環境構築をする

Idris Advent Calendar 2020 3日目の記事です。 2020年今年の言語に Idris を選んで年始に Hello, World していたのですが、見事にその後 Python をしていた1年でした(仕事で使うことになったので Python を覚える必要が出てきました)。 完全に Idris は初…

2020年。あなたとJAVA、今すぐダウンロー

ド。(いつものやつ) 2020年時点で改めてよさそうな Java のインストール方法についてまとめておきます。 ちなみにですが、 Scala(sbt)を利用する。 Scala のプロダクトでは Java 8 を使用し、プライベートでは Java 14 を使用する。 Open JDK そのものの…

terraformを触り始める

画面をポチポチしながらインスタンスを立てて…といったことを考えるのが辛くなってきたので、そろそろ terraform 使いこなせるようになりたいと思い、チュートリアルをコツコツはじめてみました。 普段は CDK を使ってるんですが、最近少しだけ terraform を…

Rust の `!` (ビックリマーク、エクスクラメーションマーク、感嘆符、never) 型

タイトルは記号のググラビリティ確保のためにわざとつけています(笑)。動作はすべて、Rust 1.47.0 (stable) です。nightly を使用した場合は nightly と文中に記載しました。 TL; DR Rust には ! という「何も返さないことを示すモノ」が存在する。 never …

ScalaMatsuri 2020に行ってきた! #ScalaMatsuri

2020/10/17-2020/10/18で開催されていた ScalaMatsuri に参加してきました。お忘れかもしれませんが本職は Scala エンジニアです。会社のスポンサー枠で参加しました。 聞いたセッション 自由、平等、ボックス化されたプリミティブ型 Caliban: Functional Gr…

My Rust 2021

It will be 3 years since I started to code in Rust. I had started to code 6 years ago, so half of my career have been dedicated to write code in Rust. Over recent years, I organised a Rust conference happened in Japan, and I'm now organisi…

x.py について

x.py とは Rust コンパイラ向けのツールです。Python が事前にインストールされている必要があります。 Rust コンパイラのビルド とっても簡単。下記コマンドを実行しましょう。 まずはクローンします。 git clone https://github.com/rust-lang/rust.git ビ…

TwitterFuture の Future#collect と並列処理

よく忘れるのでメモします。Scala です。 Future#collect とは 実験内容 実験1: 逐次実行することを確かめる 実験2: 並列実行することを確かめる 余談: sequence 3兄弟 まとめ Future#collect とは com.twitter.util.Future についている便利関数で、Seq[Fut…

『実践Rustプログラミング入門』を書きました

すごく今更感がありますが、先週末出版しました。 私のプライベートがとても忙しくしばらく書けませんでした。書籍を書きましたのでご報告です。 実践Rustプログラミング入門作者:初田 直也,山口 聖弘,吉川 哲史,豊田 優貴,松本 健太郎,原 将己,中村 謙弘発…

riscv-gnu-toolchain を macOS にインストールする

RISC-V のエミュレータを実装する際などに使用する riscv-gnu-toolchain を macOS にインストールしてみたので、メモを残しておきます。 github.com インストール手順 git clone と make linux でかなりの時間を要します。時間に余裕をもって実行することを…

Shinjuku.rs#10 に参加した #Shinjukurs

ブログ枠で参加しました。なので、書きます。 forcia.connpass.com RustでProperty-Based Testing (自分の職場のデスクで聞いていたので、めっちゃ話しかけられて半分くらいしか聞けませんでした…) Rust で Property-Based Testing する際にはどういったク…

Rust のイテレータを使いこなしたい

最近、 Project Euler を Rust でコツコツと解いているのですが、イテレータ(Iterator)を使いこなせるときっといい書き方ができそうだなあと思う場面が多く、イテレータに改めて入門したいと思いこの記事を書きます。 書き始めていまいちまとまりのない感…

async-trait を使ってみる

完全な小ネタです。使ってみた記事です。 Rust ではトレイトの関数を async にできない Rust では、現状トレイトのメソッドに async をつけることはできません*1。つまり、下記のようなコードはコンパイルエラーとなります。 trait AsyncTrait { async fn f(…

tide 0.8.0 を試してみる

現時点で 0.8.1 まで出てしまっていますので、まとめて触ってみます。 変更の概要はこちらのリリースノートに詳しくまとまっています。0.8.0 でかなり大掛かりなモジュールの構造に対する変更が入っており、もともとドッグフーディングのために使用していた…

Rust における直観に反するように見えるコード

ちょっとおもしろいツイートを見つけたので、メモがてら書きます。 Oh no.#rustlang pic.twitter.com/vWwuQOMGvg— Mara Bos (@m_ou_se) April 22, 2020 次のようなコードはコンパイルが通ってしまいます。 fn main() { let a; let b; let z = (a = 10) == (b…

tide 0.7.0 を試してみる

Rust の async-std ベースの HTTP サーバーフレームワーク tide を触ります。0.6.0 に引き続き、先ほど 0.7.0 がリリースされていたようなので試してみたいと思います。前回の記事は下記です。 yuk1tyd.hatenablog.com 今回も私が気になるところだけメモしま…

社会人5年目が終わった

社会人5年目が終わってしまいました。社会人4年目の終わりにも記事を書いたので、毎年恒例にしていきたいと思って今年も書きます。 今年できたこと 5年目で目標としていたもの データサイエンスに触れてみる 分散システムに詳しくなる 関数型プログラミング…

今さらだけど dotfiles を書いた

会社で使っている PC を変えてもらったんですが、環境構築が大変だなあと思ったのでいろいろ同僚に教えてもらいながら dotfiles を整えてみました。 とりあえず言われたことは「oh-my-zsh を使うんじゃねえ」だそうです 詳しいことはわかりませんが、メンテ…

Scalaのtrait、Rustのtrait、そしてScalaのimplicit

Scala の trait と Rust の trait は微妙に使い方が異なる、とよく質問を受けます。たしかに、使い心地は微妙に異なるかもしれません。Scala はオブジェクト指向を中心に設計された言語ですが、Rust はそれを中心に設計されているとは言えません*1。こういっ…

Mac OS X から EC2 インスタンス上に存在する JVM に VisualVM を接続する

EC2 インスタンス上に存在する Web サーバーを VisualVM 接続してで見たいと思った際に、どのようにして見たらよいかをまとめておきます。 なお、ローカル環境が Mac OS X での場合です。 手順 java の起動コマンドに引数をいくつか追加する。 SOCKS プロト…

Rust の HTTP クライアント surf を試してみる

async/await に対応した HTTP サーバーの tide を先日紹介し、先日も記事を書きました。 同様に async/await に対応した HTTP クライアントの surf というライブラリがあるようなので、それを軽く紹介したいと思います。執筆時点での surf のバージョンは 1.…