v0.3.10 is a performance focused release that additionally ships numerous bugfixes. It adds a `codesize` optimization mode ([3493](https://github.com/vyperlang/vyper/pull/3493)), adds new vyper-specific `#pragma` directives ([3493](https://github.com/vyperlang/vyper/pull/3493)), uses Cancun’s `MCOPY` opcode for some compiler generated code ([#3483](https://github.com/vyperlang/vyper/pull/3483)), and generates selector tables which now feature O(1) performance ([#3496](https://github.com/vyperlang/vyper/pull/3496)).
Breaking changes
- add runtime code layout to initcode ([3584](https://github.com/vyperlang/vyper/pull/3584))
- drop evm versions through istanbul ([3470](https://github.com/vyperlang/vyper/pull/3470))
- remove vyper signature from runtime ([3471](https://github.com/vyperlang/vyper/pull/3471))
- only allow valid identifiers to be nonreentrant keys ([3605](https://github.com/vyperlang/vyper/pull/3605))
Non-breaking changes and improvements
- O(1) selector tables ([3496](https://github.com/vyperlang/vyper/pull/3496))
- implement bound= in ranges ([3537](https://github.com/vyperlang/vyper/pull/3537), [#3551](https://github.com/vyperlang/vyper/pull/3551))
- add optimization mode to vyper compiler ([3493](https://github.com/vyperlang/vyper/pull/3493))
- improve batch copy performance ([3483](https://github.com/vyperlang/vyper/pull/3483), [#3499](https://github.com/vyperlang/vyper/pull/3499), [#3525](https://github.com/vyperlang/vyper/pull/3525))
Notable fixes
- fix ecrecover() behavior when signature is invalid ([GHSA-f5x6-7qgp-jhf3](https://github.com/vyperlang/vyper/security/advisories/GHSA-f5x6-7qgp-jhf3), [#3586](https://github.com/vyperlang/vyper/pull/3586))
- fix: order of evaluation for some builtins ([3583](https://github.com/vyperlang/vyper/pull/3583), [#3587](https://github.com/vyperlang/vyper/pull/3587))
- fix: memory allocation in certain builtins using msize ([3610](https://github.com/vyperlang/vyper/pull/3610))
- fix: _abi_decode() input validation in certain complex expressions ([3626](https://github.com/vyperlang/vyper/pull/3626))
- fix: pycryptodome for arm builds ([3485](https://github.com/vyperlang/vyper/pull/3485))
- let params of internal functions be mutable ([3473](https://github.com/vyperlang/vyper/pull/3473))
- typechecking of folded builtins in ([3490](https://github.com/vyperlang/vyper/pull/3490))
- update tload/tstore opcodes per latest 1153 EIP spec ([3484](https://github.com/vyperlang/vyper/pull/3484))
- fix: raw_call type when max_outsize=0 is set ([3572](https://github.com/vyperlang/vyper/pull/3572))
- fix: implements check for indexed event arguments ([3570](https://github.com/vyperlang/vyper/pull/3570))
- fix: type-checking for _abi_decode() arguments ([3626](https://github.com/vyperlang/vyper/pull/3623))
Other docs updates, chores and fixes
- relax restrictions on internal function signatures ([3573](https://github.com/vyperlang/vyper/pull/3573))
- note on security advisory in release notes for versions 0.2.15, 0.2.16, and 0.3.0 ([3553](https://github.com/vyperlang/vyper/pull/3553))
- fix: yanked version in release notes ([3545](https://github.com/vyperlang/vyper/pull/3545))
- update release notes on yanked versions ([3547](https://github.com/vyperlang/vyper/pull/3547))
- improve error message for conflicting methods IDs ([3491](https://github.com/vyperlang/vyper/pull/3491))
- document epsilon builtin ([3552](https://github.com/vyperlang/vyper/pull/3552))
- relax version pragma parsing ([3511](https://github.com/vyperlang/vyper/pull/3511))
- fix: issue with finding installed packages in editable mode ([3510](https://github.com/vyperlang/vyper/pull/3510))
- add note on security advisory for ecrecover in docs ([3539](https://github.com/vyperlang/vyper/pull/3539))
- add asm option to cli help ([3585](https://github.com/vyperlang/vyper/pull/3585))
- add message to error map for repeat range check ([3542](https://github.com/vyperlang/vyper/pull/3542))
- fix: public constant arrays ([3536](https://github.com/vyperlang/vyper/pull/3536))
New Contributors
* 0xmahdirostami made their first contribution in https://github.com/vyperlang/vyper/pull/3558
* shmuel44 made their first contribution in https://github.com/vyperlang/vyper/pull/3566
**Full Changelog**: https://github.com/vyperlang/vyper/compare/v0.3.9...v0.3.10