On Wed, Aug 13, 2014 at 3:29 PM, Christian Heimes
On 13.08.2014 21:44, Guido van Rossum wrote:
Yesterday afternoon I had an inspiring conversation with Bob Ippolito (man of many trades, author of simplejson) and Jukka Lehtosalo (author of mypy: http://mypy-lang.org/). Bob gave a talk at EuroPython about what Python can learn from Haskell (and other languages); yesterday he gave the same talk at Dropbox. The talk is online (https://ep2014.europython.eu/en/schedule/sessions/121/) and in broad strokes comes down to three suggestions:
(a) Python should adopt mypy's syntax for function annotations (b) Python's use of mutabe containers by default is wrong (c) Python should adopt some kind of Abstract Data Types
I was at Bob's talk during EP14 and really liked the idea. A couple of colleagues and other attendees also said it's a good and useful proposal. I also like your proposal to standardize the type annotations first without a full integration of mypy.
In general I'm +1 but I like to discuss two aspects:
1) I'm not keen with the naming of mypy's typing classes. The visual distinction between e.g. dict() and Dict() is too small and IMHO confusing for newcomers. How about an additional 'T' prefix to make clear that the objects are referring to typing objects?
from typing import TList, TDict
def word_count(input: TList[str]) -> TDict[str, int]: ...
Eeewwwww. That's way too Pascal-ish.
2) PEP 3107 only specifies arguments and return values but not exceptions that can be raised by a function. Java has the "throws" syntax to list possible exceptions:
public void readFile() throws IOException {}
May I suggest that we also standardize a way to annotate the exceptions that can be raised by a function? It's a very useful piece of information and commonly requested information on the Python user mailing list. It doesn't have to be a new syntax element, a decorator in the typing module would suffice, too. For example:
from typing import TList, TDict, raises
@raises(RuntimeError, (ValueError, "is raised when input is empty")) def word_count(input: TList[str]) -> TDict[str, int]: ...
That was a disaster in C++. It's confusing, especially since Python uses exceptions more than most other languages do.
Regards, Christian
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/
-- Ryan If anybody ever asks me why I prefer C++ to C, my answer will be simple: "It's becauseslejfp23(@#Q*(E*EIdc-SEGFAULT. Wait, I don't think that was nul-terminated."