On Sat, Sep 29, 2018 at 10:32:16AM +1000, Chris Angelico wrote: > What should happen here? > > >>> import ctypes > >>> ctypes.cast(id(1), ctypes.POINTER(ctypes.c_int))[6] = 0 > >>> 1 > > Nothing here invokes C's undefined behaviour. Or what about here: > > >>> import sys; sys.setrecursionlimit(2147483647) > >>> def f(): f() > ... > >>> f()
I'm not fussed about such edge cases. ctypes is not "Python", and other implementations don't support it. Mucking about with the interpreter internals is clear "Here be dragons" territory, and that's okay. > Python has its own set of "well don't do that then" situations. In > fact, I would say that *most* languages do. Indeed, but that's not really what I'm talking about. As I said earlier, Python's semantics are relatively simply in the sense that it is governed by a particular execution model (a virtual machine) that isn't hugely complex, but there are some corner cases which are complex. Overall Python is very rich and non-minimalist. I wouldn't describe it as "simple" except in comparison to languages like C++. BASIC is a simple language, with only two scalar data types (strings and numbers) and one array type, and only a handful of fairly simple flow control tools: if, loops, GOTO/GOSUB. (Of course, modern BASICs may be more complex.) Python has a rich set of builtin data types (ints, floats, strings, bytes, lists, tuples, dicts...), even more in the standard library, OOP, and on top of the familiar BASIC-like flow control (for loops, while loops, if...else) we have comprehensions, with statements and exception handling. (Did I miss anything?) But not GOTO :-) -- Steve _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/