What's Changed
Non-breaking changes and improvements:
* `transient` storage keyword (https://github.com/vyperlang/vyper/pull/3373)
* ternary operators (https://github.com/vyperlang/vyper/pull/3398)
* `raw_revert()` builtin (https://github.com/vyperlang/vyper/pull/3136)
* shift operators (https://github.com/vyperlang/vyper/pull/3019)
* make `send()` gas stipend configurable (https://github.com/vyperlang/vyper/pull/3158)
* use new `push0` opcode (https://github.com/vyperlang/vyper/pull/3361)
* python 3.11 support (https://github.com/vyperlang/vyper/pull/3129)
* drop support for python 3.8 and 3.9 (https://github.com/vyperlang/vyper/pull/3325)
* build for `aarch64` (https://github.com/vyperlang/vyper/pull/2687)
Major refactoring PRs:
* refactor front-end type system (https://github.com/vyperlang/vyper/pull/2974)
* merge front-end and codegen type systems (https://github.com/vyperlang/vyper/pull/3182)
* simplify `GlobalContext` (https://github.com/vyperlang/vyper/pull/3209)
* remove `FunctionSignature` (https://github.com/vyperlang/vyper/pull/3390)
Notable fixes:
* assignment when rhs is complex type and references lhs (https://github.com/vyperlang/vyper/pull/3410)
* uninitialized immutable values (https://github.com/vyperlang/vyper/pull/3409)
* success value when mixing `max_outsize=0` and `revert_on_failure=False` (https://github.com/vyperlang/vyper/security/advisories/GHSA-w9g2-3w7p-72g9)
* block certain kinds of storage allocator overflows (https://github.com/vyperlang/vyper/security/advisories/GHSA-mgv8-gggw-mrg6)
* store-before-load when a dynarray appears on both sides of an assignment (https://github.com/vyperlang/vyper/security/advisories/GHSA-3p37-3636-q8wv)
* bounds check for loops of the form `for i in range(x, x+N)` (https://github.com/vyperlang/vyper/security/advisories/GHSA-6r8q-pfpv-7cgj)
* alignment of call-site posargs and kwargs for internal functions (https://github.com/vyperlang/vyper/security/advisories/GHSA-ph9x-4vc9-m39g)
* batch nonpayable check for default functions calldatasize < 4 in (https://github.com/vyperlang/vyper/pull/3104, https://github.com/vyperlang/vyper/pull/3408, cf. https://github.com/vyperlang/vyper/security/advisories/GHSA-vxmm-cwh2-q762)
Other docs updates, chores and fixes:
* call graph stability (https://github.com/vyperlang/vyper/pull/3370)
* fix `vyper-serve` output (https://github.com/vyperlang/vyper/pull/3338)
* add `custom:` natspec tags (https://github.com/vyperlang/vyper/pull/3403)
* add missing pc maps to `vyper_json` output (https://github.com/vyperlang/vyper/pull/3333)
* fix constructor context for internal functions (https://github.com/vyperlang/vyper/pull/3388)
* add deprecation warning for `selfdestruct` usage (https://github.com/vyperlang/vyper/pull/3372)
* add bytecode metadata option to vyper-json (https://github.com/vyperlang/vyper/pull/3117)
* fix compiler panic when a `break` is outside of a loop (https://github.com/vyperlang/vyper/pull/3177)
* fix complex arguments to builtin functions (https://github.com/vyperlang/vyper/pull/3167)
* add support for all types in ABI imports (https://github.com/vyperlang/vyper/pull/3154)
* disable uadd operator (https://github.com/vyperlang/vyper/pull/3174)
* block bitwise ops on decimals (https://github.com/vyperlang/vyper/pull/3219)
* raise `UNREACHABLE` (https://github.com/vyperlang/vyper/pull/3194)
* allow enum as mapping key (https://github.com/vyperlang/vyper/pull/3256)
* block boolean `not` operator on numeric types (https://github.com/vyperlang/vyper/pull/3231)
* enforce that loop's iterators are valid names (https://github.com/vyperlang/vyper/pull/3242)
* fix typechecker hotspot (https://github.com/vyperlang/vyper/pull/3318)
* rewrite typechecker journal to handle nested commits (https://github.com/vyperlang/vyper/pull/3375)
* fix missing pc map for empty functions (https://github.com/vyperlang/vyper/pull/3202)
* guard against iterating over empty list in for loop (https://github.com/vyperlang/vyper/pull/3197)
* skip enum members during constant folding (https://github.com/vyperlang/vyper/pull/3235)
* bitwise `not` constant folding (https://github.com/vyperlang/vyper/pull/3222)
* allow accessing members of constant address (https://github.com/vyperlang/vyper/pull/3261)
* guard against decorators in interface (https://github.com/vyperlang/vyper/pull/3266)
* fix bounds for decimals in some builtins (https://github.com/vyperlang/vyper/pull/3283)
* length of literal empty bytestrings (https://github.com/vyperlang/vyper/pull/3276)
* block `empty()` for HashMaps (https://github.com/vyperlang/vyper/pull/3303)
* fix type inference for empty lists (https://github.com/vyperlang/vyper/pull/3377)
* disallow logging from `pure`, `view` functions (https://github.com/vyperlang/vyper/pull/3424)
* improve optimizer rules for comparison operators (https://github.com/vyperlang/vyper/pull/3412)
* deploy to ghcr on push (https://github.com/vyperlang/vyper/pull/3435)
* add note on return value bounds in interfaces (https://github.com/vyperlang/vyper/pull/3205)
* index `id` param in `URI` event of `ERC1155ownable` (https://github.com/vyperlang/vyper/pull/3203)
* add missing `asset` function to `ERC4626` built-in interface (https://github.com/vyperlang/vyper/pull/3295)
* clarify `skip_contract_check=True` can result in undefined behavior (https://github.com/vyperlang/vyper/pull/3386)
* add `custom` NatSpec tag to docs (https://github.com/vyperlang/vyper/pull/3404)
* fix `uint256_addmod` doc (https://github.com/vyperlang/vyper/pull/3300)
* document optional kwargs for external calls (https://github.com/vyperlang/vyper/pull/3122)
* remove `slice()` length documentation caveats (https://github.com/vyperlang/vyper/pull/3152)
* fix docs of `blockhash` to reflect revert behaviour (https://github.com/vyperlang/vyper/pull/3168)
* improvements to compiler error messages by (https://github.com/vyperlang/vyper/pull/3121, https://github.com/vyperlang/vyper/pull/3134, https://github.com/vyperlang/vyper/pull/3312, https://github.com/vyperlang/vyper/pull/3304, https://github.com/vyperlang/vyper/pull/3240, https://github.com/vyperlang/vyper/pull/3264, https://github.com/vyperlang/vyper/pull/3343, https://github.com/vyperlang/vyper/pull/3307, https://github.com/vyperlang/vyper/pull/3313 and https://github.com/vyperlang/vyper/pull/3215)
These are really just the highlights, as many other bugfixes, docs updates and refactoring (over 150 commits!) made it into this release! Special thanks to contributions from tserg, trocher, z80dev, emc415 and benber86
New Contributors
* omahs made their first contribution in https://github.com/vyperlang/vyper/pull/3128
* ObiajuluM made their first contribution in https://github.com/vyperlang/vyper/pull/3124
* trocher made their first contribution in https://github.com/vyperlang/vyper/pull/3134
* ozmium22 made their first contribution in https://github.com/vyperlang/vyper/pull/3149
* ToonVanHove made their first contribution in https://github.com/vyperlang/vyper/pull/3168
* emc415 made their first contribution in https://github.com/vyperlang/vyper/pull/3158
* lgtm-com made their first contribution in https://github.com/vyperlang/vyper/pull/3147
* tdurieux made their first contribution in https://github.com/vyperlang/vyper/pull/3224
* victor-ego made their first contribution in https://github.com/vyperlang/vyper/pull/3263
* miohtama made their first contribution in https://github.com/vyperlang/vyper/pull/3257
* kelvinfan001 made their first contribution in https://github.com/vyperlang/vyper/pull/2687
**Full Changelog**: https://github.com/vyperlang/vyper/compare/v0.3.7...v0.3.8