On Wed, Apr 6, 2016 at 11:54 PM, BartC <b...@freeuk.com> wrote: > There are plenty of features that /I/ consider must-have, which Python > doesn't have. It has to emulate them, unsatisfactorily, with variables or > classes or functions, or do without.
Blub's Paradox epitomized. > But you're right in that little is actually essential. Basic has shown that. Actually, BASIC has a lot that isn't essential. A Turing-complete language can be implemented with just three tokens, although that's slightly cheating; they form eight opcodes (by being used in pairs). http://www.dangermouse.net/esoteric/ook.html > You need expressions, IF, GOTO, variables and assignments, and some means of > doing I/O. Depending on your meaning of "language", I would say that I/O does *not* have to be an intrinsic part of it - it can be implemented far more cleanly with built-in functions. Python 2 gave good syntactic support to printing to the console, and messy syntactic support to printing elsewhere, but Python 3 proved that it's not only unnecessary, but counter-productive - it's better to push that to regular functions. Technically, expressions aren't required. However, a modern imperative language will normally have expression support because it's so, well, expressive. Variable assignment, yes. And you need some form of flow control (either 'if' or 'while'). > Pretty much every language has (had) those, although it's fashionable now to > do away with GOTO, and some are getting rid of (rewritable) variables too! > Others seem intent on doing away with control flow altogether, just having > expressions. Apparently they think coding should become more elitist with > only mathematicians allowed to participate. > > I have the opposite view. Or maybe they think that coding should become more accessible to people with a strong mathematical background. There was a time when programming was a thing that only programmers did; that time is no more. A brilliant physicist who sets up synchrotron experiments should be able to learn enough Python to tinker with his simulation code; a mathematician who devises cryptographic algorithms should be able to transfer the algebraic notes directly into code. A language that makes it easier to translate algebra into executable code is *easier*, not harder, for those kinds of people. It might be harder *for you*, but that just proves that, once again, you don't like what you don't understand, and it scares you, and this feature is mysterious at least. [1] Also, languages with no mutable state and everything implemented as expressions lend themselves well to massive parallelization; the compiler can look at the code and see easily that these two subexpressions are entirely independent, and evaluate them in parallel. That's pretty powerful. Welcome to Blub's Paradox, once again. ChrisA [1] https://youtu.be/xCENkwPiuU0?t=1m59s -- https://mail.python.org/mailman/listinfo/python-list