Title: Compatibility matrix starting with Python 3.8 · Issue #6545 · python/mypy · GitHub
Open Graph Title: Compatibility matrix starting with Python 3.8 · Issue #6545 · python/mypy
X Title: Compatibility matrix starting with Python 3.8 · Issue #6545 · python/mypy
Description: This is not a bug or feature request per se, more a heads up to mypy users. It should probably be documented as part of the mypy 0.680 release. Once #6539 lands, mypy's compatibility matrix changes shape. Until now, the matrix is essenti...
Open Graph Description: This is not a bug or feature request per se, more a heads up to mypy users. It should probably be documented as part of the mypy 0.680 release. Once #6539 lands, mypy's compatibility matrix changes...
X Description: This is not a bug or feature request per se, more a heads up to mypy users. It should probably be documented as part of the mypy 0.680 release. Once #6539 lands, mypy's compatibility matrix cha...
Opengraph URL: https://github.com/python/mypy/issues/6545
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Compatibility matrix starting with Python 3.8","articleBody":"This is not a bug or feature request per se, more a heads up to mypy users. It should probably be documented as part of the mypy 0.680 release.\r\n\r\nOnce #6539 lands, mypy's compatibility matrix changes shape. Until now, the matrix is essentially square: you can use any Python release \u003e= 3.4 to run mypy, and the target version (`--python-version`) can be any other Python release \u003e= 3.4 (as well as 2.7).\r\n\r\nFor releases 3.4 through 3.7, nothing changes. But if you want to target 3.8, you will have to use Python 3.8 to run mypy. The reason is that starting 3.8, mypy will be using the native `ast` module to parse all target Python versions *except* 2.7 (for which we will keep using `typed_ast`). We're doing this so that we won't have to keep creating new versions of `typed_ast` for new Python versions, which is a [complex, tedious process](https://github.com/python/typed_ast/blob/master/update_process.md). Instead, I've made some changes to the upstream native `ast` module that allow it to parse older Python 3 versions. (Though not Python 2, hence the need to keep using `typed_ast` for that.)\r\n\r\nNow, currently this does not change anything, since so far there are no new features in Python 3.8 that mypy supports. But there is one new feature in 3.8 that mypy *should* support (assignment expressions, [PEP 572](https://www.python.org/dev/peps/pep-0572/)), and once #6539 lands, we can immediately start writing code to support that. Without #6539, we would first have to wait for a `typed_ast` derived from 3.8 before we could even start coding PEP 572 support.\r\n\r\n\"But isn't this a step backwards?\" I hear you ask. After all, it's very nice that mypy currently supports targeting Python versions other than the version used to run mypy. That's true, and we will still do that for *older* Python versions. (E.g. you can use Python 3.8 to run mypy targeting Python 2.7 through 3.7.) But if you want to target the *latest* Python version, you will have to use that latest version to run mypy. I think it's a relatively small price to pay -- after all, if your package claims support for Python 3.8, you probably want to use Python 3.8 to run your unit tests anyway.\r\n\r\nFinally, note that this only constrains grammatical changes in newer Python versions. If you don't start using newer Python grammar, you can still target newer standard library versions. E.g. if you use Python 3.6 to run mypy, you can still pass `--python-version 3.8`, you just won't be able to use grammar that's new in Python 3.8 (IOW assignment expressions) -- but mypy will still use 3.8 to interpret checks for `sys.version_info` in code and stubs.","author":{"url":"https://github.com/gvanrossum","@type":"Person","name":"gvanrossum"},"datePublished":"2019-03-14T21:06:56.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1},"url":"https://github.com/6545/mypy/issues/6545"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:55334a1c-aafc-238c-f7f4-dfd1d1a015a4 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | B228:3FC493:19C51F4:2540385:6A58CA55 |
| html-safe-nonce | fd99f0de2859b1019c2aff479a45fc0150307b0dcff75f9e7b29aa31625f1445 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCMjI4OjNGQzQ5MzoxOUM1MUY0OjI1NDAzODU6NkE1OENBNTUiLCJ2aXNpdG9yX2lkIjoiMzYxNzUwMDk5NjQyMTg2NDAyMSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | cf49c78dfd57a9e4990c006693af37eea9644c33bf604bba7e543f8d6bd813ea |
| hovercard-subject-tag | issue:421244699 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/mypy/6545/issue_layout |
| twitter:image | https://opengraph.githubassets.com/dd46751b144199fb4e28f2d9a310f4bb9ad4c4b24a1d13289d8a37c0f953251e/python/mypy/issues/6545 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/dd46751b144199fb4e28f2d9a310f4bb9ad4c4b24a1d13289d8a37c0f953251e/python/mypy/issues/6545 |
| og:image:alt | This is not a bug or feature request per se, more a heads up to mypy users. It should probably be documented as part of the mypy 0.680 release. Once #6539 lands, mypy's compatibility matrix changes... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | gvanrossum |
| hostname | github.com |
| expected-hostname | github.com |
| None | 5f2a0c7865178af3d91dd9f13b0cdfc3c73a2529c873d2780bb4c01271a57ec6 |
| turbo-cache-control | no-preview |
| go-import | github.com/python/mypy git https://github.com/python/mypy.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 7053637 |
| octolytics-dimension-repository_nwo | python/mypy |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 7053637 |
| octolytics-dimension-repository_network_root_nwo | python/mypy |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 8aae7b8d6caacacf5c66eaeb2702d8dc88d85b4a |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width