Hacker News new | past | comments | ask | show | jobs | submit login
Ten years of V8 (v8project.blogspot.com)
157 points by stablemap on Sept 11, 2018 | hide | past | favorite | 24 comments



I remember when Chrome launched, it came out of nowhere. And it was launched with a comic. The comic was pretty good, the chapter on V8 starts at page 12:

https://www.google.com/googlebooks/chrome/small_00.html


That was a pretty fun/interesting read. Nowadays something like that would be done with an animated video instead.

What I found most amazing about it is that most of the ideas mentioned in there have persisted and many have made their way into other browsers. Which kind of indicates how many good choices they made at its inception.


Much as I'm not a fan of Google, this comic and Chrome's release were a noteworthy moment on the geek-side of my life, similar to Google Maps and GMail.


Interesting note about code comments in V8: https://www.openhub.net/p/v8-js/factoids#FactoidCommentsVery...

Spidermonkey is one third of the size(LoC) of V8 and has three times more comments.


> Spidermonkey is one third of the size(LoC) of V8 and has three times more comments

Is that based on https://www.openhub.net/p/spidermonkey?

It says last analyzed two years ago, but the last commit it includes looks like it was in April 2011.

LoC is a silly measure for complexity anyways :) Does it include tests and test runners? Generated files? v8 is in its own repo while spidermonkey is in the main mozilla repo, so it's going to be difficult to compare well.


I also think in many cases comments serve as a stand-in for poor design. These days, when I catch myself writing a comment, I try to think of whether I could choose a better name for a variable or method instead, or if I could add an assertion to clarify that an invariant holds in a particular ___location. Comment rot also makes ordinary code rot look like a walk in the park. Since comments aren't tested, they rot incredibly quickly without meticulous double-checking every time you modify the code. In a heavily-commented, older codebase this become super annoying, since every other line is a comment that, ten percent of the time, doesn't hold any more.


JS is full of fun facts, like that ++ is different than +=1, or that ToInteger may return negative zero.

Better naming can't justify these head-scratchers. As an implementor all you can do is write a loud! comment! referencing the spec, and add a test or two or a million.

Anything that implements a spec needs copious comments to justify the implementation. clang for example is chock-full of references to the C99 standard.


I think the problem of stuff going out of date can be avoided by giving background (why it was originally written) rather than making a commitment you can't keep about keeping it up to date.

Knowing why code was originally written can be more important than knowing what it currently does.


Great advice, and it does resonate. FWIW I'm certainly not a "no comments" guy. I just like to check myself to see if there is a better way to accomplish what I was going to do with a comment.


This is fantastic advice.


Are there plans to rewrite/port Spidermonkey to rust as part of the Servo project?


Not at this time. The SpiderMonkey code is evolving quickly and Rust's safety guarantees won't help much when executing the JIT-generated code. Servo uses SpiderMonkey.

The SpiderMonkey team has prototyped some JITs using Rust. The "Holy JIT" (a pun on Oracle's Graal VM name) is a meta-compiler for JITs:

https://blog.mozilla.org/javascript/2017/10/20/holyjit-a-new...

https://medium.com/@jponge/the-graalvm-frenzy-f54257f5932c


Yet spidermonkey is slower.


Source?


For what it's worth, a lot of the documentation for the structure of V8 is in textbooks and decades of precedent set by the Smalltalk VM (which is the ancestor of V8). I suspect that people who worked on HotSpot will tend to understand V8 at some level.


>Smalltalk VM (which is the ancestor of V8)

In that both utilize JIT compilation or in other ways too?


It has some code from strongtalk. V8 has (some) developer who worked on smalltalk vms


Lars Bak


In that V8 makes heavy use of inline caches


What's interesting about it? Not surprising that projects show some variance in how much documentation there is and where it lives.


This kind of effort toward optimisation is so pleasing.

To think that this in effect means that web browsing on phones and laptops uses much less battery, and that web apps run smoothly and promptly, is very cool.


And I've yet to experience a smooth web experience in an Android phone (using Chrome), or at least as smooth as on iOs..


Now only if audio.preservesPitch = false was implemented... ;)


That would be a Chromium feature. V8 only implements ECMAScript and WebAssembly.




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: