News for hackers. Stuff that matters.
Re:Skulpt: client side Python without preprocessing by eigengrau on Tuesday October 31, 2017 @07:28AM (#15592405)
How does this compare to Brython (http://brython.info/), apart from missing the Python 3 support? Are there any custom bindings to the browser API?
Re:Skulpt: client side Python without preprocessing by meredydd on Tuesday October 31, 2017 @07:38AM (#15592453)
I think it's mostly a difference in approach. Brython sets out to "replace Javascript with Python" as the language of scripting the Web. This means it has custom bindings to the browser API, supports writing Brython in <script> tags, uses slightly funky/un-Pythonic operators to do DOM manipulation, etc. Brython code can't block, to my knowledge (although the Python 3 async stuff makes that constraint much less painful these days).

Skulpt is "a Python implementation in JS". It doesn't have built-in DOM bindings - it's typically used within a project like Anvil or Trinket which provides higher-level (and therefore more Pythonic) modules for display/input/IO. Skulpt code can block, which also helps keep those APIs simple.

I guess my summary would be that Brython is great for scripting your HTML in Python rather than Javascript, but Skulpt is best for providing a Python runtime in your app. Does that make sense? (Of course, you'd have to ask a Brython developer for their take on it ;) )

Re:Skulpt: client side Python without preprocessing by azag0 on Tuesday October 31, 2017 @07:52AM (#15592517)
Why the quotes around "Python implementation in JS"? Isn't it literally just that?
Re:Skulpt: client side Python without preprocessing by meredydd on Tuesday October 31, 2017 @07:53AM (#15592523)
They're quotes from each respective project's homepage :)
Re:Skulpt: client side Python without preprocessing by albertjan on Tuesday October 31, 2017 @08:17AM (#15592637)
We are working on python3 support and skulpt does have a python3 mode which emulates the biggest differences between py2 and py3. (like from __future__ import).

But it doesn't understand any of the new syntax added by python3 yet.

Re:Skulpt: client side Python without preprocessing by ptx on Tuesday October 31, 2017 @09:05AM (#15592896)
Isn't the biggest difference between Python 2 and 3 and handling of Unicode? That's what motivated the break in compatibility in the first place.

But in Skulpt the strings don't quite work like any of the Python versions.

Python 2 has a combined str/bytes type and a separate Unicode string type:

  >>> type("hello") is type(u"你好")
  False
  >>> len(u"你好")
  2
  >>> len("你好")
  6
...whereas in Python 3 the str type is Unicode and the "bytes" type is a completely separate thing:

  >>> type("hello") is type(u"你好")
  True
  >>> len(u"你好")
  2
  >>> len("你好")
  2
Skulpt actually seems to work more like Python 3, except that 1) there is no way at all to work with bytes (that I can find), e.g. no encode/decode methods, and it 2) requires the "u" prefix if literals contain non-ASCII characters, even though the type of the resulting string is the same as without the prefix:

  >>> type("hello") is type(u"你好")
  True
  >>> len(u"你好")
  2
  >>> len("你好")
  SyntaxError: invalid string (possibly contains a unicode character) on line 1
Re:Skulpt: client side Python without preprocessing by albertjan on Tuesday October 31, 2017 @09:23AM (#15593014)
Skulpt strings are javascript strings internally, wether or not you add u in front of a string doesn't actually change it's internal representation. We always strive to be as close to cpython as we can, but in this instance we chose to use javascript strings internally, very likely with the mentality that we would come back to this if and when it would be a requirement for one of us. :) Which it hasn't been I think.
Re:Skulpt: client side Python without preprocessing by albertjan on Tuesday October 31, 2017 @09:26AM (#15593036)
Thanks for this succinct explanation! I've opened an issue on the skulpt repo. https://github.com/skulpt/skulpt/issues/731
Re:Skulpt: client side Python without preprocessing by sametmax on Tuesday October 31, 2017 @08:39AM (#15592750)
Brython has a better design and mimic python in a more convincing way imo