近況 2022-02-28

今月の活動 (ミローネ言語、読んだ記事、ほか)

ミローネ言語

  • ローカル関数を汎化しないことにした
    • 参考: Let Should Not Be Generalised - Microsoft Research (公開日: 2010年1月)
    • 多相なローカル関数はほとんど使われていないわりに、型システムの複雑さや計算量を増やす要因になってしまうので、消したほうがいいという話
    • 実際、ミローネ言語のコンパイラ自身には、汎化されるローカル関数は2つしかなかった
    • 1つはキャプチャしていなかったのでトップレベルに移動するだけで解消できた
    • もう1つはいわゆる Loan Pattern で、関数の返り値型に関して多相な関数があった
      • キャプチャしている引数を増やしてトップレベルに移動したら解決できた
      • 記事にあるとおり、型注釈を明示すれば多相になれるというルールにしたほうがよさそう
    • まだ試していないが、型変数のレベルの計算も削れそう

.npmignore

  • node_modules をみたら不要なファイルやディレクトリが見つかった
    • .npmignore の追加・更新をするプルリクエストを何件か送り、マージしてもらった
  • .npmignore がないときは .gitignore が利用されているので、追加するときは注意
    • package.json のfilesを指定しているケースもある
  • node_modules を小さくしたい場合は (例えばDockerイメージを小さくしたいとき)、*.d.ts がとても大きいので、ビルド後に不要ファイルを削除するスクリプトを書くといい

読んだ記事

  • Archive for “Swift regrets” // -dealloc (公開日: 2021年8月〜12月ごろ)
    • Swiftの設計で後悔したことの連載記事
      • 別にSwiftをdisっているわけではない。どれも致命的な瑕疵ではないし、どの言語にも不備はありうる。あくまで後学のため
      • いくつか良かったところ (“Delight”) も書いてある
    • Regret: Sequence (いわゆる Iterable、.NETでいうとIEnumerable)
      • 「ループを回すと状態が変わるようなイテレータ」や「無限に列挙が続くイテレータ」のようなエッジケースの存在が厄介なこと、イテレータのオーバーヘッドが最適化で消し切れないことなどの問題があった
      • そもそもSequenceという抽象が不要なのではないか、という考え
      • 私も上記の問題は認識していたが、Sequenceを外すことまでは思いついてなかった
  • 教えない対価 - steps to phantasien (公開日: 2019-09-05)
    • 乱雑なコードを書く人にフィードバックを出したいが、どう出せばいいか分からないという感じのもどかしさの話
    • フィードバックを出せない理由の1つとして、教えることを考慮せずに学びを進めていることがあるという仮説
    • 最近、そういう経験をしたので刺さった
    • とりあえずfukabori経由で 問いかけの作法 を買った

関連記事