Rust: イテレータメソッドの by_ref() と take_while() の組み合わせには気をつけようという話(てかドキュメントを読もう)

事の発端 take_while というイテレータメソッドがある。 doc.rust-lang.org 詳しい説明は公式に任せるとして、 take_while した後の残りが欲しかったが take_while は self を取るので 一回使ったら再利用できない。by_ref を使ってrestを取ろうとした。が、…

株式会社はてなに入社しました

株式会社はてなに入社しました 株式会社はてなに入社しました - hitode909の日記

Option<Self> を返す trait を実装したかったがRustコンパイラ君が賢すぎただけの日記

trait OptionalConstructor { fn optional_new() -> Option<Self>; // ^^^^^^^^^^^^ doesn't have a size known at compile-time // Option<Self> where Self: Sized; } Compiling playground v0.0.1 (/playground) error[E0277]: the size for values of type `Self` ca</self></self>…

Rust: Fully Qualified Syntax について簡単なメモ

2021/3/31 更新 高度なトレイト - The Rust Programming Language 日本語版 を知らなかった、これを読んでください 経緯 数時間前に「僕はチンパンジーだからでパーサコンビネータ使うの難しいな〜、LR(1)パーサを手書きするのが一番早いですよ〜」と同僚と…

inkwellにPR投げてマージされた

OSS

inkwellって何 RustのLLVMバインディングです、IRをいい感じに吐き出すと思います。*1 該当のPR Refactor: use matches! in is_xxx functions instead of if-let expression. by Krout0n · Pull Request #232 · TheDan64/inkwell · GitHub *1: まだ使ったこ…

また serde-rs/json にPR投げてmergeされたので Value::pointer / Iterator::try_fold のおすすめメソッド2選についてメモ

また? 前回のです serde-rs/json にPR投げてmergeされた - KRAZY感情STYLE 今回のPR github.com Value::pointer とは pointer を使わずに obj[x][y] を取ってくる例を考えてみます use serde_json::{Value, json}; let obj = json!({"x": {"y": 1}}); let v…

serde-rs/json にPR投げてmergeされた

OSS

serde-rs/jsonって何 Rustで言うJSONを扱うライブラリの中で一番勢いあるやつ 実際のPR 一発mergeされて嬉しかった github.com 経緯 RFC 6902 - JavaScript Object Notation (JSON) Patch を読んで実装したくなる 中のMapがEntryをサポートしてることに気づ…

VSCode commit欄 日本語入力できない 解決方法 2021年2月 【今すぐアプデ】

追記: 2021/2/5 15:20 今朝アップデートが来て、version 1.53.0 にてこのバグが修正されました。下に示した部分からアップデートを行うと良さそうです。 どんな症状? このようにCJK Characters*1を打つと固まる github.com このIssueからGIFを拝借してきま…

ReactのContextを使ってログイン/ログアウトするだけのSPAを作った

昨日の記事なんですけもう少しContextのありがたみをがありそうな題材としてログインする例を考えた。 krazy.tokinia.me ソースコードとか所感 github.com gyazo.com こんな感じに動く。ここからアプリが大きくなるとこのContextでやってるありがたみが大き…

雰囲気でReactのContextをstateを使っていじるやつを実装した

ReactのContext周りで何もわからんとなったので手元でシュッと作った、本当はNetlifyとかでデプロイしたかったけど $ yarn build で怒られて直すのも面倒だったのでもういいや gyazo.com > Build error occurred Error: Build optimization failed: found pa…

30日でできる! OS自作入門 を読むために nasm_of_nask というコンパイラを作った話

OSS

この記事は はてなエンジニア Advent Calendar 2020の22日目の記事です。 昨日はid:motemen さんの PCを離れたらマイク音量を下げるmacOSアプリを作った - 詩と創作・思索のひろば でした! qiita.com 経緯 一ヶ月に一回、自分の知的好奇心を満たすのは自作O…

whywaitaはフッ軽

この記事は whywaita Advent Calendar 2020 の 22日目の記事です! 21日目の記事は id:yu_ki_kun_0 さんが担当でした! adventar.org ここ2ヶ月くらい whywaita と僕はラーメンをよく食べに行きます。そのうち2回とも当日の夕方に「行きたいね〜」「今日行く…

Kroutonの睡眠を支えるほげほげ

この記事は whywaita Advent Calendar 2020 - Adventar 11日目の記事です adventar.org 前回は kyontan の ICTSCのコンテストサイトを支えた技術 でした! 飛行機乗りたいけど免許も取りたいしそもそも机とかも欲しいので優先度ガタ落ちしてます!!!!ちな…

self.age++; // 今年で24歳になる

11/23が誕生日です、今年も無事に年齢がインクリメントされました。毎年この日は祝日なので学校とかで祝われたことがないまま全て卒業してしまいました。心はまだ14-17歳くらいなのに肉体は...助けて...。社会に出ていますが何もわからない...。とりあえずコ…

sshuttleっていうOSSにcontributeした

OSS

色々あって sshuttle/sshuttle というPythonで書かれたOSSのソースコードを読んでいたのですが、デグレっぽいところがあったのでPR投げてマージされました。 github.comこれまで能動的なOSSプロダクトへのコントリビュートは予めIssueが立っているものの修正…

ISUCON10にTrust Rustチームとして参加して予選敗退しました

てがきはてなブログがリリースされた日に書いたんですけど誤操作で消しちゃって萎えてましたが再度書きました。一緒に出てくれてた id:dekokun と id:stefafafan には感謝です。僕は実装を読んでゴリゴリやる役目だったのに筋力が足りなくて全然出来ませんで…

std::sync::mpsc::channelで少しハマったのでメモ

std::sync::mpsc - Rustの挙動についてちょっと知見を持ったので綴っていく。 やりたいこと めっちゃ重たいタスクがN個あって、それぞれにスレッドを作ってmpsc::channel経由でメインスレッドに値を返してもらう例を考える。 use std::thread; use std::sync…

Derive macrosを使ってstructにBuilder Patternを生やしてくれるやつを書いてみた

こんばんは、id:Krouton です。ISUCON10にRustで参加した話をてがきはてなブログで書こうと思ったら消えたので萎えました。ISUCON11までには書きます。多分...。 本題 Derive macros使ってますか?serdeとか使うと出てくる #[derive(Serialize, Deserialize)…

binutilsが入ってるとopamでswitch createした時のビルドに失敗するっぽい?

➜ ~ opam switch create 4.09.0 <><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><> 🐫 [ocaml-base-compiler.4.09.0] downloaded from cache at https://opam.ocaml.org/cache <><> Processing actions <><><><><><><><><><><><>…

goroutineで自作ランタイム上にsetTimeoutを再現する(実装の手順とcallback-hellもついてくるよ!!)

こんばんは、id:Kroutonです。RustのFutureについて調べていたはずが*1いつの間にかcallbackでsetTimeoutを再現するコードをGoで書いていたのでその実装手順について簡単に書きたいと思います。実用性はほぼないです。 注意書き 筆者がプログラミングを始め…

thread_localメモ

自分用覚書、thread_local!で定義したstatic変数はスレッド毎に LocalKeyという構造体でwrapされる。各スレッド変数はそれぞれ外側に不変である、可変参照をしたいならRefCellを被せたりする。 use std::cell::RefCell; thread_local! { static X: RefCell<Vec<usize>> </vec<usize>…

SEKIROトロコンした

全体の7.1%の文章です

自作言語の構文を考えるのがめんどくさいそこのアナタ、Rustのマクロで楽してもいいわよ?

最近 とっくんのYouTubeチャンネル - YouTube さんの再度ハマり言語野が支配されてます、id:Krouton です。 事の発端 頭の中の大蛇丸が「今日はexpression-orientedな言語を作っていくことにするわね」「構文を考えるのがめんどくさいそこのアナタ、AST設計…

Goの[]byte -> stringへのcastってshrinkするんですか?

珍しく技術系の投稿をします(ただし疑問、忘備録 tooEnoughBuf := make([]byte, tooEnoughSize) Write1(tooEnoughBuf, src) string(tooEnoughBuf) == string(src) // false をしたい時のbufの長さをshrinkする方法を考えています。なぜこの等価判定がfalseに…

株式会社はてなに入社しました

id:Krouton です。株式会社はてなに新卒入社しました。 本日からWebアプリケーションエンジニアです。 株式会社はてなに入社しました - hitode909の日記所属してる会社は隠そうと思いましたが、GitHubのOrganizationを見れば分かってしまうし隠すのもなんか…

五カ年計画(後付)した電気通信大学を卒業しました

こんばんは。3/31で無事卒業できたので電通大卒業エントリを書こうと思います。今は無き情報理工学部の先端工学基礎課程(以下、K課程)に所属していました。 動機 親「国公立に入れ」 僕「家から近いから横国がいいな〜、勉強無理だ。電通大ってとこあるじゃ…

Haskellやる

いちいちTokenizerやParserをライブラリを使わずに書くのはダルい。だからパーサジェネレータ(lex/yacc)を使ったりするものだが、Rustで書こうとするとパーサコンビネータである github.com が強いっぽい。nomを見てみたら何もわからん状態になったので影響…

Neovimに気持ち入門した

プログラミングを始めてからほとんどGUIエディタにしか触ったことがなかったしタイルマネージャを触り始めてからキーボードで全部アレコレしたいなという気持ちが強まったので試しにNeovimを突っ込んだ。 VSCodeにもVimのExtensionあったし気が向いたらそっ…

プログラミング in OCaml 5th chapter 練習問題を解いた

練習問題 5.1 let downto1 n = if n < 1 then [] else let rec downto1' n = match n with | 1 -> [1] | n -> n :: downto1' (n - 1) in downto1' n;;

プログラミング in OCaml 4th chapter 練習問題を解いた

練習問題 4.1 let uncurry f (x, y) = f x y;; 練習問題 4.2 let rec repeat f n x = if n > 0 then repeat f (n - 1) (f x) else x;; let fib n = let (fibn, _) = repeat (fun (f, s) -> (s, f + s)) n (0, 1) in fibn;;