https://github.com/golang/go に今週あったコミットのうち、僕の目にとまったもをの書いていきます。

os/exec: return error when PATH lookup would use current directory · golang/go@349cc83 · GitHub

先週リバートされていたもののリトライのようです。リバートの原因は x/sys/execabs のテストが壊れたからでしたが、対策をしたとのことでした。

all: REVERSE MERGE dev.boringcrypto (cdcb4b6) into master · golang/go@f771edd · GitHub

別ブランチで開発が進んでいたBoringSSLベースの?暗号まわりの実装が取り込まれたようです。
[dev.boringcrypto] add README.boringcrypto.md, update VERSION · golang/go@dcdcc38 · GitHub にあるREADMEを見るにもともとmasterに取り込む予定はなかったようですが、取り込まれたみたいですね。

io: NopCloser forward WriterTo implementations if the reader supports it · golang/go@0537a74 · GitHub

io.NopCloser に渡した io.Readerio.WriterTo を実装していた場合に、返ってくる io.ReadCloserio.WriterTo を実装するようになりました。
io.WriterTo に高速な実装がある場合に使われるようになったということですね。

runtime: add GC CPU utilization limiter · golang/go@01359b4 · GitHub

このコミットには以下の2つの内容が含まれているようです

  • GCが使うCPUが最大で50%まで程度になるように制限をかける
  • プログラムが使うメモリに制限をかけられるようにするためのfeature flagの導入

GCが50%もCPUを使うのはまれだとは思いますが、制限がかかるのはうれしいですね。また、メモリ使用量に制限をかけられるのはコンテナでの利用などでうれしいのではないでしょうか。

runtime/debug: export SetMemoryLimit · golang/go@f01c20b · GitHub

ひとつ上の項目で導入されたメモリ制限をかける機能を runtime/debug package から扱えるようにするコミットですね。環境変数からセットする必要がなくなるのでうれしいかも?

runtime: decrease STW pause for goroutine profile · golang/go@52bd1c4 · GitHub

goroutineのプロファイルを取得するときの処理に改善が行われ、Stop The Worldが減ったようです。おそらく runtime/pprof でプロファイルを取得するときのSTWも減っているはずなので、いままでよりも気軽にプロファイルを取得できるようになりますね。

cmd/compile: enable Asan check for global variables · golang/go@f52b4ec · GitHub

runtime: enable address sanitizer in Go · Issue #44853 · golang/go · GitHub に紐付くコミットで、address sanitizerを使ってグローバル変数へのだめなアクセスを検出するオプションが追加されたようです。

sync/atomic: add typed atomic values · golang/go@ffe48e0 · GitHub

sync/atomic packageに以下の型が追加され、atomicであることが型レベルで保証できるようになりました。いままでは go.uber.org/atomic を用いていたところが標準パッケージに(一部)取り込まれた感じでしょうか。

  • Bool
  • Int32
  • Int64
  • Pointer[T]
  • Uint32
  • Uint64
  • Uintptr

ref; atomic package - sync/atomic - pkg.go.dev

cmd/compile: fold constants found by prove · golang/go@e1e056f · GitHub

ちょっとだけ賢い最適化が追加されたようですたとえばこんな感じの最適化が行われるようになるとのこと

  • from
    1
    2
    3
    
    if x == 20 {
      return x + 30 + z
    }
    
  • into
    1
    2
    3
    
    if x == 20 {
      return 50 + z
    }
    

crypto/x509: disable signing with MD5WithRSA · golang/go@fdb640b · GitHub

MD5はもう暗号や署名の用途で大丈夫なハッシュではなくなったので、MD5での署名の検証や署名の実行はできなくするようです。危ない物は使わせない、いい方針だと思います。