Top all-time · #2965
Jay Conrod
Personal blog · jayconrod.comprogrammingsystems
Jay Conrod's personal blog at jayconrod.com covers programming and systems. Since 2011, 24 different Hacker News readers have linked it 25 times, most often “A Tour of V8: Garbage Collection”. It is still writing: the last post was on 2026-10-29, and you can follow it by feed.
Too few sampled comments (11) to say how often HN recommends it.?
Why HN links it
HN readers link posts explaining V8 internals such as the Crankshaft optimizer and garbage collection, along with parser combinators and a Bazel intro. Commenters cite these posts as sources or give a few direct endorsements.
Summarised by Claude from a sample of 11 HN comments that link here. Each comment is marked recommending, critical or neutral (citing without judging); how this works.
This post shows how to support new rule sets by writing an extension with Gazelle's new v2 API, which supports better error handling and dependency resolution. We'll also talk about how Gazelle works with extensions, how to support offline indexing, and how to write extensions in languages other tha
Most-linked posts?
- /posts/54/a-tour-of-v8-crankshaft-the-optimizing-compiler6 people · 6 mentions · first linked 2015-10-07
- A Tour of V8: Garbage Collection4 people · 4 mentions · first linked 2014-12-14
- A tour of V8: object representation (2013)2 people · 2 mentions · first linked 2016-10-22
What Hacker News says?
I can't make useful guesses about the V8 developers' reasoning, but I'd assume they considered several options and chose this one for a reason, concerning how much performance is at stake. I don't know about Crankshaft's inner workings, though, so I can't make qualified comments about it. Maybe something like http://jayconrod.com/posts/54/a-tour-of-v8-crankshaft-the-op... can answer some of your questions?
Comment linking /posts/54/a-tour-of-v8-crankshaft-the-optimizing-compiler
on “The Monaco Code Editor”Submitted Leaving Google as a story · 462 points
HN discussionI've looked at yacc + bison a couple times and always turned away before even attempting to write parsers in them. It's ugly as hell and I figure sprinkling code is hard to understand and thus insecure. However, have you tried parser combinators? Parsec (a Haskell library) is really nice if it fits your grammar. Here is one guy who simulated that in Python, also very nice: http://jayconrod.com/posts/37/
Comment linking /posts/37/
on “LL and LR in Context: Why Parsing Tools Are Hard (2013)”Submitted Internals of Go's new fuzzing system as a story · 184 points
HN discussionType information is used in JS engines to compile into native code. If type information is too vague or change you can have deoptimization[0] [0] http://jayconrod.com/posts/54/a-tour-of-v8-crankshaft-the-op...
Comment linking /posts/54/a-tour-of-v8-crankshaft-the-optimizing-compiler
on “Instagram Makes a Smooth Move to Python 3”Submitted A tour of V8: object representation (2013) as a story · 46 points
HN discussionNo, V8 parses your Javascript source into an AST. From the AST, there are two paths it can take. The first step is the "full-codegen" compiler, which walks the AST directly and emits unoptimized native code: http://wingolog.org/archives/2011/07/05/v8-a-tale-of-two-com... If a function is hot, then it gets promoted to V8's optimizing compiler, which is currently Crankshaft but will soon be replaced by Turbofan. This…
Comment linking /posts/54/a-tour-of-v8-crankshaft-the-optimizing-compiler
on “Node.js: Some quick optimization advice”Submitted Goroutines: The concurrency model we wanted all along as a story · 4 points
HN discussionInteresting to note that character-based optimizations in JS engines are somewhat common (though this article is a few years old): http://jayconrod.com/posts/54/a-tour-of-v8-crankshaft-the-op...
Comment linking /posts/54/a-tour-of-v8-crankshaft-the-optimizing-compiler
on “Tabs slower than spaces in Firefox”Submitted Burnout as a story · 4 points
HN discussionI think they do this on the JS side: http://www.jayconrod.com/posts/52/a-tour-of-v8-object-repres... For example, an array can be specialized to hold just one datatype, or just a couple of fields, based on how it seems to be used, and then de-optimized later if the assumption is broken.
Comment linking /posts/52/a-tour-of-v8-object-representation
on “JVM Anatomy Quarks: Compressed References”Submitted Water simulation demo in WebGL (2012) as a story · 4 points
HN discussionJay Concord’s blog is pretty good intro: https://jayconrod.com/tags/bazel
Comment linking /tags/bazel
on “Bazel 8.0”Submitted Integration tests are best tests as a story · 3 points
HN discussionSure, megamorphic code requires a JIT. But it's a trivial one so I don't count it. :) Essentially, if you have the expression: z = x + y If you statically can't know the types of x and y, you must do an expensive method lookup. You call some variant of the plus function if x and y are floats, another if they are strings or lists and so on. So a good runtime notes the types of x and y the first time the expression is…
Comment linking /posts/54/a-tour-of-v8-crankshaft-the-optimizing-compiler
on “Jitterdämmerung”Submitted Life of a Go Module as a story · 3 points
HN discussionIt'd be related to inlining a function since size is a common rule there. Some searching turns up this[1] article on crankshaft from three years ago, which lists the restrictions as ">600 source characters including whitespace or 196 AST nodes". [1] http://jayconrod.com/posts/54/a-tour-of-v8-crankshaft-the-op...
Comment linking /posts/54/a-tour-of-v8-crankshaft-the-optimizing-compiler
on “A Python-to-JavaScript Transpiler with BabelJS and SourceMaps”Submitted Tutorial: Function Interposition in Linux as a story · 2 points
HN discussionOops, I mixed up the two phases. Marking is incremental (also in v8), and sweeping is parallelizable. http://jayconrod.com/posts/55/a-tour-of-v8-garbage-collectio... gives a good overview of good GC techniques, championed in earlier lisps and functional languages.
Comment linking /posts/55/a-tour-of-v8-garbage-collection
on “Go GC: Latency Problem Solved [pdf]”Submitted Preserving comments when parsing and formatting code as a story · 1 points
HN discussion> The professional educator dialect of English is not very approachable for the layman. I think Dan's blog is largely pitched at other professional educators. All professions develop their own technical vocabulary. As an analogy, I recently enjoyed an article about the implementation of the v8 garbage collector by Jay Conrod: http://jayconrod.com/posts/55/a-tour-of-v8-garbage-collectio... Here's a sample paragraph:…
Comment linking /posts/55/a-tour-of-v8-garbage-collection
on “What Students Do (And Don't Do) in Khan Academy”Submitted A tour of V8: Garbage Collection (2013) as a story · 1 points
HN discussionSubmitted A Tour of V8: Garbage Collection as a story · 1 points
HN discussionSubmitted A Tour of V8: Garbage Collection as a story · 1 points
HN discussionSubmitted A simple interpreter from scratch in Python (part 1) as a story · 1 points
HN discussion