Skip to content

Instantly share code, notes, and snippets.

@benhoyt
Last active September 20, 2025 03:49
Show Gist options
  • Save benhoyt/0adab35b1fe9ec677692a6e1bdb46359 to your computer and use it in GitHub Desktop.
Save benhoyt/0adab35b1fe9ec677692a6e1bdb46359 to your computer and use it in GitHub Desktop.
Go vs Python features added over time
# $ python3 count_features.py writings/go-python-features.md
# go1.25 0 23
# go1.24 1 29
# go1.23 15 27
# go1.22 6 41
# go1.21 8 50
# go1.20 4 33
# go1.19 0 14
# go1.18 15 31
# go1.17 3 15
# go1.16 0 36
# go1.15 0 21
# go1.14 1 18
# go1.13 2 35
# go1.12 0 14
# go1.11 0 9
# go1.10 0 22
# go1.9 6 28
# go1.8 1 22
# go1.7 0 40
# go1.6 0 16
# go1.5 1 44
# go1.4 1 20
# go1.3 0 13
# go1.2 1 36
# go1.1 2 48
import os
from fileinput import input, lineno
def smh(s):
match s:
case 'S':
return 1
case 'M':
return 5
case 'L':
return 15
assert False, f'expected "SMH", not {s!r} on line {lineno()}'
f = input(encoding='utf-8')
go_version = ''
while go_version != '1.1':
for line in f:
if line.startswith('Go '):
go_version = line[3:].strip()
break
try:
line = next(f)
except StopIteration:
assert False, f'expected line after {lineno()}'
assert line.startswith('---'), f'expected "---" on line {lineno()}'
try:
line = next(f)
except StopIteration:
assert False, f'expected line after {lineno()}'
assert line.startswith('language:'), f'expected "language:" on line {lineno()}'
s = line[len('language:'):].strip()
language_n = int(s) if s else 0
language_sum = 0
for line in f:
if not line.startswith('- '):
break
assert line[2] in 'SML' and line[3] == ' ', f'expected "SMH " on line {lineno()}'
language_sum += smh(line[2])
if language_sum != language_n:
assert False, f'{go_version} expected language sum {language_sum} not {language_n} on line {lineno()}'
assert line.startswith('stdlib:'), f'expected "stdlib:" on line {lineno()}'
s = line[len('stdlib:'):].strip()
stdlib_n = int(s) if s else 0
# TODO test unique package name
stdlib_sum = 0
packages = set()
for line in f:
if not line.startswith('- '):
break
assert line[2] in 'SML' and line[3] == ' ', f'expected "SMH " on line {lineno()}'
stdlib_sum += smh(line[2])
package = line[4:].split(':', maxsplit=1)[0]
if package in packages:
assert False, f'{go_version} package {package} not unique on line {lineno()}'
packages.add(package)
if stdlib_sum != stdlib_n:
assert False, f'{go_version} expected stdlib sum {stdlib_sum} not {stdlib_n} on line {lineno()}'
print(f'go{go_version:4} {language_sum:2} {stdlib_sum:2}')
layout title permalink description
default
Go vs Python features added over time
/writings/go-python-features/
TODO

{{ page.title }}

September 2025

stdlib: S=api addition, M=large API addition or small new package, L=large new package, 0=API tweaks and deprecations

TODO: I started this but never finished. The idea was to compare new features added in Go vs Python, in both the language and their standard libraries. But it took ages, and with Python it was particularly difficult to determine what's a language feature and what's a library feature. So I gave up after doing all of Go and a couple of versions of Python. :-|

Go 1.25

language: 0 stdlib: 23

  • M testing/synctest
  • S crypto: MessageSigner
  • S crypto/ecdsa: ParseRawPrivateKey, ParseUncompressedPublicKey, PrivateKey.Bytes, PublicKey.Bytes
  • S crypto/tls: ConnectionState.CurveID, Config.GetEncryptedClientHelloKeys
  • S go/ast: PreorderStack
  • S go/token: FileSet.AddExistingFiles
  • S go/types: Kind, LookupSelection
  • S hash: XOF
  • S hash/maphash: Hash.Clone
  • S io/fs: ReadLinkFS
  • S log/slog: GroupAttrs, Record.Source
  • S mime/multipart: FileContentDisposition
  • S net/http: CrossOriginProtection
  • S os: Root.*
  • S reflect: TypeAssert
  • S runtime: SetDefaultGOMAXPROCS
  • S sync: WaitGroup.Go
  • S testing: Attr, Output
  • S unicode: CategoryAliases

Go 1.24

language: 1

  • S generic type aliases stdlib: 29
  • S os: Root, OpenRoot
  • S testing: B.Loop, TB.Context, TB.Chdir
  • S runtime: AddCleanup
  • M weak
  • M crypto/mlkem, crypto/hkdf, crypto/pbkdf2, crypto/sha3
  • M crypto: FIPS 140-3 compliance
  • S bytes,strings: Lines, SplitSeq, SplitAfterSeq, FieldsSeq, FieldsFuncSeq
  • S crypto/cipher: NewGCMWithRandomNonce
  • S crypto/rand: Text
  • S crypto/subtle: WithDataIndependentTiming
  • S crypto/tls: ClientHelloInfo.Extensions
  • S encoding: TextAppender, BinaryAppender
  • S encoding/json: omitzero
  • S go/types: iterators
  • S hash/maphash: Comparable, WriteComparable
  • S log/slog: DiscardHandler
  • S net/http: Server.Protocols, Transport.Protocols

Go 1.23

language: 15

  • L for-range iterator functions stdlib: 27
  • S time: Timer and Ticker fixes
  • M unique
  • M iter
  • S slices: new functions
  • S maps: new functions
  • S structs
  • S crypto/x509: ParseOID
  • S encoding/binary: Encode, Decode
  • S go/ast: Preorder
  • S go/types: Func.Signature, Alias.*
  • S math/rand/v2: Uint, ChaCha8.Read
  • S net: KeepAliveConfig
  • S net/http: Request.CookiesNamed, Cookie.Partitioned, ParseCookie, ParseSetCookie
  • S net/http/httptest: NewRequestWithContext
  • S path/filepath: Localize
  • S reflect: Type.Overflow*, SliceAt, Value.Seq*
  • S sync: Map.Clear
  • S sync/atomic: And*, Or*
  • S unicode/utf16: RuneLen

Go 1.22

language: 6

  • M for loop fix
  • S for-range over int stdlib: 41
  • M math/rand/v2
  • M go/version
  • L net/http: ServeMux path patterns, ServeFileFS, FileServerFS, NewFileTransportFS
  • S archive/tar: Writer.AddFS
  • S archive/zip: Writer.AddFS
  • S cmp: Or
  • S crypto/x509: CertPool.AddCertWithConstraint, OID
  • S database/sql: Null[T]
  • S encoding: AppendEncode, AppendDecode
  • S go/ast: Unparen
  • S go/types: Alias, PkgNameOf
  • S io: SectionReader.Outer
  • S log/slog: SetLogLoggerLevel
  • S math/big: Rat.FloatPrec
  • S net/netip: AddrPort.Compare
  • S os: File.WriteTo
  • S reflect: TypeFor
  • S slices: Concat
  • S testing/slogtest: Run

Go 1.21

language: 8

  • M min, max
  • S clear
  • S more precise package initialization
  • S more powerful type inference stdlib: 50
  • L log/slog
  • M slices
  • M maps
  • M cmp
  • S bytes: Buffer.Available, Buffer.AvailableBuffer
  • S context: WithoutCancel, WithDeadlineCause, WithTimeoutCause, AfterFunc
  • S crypto/tls: SessionState etc, VersionName
  • S debug/elf: File.DynValue
  • S encoding/binary: NativeEndian
  • S errors: ErrUnsupported
  • S flag: BoolFunc
  • S go/ast: IsGenerated, File.GoVersion
  • S go/build: *Directives
  • S go/build/constraint: GoVersion
  • S go/token: File.Lines
  • S go/types: Package.GoVersion
  • S html/template: ErrJSTemplate
  • S io/fs: FormatFileInfo, FormatDirEntry
  • S math/big: Int.Float64
  • S net/http: ResponseController.EnableFullDuplex, ErrSchemeMismatch
  • S reflect: Value.Clear
  • S runtime: Pinner
  • S sync: Once*
  • S testing: Testing

Go 1.20

language: 4

  • S conversions from slice to array
  • S unsafe: SliceData, String, StringData
  • S struct comparison field order
  • S comparable types may now satisfy comparable constraint stdlib: 33
  • M crypto/ecdh
  • S errors: Join
  • S net/http: ResponseController, Server.DisableGeneralOptionsHandler, Transport.OnProxyConnectResponse
  • S net/http/httputil: ReverseProxy Rewrite hook, ProxyRequest.SetURL, ProxyRequest.SetXForwarded
  • S bytes: CutPrefix, CutSuffix, Clone
  • S context: WithCancelCause
  • S crypto/ecdsa: PrivateKey.ECDH
  • S crypto/rsa: OAEPOptions.MGFHash
  • S crypto/subtle: XORBytes
  • S crypto/tls: CertificateVerificationError
  • S crypto/x509: SetFallbackRoots
  • S encoding/xml: Encoder.Close
  • S fmt: FormatString
  • S go/ast: RangeStmt.Range, File.FileStart, File.FileEnd
  • S go/token: FileSet.RemoveFile
  • S go/types: Satisfies
  • S io: OffsetWriter
  • S io/fs: SkipAll
  • S net: Dialer.ControlContext
  • S net/netip: IPv6LinkLocalAllRouters, IPv6Loopback
  • S os/exec: Cmd.Cancel, Cmd.WaitDelay
  • S path/filepath: SkipAll, IsLocal
  • S reflect: Value.Comparable, Value.Equal, Value.Grow, Value.SetZero
  • S runtime/cgo: Incomplete
  • S strings: CutPrefix, CutSuffix
  • S sync: Map.Swap, Map.CompareAndSwap, Map.CompareAndDelete
  • S testing: B.Elapsed
  • S time: DateTime, DateOnly, TimeOnly
  • S unicode/utf16: AppendRune

Go 1.19

language: 0 stdlib: 14

  • S sync/atmoic: Bool, Int32, Int64, Uint32, Uint64, Uintptr, Pointer
  • S crypto/x509: CertPool.Clone, CertPool.Equal, ParseRevocationList, RevocationList.CheckSignatureFrom
  • S debug/pe: File.COFFSymbolReadSectionDefAux
  • S encoding/binary: AppendByteOrder, AppendUvarint, AppendVarint
  • S encoding/csv: Reader.InputOffset
  • S encoding/xml: Decoder.InputPos
  • S flag: TextVar
  • S fmt: Append, Appendf, Appendln
  • S go/parser: Func.Origin, Var.Origin
  • S hash/maphash: Bytes, String
  • S net/url: JoinPath, URL.JoinPath, URL.OmitHost
  • S os/exec: Cmd.Environ
  • S sort: Find
  • S time: Duration.Abs, Time.ZoneBounds

Go 1.18

language: 15

  • L generics (type parameters) stdlib: 31
  • M debug/buildinfo
  • M net/netip
  • S bufio: Writer.AvailableBuffer
  • S bytes: Cut
  • S crypto/tls: Conn.NetConn
  • S debug/dwarf: StructField.DataBitOffset, BasicType.DataBitOffset
  • S go/ast: TypeParams, IndexListExpr
  • S go/constant: Kind.String
  • M go/types: Config.GoVersion, many additions for generics
  • S html/template: break, continue
  • S net/http: Cookie.Valid, MaxBytesHandler
  • S reflect: Value.SetIterKey, Value.SetIterValue, Value.UnsafePointer, MapIter.Reset, Value.Can*, Value.FieldByIndexErr, Pointer, PointerTo
  • S runtime/debug: BuildInfo.GoVersion, BuildInfo.Settings
  • S strings: Cut, Clone
  • S sync: Mutex.TryLock, RWMutex.TryLock, RWMutex.TryRLock
  • S syscall: SyscallN
  • S testing: F
  • S text/template: break, continue
  • S unicode/utf8: AppendRune

Go 1.17

language: 3

  • S conversions from slice to array pointer
  • S unsafe.Add
  • S unsafe.Slice stdlib: 15
  • S archive/zip: File.OpenRaw, Writer.CreateRaw, Writer.Copy
  • S crypto/tls: Conn.HandshakeContext, ClientHelloInfo.Context, CertificateRequestInfo.Context
  • S database/sql: NullInt16, NullByte
  • S encoding/csv: Reader.FieldPos
  • S go/build: Context.ToolTags
  • S go/parser: SkipObjectResolution
  • S io/fs: FileInfoToDirEntry
  • S math: MaxUint, MaxInt, MinInt
  • S net: IP.IsPrivate
  • S net/url: Values.Has
  • S reflect: Value.CanConvert, StructField.IsExported, Method.IsExported, VisibleFields
  • S strconv: QuotedPrefix
  • S sync/atomic: Value.Swap, Value.CompareAndSwap
  • S testing: TB.Setenv
  • S time: Time.GoString, Time.IsDST, Time.UnixMilli, Time.UnixMicro, UnixMilli, UnixMicro, Layout

Go 1.16

language: 0 stdlib: 36

  • L embed
  • M io/fs
  • S archive/zip: Reader.Open
  • S crypto/x509: SystemRootsError.Unwrap
  • S flag: Func
  • S go/build: Package.*Embed*, Package.IgnoredOtherFiles
  • S go/build/constraint
  • S html/template: ParseFS, Template.ParseFS
  • S io: ReadSeekCloser, Discard, NopCloser, ReadAll
  • S log: Default
  • S net/http: Transport.GetProxyConnectHeader, FS
  • S os: DirEntry, ReadDir, File.ReadDir, CreateTemp, MkdirTemp, ReadFile, WriteFile, DirFS
  • S os/signal: NotifyContext
  • S path/filepath: WalkDir
  • S testing/fstest
  • S testing/iotest: ErrReader, TestReader
  • S text/template: ParseFS, Template.ParseFS
  • S text/template/parse: CommentNode

Go 1.15

language: 0 stdlib: 21

  • M time/tzdata
  • S bufio: ErrBadReadCount
  • S crypto/ecdsa: SignASN1, VerifyASN1
  • S crypto/elliptic: MarshalCompressed, UnmarshalCompressed
  • S crypto/tls: Dialer, Dialer.DialContext, Config.VerifyConnection
  • S crypto/x509: CreateRevocationList, RevocationList
  • S database/sql: DB.SetConnMaxIdleTime, Row.Err
  • S database/sql/driver: Validator
  • S math/big: Int.FillBytes
  • S net: Resolver.LookupIP
  • S net/url: URL.RawFragment, URL.EscapedFragment, URL.Redacted
  • S os: File.ReadFrom
  • S regexp: Regexp.SubexpIndex
  • S strconv: FormatComplex, ParseComplex
  • S sync: Map.LoadAndDelete
  • S testing: T.Deadline, TB.TempDir
  • S time: Ticker.Reset

Go 1.14

language: 1

  • S overlapping interfaces stdlib: 18
  • M hash/maphash
  • S crypto/tls: CipherSuites, InsecureCipherSuites, ClientHelloInfo.SupportsCertificate, CertificateRequestInfo.SupportsCertificate, CertificateRequestInfo.Version
  • S debug/dwarf: Data.AddSection, Reader.ByteOrder, LineReader.Files
  • S encoding/json: Decoder.InputOffset
  • S go/build: Context.Dir
  • S go/doc: NewFromFiles
  • S math: FMA
  • S math/bits: Rem, Rem32, Rem64
  • S mime/multipart: Reader.NextRawPart
  • S net/http: Header.Values, Transport.DialTLSContext
  • S net/http/httptest: Server.EnableHTTP2
  • S net/textproto: MIMEHeader.Values
  • S strconv: NumError.Unwrap
  • S testing: TB.Cleanup

Go 1.13

language: 2

  • S improved number literals
  • S signed shift counts stdlib: 35
  • M crypto/ed25519
  • L errors: As, Is, Unwrap
  • S bytes: ToValidUTF8
  • S database/sql: NullTime, NullInt32
  • S fmt: %O, %w
  • S log: Writer
  • S math/big: Rat.SetUint64
  • S net: ListenConfig.KeepAlive
  • S net/http: Transport.WriteBufferSize, Transport.ReadBufferSize, Transport.ForceAttemptHTTP2, Server.BaseContext, Server.ConnContext, Header.Clone, NewRequestWithContext
  • S os: UserConfigDir
  • S reflect: Value.IsZero
  • S strings: ToValidUTF8
  • S syscall: SysProcAttr.ProcessAttributes (windows), SysProcAttr.ThreadAttributes (windows)
  • S testing: B.ReportMetric, Init
  • S text/scanner: AllowDigitSeparators
  • S text/template: slice
  • S time: Duration.Microseconds, Duration.Milliseconds

Go 1.12

language: 0 stdlib: 14

  • S bytes: ReplaceAll
  • S crypto/tls: RecordHeaderError.Conn
  • S expvar: Map.Delete
  • S fmt: sorted maps
  • S go/doc: PreserveAST
  • S go/token: File.LineStart
  • S io: StringWriter
  • S math/big: Add*, Sub*, Mul*, Div*
  • S net/http: Client.CloseIdleConnections
  • S os: ProcessState.ExitCode, ModeCharDevice, UserHomeDir, File.SyscallConn
  • S reflect: MapIter, Value.MapRange
  • S runtime/debug: BuildInfo, ReadBuildInfo
  • S strings: ReplaceAll, Builder.Cap
  • S syscall: Syscall18 (windows)

Go 1.11

language: 0 stdlib: 9

  • S crypto/cipher: NewGCMWithTagSize
  • S crypto/rsa: PublicKey.Size
  • S crypto/tls: ConnectionState.ExportKeyingMaterial
  • S io/ioutil: TempFile star
  • S net: ListenConfig, Dialer.Control
  • S net/http: Transport.MaxConnsPerHost, SameSite, Cookie.SameSite
  • S net/http/httputil: ReverseProxy.ErrorHandler
  • S os: UserCacheDir, ModeIrregular
  • S os/signal: Ignored

Go 1.10

language: 0 stdlib: 22

  • S archive/tar: Header.Format, Header.PAXRecords
  • S archive/zip: FileHeader.Modified, FileHeader.NonUTF8
  • S bufio: Reader.Size, Writer.Size
  • S crypto/x509: Certificate.*, MarshalPKCS1PublicKey, ParsePKCS1PublicKey, MarshalPKCS8PrivateKey
  • S database/sql: OpenDB
  • S database/sql/driver: DriverContext, SessionResetter, Connector
  • S debug/macho: Section.Relocs
  • S encoding/asn1: MarshalWithParams, numeric
  • S encoding/hex: NewEncoder, NewDecoder
  • S encoding/json: Decoder.DisallowUnknownFields
  • S encoding/xml: NewTokenDecoder, TokenReader
  • S flag: FlagSet.ErrorHandling, FlagSet.Name, FlagSet.Output
  • S html/template: Srcset
  • S math/big: Int.CmpAbs, Float.Sqrt
  • S math/rand: Shuffle
  • S math: Round, RoundToEven, Erfinv, Erfcinv
  • S net: TCPListener.SyscallConn, UnixListener.SyscallConn
  • S net/smtp: Client.Noop
  • S os: File.*Deadline*, IsTimeout
  • S strings: Builder
  • S syscall: SysProcAttr.Token (windows)
  • S time: LoadLocationFromTZData

Go 1.9

language: 6

  • M type aliases
  • S fused multiple and add (FMA) stdlib: 28
  • M time: monotonic time, Duration.Round, Duration.Truncate
  • M math/bits
  • S testing: TB.Helper
  • S sync: Map
  • S runtime/pprof: Do
  • S crypto/x509: Certificate.ExcludedDNSDomains
  • S database/sql: DB.Conn, Conn
  • S encoding/asn1: NullBytes, NullRawValue
  • S encoding/base32: Encoding.WithPadding
  • S encoding/csv: Reader.ReuseRecord
  • S hash/fnv: New128, New128a
  • S image/png: Encoder.BufferPool
  • S math/big: IsInt64, IsUint64
  • S mime/multipart: FileHeader.Size
  • S net: Resolver.StrictErrors, Resolver.Dial, TCPConn.SyscallConn, IPConn.SyscallConn, UDPConn.SyscallConn, UnixConn.SyscallConn
  • S net/http: Server.ServeTLS
  • S net/http/fcgi: ProcessEnv
  • S net/http/httptest: Server.Client, Server.Certificate
  • S reflect: MakeMapWithSize
  • S syscall: Credential.NoSetGroups, SysProcAttr.AmbientCaps, Conn

Go 1.8

language: 1

  • S ignore struct tags when converting stdlib: 22
  • S sort: Slice, SliceStable, SliceIsSorted
  • S net/http: PushOptions, Pusher, Server.Close, Server.Shutdown, Transport.ProxyConnectHeader
  • S runtime: MutexProfile, SetMutexProfileFraction
  • S crypto/tls: Conn.CloseWrite, Config.Clone, Config.GetConfigForClient, ClientHelloInfo.*, Config.GetClientCertificate, CertificateRequestInfo, Config.KeyLogWriter, Config.VerifyPeerCertificate
  • S crypto/x509: UnknownAuthorityError.Cert
  • S database/sql: context support, DB.*Context, TxOptions, Named, NamedArg, Pinger
  • S debug/pe: File.StringTable, Section.Relocs, File.COFFSymbols
  • S encoding/base64: Encoding.Strict
  • S expvar: Int.Value, String.Value, Float.Value, Func.Value, Handler
  • S go/doc: IsPredeclared,
  • S go/types: Default
  • S math/big: Int.Sqrt, Float.Scan
  • S math/rand: Rand.Uint64, Source64
  • S net: UnixListener.SetUnlinkOnClose, Buffers, Resolver, Dialer.Resolver
  • S net/http/httptrace: ClientTrace.TLSHandshakeStart, ClientTrace.TLSHandshakeDone
  • S net/http/httputil: ReverseProxy.ModifyResponse
  • S net/mail: ParseDate
  • S net/url: PathEscape, PathUnescape, URL.Hostname, URL.Port
  • S os: Executable
  • S reflect: Swapper
  • S time: Until
  • S testing: TB.Name, CoverMode

Go 1.7

language: 0 stdlib: 40

  • L context
  • M net/http/httptrace
  • S runtime: KeepAlive, CallersFrames, SetCgoTraceback
  • S bytes: ContainsAny, ContainsRune, Reader.Reset
  • S crypto/x509: SystemCertPool, SystemRootsError
  • S debug/dwarf: Reader.SeekPC, Data.Ranges
  • S debug/elf: R_390
  • S encoding/json: SetIndent, SetEscapeHTML
  • S go/build: Package.BinaryOnly, Package.CgoFFLAGS, Package.FFiles
  • S go/doc: Example.Unordered
  • S io: SeekStart, SeekCurrent, SeekEnd
  • S math/big: Float.GobEncode, Float.GobDecode
  • S net: Dialer.DialContext
  • S net/http: Request.Context, Request.WithContext, Transport.DialContext, Transport.IdleConnTimeout, Transport.MaxIdleConns, Transport.MaxResponseHeaderBytes
  • S net/http/cgi: Handler.Stderr
  • S net/http/httptest: NewRequest, ResponseRecorder.Result
  • S net/url: URL.ForceQuery
  • S os/exec: CommandContext
  • S os/user: Group, LookupGroup, LookupGroupId, User.GroupIds
  • S reflect: StructOf, StructTag.Lookup
  • S strings: Reader.Reset
  • S syscall: SysProcAttr.Unshareflags

Go 1.6

language: 0 stdlib: 16

  • M net/http: transparent HTTP2 support
  • S archive/zip: Reader.RegisterDecompressor, Writer.RegisterCompressor
  • S bufio: Scanner.Buffer, ErrFinalToken
  • S crypto/tls: RecordHeaderError
  • S crypto/x509: InsecureAlgorithmError
  • S image: NYCbCrA
  • S image/color: NYCbCrA
  • S math/big: Int.Append, Int.Text
  • S math/rand: Read, Rand.Read
  • S net: IsTemporary
  • S strconv: IsGraphic, QuoteToGraphic, QuoteRuneToGraphic, AppendQuoteToGraphic, AppendQuoteRuneToGraphic
  • S text/template: trimming, block, ExecError

Go 1.5

language: 1

  • S map type elision stdlib: 44
  • M math/big: Float, Jacobi, Int.ModSqrt
  • S go/types: migrated from golang.org/x
  • S go/constant: migrated from golang.org/x
  • S go/importer: migrated from golang.org/x
  • S reflect: ArrayOf, FuncOf
  • S archive/zip: Writer.SetOffset
  • S bufio: Reader.Discard
  • S bytes: Buffer.Cap, Reader.Size, LastIndexByte
  • S strings: Reader.Size, LastIndexByte, Compare
  • S crypto: Decrypter
  • S crypto/elliptic: CurveParams.Name
  • S crypto/tls: Config.SetSessionTicketKeys
  • S crypto/x509: Certificate.UnhandledCriticalExtensions
  • S database/sql: DB.Stats
  • S debug/dwarf: Stats, Data.LineReader, Entry.AttrField, LineEntry, LineFile, LineReader, Reader.AddressSize
  • S encoding/base64: RawStdEncoding, RawURLEncoding
  • S encoding/json: Decoder.Token
  • S flag: UnquoteUsage
  • S go/ast: EmptyStmt.Implicit
  • S go/build: Package.PkgTargetRoot
  • S image: Rectangle implements Image, CMYK
  • S image/color: CMYK, CMYKModel, CMYKToRGB
  • S image/gif: GIF.Disposal
  • S io: CopyBuffer
  • S log: LUTC, Logger.SetOutput
  • S mime: WordDecoder, BEncoding, QEncoding, ExtensionsByType
  • S mime/quotedprintable
  • S net: Dialer.FallbackDelay, OpError.Source
  • S net/http: Request.Cancel
  • S net/http/fcgi: ErrConnClosed, ErrRequestAborted
  • S net/mail: AddressParser
  • S net/smtp: Client.TLSConnectionState
  • S os: LookupEnv
  • S os/signal: Ignore, Reset
  • S runtime: ReadTrace, StartTrace, StopTrace
  • S runtime/trace: Start, Stop
  • S net/http/pprof: Trace
  • S syscall: SysProcAttr.GidMappingsEnableSetgroups, SysProcAttr.Foreground, SysProcAttr.Pgid
  • S text/template: Option
  • S time: Time.AppendFormat

Go 1.4

language: 1

  • S bare for-range stdlib: 20
  • S archive/zip: Writer.Flush
  • S compress/flate: Resetter
  • S compress/gzip: Reader.Multistream
  • S compress.zlib: Resetter
  • S crypto: Signer interface
  • S crypto/tls: Config.CertificateForName
  • S database/sql: Drivers
  • S debug/dwarf: UnspecifiedTypes
  • S encoding/xml: Decoder.InputOffset
  • S image: RGBA.RGBAAt, Gray.GrayAt
  • S image/png: Encoder
  • S math: Nextafter32
  • S net/http: Request.BasicAuth, Transport.DialTLS
  • S net/http/httputil: ReverseProxy.ErrorLog
  • S os: Symlink, Unsetenv
  • S reflect: Type.Comparable
  • S runtime: MemStats.PauseEnd, GCStats.PauseEnd
  • S sync/atomic: Value
  • S testing: TestMain, M, Coverage
  • S text/scanner: Scanner.IsIdentRune

Go 1.3

language: 0 stdlib: 13

  • M debug/plan9obj
  • S sync: Pool
  • S testing: RunParallel
  • S crypto/tls: DialWithDialer
  • S math/big: Int implements TextMarshaler, Rat implements TextMarshaler
  • S net/http: Response.TLS, Server.ErrorLog, Server.SetKeepAlivesEnabled, Transport.TLSHandshakeTimeout, Server.ConnState, Client.Timeout
  • S net: Dialer.KeepAlive
  • S runtime/debug: WriteHeapDump
  • S syscall: SendmsgN, NewCallbackCDecl (windows)

Go 1.2

language: 1

  • S three-index slices stdlib: 36
  • M encoding
  • M image/color/palette
  • S fmt: indexed arguments
  • S text/template: comparison funcs, else if
  • S archive/zip: File.DataOffset
  • S bufio: Reader.Reset, Writer.Reset
  • S compress/flate: Writer.Reset
  • S compress/gzip: Writer.Reset
  • S compress/zlib: Writer.Reset
  • S container/heap: Fix
  • S container/list: List.MoveBefore, List.MoveAfter
  • S crypto/cipher: NewGCM
  • S crypto/md5: Sum
  • S crypto/sha1: Sum
  • S crypto/sha256: Sum256, Sum224
  • S crypto/sha512: Sum512, Sum384
  • S crypto/x509: MarshalECPrivateKey
  • S database/sql: DB.SetMaxOpenConns
  • S encoding/xml: Encoder.Flush
  • S flag: Getter
  • S go/ast: SliceExpr.Slice3
  • S go/build: Package.AllTags
  • S image/draw: Drawer, Quantizer
  • S image/gif: Encode, EncodeAll
  • S sort: Stable
  • S strings: IndexByte
  • S sync/atomic: SwapInt32, SwapInt64, SwapUint32, SwapUint64, SwapUintptr, SwapPointer
  • S testing: TB

Go 1.1

language: 2

  • S method values
  • S relaxed return requirements stdlib: 48
  • M go/format
  • M net/http/cookiejar
  • M runtime/race
  • M bufio: Scanner
  • S net: IPAddr.Zone, TCPAddr.Zone, UDPAddr.Zone, Dialer, LookupNS, IPConn.ReadMsgIP, IPConn.WriteMsgIP, UDPConn.ReadMsgUDP, UDPConn.WriteMsgUDP, UnixConn.CloseRead, UnixConn.CloseWrite
  • S reflect: Value.Convert, Type.ConvertibleTo, MakeFunc, ChanOf, MapOf, SliceOf
  • S time: Time.Round, Time.Truncate, Time.YearDay, Timer.Reset, ParseInLocation
  • S bytes: TrimPrefix, TrimSuffix, Buffer.Grow, Reader.WriteTo
  • S compress/gzip: Writer.Flush
  • S crypto/hmac: Equal
  • S crypto/x509: DecryptPEMBlock, ParseECPrivateKey
  • S database/sql: DB.Ping
  • S database/sql/driver: Queryer
  • S encoding/json: Decoder.Buffered, Decoder.UseNumber, Number
  • S encoding/xml: EscapeText, Encoder.Indent
  • S go/ast: CommentMap
  • S io: ByteWriter, ErrNoProgress
  • S math/big: Int.MarshalJSON, Int.UnmarshalJSON, Int.Uint64, Int.SetUint64, Rat.Float64, Rat.SetFloat64
  • S mime/multipart: Writer.SetBoundary
  • S net/http: ParseTime, Request.PostFormValue, CloseNotifier, ServeMux.Handler, Transport.CancelRequest
  • S net/mail: ParseAddress, ParseAddressList
  • S net/smtp: Client.Hello
  • S net/textproto: TrimBytes, TrimString
  • S os: FileMode.IsRegular
  • S os/signal: Stop
  • S regexp: Regexp.Longest, Regexp.Split
  • S runtime/debug FreeOSMemory, ReadGCStats, SetGCPercent
  • S sort: Reverse
  • S strings: TrimPrefix, TrimSuffix, Reader.WriteTo
  • S testing: AllocsPerRun, B.ReportAllocs, BenchmarkResult.AllocsPerOp, Verbose, T.Skip, B.Skip
  • S text/template: parentheses for grouping, Node methods
  • S unicode/utf8: ValidRune
Python 3.3 - 2012-09-29
-----------------------
language:
- S yield from
- S u'unicode' syntax
- S reworked I/O exception hierarchy
- S __qualname__
- S Unicode name aliases
- S range equality
- S count/find/index integer
- S bytearray fill
- S list/bytearray: copy, clear
- S str: casefold
stdlib:
- M faulthandler
- M ipaddress
- M lzma
- M unittest.mock
- M venv
- S inspect: signature
- S sys: implementation
- S types: SimpleNamespace
- S importlib: updates
- S open: opener
- S print: flush
Python 3.2 - 2011-02-20
-----------------------
language:
- S stable C API
- S __pycache__ directory
- S version-tagged .so files
- S hasattr only catches AttributeError
- S str(float) == repr(float)
- S format: #, str.format_map
- S del outer
- S ResourceWarning
- S range: index, count
- S callable
stdlib:
- M argparse
- M concurrent.futures
- M html
- M sysconfig
- S logging: dict-based config, other improvements
- S wsgiref: handlers.read_environ
- S memoryview.release
- S struct sequence types subclasses of tuple
- S email: str and bytes fixes
- S xml: etree.ElementTree updates
- S functools: lru_cache, wraps changes, total_ordering, cmp_to_key
- S itertools: accumulate
- S collections: Counter improvements, OrderedDict.move_to_end, deque.count, deque.reverse
- S threading: Barrier
- S datetime: timezone, timedelta * and /
- S math: new C99 functions
- S abc: abstractclassmethod, abstractstaticmethod
- S io: BytesIO.getbuffer
- S reprlib: recursive_repr
- S csv: unix_dialect
- S contextlib: ContextDecorator
- S various: context managers (FTP, fileinput, TarFile, etc)
- S gzip: implements io.BufferedIOBase
- S ast: literal_eval improvements
- S os: fsencode, fsdecode
- S shutil: copytree ignore_dangling_symlinks and copy_function
- S socket: detach
- S ssl: various improvements
- S http: client improvements
- S unittest: various improvements
- S asyncore: handle_accepted
- S tempfile: TemporaryDirectory
- S inspect: getgeneratorstate, getattr_static
- S dis: code_info, show_code
- S site: getsitepackages, getuserbase, getusersitepackages
- S configparser: improvements
- S urllib: parse improvements
- S mailbox: str and bytes fixes
Python 3.1 - 2009-06-27
-----------------------
language:
- S executable directories and .zip files with __main__.py
- S multiple context managers in single "with" statement
- S str: format thousands separator, format automatic field numbering
- S int: bit_length
stdlib:
- M collections: OrderedDict, Counter, namedtuple rename
- S bytes: maketrans
- S bytearray: maketrans
- M tkinter.ttk
- S gzip: context manager support
- S bz2: context manager support
- S decimal: Decimal.from_float
- S itertools: combinations_with_replacement, compress, count step
- S re: sub/subn/split flags param
- S logging: NullHandler
- S unittest: skipUnless, expectedFailure, assertRaises
- M importlib
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment