Happy Developing

楽しい開発ライフ 🦀

Rust

cargo-nextestの使い方と仕組み

この記事では以下の点について書きます。 cargo-nextestの使い方 ソースを読んで理解できた範囲内で仕組みの解説 Contents cargo-nextestの使い方 概要 Install Testの実行 Retry Flaky Test Partitioning Test Testの一覧表示 Config Profile Github Action…

RUST FOR RUSTACEANSを読んだ感想

読んだ本 きっかけ まとめ FOUNDATIONS TYPES Types In Memory Alignment Layout Dynamically Sized Types and Wide Pointers Traits and Trait Bounds Compilation and Dispatch Generic Traits Coherence and the Orphan Rule Trait Bounds Marker Existen…

proconio::input!の仕組みを追ってみる

この記事ではRustのproconio::input! macroについて書きます。 documentやtest caseで想定されているユースケースをどうやって実現しているのかを追っていきます。 versionは記事を書いている時点で最新のp-v0.4.3 を対象にしています。 proconio::input! と…

Parser combinator nom 入門

この記事ではparser combinator nom1について書きます。versionは v6.1を前提にしています。 nomは小さいparserを組み合わせて、目的とするデータ構造を入力から読み取るためのpackageです。 nushell のコードを読んでいてみかけたのが初めてでしたが他のpac…

Rustのlifetimeとvariance

nomicon を読んでいてSubtyping and Variance の話がでてきたときにどうして継承の概念がないRustにvarianceの話がでてくるのかなと思っていました。 その後、Rustの動画をyoutubeに投稿されているJon Gjengsetさん のCrust of Rust: Subtyping and Variance…

Key Value Storeを作りながら学ぶtokio

本エントリーではKey Value Storeをtokioで作るうえで学んだことを書いていきます。 RustのLT会 Shinjuku.rs #13で話させていただいた内容です。 発表時のスライド source code 作ったもの TCP Server Max Connection Graceful shutdown Stream read/write w…

Mini-Redis Tutorialからはじめるtokio

この記事ではRustの非同期runtimeのひとつtokioの公式Tutorialを通じてtokioのAPIに入門していきます。 TutorialではMini-RedisというRedisのclient/serverを実装したlibraryを通してtokioとfuture/asyncの概念を学んでいきます。Redisについての前提知識は…

Rustでgitのtagをbumpする

同じチームのメンバーがnodegitというnodeのlibgit2のbindingを利用して、便利なツールを作っているのをみて各言語にgitを操作するためのライブラリーへのbindingがあることを知りました。 そこで、今回はRustのlibgit2 bindingであるgit2-rsを利用して、git…

Rustでネットワークの速度を測ってみる

会社の回線が遅いなと感じ、具体的な数字を測ってみたくなったので、Rustでtcpのthroughputを計測するcliを作ってみました。 source codeはこちら install cargoとbrewでinstallできます。 brew $ brew tap ymgyt/netspeed $ brew install netspeed cargo ca…

RustのcliをHomebrewで公開する

この記事ではRust製のcliをbrew installできるようになるまでの手順について書きます。(CI上で実行できるようにしたいのですが、まずは手でやります) サンプルとして利用するのは、前回の記事で紹介した、MySQLにpingをうつだけのcli, mysqlpingerです。 bui…

RustでMySQLにpingをうつ

local環境でdocker-compose等を利用してDBを立ち上げた際に、DBの"ready"を待ちたいことがありました。 最初は、tcp接続でよしとしていたのですが、やはりprotocol的な"ready"が必要だったので、pingをうつ必要がありました。 ということで、RustでMySQLにpi…

RustでRui Ueyama先生の低レイヤを知りたい人のためのCコンパイラ作成入門をやってみる1(環境構築から四則演算まで)

compilerbookこと低レイヤを知りたい人のためのCコンパイラ作成入門をRustでやっていきます。 本記事では、環境構築から四則演算のtestを通すところまでおこないます。compilerbookのステップ5: 四則演算のできる言語の作成までです。 概要 概要としては、計…

nushell/bookに日本語翻訳のPRだしたらマージしてもらえました

nushell/bookというRust製shellのbook(document)に日本語翻訳のPRをだしたらmergeしてもらえました。 ドキュメントはこちらから読めます。 そもそもnushellとは A modern, GitHub-era shell written in Rustと謳っているとおり、Rustで書かれたshellです。主…

RustConf 2019にいってきました

現地時間(PDT) 8/22 ~ 23、オレゴン州ポートランドで開催されたRustConfに参加してきたので、その模様を書いていこうと思います。 参加のきっかけ Rustに関わっておられる方々がにどんな人達なのか実際に見てみたいと思い、ちょうどRustConfの開催時期に夏季…

Rustでdoubly linked list

Rustでdoubly linked listを書いてみました。 use std::cell::RefCell; use std::fmt; use std::rc::Rc; type Link<T> = Rc<RefCell<Node<T>>>; #[derive(Debug)] struct Node<T> { value: T, prev: Option<Link<T>>, next: Option<Link<T>>, } impl<T> Node<T> { fn new(value: T) -> Rc<RefCell<Self>> { Rc::new(RefC</refcell<self></t></t></link<t></link<t></t></refcell<node<t></t>…

Rust env_loggerの出力に色をつける

env_loggerの出力に色をつけたかったのですが、exampleが見つからず、docを読んだ結果以下のような処理になりました。 [dependencies] log = "0.4.8" env_logger = "0.6.2" use env_logger::{fmt::Color, Builder}; use log::{Level,trace,debug,info,warn,e…