0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Go の気になったコミット (2021 年 9 月)

Last updated at Posted at 2021-10-05

golang/go に行われたコミットから個人的に気になったものをリストにしたものです。
タイトルに 2021 年 9 月と銘打っていますが 8 月のコミットも含まれていますし 10 月を作る予定も今のところありません。

軽く説明を追加していますが勘違いや誤りがあるかもしれません。

Commits

2021-08-13

バージョンが Go 1.17 から Go 1.18 に変更されました。 :rocket:

2021-08-17

http.ResponseWriter で HTTP ヘッダーを設定する際に改行もそのまま出力されてしまう不具合が修正されています。 1

string と []byte の変換を減らすことでメモリ割り当てを減らす修正です。

UDP を読み書きする際のメモリ割り当てを減らす修正の一部です。 2

2021-08-20

このコミット自体は reflect.Type の ConvertibleTo メソッドに対するテスト追加です。
どうやら Go 1.8 から Go 1.16 までの間に存在したバグが Go 1.17 で意図せず修正されていたようです。 3

システムコールする API は引数の数ごとに用意されていましたが可変長引数を受け取る API が追加されたようです。 4

2021-08-21

ジェネリクスをデフォルトで有効化するための変更です。 :tada:

2021-08-26

bytes や strings でシングルバイト 1 文字を trim する際のパフォーマンスが大幅に改善されています。 5

SSA でいくつかのパターンの整数値計算を最適化する変更です。
Linux x86_64 で Go のバイナリサイズが 0.05% 削減されたそうです。

2021-09-03

image パッケージで RGBA をより効率的に扱うための修正です。 6

2021-09-04

Go でビルドした wasm を使う際の JavaScript で strict モードを有効化する変更です。 7

2021-09-06

中国で設計された LoongArch アーキテクチャの GOARCH として loong64 が定義されました。 8
Go 1.17 で対応していないけど名前が予約されていたものですね。

2021-09-07

len() の結果比較を可能であれば 0 との比較に書き換える修正です。 9

2021-09-08

amd64/arm64 向けに prefetch 命令サポートが追加されています。
GC で利用しているようです。

2021-09-11

string を key とする map に reflect でアクセスする際の性能が改善されています。
ただし、 key のサイズが大きい場合に不具合があり別の commit で修正されています。 10

2021-09-12

bufio 内部で保持している []byte に外部からアクセスするための方法が追加されています。 11
少しトリッキーに見えますがうまく使えばメモリ割り当てを減らせそうです。

2021-09-14

単純な比較が可能な型限定ですが reflect.DeepEqual が高速化されました。

2021-09-17

コンパイラが GOAMD64 という環境変数で amd64 アーキテクチャの世代を参照するようになりました。 12
この指定でより新しい CPU 向けの最適化ができるようになるかもしれません。 13

2021-09-21

text/template がテンプレート内の and/or ですべての値を評価していたのが途中で止めるように修正されました。 14
ただし、いくつか不具合があってまだ修正されているようです。

Fuzz testing が導入されました。 :tada:
次の記事で詳しく解説されていました。

2021-09-23

text/template が range ループ内での break/continue をサポートするようです。 15

2021-09-24

ジェネリクスで利用される型を定義した constraints パッケージが追加されました。 16

2021-09-28

reflect.Value に CanInt/CanUint/CanFloat/CanComplex が追加されました。 17

感想

ジェネリクス関連の修正が多いように感じました。
それ以外にも細かいところで使い勝手が改善されているようです。

あまり書いていないのですが各 CPU 向けの最適化も多数入っているようです。

  1. https://github.com/golang/go/issues/47711

  2. https://github.com/golang/go/issues/43451

  3. https://github.com/golang/go/issues/47785

  4. https://github.com/golang/go/issues/46552

  5. https://github.com/golang/go/issues/46446

  6. https://github.com/golang/go/issues/44808

  7. https://github.com/golang/go/issues/47116

  8. https://github.com/golang/go/issues/46229

  9. https://github.com/golang/go/issues/48054

  10. https://github.com/golang/go/commit/ac40c9872f6e8ef095dcc6ee556236782eee4f76

  11. https://github.com/golang/go/issues/47527

  12. https://github.com/golang/go/issues/45453

  13. https://github.com/golang/go/issues/25489

  14. https://github.com/golang/go/issues/31103

  15. https://github.com/golang/go/issues/20531

  16. https://github.com/golang/go/issues/45458

  17. https://github.com/golang/go/issues/47658

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?