
Python Converted To JavaScript, Executed In-Browser 176
lkcl writes "Two independent projects, Skulpt and Pyjamas, are working to bring Python to the web browser (and the JavaScript command-line) the hard way: as JavaScript. Skulpt already has a cool Python prompt demo on its homepage; Pyjamas has a gwtcanvas demo port and a GChart 2.6 demo port. Using the 64-bit version of Google v8 and PyV8, Pyjamas has just recently and successfully run its Python regression tests, converted to JavaScript, at the command-line. (Note: don't try any of the above SVG demos with FF2 or IE6; they will suck.)"
GWT for Python? (Score:3, Interesting)
It's not entirely clear to me what Skulpt is exactly, but Pyjamas is apparently GWT ported to Python, which sounds like a really cool idea. Now if somebody did the same thing with Ruby and Scala, I'd be really happy.
Javascript is just way too stupid to program manually, but currently we're in the odd situation where we're writing server stuff in Ruby, and browser stuff in Java. That's just wrong.
Re:GWT for Python? (Score:4, Informative)
you're looking for RubyJS [rubyforge.org]. sadly, funding has not been forthcoming in order to carry RubyJS forward. the compiler is excellent; the insights into the technical issues behind dynamic language translation were very useful (even to python translator developers) - but martin ran out of time/money/enthusiasm due to the lack of interest shown, so he only got as far as creating HTML and Button for RWT (Ruby Web Toolkit).
Re: (Score:3, Interesting)
Not more than Ruby or Python.
Don't confuse languages with libraries.
Re: (Score:2, Insightful)
Eh, a language is only as good as its standard library. I don't like telling people to download/build/install a number of other libraries of specific versions just to run/build my stupid application.
It's just a fact of life. For personal applications (where it's hard enough to get people to use your app anyway) and work applications (where licensing causes multiple headaches on this front).
And no, I don't use Ruby, Python, or Javascript so I can't comment on any of their libraries.
Re: (Score:3)
So C and C++, ones of the most used languages in the world, are worse than fuck since their standard library is ridiculously small?
It's not like all the best and more important software is written in those languages... (virtually all operating systems and major applications)
Re: (Score:2)
It has been abused for years, and as such ignorant people have the opinion that it's just a toy language, when really it's incredibly powerful.
Maybe the fact that it's so easily abused, used as a toy language out of ignorance, and that the stuff written in it is mostly badly-written crap that doesn't use it's incredibly powerful features already shows why you might say it's way too stupid to program manually.
Re: (Score:2)
One of the founding principles of Python is 'There should be one-- and preferably only one --obvious way to do it.'
http://www.python.org/dev/peps/pep-0020/ [python.org]
The python language (circa 2.4) wasn't *flexable*, it was rigid while still being easy to use. As a result, python code written by your average script monkey is more readable.
How about a Javascript - to - python convertor? (Score:2, Insightful)
In most ways (no explicit integer type being an exception) Javascript is a remarkable and beautiful language [crockford.com]. It has libraries available on a server near you through Dojo, among others. Javascript is one of the best things about browsers.
What browsers need is a workable CSS and DOM interface (although the DOM interface has improved in recent years). But these are not issues with Javascript per se. Cleaning up the browser programming environment is not about getting rid of Javascript.
From TFA: """
anyway
Re:How about a Javascript - to - python convertor? (Score:5, Insightful)
Cleaning up the browser programming environment is not about getting rid of Javascript.
Maybe not, but javascript is not a good language, it's a bad language with some good features. The awful scoping mechanism is evidence of this enough. The intrinsic objects are too limited to be useful, so much so that now there are more than 4 different common framework projects to handle all the inconsistency in implementation and they're all incompatible with each other. anonymous functions are great but they make debugging a giant pain the arse.
i would like to see a viable alternative language to javascript, just for variety's sake. It's just had layers of crap pasted on top of it since 1995 or whatever and it'd be nice to see a new approach that fits what people actually use it for these days.
Re:How about a Javascript - to - python convertor? (Score:4, Informative)
The link to Douglas Crockford's site in the parent was to an article entitled "The World's Most Misunderstood Programming Language".
The awful scoping mechanism
From the brief survey of Javascript [crockford.com] on Crockford's site:
"""
When used inside of a function, var defines variables with function-scope. The vars are not accessible from outside of the function. There is no other granularity of scope in JavaScript. In particular, there is no block-scope.
"""
iow, use the var keyword. Programmers who do not know this ONE RULE (TM) are bitten by mysterious insects. Use a lint program if needed.
Functions are objects in Javascript, so this effectively allows, in either functional or object styles of programming, programmers to freely and simply define their variable scoping.
Procedural programmers used to simple block scoping (Hi COBOL fans!) may need to find a mechanism to cope with this. But I'd suggest using OO techniques if your program is complex enough that this is a problem. Javascript allows simple, non-demanding OO. If you like your OO authoritarian then Google has a Java-to-javascript translator.
intrinsic objects are too limited to be useful, so much so that now there are more than 4 different common framework projects
Python has one official library (and many 'unofficial' modules too), without which Python would be very limited. Javascript has many unofficial libraries. Welcome to the free world.
btw, I use Python, and I get Twisted Python at least to some extent. Twisted's deferred abstraction is mimicked in Dojo Javascript. I use Python on the server and Javascript + Dojo on the browser. Python has less warts and more modules. Javascript has astounding power in simplicity, as in the scoping rule.
Re: (Score:2)
Re: (Score:2)
yes I know about the var keyword and use it quite religiously. However let me give a specific example of how crappy the JS scope rules are.
I can globally scope a variable in JS, let's call it foo. If I am a sloppy programmer and write a function accessing a variable named foo without var'ing it within that function, it will access the global var unless foo is an argument for my function.
oh crap but it's worse because my functions are objects. So i can have a function foo() and a variable foo as prope
Re: (Score:2)
I can globally scope a variable in JS, let's call it foo. If I am a sloppy programmer and write a function accessing a variable named foo without var'ing it within that function, it will access the global var unless foo is an argument for my function.
Uhh... wtf... that's exactly the way virtually every other language works, as well, include good ol' fashioned C (Perl is another excellent example). I fail to see how this is even remotely surprising.
So i can have a function foo() and a variable foo as prope
Re: (Score:2)
iow, use the var keyword. Programmers who do not know this ONE RULE (TM) are bitten by mysterious insects. Use a lint program if needed.
Functions are objects in Javascript, so this effectively allows, in either functional or object styles of programming, programmers to freely and simply define their variable scoping.
Procedural programmers used to simple block scoping (Hi COBOL fans!) may need to find a mechanism to cope with this. But I'd suggest using OO techniques if your program is complex enough that this is a problem. Javascript allows simple, non-demanding OO. If you like your OO authoritarian then Google has a Java-to-javascript translator.
Sorry, but that's just bullshit. Scoping of local variables has nothing to do with OO or lack thereof; in fact, virtually all other OO languages which have explicit variable declarations do block scoping, while COBOL never had it. Nor does this have anything to do with functions as first-class objects.
In fact, I know of one single language that had the same awful local scope rules as JavaScript - it's VB6.
Re: (Score:2, Insightful)
Why? So in 2025 you can sit around talking about the new language thats fills its roll perfectly but isn't to your liking and wasn't the perfect vision you thought it would be 15 years ago? Javascript has barely changed in the last 15 years. The environmen
Re: (Score:3, Insightful)
wow, cs rage much?
I am perfectly capable of programming in JS. I've written a number of extremely useful classes in the language and I don't care for your tone.
if you think your language is better than all the rest, or some other language should go away, then you are a shitty programmer.
well, hello mr. strawman. I never declared that I wish javascript would go away, and I don't suggest any "better" language should take its place... I merely asked for an alternative that reflects how it is used in a modern sense more accurately.
Why? [...]Javascript has barely changed in the last 15 years.
Thank you for answering your own question. js wasn't a good language in the first place and 15 years of
Re: (Score:2)
Here is reality for you developers of the world, if you think your language is better than all the rest, or some other language should go away, then you are a shitty programmer. The language does not make the programmer, the programmer does. If you find a language/environment difficult to use, you are the shitty part of the equation. Languages are just that, languages. They describe things. You are the one that has to figure out how to describe what you want, if you can't do that, the language or environment isn't the problem, you are.
Riiight. That's politically-correct bullshit. Languages can very easily make things easy or difficult. Languages can be shitty. Environments can be shitty. If you don't believe me, I can come up with a shitty language and environgment just for you. It'll take a couple of days, but I can guarantee it'll be really shitty. Sure, programmers can be shitty too (and that's often the case), but that doesn't mean there aren't differences in quality between languages and environment.
Re: (Score:3, Interesting)
Here is reality for you developers of the world, if you think your language is better than all the rest, or some other language should go away, then you are a shitty programmer.
I don't know of any "silver bullet" languages, though I definitely have favorites - and I do not wish all others to go away.
What I do wish, however, is for badly designed languages which don't have any redeeming qualities to go away. And, yes, JS is on that list. Though, admittedly, way below PHP.
On a side note, an example of a badly designed language with a redeeming quality is Common Lisp - it's ugly as hell, but nothing else matches it in terms of sheer power.
Re: (Score:2)
Please, Oh Wise One, tell us the difference between a script and a program.
Re: (Score:2)
The intrinsic objects are too limited to be useful, so much so that now there are more than 4 different common framework projects to handle all the inconsistency in implementation and they're all incompatible with each other.
Whoa, slow down. Blame where blame is due. That point is DOM's fault, but Javascript's. (Well, ok, DOM's not to blame for the frameworks being incompatible with each other, but the shittiness of DOM is why they exist at all.)
If you implemented Python or Ruby in a browser, it would have
Re: (Score:2)
Javascript used to have a really nice scoping mechanism, called eval(); It was blazing fast too, in every browser. The basic idea was when you create an object, you tell it its name.
var myPlayer = new Player('myPlayer');
Then it uses eval to generate methods that point to itself. This was necessary because all callbacks are global in Javascript. Unfortunately, FF3 disabled this fine use of eval, so now, you have to do weird scoping shit that slows it down.
I like how lax Javascript is. A variable can be both
Re: (Score:2)
The scoping mechanism I agree is awful, but it's also one reason I am also frustrated by python for sophisticated applications. I have not found a way to acheive more granularity than Javascript in Python apps (i.e. arbitrary block scope). One may fairly argue that they feel those circumstances should be broken up into functions if it seems required to have a block-scoped variable, but sometimes it just works better to know before a function ends that you will get errors if you accidentally use that varia
Re: (Score:3, Interesting)
What browsers need is a workable CSS and DOM interface (although the DOM interface has improved in recent years).
yes - it's these DOM interfaces that i used for the pure-python port of pyjamas. the first one (webkit) i literally had to create, myself (it took 8 weeks). the second one, xulrunner, used a component created by the OLPC team, called hulahop; the third one, for windows only, uses python COM (the comtypes library) and python ctypes.
But these are not issues with Javascript per se. Cleaning up the browser programming environment is not about getting rid of Javascript.
From TFA: """
anyway, just thought there might be people who would be intrigued (or
horrified enough to care what's being done in the name of computer
science) by either of these projects.
"""
Not horrified, but I wonder if W3C politics is creating unforeseen consequences.
it has to be said that the attitude of the webkit developers (one in particular who can be easily identified) has been incredibly bad, towards the free software glib/gobject bin [github.org]
What browsers need... (Score:2)
...is to be buried deep down under ground and never see the face of the Earth again.
What I mean is that we don't need browsers, we need a code/data distribution system that lazily downloads application components/data.
Re: (Score:2)
Jquery [jquery.com] makes working with the DOM incredibly easy. It completely changed and radically simplified nearly all of the Javascript that I write. If you haven't explored it, you should.
A practical use (Score:4, Interesting)
As a high school computer science teacher, I can see a practical application of this. Currently, I think Python is one of the best languages to learn basic programming concepts with, in that it is relatively straightforward, powerful, and there's not much "voodoo" to prevent students from diving right into programming. It's possible to do some really cool things in Python with not much code.
However, one of the problems is that it can be difficult to give students a way to show off their code. Since it's an interpreted language, they can't just give an .exe or a .app file to someone else to show it off - they need to say, "Oh, go and install Python, and these libraries, etc." Yes, there are solutions such as py2exe and py2app, but getting these set up can be quite a task in itself. By running Python inside JavaScript, you basically open up the whole web-connected world as a potential audience to these budding programmers. It's much easier to say, "Hey, check out this link!" than "Hey, download Python (but get the right version) and this graphics library, then download my .py file, and open up a command prompt and type python blahblah.py!"
Re: (Score:2)
Actually, if you use pyobjc or whatever the Windows python packager/comiler is these days (py2exe?) you can do just that. They'll make you a self contained .app or .exe that you can just give to someone.
The web thing is pretty cool as well though.
Re: (Score:2)
You're right. Not sure how I managed to skip that whole sentence.
The setup for py2app and py2exe isn't that bad. Py2app comes preinstalled in Leopard and Snow Leopard after all.
You'd probably want to write some boiler plate to make it easy for the kids to get some instant gratification but you'd want to do the same thing with Pyjamas.
Re: (Score:3, Insightful)
Why not teach Javascript itself?
It's a simple but powerful general-purpose object-oriented language. It's also a functional programming language with C-like syntax, closures, and lambdas.
A browser is the interpreter.
**** Please read http://javascript.crockford.com/javascript.html [crockford.com] before modding this down. ****
Re: (Score:2)
Javascript is not object-oriented in any of the traditional senses of the word. It provides features you can build an OO-like system on top of, but so does any language with closures and first-class functions...
Re: (Score:2)
Javascript is not object-oriented in any of the traditional senses of the word.
It's quite object-oriented, just not class oriented, and easy enough to use as if it's class-oriented if that's what you want, even without libraries. The prototype-based object system features add object orientation beyond what's offered via closures.
Re: (Score:2)
It's great that JavaScript can be used from within a web browser. However, doing anything meaningful using JavaScript with a web browser requires at least a working knowledge of HTML and the DOM. I'd rather focus on the basics of programming separate from that first.
Not necessarily. You can get a instant simple read-eval-print loop by pointing your browser here: http://www.squarefree.com/shell/ [squarefree.com]
Or, if you've got a JRE (and there's not many machines that can't have one), you can download Rhino (http://www.moz
Re: (Score:2)
Perl has a nice way to generate .exe's from Perl scripts, involving:
cpan -i PAR::Packer
pp -o myprog.exe myprog.pl
The end result is a .exe that can be run directly, no need to install (it unpacks itself then runs). Includes all CPAN libraries that you might use in the script.
See http://search.cpan.org/dist/PAR-Packer/lib/pp.pm [cpan.org] - on Windows, install Strawberry Perl, and everything above will 'just work'.
Re: (Score:2)
that's exactly why i posted links to the GWTCanvas and the GChart demos, as they show that it is in fact possible to do "graphics" using DOM manipulation. also, with WebGL coming in HTML5 to both webkit and firefox [vlad1.com], it will be a simple matter of having a framework that creates the relevant DOM elements.
voila - instant control over 3D graphics code (written in c), from python or javascript.
Google Translate Extended (Score:3, Funny)
FAQ:
Q. How accurate is it?
A. Same as Google Translate. You have to learn the output language to know which parts of the language you already know result in garbage-out. We suggest you use our new Pidgin versions of Python, PHP, Java, and Ruby.
Re:Google Translate Extended (Score:5, Interesting)
i know you're joking, but there really _is_ a Visual Studio "universal translator" plugin available - i've seen it demo'd, converting c++ to java, to B, to ruby, to c#. it all used CLR as the intermediary. i heard that activestate were commissioned to add python to the mix, but, weirdly, it wasn't included in the release of the translator i saw.
Why don't browsers just support it? (Score:2)
[script type="text/python"][/script]. Let one of the major browsers implement it, and see if the others follow... there's probably already DOM-access libraries in Python, yes?
Seems to make a hell of a lot more sense than this translation stuff.
Re: (Score:3, Informative)
That'd be damn hard. Python isn't made for sandboxing (google python and sandboxing, or restricted execution, and you'll see). If you did the script language=python implementation the "obvbious" way and just linked in the python interpreter into mozilla, you'd have a security hole big enough for a supertanker. There is Python support for extensions though - google PyXPCOM.
Re: (Score:2)
Well, that's a point. I still think this whole concept is a little daft, considering that web scripting has been designed to be language-independent from day one. I mean, IE has been the only browser to really embrace it, but still-- no reason other browsers can't.
Re: (Score:2)
[script type="text/python"][/script]. Let one of the major browsers implement it, and see if the others follow... there's probably already DOM-access libraries in Python, yes?
Seems to make a hell of a lot more sense than this translation stuff.
there's two main ways in which this can be achieved:
1) pyxpcomext
2) appcelerator / titanium, with IronPython, via Silverlight/Moonlight.
the problem is - one that both skulpt and pyjamas avoid - you need browser plugins, in each case, to achieve the goal. the pyxpcomext plugin is a whopping TEN MEGABYTES because it literally contains the entire python runtime.
Re: (Score:2)
I didn't realize Python was so large... 10 MB for the runtime? Ouch.
Either way, my point is that if you want Python supported in the web world, do it the proper front-door method, rather than this goofy language translation stuff. (Obviously, it would need to be implemented a plug-in until all browsers supported it) I still agree with that sentiment, 10 MB or not.
I propose a new contest: (Score:2)
Who can string together the largest number of platform layers [wikipedia.org] over each other, and still have it running.
The first league will start in the 2 GB core memory and 2* 2 GHz (dual-core) CPU range with no other processor (like GPU) or storage (like HDD) usage.
Every type of platform is only allowed once.
Here is a list of platforms, to get you started:
- Emacs
- the CPU itself
- Virtual machine (e.g. VirtualBox/VMware)
- Browser(s)
- C/C++
- JavaScript
- interpreted Piet [99-bottles-of-beer.net]
- Python
- LOLCode [99-bottles-of-beer.net]
- Malbolge [99-bottles-of-beer.net]
Bonus points for achiev
Re: (Score:2)
Oh, I forgot some very important ones:
- PHP
- Typo3's Smarty [wikipedia.org] & others [wikipedia.org]
- Wiki syntax (if possible)
- XSLT [wikipedia.org]
Re: (Score:2)
For bonus points, make it all run on non-jailbroken iPhone ;).
Python implementations still suck (Score:5, Insightful)
Python is quite a good language, but the implementations suck. This is holding back widespread use of Python. It's too slow, typically 10x to 30x slower than C. That's far worse than Java.
There have been several attempts at other implementations. But because Guido Rossum fights formal standardization of the language, treating his CPython implementation as a de-facto standard, everyone else has a moving target to hit.
Google (who hired Guido) likes Python, but they don't like the low performance. CPython is a "naive interpreter" (very little optimization). Worse, with the rather lame implementation the Global Interpreter Lock, not only can't it use a multi-core CPU effectively, multi-thread programs run slower on multi-core CPUs. (The threads fight over the lock in an embarrassingly inefficient way.)
Google is doing "Unladen Swallow", which is an attempt to bolt CPython to a just-in-time compiler to a virtual machine. It's not clear how well that will work out, but the end result will have more layers than seems to be indicated. The goal is 5x faster than CPython, which won't beat Java, let alone C/C++.
It's cute that Python to JavaScript translation is possible, but it's not going to help much on the performance front.
For a few years, the great hope of the Python community was PyPy, but that had too many goals, was being developed in "sprints", and after five years, the European Union pulled the plug on funding after it was slower than CPython.
Shed Skin [blogspot.com], which is a Python to C++ hard-code compiler, is currently the lead in Python performance, but it doesn't yet implement the whole language. Still, with about two people working on it, Shed Skin is doing better than most of the bigger projects. Shed Skin does automatic type inference. Python doesn't have declarations, but with enough analysis, the compiler can figure out what types each variable can hold and generate hard types, which makes for much faster code.
Re: (Score:2)
Google is doing "Unladen Swallow", which is an attempt to bolt CPython to a just-in-time compiler to a virtual machine.
It's cute that Python to JavaScript translation is possible, but it's not going to help much on the performance front.
thanks for posting this - it's interesting to see peoples' insights.
i'm aware of the unladen/swallow effort: they're replacing the FORTH-based bytecode engine with LLVM JIT compilation.
on their roadmap is "unboxing" of the http://python.org/ [python.org] c code types (Object/longobject.c, Object/intobject.c, Object/stringobject.c etc.)
basically the plan is (i believe!) to provide reimplementations of intobject.c's __add__, __mul__ etc. to call LLVM routines instead of straight c code. in this way, they intend to keep p
Re: (Score:2)
"Google (who hired Guido) likes Python, but they don't like the low performance. CPython is a "naive interpreter" (very little optimization). Worse, with the rather lame implementation the Global Interpreter Lock, not only can't it use a multi-core CPU effectively, multi-thread programs run slower on multi-core CPUs. (The threads fight over the lock in an embarrassingly inefficient way.)"
The semi-new multiprocessing module is pretty cool. For the most part it duplicates the thread api interface, but it use
Re: (Score:3, Informative)
Don't use threads. Use multiprocessing for concurrency and Twisted for asynchronous I/O.
If you're going to complain about the GIL, perhaps you should go read up on why it's necessary, and perhaps share some of your amazing insights on a better, more performant way to do threading.
PyPy is far from dead. They've got a JIT working for x86 assembly that matches NumPy in some tests.
Re: (Score:2)
If you're going to complain about the GIL, perhaps you should go read up on why it's necessary, and perhaps share some of your amazing insights on a better, more performant way to do threading.
Their big problem is that they're using a single space of resources that are shared across all threads. That in turn means that they have a lock guarding access to that resource space (the GIL) and so that's where there's massive contention, especially with CPU-bound threads. Drop the general sharing (sharing specific objects is OK if you add the right fine-grained locks) and the code will be much faster. This is very similar to using multiprocessing though, so much so that it makes scaling to a multiproces
Re: (Score:2)
The big issue is that this model is not compatible with most existing threaded Python code. The single resource-space assumption is pretty deeply embedded...
It's not quite that bad. Python guarantees memory safety, and the atomicity of some sequence operations, like "append". But it's not a run-to-completion thread system. Fine-grained locks wouldn't break many pure Python applications.
The big issue is "who owns what" for locking purposes. I discussed some ways to deal with that issue on the Use
Re: (Score:2)
The big issue is "who owns what" for locking purposes. I discussed some ways to deal with that issue on the Usenet Python group a few weeks ago. If you're willing to introduce "synchronized objects" (like Java) and require that all other mutable objects be linked to either by one thread or one synchronized object at a time, it can all be made to work without extensive programmer effort.
Immutable objects don't have sharing problems, except for memory allocation purposes. (That's what concurrent garbage collection is for.)
In Tcl (where I know what's going on in quite a lot of detail) each thread has a separate memory pool for small allocations (large allocs - I forget what qualifies as large - come from the global pool, but are also relatively rare) so that there is very little need for holding locks with high levels of contention. This is facilitated by the fact that Tcl uses an apartment threading model: threads are strongly isolated from one another except for explicitly shared resources (where yes, there's a per-resource
Re: (Score:2)
If you're going to complain about the GIL, perhaps you should go read up on why it's necessary, and perhaps share some of your amazing insights on a better, more performant way to do threading.
Some insights might come from the fact that neither Jython nor IronPython have GIL (and yet fully support multithreading)...
Re: (Score:2)
Note how they're also both slower than CPython.
Jython does it by using JVM for threading, IronPython uses one of the many GIL-less patchsets which degrade performance but still permit threading.
Re: (Score:2)
Note how they're also both slower than CPython.
Reference?
Jython does it by using JVM for threading, IronPython uses one of the many GIL-less patchsets which degrade performance but still permit threading.
Actually, IronPython also does it by using CLR for threading; it's not based on CPython code, so I'm not sure what "GIL-less patchset" you're even talking about.
Now can you please explain how Java or CLR threads are different from native threads, and why using the former does not require GIL, but using the latter does?
Re: (Score:2)
Python is quite a good language, but the implementations suck. This is holding back widespread use of Python. It's too slow, typically 10x to 30x slower than C. That's far worse than Java.
Frankly, there's only so much you can do. The language semantics itself presents some obstacles to performance. I mean, the language reference explicitly defines member lookup as string lookup in a dictionary associated with an object! This is going to be an order of magnitude slower than vtable dispatch in a statically typed language, there's no way around it. At best you can try to mitigate this by using some caching scheme to avoid repeated lookups (Microsoft's DLR does precisely that), but this only hel
Re: (Score:2, Insightful)
It really wasn't OK for Java to be slower then languages that came before it. Its success is rather limited. (now I opened the door to all the JavaDevelopers and IBM Trolls) Java was meant to be a replacement for for all those apps that are out there. But it has done little in terms of front end applications, where it was hoping to succeed the most. Why because of its poor performance, on standard PC and especially with GUI's Even using a fast PC you know when you are running a Java App. That is why Mic
Re: (Score:3, Insightful)
Saying that is bad because it is slower then Java means that Java is really slow and people are not happy with that so anything slower will make us more unhappy.
What?
Re: (Score:2)
That is why Microsoft Visual Studios even with the abomination of .NET virtual machine garbage
I actully prefer the .NET virtual machine garbage to the Java virtual machine garbage, not because it's faster, but because it has features like pointers, structure return, and working templates.
Re: (Score:3, Informative)
I used to have the idea that Java was inherently slow. It is not. Some implementations of the Java libraries are slow, Swing is a bit sluggish on some platforms (it is largely coded in Java rather than using native toolkit functionality) but the Java language itself is quite fast. If coded well, you can get performance comparable to C, but that is also quite dependent on how well your virtual machine JIT compiles the code (or, if it does).
I'm sure a lot of people base their preconceptions of Java being s
Speed matters. Datacenters cost money. (Score:5, Interesting)
Because it IS easier to use and hardware is always getting cheaper.
On the server side, 10x to 30x slower means building entire buildings full of servers. Or more expensive hardware in the cell phone. Or using another language.
Python is actually a good general-purpose programming language, not just a "scripting language". The big problem is slow execution.
The basic problem with CPython is that, being a naive interpreter, it has to check for the hard cases every time. "n = n + 1" ought to be a few machine instructions, maybe only one. But Python has to check for n being a float, n being a string, n being an object, etc., every time. Shed Skin, with a type inference systems, does analysis at compile time and determines that n is always an integer, then generates code for integer arithmetic only.
There are all sorts of dynamic things one can do to a Python program while it's running. You can add a function to an object. You can replace existing functions. You can load new modules on the fly. But most of the time, for most of the objects, you don't do that. An efficient implementation needs to separate out the cases where something unusual might occur, and the far more common cases when the program is doing routine stuff that needs to go fast. The common cases can then be handled with much simpler, and faster, code.
Re: (Score:3, Interesting)
Strange assumption...
Why on earth would you say Java was slower than everything that came before it?
It's faster than everything but C, and even ties C in some cases.
I believe the Language Shootout includes specs for Fortran and Basic (which were before Java), I'm also pretty sure it was faster than Pascal, Ada (Can't swear to that one, don't think it's on the shootout, but I don't remember it being specifically quick), heck hundreds of languages.
I still don't know why Java gets crap about performance when i
Re: (Score:2)
Re: (Score:2)
the story is that i got into HTML/CSS Hell trying to do a cross-browser "centre" layout, vertically and horizontally. after two weeks and only 150 words on the page, i still wasn't done. pyjamas 0.3 i achieved what i wanted in under 40 minutes, learning pyjamas from scratch.
now i do all my web development in pyjamas, and flatly refuse to do HTML-based server-side web sites.
give me pyjamas plus JSONRPC or give me death :)
OpenSource Web Browsers written in Python? (Score:2)
Are there any open source web browsers written in Python? If so, I would like to run it in these JavaScript python interpreters so I can browse the web.
Re: (Score:2)
yes - paul bonser's pybrowser [paulbonser.com] is the beginnings of an implementation of a web browser in python. he uses python-cairo and pygame for the graphics and the event handling. a combination of flier liu's PyV8 [google.com] or python-spidermonkey would bring javascript execution to this effort, completing the loop.
also i just accidentally encountered this [telepolis.com] which is confusingly also called pybrowser: it uses python-gtkhtml2 (which is considered deprecated since this project named pybrowser was written, in 2005).
lipstick, dogs (Score:3, Funny)
Compiling Python to JavaScript running in a browser really is like putting lipstick on a dog.
Smalltalk in Javascript (Score:2)
There are also a few implementations of Smalltalk using Javascript:
http://gwt-smalltalk.appspot.com/ [appspot.com]
http://clamato.net/ [clamato.net]
http://tinlizzie.org/ometa/ometa-js-old/ [tinlizzie.org]
Re: (Score:2)
Scheme too!
http://www.bluishcoder.co.nz/2006/05/scheme-implementation-in-javascript.html [bluishcoder.co.nz]
Re: (Score:2)
Fortran is better. You're doing it wrong.
Re:python sucks (Score:5, Funny)
<?php
die(Python);
?>
In related news.... (Score:5, Funny)
...they used a Perl script to convert Python to Javascript.
Re: (Score:2)
Pfft! Python makes it easy:
import suicide-python
Re: (Score:2)
Which, according to the "great" auto-conversion of PHP would print the string "Python" before exiting, because it converts unknown constant names to strings. If you put a "define("Python",0xFA1);" in above the die(), it will print the integer "4001" and return it as an errorlevel. If you instead use "define("Python",0xFA1.L);", it will just print "4001L" and not return it as an errorlevel.
That is, why "easier" is not always easier, but sometimes actually harder. The reason why we can't stand Clippy. The rea
Re: (Score:2)
Jesus Christ, man. It was a joke!
@import sense_of_humor;
And Microsoft removed Clippy like a fucking DECADE ago, get over it already.
Re: (Score:2)
Re: (Score:2)
Ahaha you're so funny.
Now, GOTO \your_namespace because $this->is_off_topic(TRUE == "FALSE");
Re:python sucks (Score:4, Interesting)
I prefer a javascript assembler [ajaxian.com]
Re:python sucks (Score:5, Interesting)
Found something better: 6502 assembler! [6502asm.com]
Re: (Score:2)
Re: (Score:2)
That's pretty cool actually :-D
Re: (Score:2)
This seems outdated: map is a method as of 2.6, and you wouldn't use map anyway since comprehensions are preferred.
The last complaint could be mitigated by writing a regular function, too.
Re: (Score:2)
I think the problem here is that you don't know anything about python.
No, it's not "outdated". Using the keyword...
It's not outdated, because it's completely incorrect. map isn't a keyword, and never has been; it's a function.
As nice as list comprehensions are, they're a bad method of chaining functions, because it is achieved by nesting, at the syntactic level. Something like:
[ (lambda x: x) for x in [ (lambda y: y) for y in list] ]
If I want to apply another function, I get to move that whole list construct into a new one.
No, a comprehension looks like:
[f(x) for x in l]
So if you want to apply another function, you write:
[g(f(x)) for x in l]
The function composition occurs the same way it does anywhere else - by applying one function to the result of another.
The last complaint could be mitigated by writing a regular function, too.
Brilliant. Let's break encapsulation for every single utility function a model might use.
I have no idea what this means. Functions created using lambda and functions created using d
Re: (Score:2)
"; ".join(["%s, %s" % (a.surname, a.given_name) for a in self.author.order_by('surname')])
Re: (Score:3, Insightful)
What a waste of time and energy. The only thing worse than Python is, well, Javascript.
That is exactly the whole point that you're so obviously missing here: nobody sane should have to write Javascript, and yet it's the only thing that's supported by browsers. So converting code from other languages to Javascript is the only sensible solution at the moment. (For the longer term, it'd be nice if they replaced Javascript with something halfway sane.)
Re:Why, God, why???? (Score:5, Interesting)
I felt the same way until I watched Douglas Crockford's videos on javascript. If you hate javascript, you're doing it wrong. I now prefer it to the other languages being discussed here.
I can still writing in it... (Score:2)
I know it is very capable, flexible, and many frameworks exist to shortcut many common sequences of javascript used in sophisticated application development. I can respect a Javascript developer and not doubt for a minute they can code up fully capable stuff (particularly in conjution with HTML5 features including canvas). I won't claim that Javascript doesn't have a decent debugging strategy (i.e. firebug). I even appreciate the fact that sometimes, the community is better of just picking *something* and
Re: (Score:2)
If you hate javascript, you're doing it wrong.
Prototype-based OO by itself is a pretty neat idea, and it has many strength, but JavaScript isn't a particularly good implementation of it - it's burdened by ugly "Java-like" curly braces syntax, and legacy quirks like brain-dead local variable scoping. There really isn't much to love in there - the same ideas have been implemented much better elsewhere.
Re:Why, God, why???? (Score:5, Insightful)
I'd be interested to hear what you like better, and why? Personally I'm still sad that Java (not Javascript) didn't win on the Web - a cross-platform, general purpose language that is at least a reasonable choice for most anything. To make programming faster, you can always use higher-level libraries or code-building environments on top of it, or compile some other syntax to java bytecode.
Now instead the Web is a big mish-mash of fundamentally incompatible technologies. And if anybody does pull off the one-runtime-for-anything vision, it looks like it will be Microsoft.
Re: (Score:3, Interesting)
Re: (Score:2)
What this tells us is that we didn't need a standard web-language. We needed a standard web virtual machine. I guess, the JRE and Flash really are those things. Javascript really isn't.
Re: (Score:2)
Re:Pointless (Score:4, Informative)
There is already a Ruby VM that runs in a browser: Hotruby : http://hotruby.yukoba.jp/ [yukoba.jp]
John Resig even blogged about it ages ago: http://ejohn.org/blog/ruby-vm-in-javascript/ [ejohn.org]
Also, JS.class, while not a Ruby VM, is pretty cool and actually useful: http://blog.jcoglan.com/2009/06/08/jsclass-21-an-improved-pacakge-manager-proper-hashes-and-lots-of-ruby-19-goodness/ [jcoglan.com] - http://ajaxian.com/archives/jsclass-21-released [ajaxian.com]
Re: (Score:2)
Compiling languages to other languages is nothing new. In fact, it's quite fundamental to computer science as we know it.
At the lowest level, assembly is "assembled" into the native language of the target machine, though modern assemblers handle enough syntactic sugar you could reasonably call them simplistic compilers. In either case, one language is effectively converted to another.
Further, it's quite typical for medium- and high-level languages, such as C, to be compiled down to some form of assembly. So
Re:Now I've heard everything (Score:5, Informative)
Just when you thought things could not get any crazier, there's this story. Let's hope it's an early April Fool.
nope. it's not. and i didn't mention in the article that pyjamas-desktop can run the python as a desktop app, either. including the GWT Canvas ported code, under the MSHTML engine. after all, the IE/MSHTML gwtcanvas is just creating VML nodes, so perhaps it shouldn't come as a surprise that it works, but it's still pretty cool all the same.
There's no way one could simulate more than about 12% of Python's complex OO semantics in JavaScript.
wrong. sorry. javascript is a drastically underestimated language. dreadful to work with if you don't know what you're doing, but incredibly powerful at the same time.
a javascript implementation of "type" - not the 1-arg version but the full 3-arg version - was initially implemented in 85 lines of javascript (it's a bit more, now).
we use that functionality to dynamically create, classes, supporting multiple inheritance and more.
pyjamas has also implemented decorators _and_ properties; kees is currently working on "yield" after skulpt's developers started working on it. not "yield by cheating and using FF built-in support for yield", but "yield" as in doing it the hard way, by analysing the state of the function and adjusting / jumping to the correct point in the function on each loop.
you really should take a look at the regression tests [pyjs.org]
Python itself already has a hard and slow slog trying to perform all its tricks.
To add yet another layer of translation or simulation sounds like a lose-lose proposition. Slower and hopelessly inexact.
slower, yes - "hopelessly" inexact: no. for GUI purposes, _if_ you've designed the application correctly (i.e. along MVC / client-server lines), then the "-O" option which switches off all the python "strict" compatibility, is perfectly sufficient.
so, "letting things fall through" to javascript, and allowing int(width) + "px" to succeed, and [1,2,3] + [4] to fail, is "good enough for most purposes".
Not to mention many of the more useful Python modules have a considerable C component, making them completely unusable as JavaScript.
wrong again. sorry. two reasons. three.
1) pygtkweb showed that it is perfectly possible to make a seamless / transparent JSONRPC service that ships function call arguments over to a server, for execution server-side, starting from e.g. "import md5"
2) pyjamas' implementations of datetime, md5, urllib, time and a few others is growing as users contribute to them. thus, the pyjamas GUI library fits the *users* needs, on an ongoing basis.
3) if you _really_ can't do without the full semantics of python, but want the benefits of full HTML, CSS, NPAPI plugins etc., use one of the pyjamas-desktop ports. there's MSHTML, XULRunner and PyWebkitGTK to choose from.
Re: (Score:2)
Have you tried using a separate add() like method in which you can check for Array, int etc?
yes, that's in the --strict option. pyjamas actually comprises _two_ compilers, strictly speaking: one is "fast but more like javascript"; the other is "slower but more like python".
Or does that hurt performance too much?
i was surprised to find that it doesn't. (not as much as say creating an anonymous function on-the-fly in order to provide the full and correct semantics of getattr on class member functions)
Re:iPhone application? (Score:4, Informative)
I have an iPod touch running iPhone OS 3.1.1, so I tried these two projects out.
Skulpt works, but the console does not (I had to use the quick-links to test code). This is relatively easy to fix by using a textbox instead of using keyboard events. It would be very simple to write a simple webapp which evaluates Python code in the Safari browser. However, as I see it, Skulpt is still quite immature -- it doesn't implement much of the language (e.g. classes work, but can't be instantiated because Skulpt thinks you are trying to call the type object, instead of constructing it), and it doesn't do imports at all.
Pyjamas works extremely well, though it is compiled as pure JS and thus lacks (AFAIK) an "exec" method to run arbitrary Python code.
Given that Skulpt features a decent Python parser but lacks much of the core functionality, and Pyjamas implements a lot of functionality but lacks a parser built in JS, I think the projects would be mutually beneficial.
Re:iPhone application? (Score:5, Informative)
Pyjamas works extremely well, though it is compiled as pure JS and thus lacks (AFAIK) an "exec" method to run arbitrary Python code.
i'm working on it. last week i back-ported skulpt's parser and AST code from javascript to python, and regression-tested it; now it's a matter of improving the pyjamas compiler to be able to successfully compile that python into javascript, and we're bootstrapped.
Re: (Score:2)
Thanks, Pyjamas looks like a great project. I've always wanted to be able to code client side web stuff in Python.
Re: (Score:3, Informative)
there are a ton of different ways, now: i've been maintaining a list on the python wiki, WebBrowserProgramming [python.org] page. pypy used to have a -to-javascript back-end (now abandoned); there's titanium appcelerator (which supports IronRuby and IronPython); there's PyXPCOMExt and a few more besides.
Re: (Score:2)