Brython - Python in the browser

Terry Reedy tjreedy at udel.edu
Thu Dec 20 01:07:15 CET 2012


On 12/19/2012 1:19 PM, Pierre Quentel wrote:

> The objective of Brython is to replace Javascript by Python as the
> scripting language for web browsers, making it usable on all
> terminals including smartphones, tablets, connected TVs, etc. Please
> forgive the lack of ambition ;-)

This sounds similar to pyjs, but the latter has two big problems: a) 
personality conflicts splits among the developers; b) last I knew, it 
was stuck on Python 2.

I think your home page/doc/announcement should specify Python 3 at the 
top, so it is not a mystery until one reads down to
"Brython supports most keywords and functions of Python 3 : "

"lists are created with [] or list(), tuples with () or tuple(), 
dictionaries with {} or dict() and sets with set()"

non-empty sets are also created with {} and you should support that.

> The best introduction is to visit the Brython site
> (http://www.brython.info).

That says that my browser, Firefox 17, does not support HTML5. Golly 
gee. I don't think any browser support5 all of that moving target, and 
Gecko apparently supports about as large a subset as most.
https://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28HTML5%29
It is possible the FF still does not support the particular feature 
needed for the clock, but then the page should say just that. Has the 
latest FF (17) actually been tested?

> To create an element, for instance an HTML anchor :
> doc <= A('Python',href="http://www.python.org")

To me, that is a awful choice and I urge you to change it.

'<=' is not just an operator, it is a comparison operator. It normally 
return False or True. Numpy array comparison returns arrays of booleans, 
so the meaning is extended, not completely changed. People will often be 
using it with its normal mean in conditionals elsewhere, so this usage 
creates strong cognitive dissonance. Also, using an expression as a 
statement is allowed, but except in the interactive interpreter, it only 
makes sense with an expression that obviously has side-effects or could 
have side-effects (like the expression 'mylist.sort()'. It just looks 
wrong to an experienced Python programmer like me.

It also is unnecessary. Use '+=' or '|='. The former means just what you 
want the statement to do and the latter is at least somewhat related 
(bit or-addition) and is rarely used and is very unlikely to be used in 
code intended for a browser.


> It still lacks important features of Python, mostly list
> comprehensions and classes ;

Since Python 3 has 4 types of comprehensions, while Python 2 only has 
list comprehensions, I took this to mean that Brython was Python 2.

And yes, I am all in favor of being able to use a subset of Py3 instead 
of javascript. A full Python interpreter in a browser is too dangerous. 
(Actually, I think javascript is too, but that is a different issue.) 
Python translated to javascript cannot be worse than javascript. I 
presume the same would be true if the javascript step were omitted and 
Python were directly compiled to the virtual machines defined by current 
javascript engines.

-- 
Terry Jan Reedy




More information about the Python-list mailing list