News for hackers. Stuff that matters.
Re:JavaScript: The World's Most Misunderstood Programming La... by joe_the_user on Thursday January 01, 2009 @04:34PM (#416693)
An interesting argument.

I suspect that js is not yet the world's most popular language but by this link's argument, it may become one of the world's most popular languages.

However, as ajax evolves, js may become more of a "virtual machine" into which the initial UI source code is compiled rather than being the raw language in which the UI specified.

Re:JavaScript: The World's Most Misunderstood Programming La... by litewulf on Friday January 02, 2009 @05:18AM (#417247)
I want to say something about leaky abstractions and caution the reader that writing code that you then pass to something that generates some other code is a very very scary thing by and large. The Java compiler and gcc are really mature, and every so often bugs are still spotted. Imagine if you're super-awesome-Objective-C-to-Javascript compiler has a bug. How do you know if the bug is in your Objective-C code, in the compiler, or just a weird browser oddity? Basically you end up kind of needing to know everything between you and the browser, so it may be a good idea to minimize those things.

(Actually, I recommend sitting down and writing Javascript without a library, just so you have an idea of what works and what doesn't across browser. It was somewhat surprising for me to be sure.)

Re:JavaScript: The World's Most Misunderstood Programming La... by DLWormwood on Friday January 02, 2009 @12:08PM (#417440)
> I want to say something about leaky abstractions and caution the reader that writing code that you then pass to something that generates some other code is a very very scary thing by and large.

You are aware that programmers have been doing this in essence since Assembly Language was invented right? Programming directly in binary is just too much for our human minds to take.

That said, you are much more correct than you realize. Even programming a "simple" or "direct" translation, like compiling from C to object code is rife with pitfalls...

http://cm.bell-labs.com/who/ken/trust.html

Re:JavaScript: The World's Most Misunderstood Programming La... by litewulf on Friday January 02, 2009 @05:31PM (#417826)
Well, yes, hence my explicit mention of GCC and the java compiler. :)

In general, as long as the compiler is bug free, you should be fine. Its just that never running into a compiler bug is much less likely when you're using very new code. Code is often buggy after all ;)

Re:JavaScript: The World's Most Misunderstood Programming La... by gruseom on Friday January 02, 2009 @11:56AM (#417427)
While I agree that JS probably can't be treated like a machine language and just ignored, my project has gotten huge value out of the generated-JS approach.

I see from another comment that you've used GWT. This may be why our experience differs. Java and Javascript are so far apart (ironic given their names) that to generate one from the other is inevitably going to be complex. We use Parenscript, and the semantics of Lisp and JS are much closer. As a result, I've been consistently surprised by how suitable JS has proven as a target language and how simple the whole approach is.

We've even extended Parenscript into a pretty expressive subset of Common Lisp compiling efficiently to Javascript. We never set out to do this - it just spontaneously evolved - and it's a small subset, nowhere near all of CL. But it covers enough that we can write large portions of our app to run both on the server and in the client, which turns out to be valuable sometimes.

That being said, we pay close attention to the generated Javascript, so I agree with your suspicion of X-to-JS compilers in that sense. What we do is a semi-abstraction.

Re:JavaScript: The World's Most Misunderstood Programming La... by litewulf on Friday January 02, 2009 @05:34PM (#417834)
To be sure, the closer the two languages are, the less impedance mismatch there is.

But no matter what, you brush up against the fact that when the languages are just plain different, you have to be careful. And if you know Javascript is different from Language X, and can debug the difference, why are you writing Language X and not Javascript?

Honestly, most of what Lisp does that makes it unique (first class functions that aren't ugly, macros), are either availabe (first class functions), or something that the compiler can take care of for you, so it seems that Lisp is actually a scarily-good-fit for language to compile to JS. (Assuming no encountered bugs that is ;))

Re:JavaScript: The World's Most Misunderstood Programming La... by gruseom on Friday January 02, 2009 @08:12PM (#417977)
Yes, that's right. And the macros go a long way.

Actually, there is one big impedance mismatch: null. The semantics of Lisp and JS around null-zero-false are incompatible, and it leads to annoying bugs. I'm still looking for a good solution to that problem. The other big thing is that JS uses returns everywhere and Lisp doesn't. It might be possible to have the compiler add those in in the right places, but we haven't tried that yet.

Re:JavaScript: The World's Most Misunderstood Programming La... by litewulf on Friday January 02, 2009 @10:43PM (#418086)
(Actually, I just realized, JS has == semantics that are... kind of crazy. Do you write equals calls as a call to an equal method or just kind of keep it in mind?)
Re:JavaScript: The World's Most Misunderstood Programming La... by gruseom on Saturday January 03, 2009 @01:45AM (#418216)
The latter. And you're right, those == and === semantics are kind of crazy. But I think of that issue as more or less the same as the null-undefined-false-0 issue.

Also, to answer your question:

And if you know Javascript is different from Language X, and can debug the difference, why are you writing Language X and not Javascript?

... the answer, when X is Lisp, is that the benefit of the additional abstractive power is much greater than the cost of the impedance mismatch. Both sides of that equation would vary greatly depending on X, which is just a way of repeating what we've already discussed :)

Re:JavaScript: The World's Most Misunderstood Programming La... by arockwell on Friday January 02, 2009 @01:15AM (#417132)
Javascript will be the new basic. I would tell any high school student to pick up javascript over any other language. They can graduate to something else later (bonus: javascipt is not a crippling first language unlike basic).

I'm not sure if javascript will become a big target language. The only framework that I know of that compiles into javascript is GWT and I don't think that it is receiving widespread use.

Re:JavaScript: The World's Most Misunderstood Programming La... by jrockway on Friday January 02, 2009 @09:36AM (#417337)
Maybe not, but who wants to write Java?

Parenscript is another language that compiles to JavaScript, and although it's very simple, I think most web apps written in CL use it. So it might not be popular overall, but it is popular among its target market.

Now if only I could have a cxml-stp style DOM in Javascript...

Re:JavaScript: The World's Most Misunderstood Programming La... by gruseom on Friday January 02, 2009 @11:35AM (#417407)
although it's very simple

Parenscript's simplicity is by design and is one of the best things about it. It makes it easy to read and debug the generated JS, and allows for efficiency while still adding a ton of abstractive power.

Now if only I could have a cxml-stp style DOM in Javascript

I don't know what that is. I googled it, and still don't know what it is. Could you give a brief description and an example or two of why you like it?

Re:JavaScript: The World's Most Misunderstood Programming La... by jrockway on Sunday January 04, 2009 @07:05AM (#419206)
cxml-stp is http://www.lichteblau.com/cxml-stp/.

Basically, it's the W3C DOM, but Lisp-like. As an example, CL has a function called "find-if". It visits every element in a sequence, and returns a new sequence containing the elements that match the supplied predicate function. (Think "grep" in Perl.) The DOM doesn't have anything like this, but STP does -- find-child-if and find-recursively-if. That means you can write something expressive like (find-recursively-if (of-name "p") document) to get all the <p> nodes in the document, rather than writing the traversal code manually.

I have used DOM in a variety of languages, and it only feels natural in Java. No other language is crippled the way Java is, so it doesn't make much sense to use the W3C standard, unless you just want to port existing DOM code form one language to another. (Standards are good for legacy code, but not so good for new code.)