
From: Ned Batchelder <ned@nedbatchelder.com> [ munch ] This is very similar to statically typed languages. They also have two steps:
* There is the first step that checks the types but does not run the program. In C/C++, this is the compiler, in Python it is "mypy". * There is the second step that runs the program but does not check the types. In C/C++, this is running the executable, in Python it is "python".
In Python, we can skip the first step, and perhaps that is the source of your concern. I doubt anyone that has adopted type hinting in Python will forget to run mypy, especially in a CI environment like you consider.
In the current Python implementation, we can't skip the first step. Type hints have a significant performance impact on the Python interpreter, hence PEP 649. If we used the TypeScript approach, the typing hints would be removed before execution by the Python interpreter. As for "forget to run mypy", no-one sets out to do the wrong thing. The difference here is that with TypeScript -> JavaScript, if you forget to run the translation step, the program won't run because TypeScript is not valid JavaScript. Same was true for the old CFront C++ -> C translator. Errors are automatically detected. If you forget to run mypy, you've got a program which *looks* correct but might not be. -- cheers, Hugh Fisher