[Python-checkins] r54680 - peps/trunk/pep-0000.txt peps/trunk/pep-3117.txt (original) (raw)

georg.brandl python-checkins at python.org
Wed Apr 4 08:41:20 CEST 2007


Author: georg.brandl Date: Wed Apr 4 08:41:20 2007 New Revision: 54680

Added: peps/trunk/pep-3117.txt Modified: peps/trunk/pep-0000.txt Log: Checkin PEP 3117.

Modified: peps/trunk/pep-0000.txt

--- peps/trunk/pep-0000.txt (original) +++ peps/trunk/pep-0000.txt Wed Apr 4 08:41:20 2007 @@ -115,6 +115,7 @@ S 3108 Standard Library Reorganization Cannon S 3114 Renaming iterator.next() to iterator.next() Yee S 3116 New I/O Stutzbach, Verdone, GvR

@@ -468,6 +469,7 @@ S 3114 Renaming iterator.next() to iterator.next() Yee SA 3115 Metaclasses in Python 3000 Talin S 3116 New I/O Stutzbach, Verdone, GvR

Key

Added: peps/trunk/pep-3117.txt

--- (empty file) +++ peps/trunk/pep-3117.txt Wed Apr 4 08:41:20 2007 @@ -0,0 +1,236 @@ +PEP: 3117 +Title: Postfix type declarations +Version: Revision:Revision: Revision: +Last-Modified: Date:Date: Date: +Author: Georg Brandl <g.brandl at gmx.net> +Status: Draft +Type: Standards Track +Content-Type: text/x-rst +Created: 01-Apr-2007 +Python-Version: 3.0 + + +Abstract +======== + +This PEP proposes the addition of a postfix type declaration syntax to +Python. It also specifies a new typedef statement which is used to create +new mappings between types and declarators. + +Its acceptance will greatly enhance the Python user experience as well as +eliminate one of the warts that deter users of other programming languages from +switching to Python. + + +Rationale +========= + +Python has long suffered from the lack of explicit type declarations. Being one +of the few aspects in which the language deviates from its Zen, this wart has +sparked many a discussion between Python heretics and members of the PSU (for +a few examples, see [EX1], [EX2] or [EX3]), and it also made it a large-scale +enterprise success unlikely. + +However, if one wants to put an end to this misery, a decent Pythonic syntax +must be found. In almost all languages that have them, type declarations lack +this quality: they are verbose, often needing multiple words for a single +type, or they are hard to comprehend (e.g., a certain language uses completely +unrelated [#] adjectives like dim for type declaration). + +Therefore, this PEP combines the move to type declarations with another bold +move that will once again prove that Python is not only future-proof but +future-embracing: the introduction of Unicode characters as an integral +constituent of source code. + +Unicode makes it possible to express much more with much less characters, which +is in accordance with the Zen ("Readability counts.") [ZEN]. Additionally, it +eliminates the need for a separate type declaration statement, and last but not +least, it makes Python measure up to Perl 6, which already uses Unicode for its +operators. [#] + + +Specification +============= + +When the type declaration mode is in operation, the grammar is changed so that +each NAME must consist of two parts: a name and a type declarator, which is +exactly one Unicode character. + +The declarator uniquely specifies the type of the name, and if it occurs on the +left hand side of an expression, this type is enforced: an InquisitionError +exception is raised if the returned type doesn't match the declared type. [#]_ + +Also, function call result types have to be specified. If the result of the call +does not have the declared type, an InquisitionError is raised. Caution: the +declarator for the result should not be confused with the declarator for the +function object (see the example below). + +Type declarators after names that are only read, not assigned to, are not strictly +necessary but enforced anyway (see the Python Zen: "Explicit is better than +implicit."). + +The mapping between types and declarators is not static. It can be completely +customized by the programmer, but for convenience there are some predefined +mappings for some built-in types: + +========================= =================================================== +Type Declarator +========================= =================================================== +object � (REPLACEMENT CHARACTER) +int ℕ (DOUBLE-STRUCK CAPITAL N) +float ℮ (ESTIMATED SYMBOL) +bool ✓ (CHECK MARK) +complex ℂ (DOUBLE-STRUCK CAPITAL C) +str ✎ (LOWER RIGHT PENCIL) +unicode ✒ (BLACK NIB) +tuple ⒯ (PARENTHESIZED LATIN SMALL LETTER T) +list ♨ (HOT SPRINGS) +dict ⧟ (DOUBLE-ENDED MULTIMAP) +set ∅ (EMPTY SET) (Note: this is also for full sets) +frozenset ☃ (SNOWMAN) +datetime ⌚ (WATCH) +function ƛ (LATIN SMALL LETTER LAMBDA WITH STROKE) +generator ⚛ (ATOM SYMBOL) +Exception ⌁ (ELECTRIC ARROW) +========================= =================================================== + +The declarator for the None type is a zero-width space. + +These characters should be obvious and easy to remember and type for every +programmer. + + +Unicode replacement units +========================= + +Since even in our modern, globalized world there are still some old-fashioned +rebels who can't or don't want to use Unicode in their source code, and since +Python is a forgiving language, a fallback is provided for those: + +Instead of the single Unicode character, they can type name${UNICODE NAME OF +THE DECLARATOR}$. For example, these two function definitions are equivalent:: +



More information about the Python-checkins mailing list