[Python-ideas] Towards harmony with JavaScript?
Brendan Barnwell
brenbarn at brenbarn.net
Fri Aug 11 14:11:03 EDT 2017
On 2017-08-11 07:57, Jason H wrote:
> Before I done my firesuit, I'd like to say that I much prefer python
> and I rail on JS whenever I can. However these days it is quite
> common to be doing work in both Python and Javascript. Harmonizing
> the two would help JS developers pick up the language as well as
> people like me that are stuck working in JS as well.
In general I am instinctively opposed to any changes aimed at making
Python more like JavaScript, because I think that overall Python is a
much better designed language than JavaScript, and JavaScript has
numerous profound flaws, so almost anything that makes Python more like
JavaScript is likely to make it worse.
In particular, all of the changes you propose are very minor things
which amount to adding some duplicate or more convenient or
almost-the-same way to do something that can already be done. This kind
of accumulation of confusing alternatives is exactly the kind of thing
that makes JS suck. You have == vs ===, for vs for..in vs for..of,
optional semicolons, and on and on and on. This is because people did
not think about the right way to do things the first time in JS, and
they don't want to break backward compatibility, so they just keep
adding new features to paper over the deeper problems. Happily, Python
avoids the most damaging cases of this, because Python has far fewer
deep problems, and small problems aren't worth the clutter of having
multiple ways to do the same thing.
>1. Object literals: JS: {a:1} vs Python: {'a':1} Making my fingers dance
> on ' or " is not a good use of keystrokes, and it decreases
> readability. However a counter argument here is what about when the a
> is a variable? JS allows o[a] as a way to assigned to a property that
> is a variable. Python of course offers functions that do this, but
> for simple objects, this would very much be appreciated. The point
> here is this is
Was your message truncated here? "The point here is this is" what?
In any case, the objection you've already raised is enough to kill this
proposal for me. Being able to use a variable for a key is a huge and
very real difference in functionality between Python and JS. Being able
to not type quotes is a small advantage in comparison to that. You can
already do dict(a=1, b=2) if you really want to.
> 2. Join: JS: [].join(s) vs Python: s.join([]) I've read the
> justification for putting join on a string, and it makes sense. But I
> think we should put it on the list too.
I agree it is confusing at first. Once you know it, you know it.
Also, adding it to list still wouldn't make it available for tuples,
dicts, or any other iterables. (JavaScript "avoided" this problem by
not providing any way to define your own iterables until 2015, so
everyone was stuck using plain arrays.) I do think a case could be made
for designing a more comprehensive iterable class hierarchy that would
provide things like this, but just adding a single method to a single
type isn't worth it.
> 3. Allow C/C++/JS style comments: JS:[ //, /* ] vs Python # This one
> is pretty self-explanatory.
Again, the gain is tiny. Python is already quite a readable language.
I don't see "make it easily writable for people who don't know Python
without looking up how to write comments" as a useful goal. As with
.join(), once you learn that Python uses #, you know it, and it's not
really a problem. Also, as someone else mentioned, // is a valid
operator in Python, making its use as a comment marker potentially
ambiguous.
--
Brendan Barnwell
"Do not follow where the path may lead. Go, instead, where there is no
path, and leave a trail."
--author unknown
More information about the Python-ideas
mailing list