サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
秋冬の新作アニメ
blog-dry.com
『ソフトウェアアーキテクチャ・ハードパーツ』を訳者の方からご恵贈いただきました。ありがとうございます。献本については基本的にすべて書評を書こうと思っているため、今回も記事にします。発売は10/27のようです。 ソフトウェアアーキテクチャ・ハードパーツ ―分散アーキテクチャのためのトレードオフ分析 作者:Neal Ford,Mark Richards,Pramod Sadalage,Zhamak DehghaniオライリージャパンAmazon おことわり まず指示語についてです。記事中で「本書」「この本」と書く場合は『ソフトウェアアーキテクチャ・ハードパーツ』を指します。また、「著者」は本書を執筆した人を指すものとします。「筆者」といった場合、それは私のことです。 いわゆるスキミングをした状態で一旦書評をするため、本書の細かい議論の見落としや用語の誤認識が含まれる可能性があります。この書評は
Rust を使っているとどうしても思い出しながらでないと書けないものに標準入力、ファイルの読み書きがあります。というのも、Web アプリケーションを作るソフトウェアエンジニア(私)の場合日常業務でそこまで必要になる操作ではなく、ファイルの読み書きは S3 の SDK を叩くことのほうが多いですし、ターミナルからの入力はほぼ使うことはないためです。 しかし、ちょっとした CLI ツールを作るとなると話は変わってきます。これらはもちろんものによりますが、比較的プリミティブな標準入力操作やファイル読み書きの操作を求められるためです。そういった操作の際、Rust は Python ほどは楽に書けないというか、気をつけなければならないポイントがいくつかあり「手軽」とは呼べないことがあります。 こうした「手軽さ」のなさは面倒なポイントのひとつではありましたが、先日 ezio というクレートを作者の方が
『コンセプトから理解するRust』を一足お先に読みました。Rust に関する日本語書籍の発刊が増えてきており、読むより発売するペースが上がっている気がします。私もだんだん精読するより積むほうが増えてきてしまいました。 今回も例のごとく、全体に目を通した上で感想などを書いていきたいと思います。本自体は2/12発売のようです。 コンセプトから理解するRust 作者:原 旅人技術評論社Amazon 本書はアプリケーションを実装しながら Rust を学んでいくというより、Rust に登場する特有の概念を解説しながら Rust を学んでいくというコンセプトになっています。その過程で他のプログラミング言語の実装と比較しながら、他の言語と Rust で違う点を説明したり、あるいは共通しているポイントを見つけたりしながら Rust 特有の概念を理解していきます。特有の概念というのは、代表的なものは本書の表
先日発売になった『手を動かして考えればよくわかる 高効率言語 Rust 書きかた・作りかた』を、一通り目を通していました。感想を記しておきます。なお感想は、例のごとく全体に軽く目を通して、いくつかサンプルプログラムを写経してみた程度の上でのものです。あらかじめご了承ください。 手を動かして考えればよくわかる 高効率言語 Rust 書きかた・作りかた 作者:クジラ飛行机ソシムAmazon Python から Rust に入門するという切り口 最近はRustの本が多く出版され始めており、読むよりも買うほうがだんだん多くなってきてしまっています。とくに単なる言語の入門にとどまらず、さまざまな切り口から解説する本が増え始めているように思います。本書もそのひとつで、Python から Rust に入門しようという非常に特異な切り口の一冊です。 Python から Rust という切り口は、多少なりと
この記事は Rust Advent Calendar 25日目の記事です。Merry Christmas! 今年の Web バックエンド開発関連で一番大きかったなと思っているイベントに、Axum のリリースがあります。2021年の夏頃に tokio チームからリリースされた Web アプリケーション用のライブラリです。 基本的なデザインは actix-web 等とそこまで変わらないものの、マクロレスなのが大きな特徴かなと思います。tokio 上に直接載るアプリケーションになり、独自のランタイムをもたないため、tokio のバージョン管理に悩まされずに済むのも大きなメリットかも知れません。私はあまり重要ではないと思っていますが、明示的に #![forbid(unsafe_code)] をしているのでライブラリ内部に unsafe がないのも特徴かもしれません。 github.com 現在のん
先日発売になった『詳解Rustプログラミング』という本をひとまず一通り軽く読んでみました。実は原著の Rust in Action をすでに読んでしまっていたので、内容の流れは把握していたのですが、私は一応日本語ネイティブなので日本語の書籍は非常に嬉しいですね。 詳解Rustプログラミング 作者:Tim McNamara翔泳社Amazon Rust in Action 作者:McNamara, TimManning PublicationsAmazon 本書をまず読んで最初に思い出したのは、私も大好きな『低レベルプログラミング』という本でした。この本は C とアセンブラで書かれているのですが、これを Rust でやり直す感覚を覚えました。コンピュータサイエンスやコンピュータアーキテクチャの話題が豊富で、大学のコンピュータサイエンスの講義を受けているような印象を持ちました。 低レベルプログラ
さすがに時差の関係で全部は見られませんでしたが、出席していたのとアーカイブが残っていたので、いくつか気になったものを見てみました。ただ、家事などの合間に聞き流ししていた内容を思い出して書いているので、記憶が曖昧なところがあります。ご了承ください。すべてのセッションの動画リストはこちらにあります。 字幕はいくつか見てみましたが、自動生成でしょうか。second が segment 、toml が thermal になっていたりと少し間違っている箇所はありました。ただ、だいたいあってるので大丈夫そうです。もしよかったら、動画も見てみてください。 Whoops! I Rewrote It in Rust by Brian Martin Supercharging Your Code With Five Little-Known Attributes by Jackson Lewis Fuzz D
9/18 に Rust.Tokyo 2021 を開催しました。2020年はコロナの影響が読みきれずキャンセルとしたので、2019年以来2度目の開催です。この2年間で Rust そのものやコミュニティイベントに関してさまざまなことがあったような気がしますが、それは後ほど書くことにします。 今年は2020年に引き続き世の中ができるだけ対面を避けよう、という状況の中行われたカンファレンスとなりました。したがって Rust.Tokyo そのものもオンラインで行いましたし、今やカンファレンスでよく見かけるようになった YouTube Live を使ったよくある形式を採用しました。もうかれこれこうした世の中になって1年半以上経つわけですが、オンラインカンファレンスは市民権を得ているように感じます。 今振り返ってみると、実はオーガナイザー側も一度も対面で会うことなく開催したカンファレンスとなりました。結
今年の言語として Swift を選んで最近練習しています。Swift は iOS を作るために使用されることが多いですが、言語としての表現力が非常に豊かで、たとえば Web アプリケーションのサーバーサイド開発に利用できるのではないかと思っています。まだ Swift を学び始めでランタイムなどには詳しくないので、どこまでいけるのかはわかっていません。が、可能性を感じます。 新しい言語を学ぶ際にやることはいくつかあるのですが、型の表現が豊かそうな言語であればまっさきにやるのは「連結リストを作ってモナドっぽいものを足してみる」です。Swift にはジェネリクスがあるほか、言語に組み込みで Optional などの型が存在しており、それなりに型の表現力があるのではないかと感じました。なので、試してみました。 結論としては、 連結リストは結構気持ちよく書ける上に、言語特有のおもしろい機能があるよう
Rust を読んでいると、さまざまなものに型付けをするコードをよく見かけます。強めに(厳密に)型付けをする文化があるプログラミング言語、と言えるかもれません。 バリデーションチェックに対してもこうした強めの型付けが適用できます。具体的なバリデーションの情報を型情報として落としておくことで、コードを読むだけでバリデーション情報を把握できたり、あるいは誤った値の代入をコンパイルタイムで弾くことができるようになるというメリットを享受できるようになります。 一方で、型情報があまりに複雑化すると、あまりそうした型付け手法に慣れていないプログラマがキャッチアップするのに少し時間がかかったり、あるいはとんでもなく複雑になってそもそもその型を作り切るのが大変というデメリットも生じることになります。 今日紹介する手法は、さまざまなトレードオフの上に成り立つものであり、もし導入の結果、そのプロジェクトにとって
先日仕事で、Rust を使用してとあるアプリケーションを作っていたところ、Guava の Multimap のようなデータ構造がほしいと思う場面がありました。 Guava の Multimap というのは、Java のライブラリ Guava に存在する HashMap の value 側がリストやベクタなどの複数要素を格納できる構造になっている Map です。具体的には下記のようなシグネチャなのですが、値側の実体はベクタとして管理される(つまり実質、HashMap<String, List<String>>)というものです。詳しいチュートリアルはこちらにあり、下記では Java コードをこの記事より引用させていただいております。 String key = "a-key"; Multimap<String, String> map = ArrayListMultimap.create();
先日 rustc に上がっていた PR にこんなものがありました。Vec::retain を最適化したという PR です。他の PR の様子なども見る限り、以前からここは取り組まれていたようですが、この度ようやく修正が入り、Vec::retain が高速化しました。 github.com 実際どのくらい高速化したかと言うと、ベンチマークを見る限りではほとんど倍になっていたケースもあるくらいには速くなっていました。その他でもパフォーマンスが微妙に高くなっていたりと、だいたいのケースで高速化しているように見えました。 この PR では、 swap の廃止 truncate の廃止 の2つが行われています。truncate の方は、実装の修正の関係で新実装の設計に合わなくなったためについでに削除されたように読めましたが、swap は明確な意図をもって削除されています。この swap の削除の話が
かとじゅんさんのお誘いで、私塾匠真堂にて登壇させていただき、Rust に関する話をさせていただきました。ありがとうございました。 今回のセッションを通じて Rust を始めたくなった方向けに、Rust をはじめるための資料をいくつかリストアップしてます。よかったらどうぞ。 プログラミング言語の学習方法について Rust についてまず概観を掴む 文法を学ぶ 何かアプリケーションを実装してみる ちょっと突っ込んだ話を知りたい コミュニティの力を借りる 仲間を見つける 更新履歴 プログラミング言語の学習方法について みなさんは新しいプログラミング言語を学ぶ際、どのように学びますか? 私は、軽く制御構文やデータ型の作り方などを学んだ後は、すぐにアプリケーションを作ってみて、詰まったらリファレンスを参照するといった学び方をしていることが多いです。 逆に、リファレンスをまず眺めて、文法をしっかり把握し
この記事は言語実装Advent Calendar 2020 25日目の記事です。(2022-11-06: 記事の内容を追記していますが、この記事の結論としては「似たようなものは作れるが、完全体にはならない」です) 前提知識 高階カインド型 モナド 従来のエミュレーション方法 Generic Associated Types を用いたエミュレーション(new!) 型クラスを定義する Functor を用意する Pointed を用意する Applicative を用意する Monad を用意する いくつか型を実装していく 現状実装できないもの do 記法 Generic Associated Types(GATs)とは何か 追記(2022-11-06) リポジトリ 参考文献 モナドに関する話題が言語実装アドベントカレンダーの範疇に入るのかわかっていませんが*1、プログラミング言語がお好きな方
この記事は Rust Advent Calendar 2020 ならびに CyberAgent Developers Advent Calendar 25日目の記事です。 今年のはじめの頃になりますが、『CPUの創り方』という本に載っている TD4 という CPU を実装してみました。TD4 は「とりあえず動作するだけの4bit CPU」の略です。この本に載っている CPU エミュレータを実際に実装してみました。ただし、本書には GUI が載っていましたが、それは省略しました。 CPUの創りかた 作者:渡波 郁発売日: 2003/10/01メディア: 単行本(ソフトカバー) 「最近話題の RISC-V などの CPU エミュレータを作ってみたいものの、いきなり作るにはハードルが高い。何か簡単なもので素振りをして CPU の動作の仕組みをまずは知りたい」という方にはかなりオススメできる教材だ
タイトルは記号のググラビリティ確保のためにわざとつけています(笑)。動作はすべて、Rust 1.47.0 (stable) です。nightly を使用した場合は nightly と文中に記載しました。 TL; DR Rust には ! という「何も返さないことを示すモノ」が存在する。 never 型と呼ぶ。 値を何も返さない計算の表現として使用される。 普段は型強制される(ので、使っていることに気づかないかも)。 never 型は安定化されていない。 TL; DR 基本 ! = never 型 never 型はどこに出てくるのか Coercing 発展 never 型はまだ安定化されていない std::convert::Infallible で、なんで Rust には ! がいるの? Rust ではなぜ、関数の戻り値だけにしか ! を使用できなくしてあるの? 今回も記事が長くなってしまい
すごく今更感がありますが、先週末出版しました。 私のプライベートがとても忙しくしばらく書けませんでした。書籍を書きましたのでご報告です。 実践Rustプログラミング入門 作者:初田 直也,山口 聖弘,吉川 哲史,豊田 優貴,松本 健太郎,原 将己,中村 謙弘発売日: 2020/08/22メディア: 単行本 ちなみに、著者、まだ現物を受け取っていません。書店で現物を触りたいなと思って見に行きましたが、今週末は在庫切れで本屋さんにありませんでした。 電子書籍は調整中です。 私の担当は1章、3章の一部、11章の一部です。 他の共著者のみなさんの記事 (2020/09/22 追記) 共著なのにこの記事のタイトルを「書きました」としてしまったので、私もだぞ、とみなさんがタイトルで煽ってきています(違 私も『実践Rustプログラミング入門』を書きました - matsu7874のブログ 私だって『実践R
Scala の trait と Rust の trait は微妙に使い方が異なる、とよく質問を受けます。たしかに、使い心地は微妙に異なるかもしれません。Scala はオブジェクト指向を中心に設計された言語ですが、Rust はそれを中心に設計されているとは言えません*1。こういった言語設計の差が、trait の使い心地の違いを生み出していると私は思っています。 両者の trait には、共通した特徴もあります。共通した処理をまとめあげるという意味では同じ目的をもっているといえますし、また、「犬は動物である」「猫は動物である」の共通性を示すことで、共通したものをひとまとめに処理しきることもまた可能です。 Scala には implicit という強力な機能が存在します。これは柔軟でスケーラブルなソフトウェアデザインを可能にする Scala の特徴のひとつです。非常にすばらしい機能です。この機能
async/await に対応した HTTP サーバーの tide を先日紹介し、先日も記事を書きました。 同様に async/await に対応した HTTP クライアントの surf というライブラリがあるようなので、それを軽く紹介したいと思います。執筆時点での surf のバージョンは 1.0.3 です。 surf 機能 準備 GET リクエストを送る JSON を送る POST リクエスト ミドルウェア まとめ surf github.com async/await に対応した HTTP クライアントです。HTTP サーバー用のライブラリ tide と同様に、async_std を非同期処理ランタイムに使用しています。ちなみに、Rust の HTTP クライアントライブラリで扱いやすいものとしては、 reqwest が有名で、私自身もよく利用します。reqwest は非同期ランタイ
ANTLR 作者による本で、中身は後半から ANTLR を使った実装でした。ただ、ANTLR を使用する・しないに限らず、解説を読むだけでもインタプリタ制作に詳しくなることができる一冊かなと思います。要するに、何か特定のツールや言語に限らない広く使える知識を習得できるということです。 また、中身は Java で実装されていますので、他のコンパイラ本のようにがんばって C 言語を読む必要もありません。ただ、実装がちょっと古いように感じたので、適宜最近の Java の実装に置き換えて考えてみるといいかなと思います。 言語実装パターン ―コンパイラ技術によるテキスト処理から言語実装まで 作者: Terence Parr,中田育男,伊藤真浩出版社/メーカー: オライリージャパン発売日: 2011/12/24メディア: 大型本購入: 5人 クリック: 333回この商品を含むブログ (13件) を見る
Rust Advent Calendar 2019 25日目の記事です。 tide は現在開発途中の、 Rust の async/await に対応した HTTP サーバーを構築するフレームワークです。not ready for production yet なので本番にこれを使用するのは難しいかもしれませんが、いろいろな例を見てみた感じとても使いやすそうで、注目に値するフレームワークの一つです。 記事を少し読んでみたのですが、どうやら 2018 年に Rust の Network Service Working Group が開発に着手したフレームワークのようですね。現在のステータスを追いかけていないので詳しくはわかりませんが、Rust チームの方々が何かしら関わっているフレームワークということで、少し安心感がもてるかなと私は思っています。async/await が今年無事安定化されたの
Photo by: @katsumata_ryo まずはお礼をさせてください。10月26日に Rust.Tokyo を開催しました。ブログ等での反響を見る限り、みなさんお楽しみいただけたようで、主催者としては何よりです。カンファレンスを初めてやるメンバーが多い中で、前日まで準備にいろいろ時間がかかり、当日至らない点も多いだろうなと思っての開催でした。みなさんの温かい応援ありがとうございました。 とくに、スポンサーさんとスピーカーさんがあんなにたくさん集まるとは思っていませんでしたし、参加者のチケットがこんなに早く売り切れてしまうとも思っていませんでした。また、あんなに積極的でプロフェッショナルなボランティアスタッフのみなさんが集まってくださるとも思いませんでした。 Rust のような、日本での採用事例がまだまだ少ない言語のカンファレンスを開催するとなった際の一番の懸念として想定されたのは、
思い返すと、Rust をはじめて知ったのは2年前でした。ある Googler が記事の中で Rust に対して惜しみない賛辞を送っていた記事でした。私はこの記事に大変共感し、感銘を受けました。Rust がやりたくなった。 当時の私は、金融業界で使われるリスク管理計算機の開発に携わる開発者でした。当時は Java で計算機の業務ロジックや金融工学計算のロジックを書いていました。その業務を日夜送る中で、複雑化した並列処理計算や並行処理計算にまつわる多くの障害に直面しました。それらは原因がよくわからないけれども、並列・並行処理起因であることだけはわかる障害でした。 並列処理・並行処理で苦しめられた経験がなかったとしたら、Rust という言語に興味をもたなかったかもしれません。当時そういった苦しみを感じていた私は大きく感銘を受けました。プログラミング言語の処理系の力でこれほど多くの問題を解決できる
暇ではないです.言い出しっぺの人晒しときます. とりあえず確認してるのは - Go - Ruby - Perl あとなんかあったっけ?— ema (@ema_hiro) 2019年2月28日 歴代のタイトル 面倒なので,まずは日本語のタイトルを都合よく解釈して英語にしていきます. 赤・緑 (Red/Green) 青 (Blue) ピカチュウ (Pikachu) 金・銀 (Silver/Gold) クリスタル (Crystal) ルビー・サファイア (Ruby/Sapphire) ファイアレッド・リーフグリーン (Fire Red/Leaf Green) エメラルド (Emerald) ダイヤモンド・パール (Diamond/Pearl) プラチナ (Platinum) ハートゴールド・ソウルシルバー (Heart Gold/Soul Silver) ブラック・ホワイト (1, 2ともに)
Scala の記事を書くのは地味に初めてかもしれません.今回は,Scala の cats-effect というライブラリの中にある IO モナドを使って Web アプリケーションを構築してみたいと思ってやってみたので,その話を簡単にメモしておきます. cats とは? Scala 界隈だとかなり有名です.Scalaz か cats を選ぶことが多いと思います.Scalaz も大変すばらしいライブラリですが,今回は cats の話を少しします. cats は関数型プログラミングを Scala で行うために必要な抽象度の高い関数セットを提供するライブラリです.抽象度の高い関数セットとはどういうことか…私なりの理解で行くと,通常 Scala の List[A] や Option[A] などには flatMap という関数がついていますよね.あれはあくまで,個別具体のモナドに対する個別実装がなされ
この記事は Rust Advent Calendar 2018 25日目の記事です. Rust 2018 edition より,Procedural Macros (以下もずっと英語表記します) という機能が新たに追加されました. Procedural Macros においては, TokenStream というストリームが概念の中心にあります.TokenStream と呼ばれる抽象的なトークンのストリームを引数として受け取り,何かしらの加工をかけて TokenStream を返すという処理を行います.AST を受け取って,別の AST に加工して返すと説明したほうがわかりやすいもしれません.中にコンパイラがいるというイメージでしょうか. 本日の記事ですが,まず動かす段階でちょっと躓いたので簡単に動かし方を書いておきます.その途中でいろいろ遊んでみたので,その結果も書いておきます.内部実装が
関数型プログラミング言語を触っていると,「モナド」という言葉が登場します.関数型プログラミングの文脈でのモナドは,圏論という数学の一分野が元ネタです.しかし,モナドにはさらに元ネタがいます.高校の倫理をやった方は,聞き覚えがあるかもしれません.そうです.ライプニッツです*1. 私は圏論の論文を一切読んだことがなく,Wikipedia 情報でしか知りませんが,どうやらソンダース・マックレーンという人がライプニッツのモナドを借用して命名したのがこの,圏論のモナドなのだそうです. 当初は圏論の勉強をしてからライプニッツのモナドの記事を書いてみたいなと思っていました.しかし,案の定数学の素養が足りず,学習に難儀したので断念しました.またの機会にします. なお私はそもそもライプニッツが専門だったわけではありませんので,解釈の間違いなどありましたら教えていただけますと幸いです. 哲学を学習するにあたっ
Rust LT#2 で話をしました.「インタプリタを作ってまなぶ Rust らしい書き方」という話です.内容は実は,Ruby のコードを Rust のコードに置き換えてみようという内容でした.Ruby 製のインタプリタを Rust に置き換えるセッションです. speakerdeck.com しかし,5分では無理がありました.とくにインタプリタを2分以内で説明し切るのは完全に無理で,その実装を3分で説明し切るには時間が少なすぎました.なので,今回インタプリタを自作してみようという方向けに,どのような背景知識が必要となってくるのかについて簡単に書き残しておこうと思います.また,今回上げたソースコードの解説もこの記事の後半で加えておきます. インタプリタ側の話 コンパイラという単語についてはすでに聞いたことがあるという前提で進めます.コンパイラそのものの解説.あくまでイメージを掴んでもらうこと
シェルをフルスクラッチしてみようと思い,まずは手始めに簡易的なシェルとして紹介されていた LSH を実装してみました. 実装したソースコードはこちらにあります. github.com LSH に実装されている機能 LSH には次のコマンドが実装されています. cd help exit 指定したプログラムの実行 これだけのコマンドを簡単に実装するだけなので,システムプログラミングのいい入り口になるかなと思います.なので,興味のある方はぜひチャレンジしてみてください. 使用したライブラリ nix: これは以前にも紹介したことがありますが,今回はシステムコールの呼び出し部分をすべてこのライブラリで実装しています.Rust の unsafe な処理を safe になるようにラップしたライブラリで,unsafe ブロックを呼び出さずに済むメリットがあります.ただ,実装されていないコマンドも多く,今後
次のページ
このページを最初にブックマークしてみませんか?
『Don't Repeat Yourself』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く