Dmitry Soshnikov
dmitrysoshnikov.com · Personal blog · on HN since 2011
Dmitry Soshnikov writes about JavaScript internals, parsing, garbage collection and memory allocators, and sells courses on compilers topics.
What HN saysCommenters recommend his JavaScript. The Core articles for understanding closures, prototypes and scope chains, and praise his parsing and garbage collection courses.
32HN people shared it
18linked it in comments
25stories submitted
1.3Kstory points
10 months agolast shared
2011people per year2026
Most-shared posts
- 1JavaScript. The Core: 2nd Edition7 people · 420 points · first shared 2017 · 91 comments on HN
- 2Javascript. The core.6 people · 9 points · first shared 2011 · discussion on HN
- 3Writing a Memory Allocator (2019)5 people · 175 points · first shared 2019 · 40 comments on HN
- 4“Essentials of Garbage Collectors” full course is now available2 people · 155 points · first shared 2019 · 53 comments on HN
- 5ECMAScript OOP implementation2 people · 1 points · first shared 2011 · discussion on HN
- 6Homepage2 people · first shared 2012
- 7Writing a pool allocator2 people · first shared 2025
- 8Parsing Algorithms1 people · 407 points · first shared 2020 · 86 comments on HN
- 9Essentials of Interpretation1 people · 57 points · first shared 2020 · 21 comments on HN
- 10Scheme on CoffeeScript1 people · 41 points · first shared 2011 · 5 comments on HN
- 11Scheme's Metacircular Evaluator ported to CoffeeScript1 people · 4 points · first shared 2011 · 1 comments on HN
- 12By-value, by-reference, by-sharing: strategies of passing arguments1 people · 4 points · first shared 2020 · discussion on HN
- 13Writing Mark-Sweep Garbage Collector in C++1 people · 3 points · first shared 2020 · discussion on HN
- 14Essentials of interpretation1 people · 3 points · first shared 2011 · discussion on HN
- 15“Automata Theory. Building a RegExp machine” full course is available1 people · 2 points · first shared 2019 · discussion on HN
What HN people wrote when they linked it
avinassh · 2020-11-30
I like the courses offered by Dmitry Soshnikov [0][1]. I have gone through Parsing algorithms and Garbage Collection algorithms courses, they were really fun. I messaged him on twitter recently and he was kind enough to offer nice discount for Cyber Monday [2]
[0] - https://news.ycombinator.com/user?id=DmitrySoshnikov
[1] - https://www.udemy.com/user/dmitry-soshnikov/
[2] - http://dmitrysoshnikov.com/
zappo2938 · 2016-12-11
When I started out, this and "Secrets of the JavaScript Ninja" didn't help me understand. For me, after months of trying to understand JavaScript, Dmitry Soshnikov's post, JavaScript. The Core, made understanding closure, prototype, and scope chain crystal clear in about 30 minutes. [0] Also, every time someone shares a basics on JavaScript link on Hacker News I also share my interview guide which despite its popularity has yet to land me a job writing JavaScript. Nonetheless, I love writing JavaScript and understanding it and some of the APIs like Angular, Lodash, Nightmare, and async makes me feel empowered. It doesn't cover any topics in ES6 yet.[1]
[0] http://dmitrysoshnikov.com/ecmascript/javascript-the-core/
[1] https://github.com/adam-s/js-interview-review
chrishenn · 2013-04-22
When I was learning more about this, I found this[1] article to be of great help.
I think the key idea is that JS is a prototype-based OO model. It's easy to forget because there are so many abstractions[2] that act like a JS is a static class based OO language.
[1] http://dmitrysoshnikov.com/ecmascript/chapter-7-1-oop-general-theory/
[2] http://coffeescript.org/#classes
bonsai · 2012-07-03
I would suggest you to read Dmitry Soshnikov blog, it has great level of details http://dmitrysoshnikov.com/tag/ecma-262-3/.
This 3 books are great reading material:
1) JavaScript: The Good Parts - Douglas Crockford,
2) High Performance JavaScript - Nicholas C. Zakas,
3) JavaScript Patterns - Stoyan Stefanov
v413 · 2011-01-29
For highly technical analysis of the ECMA Script (JavaScript) language I highly recommend the series of articles of Dimitry Soshnikov.
http://dmitrysoshnikov.com/ecmascript/javascript-the-core/
These series of articles are probably the deepest series into the language on the Internet (surpassing even Crocford's articles as far as depth goes).
clyfe · 2012-10-20
http://dmitrysoshnikov.com/ top right hoover over "Menu"
masklinn · 2011-05-28
The note should be much bigger. And __proto__ really isn't "supported" anywhere: it's an implementation detail. It's been deprecated in Mozilla, and Opera used not to have it (as recently as 2009, though there is now an __proto__ property on all objects).
I would recommend a note similar to Dmitry Soshnikov's in his Javascript: The Core: http://dmitrysoshnikov.com/ecmascript/javascript-the-core/#an-object
> Let’s take a basic figure of an object with which we will operate in the following descriptions. A prototype of an object is referenced by the internal [[Prototype]] property. However, in figures we will use __<internal-property>__ notation, and in particular for the prototype object: __proto__ (that’s moreover, is a real, but non-standard, implementation in some engines, e.g. SpiderMonkey).
It uses __proto__ but makes quite clear that the property is just an implementation detail of the graphs.
rubymamis · 2026-01-19
I'm interested in the same! There are plenty of resources for C[1][2]. I just looked into my old notes and found a post for C++[3].
[1] https://btmc.substack.com/p/memory-unsafety-is-an-attitude-problem
[2] https://www.gingerbill.org/series/memory-allocation-strategies/
[3] https://dmitrysoshnikov.com/compilers/writing-a-pool-allocator/
keyle · 2025-01-09
The parent article is quite interesting and slightly different being cpp [1]. There is also a post about writing a memory allocator [2].
[1]: http://dmitrysoshnikov.com/compilers/writing-a-pool-allocator/
[2]: http://dmitrysoshnikov.com/compilers/writing-a-memory-allocator/
langitbiru · 2020-05-15
Here is the garbage collector course from the FB engineer. http://dmitrysoshnikov.com/courses/essentials-of-garbage-collectors/
Garbage collector is a part of compiler technology.
DmitrySoshnikov · 2019-07-07
@ameyv, thanks for the feedback!
Yes, there will be more courses related to implementation of programming languages: Automata Theory, Theory of Parsing, Essentials of Interpretation, and others.
There are some lab sessions for the Garbage Collectors class, e.g. Writing a Memory Allocator from Lecture 6, where we implement an allocator similar to `malloc` function: http://dmitrysoshnikov.com/compilers/writing-a-memory-allocator/
As to materials, yes, there will be an accompanying book for this course.
waveforms · 2018-10-16
I have to mention Dmitry Soshnikov's "JavaScript. The Core" webpage. The concepts explained in version one published in 2010 helped me land several contracts. Now I see he has "JavaScript. The Core: 2nd Edition". Thank you Dmitry!
http://dmitrysoshnikov.com/ecmascript/javascript-the-core-2nd-edition/
strager · 2013-01-19
[SPOILERS]
I got tripped up by question #5 of one of the expert quizzes [1] due to a difference between ActionScript 3 and JavaScript [2].
In AS3, `(a).b` is equivalent to JS's `(null, a).b`. That is, the `this` binding is lost in AS3 (but not JS). I thus thought the anser was "20, 10, 10, 10", and not "20, 20, 10, 10".
AS3 is not a superset of ES3 as most people believe.
[1] http://dmitrysoshnikov.com/ecmascript/the-quiz/
[2] I have been working on an AS3 compiler lately, which is why I mixed JS and AS3.
janogonzalez · 2011-11-25
* Learn JavaScript: https://developer.mozilla.org/en-US/learn/javascript
* JavaScript. The Core: http://dmitrysoshnikov.com/ecmascript/javascript-the-core/
* Learning Advanced JavaScript: http://ejohn.org/apps/learn/
* JavaScript Garden: http://bonsaiden.github.com/JavaScript-Garden/
jashkenas · 2011-01-29
Direct link to the source (which is nicely commented): http://dmitrysoshnikov.com/coffee-lisp-eval/eval.coffee
rwaldron · 2011-01-14
"W3schools obviously fills a niche that the W3C isn't filling"
This alone is the biggest problem - that you think they are somehow related. They are not.
"W3Schools has gone through the work of reading the spec and turning it into a good reference"
No. You're wrong. THIS: http://dmitrysoshnikov.com/ecmascript/
...is a good reference based on a spec.
jacobolus · 2011-12-20
Dude, just admit you’re wrong about what kinds of patterns are natural or common in JS and about what was “in mind” when it was created.
Here are some popular big JavaScript toolkits/frameworks: Closure Library, YUI, Dojo, Prototype, MooTools, ExtJS, Base2, JavaScriptMVC, Backbone.
http://closure-library.googlecode.com/svn/docs/closure_goog_base.js.ht…
http://yuilibrary.com/yui/docs/api/classes/Base.html
http://livedocs.dojotoolkit.org/dojo/declare
http://api.prototypejs.org/language/Class/
http://mootools.net/docs/core/Class/Class
http://docs.sencha.com/ext-js/4-0/#!/api/Ext.Base
http://base2.googlecode.com/svn/version/1.0.2/doc/base2.html#/doc/!bas…
http://javascriptmvc.com/docs.html#!jQuery.Class
http://documentcloud.github.com/backbone/docs/backbone.html#section-13…
* * *
And here are some other helpful resources:
http://www.aminutewithbrendan.com/pages/20110216
http://www.quora.com/How-was-classical-inheritance-*supposed*-to-be-do…
http://www.2ality.com/2011/06/prototypes-as-classes.html
http://ejohn.org/blog/simple-javascript-inheritance/
http://my.safaribooksonline.com/book/programming/javascript/9781449399…
http://javascript.crockford.com/prototypal.html
http://bolinfest.com/javascript/inheritance.php
http://dmitrysoshnikov.com/ecmascript/chapter-7-2-oop-ecmascript-imple…
aastronaut · 2020-04-27
I think the sentiment of "you dont know what you dont know" is especially cumbersome with JS, since its usability is so much defined by its extensions (WebAPIs, runtimes etc.)
Reading into specs (ECMAScript[0], W3C[1]), some more approachable explanations[2] of them and some implementations[3, 4] of embedded engines seem to be my approach.
[0]: https://tc39.es/ecma262/2020/
[1]: https://github.com/w3c
[2]: http://dmitrysoshnikov.com/ecmascript/javascript-the-core-2nd-edition/
[3]: https://bellard.org/quickjs/
[4]: https://v8.dev/docs/embed