
Le 24/08/2014 23:12, Guido van Rossum a écrit :
As I have said several times now, it fulfills exactly the original (pre-PEP 3107) goal I had in mind for them.
But were you envisioning back then that said annotations would be looked up without the regular execution environment? PEP 3107 doesn't say anything about that (or rather, it says that annotations can be looked up on the function, but function objects only exist at run-time). Actually, the bytecode isn't very practical to work with to extract annotations, it seems:
def g(): ... def f(a: "foo") -> "bar": pass ... dis.dis(g) 2 0 LOAD_CONST 1 ('foo') 3 LOAD_CONST 2 ('bar') 6 LOAD_CONST 3 (('a', 'return')) 9 LOAD_CONST 4 (<code object f at 0x7f17339e2580, file "<stdin>", line 2>) 12 LOAD_CONST 5 ('g.<locals>.f') 15 EXTENDED_ARG 3 18 MAKE_FUNCTION 196608 21 STORE_FAST 0 (f) 24 LOAD_CONST 0 (None) 27 RETURN_VALUE
... so I suppose people would want to run an AST pass instead? (and then evaluate the "annotations" parts of the AST by hand... uh)
Your proposal seems determined by the fact that mypy has much grander ambitions (and therefore requires its insertion into regular Python), but it doesn't make use of that power at all, worse, it forbids others to use it.
This remark about mypy's ambitions sounds delusional and paranoid.
It is entirely uncritical about mypy. It's fine to have other Python (or Python-like) implementations, even with deliberately different semantics. Such experimentations actually make the community much livelier than, say, PHP's or Ruby's. I don't know at which point mypy changed goals (if it has), but there are still signs in the website of the goal of building a separate runtime (not necessarily a separate syntax), e.g. """Also some language features that are evaluated at runtime in Python may happen during compilation in mypy when using the native semantics. For example, mypy base classes may be bound during compilation (or program loading, before evaluation), unlike Python.""" Also the fact that mypy supports constructs such as "List[int]()". This is a set of design constraints that you're not bound to. Regards Antoine.