今月の活動 (knowbug、Next.js、読んだ記事ほか)
- 前回 (2023-02-28) https://vain0x.github.io/blog/2023-02-28/diary/
 
knowbug
- 前回書いた「タイマーによるポーリングは非効率」という問題の検討を進めた
 - 調査内容や改善案などを書いた: サーバー・クライアント間の通信手法の改善案
 - どの方法もいまいち複雑で、解決しようとしている問題に対してオーバーな感が否めず、wontfixになるかも
 
Next.js
- 新しいコードベースが始まったので改めて Next.js (Reactを使うウェブフレームワーク) をみている (v13)
 
/app とサーバーコンポーネント
appDir などの新機能が増えていた
appDirを使うとコンポーネントが既定で サーバーコンポーネント (SC) になるようだった
- サーバーコンポーネントはデータベースにクエリを送れたりして、初見だとぎょっとする
 - 使用感的には従来の 
_document.tsx(サーバーサイドレインダリング(SSR)用に<html>...部分を記述するパート) やgetServerSideProps(SSR時にデータフェッチを行うフック) がうまく統合された感じがある - (それ以外の恩恵はよく分かっていない)
 
エフェクト
- Reactの公式ドキュメントが 
reactjs.orgからreact.devに変わった - 以前から話題になっていたようにエフェクト (
useEffect) の解説が再構築されているようだ - 一点、イベントハンドラで 
fetchを行うのはむしろアンチパターンだと認識していたので初見ではぎょっとしたuseEffectから送ってアンマウント時にクリーンアップできるようにすべきという考え- 例えばリクエストの完了時に遷移を起こすやつ
 - アンマウントの検出はほかの方法でやるべしということなのかもしれない (?)
 
 
dialog
dialog要素 を使ってモーダルを出せるやつを試したところ、いい感じになっていた- ブラウザによる 
dialogのサポートが進んだおかげ (Next.jsではなくWeb一般の話) - 足りない部分はこの記事が参考になった: dialog要素を使う今後のモーダル実装
 
- ブラウザによる 
 - いままでReactを使ったUIでモーダルダイアログを出すのは 
reactjs/react-modalを使っていた 
読んだ記事など
A fast alternative to the modulo reduction – Daniel Lemire’s blog (公開日 2016-06-27)
ハッシュテーブルでハッシュ値をインデックス (0以上N未満) に潰すのは64ビットの乗算で済むという話。たしかに……
How Should Compilers Explain Problems to Developers? (公開日 2018-11-08)
- 処理系のエラーメッセージの分かりやすさに関する調査
 - メッセージ内の論理構造 (主張→根拠→解決策 みたいな)を分析してたり、エラーメッセージと質問サイトにおける回答文の差を比べてたりしていた
 - 処理系開発の視点でいえば「この問題についてもし質問サイトで聞かれたらなんと答えるか」を基準にエラーの出しかたを考えてみるとよいのかもしれないと思った
 
The quest for the fastest linked list - Johnny’s Software Lab (公開日 2022-08-04)
- 連結リストの性能に関する記事
 - 同じ構造でもセルがメモリ上で近い位置に配置されているほうが効率がいい (いつもどおり局所性の話)
 - そのためにインスタンスごとに別々のアロケータを使うとか動的配列にノードを持たせるとかの手法がある
 
@tomasgrosup’s tweet (公開日 2022-10-24)
- シグネチャファイル (
.fsi) があると F# のコンパイルが速くなるらしい - コンパイラオプションの 
--allsigをつけると自動で生成できる - とりあえずミローネ言語で試している: chore: Specify –allsig to generate .fsi files for build performance
 
続くといいな日記 – 双方向型検査: 検査と構築の融合 (公開日 2023-02-21)
双方向型検査のかなり詳しい解説がきた
Zig And Rust (公開日 2023-03-26)
- 筆者 (matklad氏) がZigとRustで開発した経験や、その作ったソフトウェアの性質の違いから言語の違いを考察している記事
 - 興味深い
 - 
“architect the software such that there’s little resource management to do”
- 言語仕様に注目するとZigをRustから所有権を引いたものぐらいに思ってしまいがち
 - その違いは根本的な設計に影響するらしい
 
 - TigerBeetle的なシステムを作る機会が私の場合はない、と思ったが、ミローネ言語のコンパイラ本体はそうかもしれない
- ビルドツールとしての側面や標準ライブラリはそうではない
 - 記事中にあるようにLSPサーバーもそうではない
 
 
qnighy/umo Wiki (2023-03-15〜)
言語設計や処理系開発のノートというか日記みたいな感じで面白い