11.. _lang-changes :
22.. _langchanges :
33
4- Changing the Python language
5- ============================
6- On occasion people come up with an idea on how to change or improve Python as a
7- programming language. This document is meant to explain exactly what changes
8- have a reasonable chance of being considered and what the process is to propose
9- changes to the language.
4+ Changing Python
5+ ===============
106
7+ On occasion people come up with an idea for changing or improving Python.
8+ This page explains how to explore change proposals and what changes
9+ have a reasonable chance of being considered.
1110
12- What qualifies
11+
12+ Considerations
1313--------------
14- First and foremost, it must be understood that changes to the Python
15- programming language are difficult to make. When the language changes,
16- **every ** Python programmer already in existence and all Python programmers to
14+
15+ First, understand that changes to Python
16+ are difficult to make. When the language changes,
17+ **every ** Python programmer and all Python programmers to
1718come will end up eventually learning about the change you want to propose.
1819Books will need updating, code will be changed, and a new way to do things will
19- need to be learned. Changes to the Python programming language are never taken
20+ need to be learned. Changes to Python are never taken
2021lightly.
2122
22- Because of the seriousness that language changes carry, any change must be
23- beneficial to a large proportion of Python users. If the change only benefits a
23+ Backward compatibility is a significant concern. Existing Python code has to
24+ continue to work. There are exceptions to this rule, but they are very rare
25+ and are only allowed when the benefits of the change greatly outweigh the costs
26+ of breaking existing code.
27+
28+ Because of the seriousness of changing the language, any change must be
29+ beneficial to a many Python users. If the change only helps a
2430small percentage of Python developers then the change will not be made. A good
2531way to see if your idea would work for a large portion of the Python community
26- is to ask in the `Ideas Discourse category `_. You can also
27- go through Python's stdlib and find examples of code which would benefit from
28- your proposed change (which helps communicate the usefulness of your change to
29- others). For further guidance, see :ref: ` suggesting-changes ` .
32+ is to ask in the `Ideas Discourse category < ideas _> `_. You can also
33+ look in Python's standard library to find examples of code which would benefit from
34+ your proposed change. This can also help communicate the usefulness of your change to
35+ others.
3036
31- Your proposed change also needs to be *Pythonic *. While only the Steering
32- Council can truly classify something as Pythonic, you can read the
33- :pep: `Zen of Python <20 >` for guidance.
37+ For all of these reasons, most proposed changes to Python are rejected. This
38+ doesn't mean you shouldn't suggest them. It can be useful to explore
39+ alternatives and to get feedback from the community. Just be aware that
40+ getting a change accepted is difficult. Don't take it personally.
3441
3542
3643.. index ::
@@ -41,25 +48,97 @@ Council can truly classify something as Pythonic, you can read the
4148Suggesting new features and language changes
4249--------------------------------------------
4350
44- The `Ideas Discourse category `_
45- is specifically intended for discussion of new features and language changes.
46- Please don't be disappointed if your idea isn't met with universal approval:
47- as the :pep: `long list of Withdrawn and Rejected PEPs
48- <0#rejected-superseded-and-withdrawn-peps >`
49- in the :pep: `PEP Index <0 >` attests,
50- and as befits a reasonably mature programming language,
51- getting significant changes into Python isn't a simple task.
51+ Proposing a change involves the following steps:
52+
53+ - Describe your idea.
54+
55+ - Engage in discussion about the idea.
56+
57+ - Rarely, the idea will advance to a formal proposal stage.
58+
59+
60+ Describe your idea
61+ ^^^^^^^^^^^^^^^^^^
62+
63+ The `Ideas Discourse category <ideas _>`_ is specifically intended for discussion
64+ of new features and language changes. Make your proposal as a `new topic
65+ <ideas_> `_ there.
66+
67+ Your proposal needs to be **detailed **. Describe the change you want to make,
68+ why you want to make it, and what benefits it will bring to Python users. Be
69+ specific. Show that you have considered the effect of the change on existing
70+ code.
71+
72+ Some things you should **not ** do:
73+
74+ - **Don't ** format your idea as a PEP. It's good to use the PEP template as a
75+ guide for what information to include, but don't try to write a full PEP
76+ until the idea has been accepted for further consideration.
77+
78+ - **Don't ** create a list of proposed changes. Each idea needs its own
79+ discussion. Proposing a change is significant work. You will need to spend
80+ time on each proposal.
81+
82+ When justifying your idea, these are not good reasons to make a change:
83+
84+ - "Other languages work this way." Languages are different. What works well
85+ in one language may not work well in Python, or Python may already have a
86+ way to do a similar thing.
87+
88+ - "It would be nice." This is too vague. Be specific about the benefits
89+ your change will bring, and consider the costs as well.
90+
91+ Some things you **should ** do:
92+
93+ - Research whether your idea has been proposed before. There are many
94+ suggestions that have been made and rejected in the past. If your idea has a
95+ history, read the discussion to see why it was rejected. Previously rejected
96+ ideas are especially unlikely to get accepted. If you can address the
97+ concerns raised in the previous discussion, mention that in your proposal.
98+
99+ - Read other ideas to see how they are presented. This will help you flesh out
100+ your proposal.
101+
102+ - Read other ideas to understand the kinds of concerns that are raised and
103+ objections that must be answered. Your proposal will be stronger if you can
104+ address these concerns up front.
105+
106+
107+ Engage in Discussion
108+ ^^^^^^^^^^^^^^^^^^^^
109+
110+ Once you post your proposal, people will respond. You need to continue
111+ the discussion, answer questions, and address objections. This is an important
112+ part of the process. Other people's perspectives will help explore the full
113+ impact of the idea and find strengths or weaknesses you may not have
114+ considered.
115+
116+ You will get push-back. Don't be disappointed, and don't take it personally.
117+ As the long list of :pep: `Withdrawn and Rejected PEPs
118+ <0#rejected-superseded-and-withdrawn-peps >` in the :pep: `PEP Index <0 >`
119+ attests, and as befits a mature programming language, getting significant
120+ changes into Python isn't a simple task.
121+
122+ Engage in good faith. The goal of the discussion is to find the best balance
123+ between competing concerns. If your idea has merit, the discussion will help
124+ refine it and make it stronger. If your idea has flaws, the discussion will
125+ help identify them so you can address them or move on. Keep the discussion
126+ productive and focused on the issues, not on personalities.
127+
128+ It's especially useful to get core team members involved in the discussion.
129+ Sometimes they will differ in opinion, or merely be unconvinced. When there
130+ isn't a clear positive sentiment, the `Status Quo Wins a Stalemate `_.
131+
132+ Even if your idea is not accepted, the discussion can help you and others
133+ understand the design of Python better, and help inform future propoosals.
52134
53- If the idea is reasonable, someone will suggest posting it as a feature
54- request on the `issue tracker `_, or, for larger changes,
55- writing it up as PEP following the :ref: `lang-changes-pep-process `.
56135
57- Sometimes core developers will differ in opinion,
58- or merely be collectively unconvinced.
59- When there isn't an obvious victor, then the `Status Quo Wins a Stalemate `_.
136+ Formal proposal
137+ ^^^^^^^^^^^^^^^
60138
61- For some examples on language changes that were accepted,
62- see `Justifying Python Language Changes `_.
139+ If the idea gets positive discussion, someone will suggest posting it as a
140+ feature request on the `issue tracker `_, or, for larger changes, writing it up
141+ as PEP following the :ref: `lang-changes-pep-process `. Congratulations!
63142
64143
65144.. index :: PEP process
@@ -83,6 +162,5 @@ to inform others who may propose a similar language change in the future.
83162
84163
85164.. _issue tracker : https://github.com/python/cpython/issues
86- .. _ Ideas Discourse category : https://discuss.python.org/c/ideas/6
165+ .. _ ideas : https://discuss.python.org/c/ideas/6
87166.. _Status Quo Wins a Stalemate : https://www.curiousefficiency.org/posts/2011/02/status-quo-wins-stalemate.html
88- .. _Justifying Python Language Changes : https://www.curiousefficiency.org/posts/2011/02/justifying-python-language-changes.html
0 commit comments