[Python-checkins] peps: Add PEP 482, 483, 484 -- type hints. The latter two are stubs.

guido.van.rossum python-checkins at python.org
Thu Jan 8 20:10:40 CET 2015


https://hg.python.org/peps/rev/7cbb166b30fd
changeset:   5662:7cbb166b30fd
user:        Guido van Rossum <guido at python.org>
date:        Thu Jan 08 11:10:25 2015 -0800
summary:
  Add PEP 482, 483, 484 -- type hints. The latter two are stubs.

files:
  pep-0482.txt |  222 +++++++++++++++++++++++++++++++++++++++
  pep-0483.txt |   28 ++++
  pep-0484.txt |   28 ++++
  3 files changed, 278 insertions(+), 0 deletions(-)


diff --git a/pep-0482.txt b/pep-0482.txt
new file mode 100644
--- /dev/null
+++ b/pep-0482.txt
@@ -0,0 +1,222 @@
+PEP: 482
+Title: Literature Overview for Type Hinting
+Version: $Revision$
+Last-Modified: $Date$
+Author: Łukasz Langa <lukasz at langa.pl>
+Discussions-To: Python-Ideas <python-ideas at python.org>
+Status: Draft
+Type: Informational
+Content-Type: text/x-rst
+Created: 08-Jan-2015
+Post-History:
+Resolution:
+
+Abstract
+========
+
+This PEP is one of three related to type hinting.  This PEP gives a
+literature overview of related work.
+
+
+Existing Approaches in Other Languages
+======================================
+
+mypy
+----
+
+(This section is a stub, since mypy [mypy]_ is essentially what we're
+proposing.)
+
+ActionScript
+------------
+
+ActionScript [actionscript]_ is a class-based, single inheritance,
+object-oriented superset of ECMAScript.  It supports inferfaces and
+strong runtime-checked static typing.  Compilation supports a “strict
+dialect” where type mismatches are reported at compile-time.
+
+Example code with types::
+
+  package {
+    import flash.events.Event;
+
+    public class BounceEvent extends Event {
+      public static const BOUNCE:String = "bounce";
+      private var _side:String = "none";
+
+      public function get side():String {
+        return _side;
+      }
+
+      public function BounceEvent(type:String, side:String){
+        super(type, true);
+        _side = side;
+      }
+
+      public override function clone():Event {
+        return new BounceEvent(type, _side);
+      }
+    }
+  }
+
+Dart
+----
+
+Dart [dart]_ is a class-based, single inheritance, object-oriented
+language with C-style syntax.  It supports interfaces, abstract classes,
+reified generics, and optional typing.
+
+Types are inferred when possible.  The runtime differentiates between two
+modes of execution: *checked mode* aimed for development (catching type
+errors at runtime) and *production mode* recommended for speed execution
+(ignoring types and asserts).
+
+Example code with types::
+
+  class Point {
+      final num x, y;
+
+      Point(this.x, this.y);
+
+      num distanceTo(Point other) {
+          var dx = x - other.x;
+          var dy = y - other.y;
+          return math.sqrt(dx * dx + dy * dy);
+      }
+  }
+
+Hack
+----
+
+Hack [hack]_ is a programming language that interoperates seamlessly
+with PHP.  It provides opt-in static type checking, type aliasing,
+generics, nullable types, and lambdas.
+
+Example code with types::
+
+  <?hh
+  class MyClass {
+    private ?string $x = null;
+
+    public function alpha(): int {
+      return 1;
+    }
+
+    public function beta(): string {
+      return 'hi test';
+    }
+  }
+
+  function f(MyClass $my_inst): string {
+    // Will generate a hh_client error
+    return $my_inst->alpha();
+  }
+
+TypeScript
+----------
+
+TypeScript [typescript]_ is a typed superset of JavaScript that adds
+interfaces, classes, mixins and modules to the language.
+
+Type checks are duck typed.  Multiple valid function signatures are
+specified by supplying overloaded function declarations.  Functions and
+classes can use generics as type parametrization.  Interfaces can have
+optional fields.  Interfaces can specify array and dictionary types.
+Classes can have constructors that implicitly add arguments as fields.
+Classes can have static fields.  Classes can have private fields.
+Classes can have getters/setters for fields (like property).  Types are
+inferred.
+
+Example code with types::
+
+  interface Drivable {
+      start(): void;
+      drive(distance: number): boolean;
+      getPosition(): number;
+  }
+
+  class Car implements Drivable {
+      private _isRunning: boolean;
+      private _distanceFromStart: number;
+
+      constructor() {
+          this._isRunning = false;
+          this._distanceFromStart = 0;
+      }
+
+      public start() {
+          this._isRunning = true;
+      }
+
+      public drive(distance: number): boolean {
+          if (this._isRunning) {
+              this._distanceFromStart += distance;
+              return true;
+          }
+          return false;
+      }
+
+      public getPosition(): number {
+          return this._distanceFromStart;
+      }
+  }
+
+
+References
+==========
+
+.. [pep-3107]
+   http://www.python.org/dev/peps/pep-3107/
+
+.. [mypy]
+   http://mypy-lang.org
+
+.. [obiwan]
+   http://pypi.python.org/pypi/obiwan
+
+.. [numba]
+   http://numba.pydata.org
+
+.. [pytypedecl]
+   https://github.com/google/pytypedecl
+
+.. [argumentclinic]
+   https://docs.python.org/3/howto/clinic.html
+
+.. [numpy]
+   http://www.numpy.org
+
+.. [typescript]
+   http://www.typescriptlang.org
+
+.. [hack]
+   http://hacklang.org
+
+.. [dart]
+   https://www.dartlang.org
+
+.. [actionscript]
+   http://livedocs.adobe.com/specs/actionscript/3/
+
+.. [pyflakes]
+   https://github.com/pyflakes/pyflakes/
+
+.. [pylint]
+   http://www.pylint.org
+
+
+Copyright
+=========
+
+This document has been placed in the public domain.
+
+
+

+..
+   Local Variables:
+   mode: indented-text
+   indent-tabs-mode: nil
+   sentence-end-double-space: t
+   fill-column: 70
+   coding: utf-8
+   End:
diff --git a/pep-0483.txt b/pep-0483.txt
new file mode 100644
--- /dev/null
+++ b/pep-0483.txt
@@ -0,0 +1,28 @@
+PEP: 483
+Title: The Theory of Type Hinting
+Version: $Revision$
+Last-Modified: $Date$
+Author: Guido van Rossum <guido at python.org>
+Discussions-To: Python-Ideas <python-ideas at python.org>
+Status: Draft
+Type: Informational
+Content-Type: text/x-rst
+Created: 08-Jan-2015
+Post-History:
+Resolution:
+
+Abstract
+========
+
+This PEP is currently a stub.  The content should be copied from
+https://quip.com/r69HA9GhGa7J and reformatted.
+
+

+..
+   Local Variables:
+   mode: indented-text
+   indent-tabs-mode: nil
+   sentence-end-double-space: t
+   fill-column: 70
+   coding: utf-8
+   End:
diff --git a/pep-0484.txt b/pep-0484.txt
new file mode 100644
--- /dev/null
+++ b/pep-0484.txt
@@ -0,0 +1,28 @@
+PEP: 484
+Title: Type Hints
+Version: $Revision$
+Last-Modified: $Date$
+Author: Guido van Rossum <guido at python.org>, Jukka Lehtosalo <jukka.lehtosalo at iki.fi>, Łukasz Langa <lukasz at langa.pl>
+Discussions-To: Python-Ideas <python-ideas at python.org>
+Status: Draft
+Type: Standards Track
+Content-Type: text/x-rst
+Created: 08-Jan-2015
+Post-History:
+Resolution:
+
+Abstract
+========
+
+This PEP is currently a stub.  The content should be copied from
+https://github.com/ambv/typehinting (but omitting the literature overview, which is PEP 482) and reformatted.
+
+

+..
+   Local Variables:
+   mode: indented-text
+   indent-tabs-mode: nil
+   sentence-end-double-space: t
+   fill-column: 70
+   coding: utf-8
+   End:

-- 
Repository URL: https://hg.python.org/peps


More information about the Python-checkins mailing list