Don't Repeat Yourself

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

2020-01-01から1年間の記事一覧

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

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

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

この記事は言語実装Advent Calendar 2020 25日目の記事です。(2022-11-06: 記事の内容を追記していますが、この記事の結論としては「似たようなものは作れるが、完全体にはならない」です) 前提知識 高階カインド型 モナド 従来のエミュレーション方法 Gen…

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.…

tide 0.6.0 を試してみる

tide 0.6.0 がリリースされていたようなので、使ってみます。リリースノートはこちらです。 Cookie、CORS と Route にいくつか新しい関数が足されたというリリースでした。Cookie と CORS はどちらも Web アプリを作る上では必須要件なので、追加されて嬉し…

【競プロノート】グラフを Rust で実装してみる

先日の Rust LT 会でグラフを実装してみる話がありました。そこではおそらく隣接リストを説明していたと思うのですが、そういえば Rust で実装してみたことはなかったなと思ったので、実装してみました。 『みんなのデータ構造』という本を参考にして実装し…

2020年の Rust

2020年、Rust をどうしていくかというロードマップが例年通り策定されているようです。まだ草案なようなので変わる可能性がありそうですが、現時点での情報をまとめておこうかなと思います。 github.com まとめると Rust 2021 Edition への準備の年。 現在進…

作って学ぶ、cats.effect.IO モナドのしくみ

今回は cats.effect.IO (以下、 IO ) を理解する上で最低限必要となる*1実装を選定して、cats を参考に IO を実装してみました。具体的には、下記の機能を実装してみます。 IO#pure IO#delay or IO#apply IO#raiseError IO#map IO#flatMap IO#unsafeRunSync …