Skip to content

Commit c3e468c

Browse files
authored
Re-order and flesh out what belongs in a PEP (#909)
1 parent 584befc commit c3e468c

File tree

1 file changed

+55
-32
lines changed

1 file changed

+55
-32
lines changed

pep-0001.txt

Lines changed: 55 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ these cases will depend on the nature and purpose of the PEP being updated.
401401
What belongs in a successful PEP?
402402
=================================
403403

404-
Each PEP should have the following parts:
404+
Each PEP should have the following parts/sections:
405405

406406
1. Preamble -- RFC 822 style headers containing meta-data about the
407407
PEP, including the PEP number, a short descriptive title (limited
@@ -411,40 +411,48 @@ Each PEP should have the following parts:
411411
2. Abstract -- a short (~200 word) description of the technical issue
412412
being addressed.
413413

414-
3. Copyright/public domain -- Each PEP must either be explicitly
415-
labeled as placed in the public domain (see this PEP as an
416-
example) or licensed under the `Open Publication License`_.
414+
3. Motivation -- The motivation is critical for PEPs that want to
415+
change the Python language, library, or ecosystem. It should
416+
clearly explain why the existing language specification is
417+
inadequate to address the problem that the PEP solves. PEP
418+
submissions without sufficient motivation may be rejected outright.
417419

418-
4. Specification -- The technical specification should describe the
419-
syntax and semantics of any new language feature. The
420-
specification should be detailed enough to allow competing,
421-
interoperable implementations for at least the current major Python
422-
platforms (CPython, Jython, IronPython, PyPy).
423-
424-
5. Motivation -- The motivation is critical for PEPs that want to
425-
change the Python language. It should clearly explain why the
426-
existing language specification is inadequate to address the
427-
problem that the PEP solves. PEP submissions without sufficient
428-
motivation may be rejected outright.
429-
430-
6. Rationale -- The rationale fleshes out the specification by
431-
describing what motivated the design and why particular design
432-
decisions were made. It should describe alternate designs that
433-
were considered and related work, e.g. how the feature is supported
434-
in other languages.
420+
4. Rationale -- The rationale fleshes out the specification by
421+
describing why particular design decisions were made. It should
422+
describe alternate designs that were considered and related work,
423+
e.g. how the feature is supported in other languages.
435424

436425
The rationale should provide evidence of consensus within the
437426
community and discuss important objections or concerns raised
438427
during discussion.
428+
429+
5. Specification -- The technical specification should describe the
430+
syntax and semantics of any new language feature. The
431+
specification should be detailed enough to allow competing,
432+
interoperable implementations for at least the current major Python
433+
platforms (CPython, Jython, IronPython, PyPy).
439434

440-
7. Backwards Compatibility -- All PEPs that introduce backwards
435+
6. Backwards Compatibility -- All PEPs that introduce backwards
441436
incompatibilities must include a section describing these
442437
incompatibilities and their severity. The PEP must explain how the
443438
author proposes to deal with these incompatibilities. PEP
444439
submissions without a sufficient backwards compatibility treatise
445440
may be rejected outright.
441+
442+
7. Security Implications -- If there are security concerns in relation
443+
to the PEP, those concerns should be expliciltly written out to make
444+
sure reviewers of the PEP are aware of them.
445+
446+
8. How to Teach This -- For a PEP that adds new functionality or changes
447+
language behavior, it is helpful to include a section on how to
448+
teach users, new and experienced, how to apply the PEP to their
449+
work.
446450

447-
8. Reference Implementation -- The reference implementation must be
451+
This section may include key points and recommended documentation
452+
changes that would help users adopt a new feature or migrate their
453+
code to use a language change.
454+
455+
9. Reference Implementation -- The reference implementation must be
448456
completed before any PEP is given status "Final", but it need not
449457
be completed before the PEP is accepted. While there is merit
450458
to the approach of reaching consensus on the specification and
@@ -455,15 +463,30 @@ Each PEP should have the following parts:
455463
The final implementation must include test code and documentation
456464
appropriate for either the Python language reference or the
457465
standard library reference.
458-
459-
9. How to Teach This -- For a PEP that adds new functionality or changes
460-
language behavior, it is helpful to include a section on how to
461-
teach users, new and experienced, how to apply the PEP to their
462-
work.
463-
464-
This section may include key points and recommended documentation
465-
changes that would help users adopt a new feature or migrate their
466-
code to use a language change.
466+
467+
10. Rejected Ideas -- Throughout the discussion of a PEP, various ideas
468+
will be proposed which are not accepted. Those rejected ideas should
469+
be recorded along with the reasoning as to why they were rejected.
470+
This both helps record the thought process behind the final version
471+
of the PEP as well as preventing people from bringing up the same
472+
rejected idea again in subsequent discussions.
473+
474+
In a way this section can be thought of as a breakout section of the
475+
Rationale section that is focused specifically on why certain ideas
476+
were not ultimately pursued.
477+
478+
11. Open Issues -- While a PEP is in draft, ideas can come up which
479+
warrant further discussion. Those ideas should be recorded so people
480+
know that they are being thought about but do not have a concrete
481+
resolution. This helps make sure all issues required for the PEP to be
482+
ready for consideration are complete complete and reduces people
483+
duplicating prior discussion.
484+
485+
12. References -- A collection of URLs used as references through the PEP.
486+
487+
13. Copyright/public domain -- Each PEP must either be explicitly
488+
labeled as placed in the public domain (see this PEP as an
489+
example) or licensed under the `Open Publication License`_.
467490

468491

469492
PEP Formats and Templates

0 commit comments

Comments
 (0)