2021年も色々あったので振り返りたい。
目次
私生活
住居に関しては東京を離れて、関東の某所に引っ越した。
仕事はリモートワークで続けている。一応正社員になった。
結婚した。
計算機周り
ハードウェア
コンピューターのハードウェア面については、昨年末に買ったApple Silicon Mac (Mac mini)を常用するようになった。スリープ中に時々落ちてる気がするが……OSのアップデートで修正されたりするのだろうか?
自作Windows機も持っているのだがCPUがIvy Bridge世代で、Windows 11の正式なサポートもないしいいかげんリプレースしたい(が面倒くさい)。
プログラミング、OSS活動
今年力を注いだのはなんと言ってもStandard ML処理系「LunarML」の開発だ。今年の前半はHello worldが書けるか書けないかと言う話をしていたが、モジュールシステムを含めSML ’97の言語機能をほぼ網羅するところまで漕ぎつけた。とはいえまだまだやるべきことはたくさんある。2022年も引き続き実用に向けて頑張っていきたい。
- 自作SML処理系進捗:Hello world(4月)
- 自作SML処理系進捗:Hello Lua!(5月)
- LunarML進捗:signatureの実装に向けて(6月)
- LunarMLの進捗と妄想(9月)
- LunarML進捗:functorの実装(10月)
- LunarMLの進捗2021(12月)
Haskellについては、昨年できなかった「GHCへ貢献する」という目標を達成した。GHCについては継続的にウォッチを続けており、Haskell Day 2021ではGHCの動向について話した。
- GHCに初めてコントリビュートした/最近のGHC動向(3月)
- GHCいじくり日誌・AArch64編(8月)
- GHCのバックエンドについて(11月)
- GHC 9.2の新機能と、GHCの動向2021(Zenn/11月)
- GHC 8.10とGHC 9.0の新機能(Zenn/11月)
- Apple Silicon MacでのHaskell/GHCの現状・2021年末編(Qiita/12月)
Haskellについては「Haskellでの型レベルプログラミング」みたいなシリーズ記事を書きたいと思っているが、後半部で自分の理解の甘さが浮き彫りになり、書けていない。
9月末から10月前半にかけて、ICFP Programming Contest 2006にチャレンジした。この際、AArch64を対象とするJITを実装した。
- ICFP Programming Contest 2006 “The Cult of Bound Variable” に挑戦してみる(9月30日)
- AArch64でJITしてみる(10月3日)
- Universal MachineのJITコンパイラーを書いた(10月3日)
- ICFP Programming Content 2006: ADVENTURE(10月14日)
- ICFP Programming Contest 2006進捗(10月17日)
- 記事にはしていないが、なんやかんやで3006点を達成して滅亡直前のログを読むことに成功した。
ClutTeXのメンテは細々と(気が向いた時に)続けている。Apple Silicon Macでの問題を修正し、頂いたPRをマージし、リリースを出した。ClutTeXは長期的には(LunarMLを使って)Standard MLで書き直したいと思っているが、短期的な目標としては「SMLで設定ファイル用のTOMLパーサーを書いてLuaから利用する」あたりが適切だろうか。
昨年ほどではないが、今年も浮動小数点数に関する記事を書いた。去年迷っていた論文については、同人誌の売り上げとかもあるし、と思って1〜2本購入(買い切り)した。
- 浮動小数点数オタクがM1 Macを触ってみた(Qiita/1月)
- C言語で四倍精度浮動小数点数 (binary128) を使う(Qiita/2月)
- 浮動小数点数の比較について(Qiita/12月)
数学
数学に復帰しようと思って、グレブナー基底の勉強を始めた。しかし続けられていない。
アウトドア
登山については、まず引っ越した後の春に近所の低山に行った。8月は東京の感染状況がアレで東京経由で中部地方の山に行くのに心理的抵抗があったので山に行っていない。9月以降はちょいちょい北関東の山に行った。ヤマレコを始めた。
- 尾瀬キャンプ – 2021年09月11日 [登山・山行記録] – ヤマレコ
- 日光白根山 – 2021年10月10日 [登山・山行記録] – ヤマレコ
- 奥久慈男体山 – 2021年11月03日 [登山・山行記録] – ヤマレコ
自転車は、鹿島鉄道の廃線跡巡りに使った(6月)。
天文
12月、ふたご座流星群を見に行った。
また、家の近所からレナード彗星の撮影にチャレンジした。
2021年にできなかったこと
去年までやっていた
- 同人活動
- 電子工作
は今年はできていない。
また、去年の記事で「来年やりたいこと」として掲げた
- 数値計算
- VRのプログラムを書く
のいずれもできていない。
2022年にやりたいこと
来年やりたいことは色々ある。書くだけならタダなので色々書いておく。鬼に笑われるかもしれないが知ったことじゃない。
機械に近いレベルへ
コンピューターの、機械に近いレベルを触りたい。方向性としては
- CPUの機械語を出力する言語処理系を書く
- GPGPU
- CPUを自作する
の3つが考えられる。
言語処理系については後述する。
GPGPUについては「GPUの力を引き出せたらカッコいいなあ」くらいの気持ちでいる。手持ちのそれなりに使えそうなGPUはNVIDIAのGTX 1050とApple M1だ。CUDAとMetalをやることになるか。業界標準なんてなかったんや。
CPU自作については、どちらかと言うと浮動小数点数を扱うハードウェア(FPU)を書きたい。RISC-VのCPUを作ってQ拡張(四倍精度)の実装とかできたらカッコいいなあ、と思っている。
言語処理系
今年はSMLコンパイラーLunarMLの開発に力を注いだが、他にも作りたい言語(処理系)は色々ある。
さっきも書いたように、機械語を出力する言語処理系(ネイティブコンパイラー)を書きたい。方向性としては
- Cコンパイラーを書く
- SMLのネイティブコンパイラーを書く(LunarMLの延長)
- 独自言語
の3通りが考えられる。
長期的な野望としては、libm(数学関数)の記述に適したプログラミング言語を作りたい。具体的には
- C言語に近い、低レベル
- 数学的な正しさを保証できる
- 浮動小数点数の扱いに強い
などの特徴を備えた言語を作りたい。
ターゲットはx86_64やAArch64などのネイティブコード、WebAssembly、C言語のソース、などとなる。
数学関数と言うからには、強力な型システムで数学的な正しさを保証したい。依存型を使って定理証明できるようにするか。
メモリー管理をどうするかは課題である。GCは避けたい。言語の表現力を落としてスタックベースのメモリー管理のみにするか、リージョン推論のようなことを行うか。
また別の作りたい言語として、自動微分を組み込んだ言語を作ってみたい。特にリバースモード。
その他
VRで何かしたいという目標はまだ捨てたわけではないが、UnityやThree.jsのようなフレームワークは自分には合ってないのではないかという気がする。GHCJSかPureScriptのような関数型言語で3DCG/VRをやりたい。
理論的な方面として、HoTT (homotopy type theory)を勉強したい。特に実数の扱いがどうなるかについて興味がある。
登山については、再び北アルプスに赴くか、東北地方に行ってみるかしたい。
ピンバック: HaskellでつくるAArch64版MinCaml | 雑記帳