Skip to content

api: audit for Go 1.13 go1.13.txt #32813

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Closed
rsc opened this issue Jun 27, 2019 · 17 comments
Closed

api: audit for Go 1.13 go1.13.txt #32813

rsc opened this issue Jun 27, 2019 · 17 comments
Labels
FrozenDueToAge NeedsFix The path to resolution is known, but the work has not been done. release-blocker
Milestone

Comments

@rsc
Copy link
Contributor

rsc commented Jun 27, 2019

next.txt was copied to go1.13.txt but I am not sure an audit of that API happened.
Here is a tracking bug for it, with the netbsd-amd64 syscall additions removed (they're probably fine).

Missing approvals

debug/elf

Added in CL 184099:

  • pkg debug/elf, type Symbol struct, Library string
  • pkg debug/elf, type Symbol struct, Version string

errors

  • pkg errors, func As(error, interface{}) bool
  • pkg errors, func Is(error, error) bool
  • pkg errors, func Unwrap(error) error
  • pkg encoding/csv, method (*ParseError) Unwrap() error
  • pkg encoding/json, method (*MarshalerError) Unwrap() error
  • pkg net, method (*DNSConfigError) Unwrap() error
  • pkg net, method (*DNSError) Is(error) bool
  • pkg net, method (*OpError) Is(error) bool
  • pkg net, method (*OpError) Unwrap() error
  • pkg net, type DNSError struct, IsNotFound bool
  • pkg net/url, method (*Error) Unwrap() error
  • pkg os/exec, method (*Error) Unwrap() error
  • pkg os, method (*LinkError) Unwrap() error
  • pkg os, method (*PathError) Unwrap() error
  • pkg os, method (*SyscallError) Unwrap() error
  • pkg os, var ErrTemporary error
  • pkg os, var ErrTimeout error
  • pkg syscall, method (Errno) Is(error) bool
  • pkg text/template, method (ExecError) Unwrap() error

syscall

Added in CL 174197:

  • pkg syscall (windows-386), type SysProcAttr struct, ProcessAttributes *SecurityAttributes
  • pkg syscall (windows-386), type SysProcAttr struct, ThreadAttributes *SecurityAttributes
  • pkg syscall (windows-amd64), type SysProcAttr struct, ProcessAttributes *SecurityAttributes
  • pkg syscall (windows-amd64), type SysProcAttr struct, ThreadAttributes *SecurityAttributes

text/scanner

Likely revert:

  • pkg text/scanner, const AllowDigitSeparators = 1024
  • pkg text/scanner, const AllowDigitSeparators ideal-int

Approved But Missing From Release Notes

Post-approval: gri:

  • pkg text/scanner, const GoTokens = 2036

Approved in #29835:

  • pkg database/sql, method (*Conn) Raw(func(interface{}) error) error

Approved in #30064:

  • pkg go/token, func IsExported(string) bool
  • pkg go/token, func IsIdentifier(string) bool
  • pkg go/token, func IsKeyword(string) bool

Approved in #30638:

  • pkg os/exec, method (*Cmd) String() string

CL 175337 (adding RFC constant; post-approval: rsc):

  • pkg net/http, const SameSiteNoneMode = 4
  • pkg net/http, const SameSiteNoneMode SameSite

For #29655 (adding RFC constant; post-approval: rsc):

  • pkg net/http, const StatusEarlyHints = 103
  • pkg net/http, const StatusEarlyHints ideal-int

For #27945, approved separately:

  • pkg unicode, const Version = "11.0.0"
  • pkg unicode, var Dogra *RangeTable
  • pkg unicode, var Gunjala_Gondi *RangeTable
  • pkg unicode, var Hanifi_Rohingya *RangeTable
  • pkg unicode, var Makasar *RangeTable
  • pkg unicode, var Medefaidrin *RangeTable
  • pkg unicode, var Old_Sogdian *RangeTable
  • pkg unicode, var Sogdian *RangeTable

Approved

I am not sure we have a bug for the creation of crypto/ed25519, but I approved it at the time and it is in the release notes. That covers:

  • pkg crypto/ed25519, const PrivateKeySize = 64
  • pkg crypto/ed25519, const PrivateKeySize ideal-int
  • pkg crypto/ed25519, const PublicKeySize = 32
  • pkg crypto/ed25519, const PublicKeySize ideal-int
  • pkg crypto/ed25519, const SeedSize = 32
  • pkg crypto/ed25519, const SeedSize ideal-int
  • pkg crypto/ed25519, const SignatureSize = 64
  • pkg crypto/ed25519, const SignatureSize ideal-int
  • pkg crypto/ed25519, func GenerateKey(io.Reader) (PublicKey, PrivateKey, error)
  • pkg crypto/ed25519, func NewKeyFromSeed([]uint8) PrivateKey
  • pkg crypto/ed25519, func Sign(PrivateKey, []uint8) []uint8
  • pkg crypto/ed25519, func Verify(PublicKey, []uint8, []uint8) bool
  • pkg crypto/ed25519, method (PrivateKey) Public() crypto.PublicKey
  • pkg crypto/ed25519, method (PrivateKey) Seed() []uint8
  • pkg crypto/ed25519, method (PrivateKey) Sign(io.Reader, []uint8, crypto.SignerOpts) ([]uint8, error)
  • pkg crypto/ed25519, type PrivateKey []uint8
  • pkg crypto/ed25519, type PublicKey []uint8
  • pkg crypto/tls, const Ed25519 = 2055
  • pkg crypto/tls, const Ed25519 SignatureScheme
  • pkg crypto/x509, const Ed25519 = 4
  • pkg crypto/x509, const Ed25519 PublicKeyAlgorithm
  • pkg crypto/x509, const PureEd25519 = 16
  • pkg crypto/x509, const PureEd25519 SignatureAlgorithm

Post-approval: austin, thanm (comment below)

  • pkg debug/dwarf, method (*UnsupportedType) Common() *CommonType
  • pkg debug/dwarf, method (*UnsupportedType) Size() int64
  • pkg debug/dwarf, method (*UnsupportedType) String() string
  • pkg debug/dwarf, type UnsupportedType struct
  • pkg debug/dwarf, type UnsupportedType struct, embedded CommonType
  • pkg debug/dwarf, type UnsupportedType struct, Tag Tag

Post-approval: gri (comment below)

  • pkg go/constant, func Make(interface{}) Value
  • pkg go/constant, func Val(Value) interface{}
  • pkg go/types, func CheckExpr(*token.FileSet, *Package, token.Pos, ast.Expr, *Info) error

Approved in #25805:

  • pkg bytes, func ToValidUTF8([]uint8, []uint8) []uint8
  • pkg strings, func ToValidUTF8(string, string) string

Approved in #31231:

  • pkg database/sql, method (*NullInt32) Scan(interface{}) error
  • pkg database/sql, method (NullInt32) Value() (driver.Value, error)
  • pkg database/sql, method (*NullTime) Scan(interface{}) error
  • pkg database/sql, method (NullTime) Value() (driver.Value, error)
  • pkg database/sql, type NullInt32 struct
  • pkg database/sql, type NullInt32 struct, Int32 int32
  • pkg database/sql, type NullInt32 struct, Valid bool
  • pkg database/sql, type NullTime struct
  • pkg database/sql, type NullTime struct, Time time.Time
  • pkg database/sql, type NullTime struct, Valid bool

Approved in #28327:

  • pkg log, func Writer() io.Writer

Approved in #29578:

  • pkg math/big, method (*Int) TrailingZeroBits() uint

Approved in #29579:

  • pkg math/big, method (*Rat) SetUint64(uint64) *Rat

Approved in #23378:

  • pkg net, type ListenConfig struct, KeepAlive time.Duration

Approved in #30694:

  • pkg net/http, type Server struct, BaseContext func(net.Listener) context.Context
  • pkg net/http, type Server struct, ConnContext func(context.Context, net.Conn) context.Context

For #29915 (post-approval: rsc):

  • pkg net/http, method (Header) Clone() Header

For #23544 (post-approval: rsc):

  • pkg net/http, func NewRequestWithContext(context.Context, string, string, io.Reader) (*Request, error)
  • pkg net/http, method (*Request) Clone(context.Context) *Request

For #26013 (post-approval: rsc):

  • pkg net/http, method (*Transport) Clone() *Transport

For #27011 (post-approval: rsc):

  • pkg net/http, type Transport struct, ForceAttemptHTTP2 bool

For #22618 (post-approval: rsc):

  • pkg net/http, type Transport struct, ReadBufferSize int
  • pkg net/http, type Transport struct, WriteBufferSize int

These netbsd-ard64 are clearly OK (and all the syscall and log/syslog lines I have omitted):

  • pkg path/filepath (netbsd-arm64-cgo), const ListSeparator = 58
  • pkg path/filepath (netbsd-arm64-cgo), const Separator = 47
  • pkg path/filepath (netbsd-arm64), const ListSeparator = 58
  • pkg path/filepath (netbsd-arm64), const Separator = 47
  • pkg runtime (netbsd-arm64-cgo), const GOARCH = "arm64"
  • pkg runtime (netbsd-arm64-cgo), const GOOS = "netbsd"
  • pkg runtime (netbsd-arm64), const GOARCH = "arm64"
  • pkg runtime (netbsd-arm64), const GOOS = "netbsd"
  • pkg os (netbsd-arm64-cgo), const DevNull = "/dev/null"
  • pkg os (netbsd-arm64-cgo), const O_APPEND = 8
  • pkg os (netbsd-arm64-cgo), const O_CREATE = 512
  • pkg os (netbsd-arm64-cgo), const O_EXCL = 2048
  • pkg os (netbsd-arm64-cgo), const O_SYNC = 128
  • pkg os (netbsd-arm64-cgo), const O_TRUNC = 1024
  • pkg os (netbsd-arm64-cgo), const PathListSeparator = 58
  • pkg os (netbsd-arm64-cgo), const PathSeparator = 47
  • pkg os (netbsd-arm64), const DevNull = "/dev/null"
  • pkg os (netbsd-arm64), const O_APPEND = 8
  • pkg os (netbsd-arm64), const O_CREATE = 512
  • pkg os (netbsd-arm64), const O_EXCL = 2048
  • pkg os (netbsd-arm64), const O_SYNC = 128
  • pkg os (netbsd-arm64), const O_TRUNC = 1024
  • pkg os (netbsd-arm64), const PathListSeparator = 58
  • pkg os (netbsd-arm64), const PathSeparator = 47

Approved in #29960:

  • pkg os, func UserConfigDir() (string, error)

Approved in #7501:

  • pkg reflect, method (Value) IsZero() bool

Approved in #26037:

  • pkg testing, method (*B) ReportMetric(float64, string)
  • pkg testing, type BenchmarkResult struct, Extra map[string]float64

Approved in #21051:

  • pkg testing, func Init()

Approved in #28564:

  • pkg time, method (Duration) Microseconds() int64
  • pkg time, method (Duration) Milliseconds() int64
@rsc
Copy link
Contributor Author

rsc commented Jun 27, 2019

Looks like the Unicode update did not make it into the release notes.
(^F for unicode in https://tip.golang.org/doc/go1.13 finds nothing.)

@rsc
Copy link
Contributor Author

rsc commented Jun 27, 2019

These were added for #29601 but I don't see any confirmation that we want to commit to this API:

  • pkg debug/dwarf, method (*UnsupportedType) Common() *CommonType
  • pkg debug/dwarf, method (*UnsupportedType) Size() int64
  • pkg debug/dwarf, method (*UnsupportedType) String() string
  • pkg debug/dwarf, type UnsupportedType struct
  • pkg debug/dwarf, type UnsupportedType struct, embedded CommonType
  • pkg debug/dwarf, type UnsupportedType struct, Tag Tag

/cc @aclements @thanm @dr2chase; still look OK?

@aclements
Copy link
Member

The dwarf API additions still look good to me. And it's been mentioned in the release notes.

@thanm
Copy link
Contributor

thanm commented Jun 27, 2019

Dwarf API changes LGTM also.

@rsc
Copy link
Contributor Author

rsc commented Jun 27, 2019

@griesemer, last call for Go 1.13 API. Still happy with:

go/constant

  • pkg go/constant, func Make(interface{}) Value
  • pkg go/constant, func Val(Value) interface{}

go/types

  • pkg go/types, func CheckExpr(*token.FileSet, *Package, token.Pos, ast.Expr, *Info) error

text/scanner

  • pkg text/scanner, const AllowDigitSeparators = 1024
  • pkg text/scanner, const AllowDigitSeparators ideal-int
  • pkg text/scanner, const GoTokens = 2036

?

@rsc
Copy link
Contributor Author

rsc commented Jun 27, 2019

@alexbrainman, last call for Go 1.13 API. Still feel good about:

Added in CL 174197:

  • pkg syscall (windows-386), type SysProcAttr struct, ProcessAttributes *SecurityAttributes
  • pkg syscall (windows-386), type SysProcAttr struct, ThreadAttributes *SecurityAttributes
  • pkg syscall (windows-amd64), type SysProcAttr struct, ProcessAttributes *SecurityAttributes
  • pkg syscall (windows-amd64), type SysProcAttr struct, ThreadAttributes *SecurityAttributes

?

@griesemer
Copy link
Contributor

@rsc LGTM for #32813 (comment)

@rsc
Copy link
Contributor Author

rsc commented Jun 27, 2019

CL 184080 removes AllowDigitSeparators and documents GoToken a bit more.

@rsc
Copy link
Contributor Author

rsc commented Jun 27, 2019

Update: I dug up proposal approvals for most of these and pinged owners for the few that remain.
Brad is away so I looked at the non-proposal net/http changes and they look OK; approved those.

The only API approvals still needed are for the errors and syscall changes.

The errors changes seem fine but I want to take a close look at them tomorrow and double-check. @mpvl, @jba, @neild are welcome to do the same.

The syscall changes seem fine but would like @alexbrainman's input.

During this I identified a few things missing from the release notes. Those are identified in their own section in the top comment.

@alexbrainman
Copy link
Member

@rsc

windows syscall changes LGTM.

Thank you very much.

Alex

@andybons andybons added the NeedsFix The path to resolution is known, but the work has not been done. label Jun 28, 2019
@rsc
Copy link
Contributor Author

rsc commented Jun 28, 2019

This was added for #28635 in CL 168597 and needs review:

 - pkg net, type DNSError struct, IsNotFound bool

@rsc
Copy link
Contributor Author

rsc commented Jun 28, 2019

@jba, @neild, @mpvl, and I looked at the errors API.
We decided to remove ErrTemporary (#32463) but everything else is good.

@bcmills
Copy link
Contributor

bcmills commented Aug 1, 2019

@FiloSottile filed an issue to recheck a specific addition (os.ErrTimeout) as #33411.

@andybons
Copy link
Member

andybons commented Aug 5, 2019

Created issue to update release notes to include Unicode: #33472

@gopherbot
Copy link
Contributor

Change https://golang.org/cl/189458 mentions this issue: api/go1.13: add debug/elf.Symbol fields added in CL 184099

@FiloSottile
Copy link
Contributor

Added a couple of new symbols that were missing from go1.13.txt

debug/elf

Added in CL 184099:

  • pkg debug/elf, type Symbol struct, Library string
  • pkg debug/elf, type Symbol struct, Version string

gopherbot pushed a commit that referenced this issue Aug 8, 2019
These will need auditing per #32813 like a few others in go1.13.txt, but
in the meantime they break the API check for beta/RC releases.

Updates #32813
Updates #31912

Change-Id: I3b0501b46324ee6fc0985f84971b99b772c7e4a4
Reviewed-on: https://go-review.googlesource.com/c/go/+/189458
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
@andybons
Copy link
Member

RC1 is out. Can we close this?

# for free to subscribe to this conversation on GitHub. Already have an account? #.
Labels
FrozenDueToAge NeedsFix The path to resolution is known, but the work has not been done. release-blocker
Projects
None yet
Development

No branches or pull requests

9 participants