Have you ever been interested in how your code, written in high-level language like TypeScript, transforms into a different representation that a computer can understand, a CPU can understand?

I hope, when you will read this article, the picture of code execution pipeline will be more explicit. We will trace the journey of the code, starting from high-level language to low-level machine instructions. We are going to a deep rabbit hole…

DISCLAIMER: I will not dive into technical details of implementation, which differs from one vendor to another. We will go through a conceptual overview only. Otherwise, the article would take hours to read and months to write.

Read Full Article

WebAssembly is a replacement for JavaScript!
C++/Rust developers can now code front-end applications!
WebAssembly is faster than JavaScript!
WebAssembly! WebAssembly!

How many times do you hear these statements? Me, a lot. So I collect the most popular myths about WebAssembly and tell you the truth behind them.

Are you interested? Welcome!

Read Full Article

Recently, I faced an issue with requiring native bindings in JavaScript code, so I researched it. If you ever used commands, like require(‘my_module.node’) but don’t know how they work from JavaScript perspective — this article is for you.

What is .node files and why do we need them?

Sometimes, we are using npm packages that have native bindings for their purposes. Sometimes, we are building our own C++ code to extend the Node.js functionality for our own purposes. In both cases, we need to build an external native code to an object that can be usable by Node.js.

And that’s what .node files are for. .node files are dynamically shared objects that Node.js can load to its environment. Making an analogy here, I would say that .node files are very similar to .dll or .so files.

Read Full Article

Today, I want to tell you about one interesting project called Kittik. The main idea behind this project is to create and show presentations that support shapes, animations, embedding code, etc. right in your terminal. Can you believe this? Ok, let’s dig.

Why do we need this?

We are all hackers, if you are a geek, if you want to impress your auditory with amazing slides in your speech or just for fun — there are many uses you can imagine.

Personally, I’m using it in some of my speeches, light-talks. And, you know, it looks impressive. Let me show you a simple presentation with three slides. It’s not so beautiful as you can create it, but the main purpose of a demo below is to show you all the shapes\animations, you can use, in few slides.

Read Full Article

Recently, I find out about a strange bug in V8. Everyone is discussing it in Twitter, Facebook, Gitter and other social networks. So, I will try to explain it.

To my knowledge, it happens in the latest stable version of Google Chrome (my version is 51.0.2704.103).

Read Full Article

Some of you want to or thought about contributing into Node.js core but don’t know how to do it or don’t have enough confidence. Well, I’ll try to help you out with that.

I am an outside collaborator in Node.js and sometimes I look into issues and take some. Also, I already have a few pull requests successfully landed into Node.js core, so I will tell you about my experience.

Let’s start with running it locally.

Read Full Article

Last time, I showed you how to profile your application and find the place which slows it down — bottleneck. It helps a lot with finding the place in the code that executes slow, so you can fix that.

But, what if you don’t know how to fix that? How to find the reason for de-optimization in your JavaScript code when you have a lot of different variants of that de-optimization. How to trace specific de-optimizations in your code?

Read Full Article

In my previous article, I was talking about Node.js and why it’s fast. Today, I want to talk about V8.

I suppose some of you heard that JavaScript executes as fast as C++. Some of you don’t understand how it’s even possible. JavaScript is a dynamically typed language with Just in Time (JIT) compilation, when C++ is static-typed language with Ahead of Time (AoT) compilation. And somehow, optimised JavaScript code executes a little slower than C++ or even with the same speed.

To understand why that is, you need to know some basics of V8 implementation. It’s a huge topic, so I will only explain key features of V8 in this post. If you want more details, such as hidden classes, SSA, IC,… they will be in my next article.

Read Full Article