lol.... v8 sounds like a german car. Had to be a high performance Car, the V8 is actually a highly optimize car for carrying js code to the os and machine code(running js code). Germans and engine. nice synonym.
this course should one of the mandatory courses that a developer should follow to make the code work in very efficient way and give best performance and hardware management .
Sehr interessant, Dankeschön! Would you agree that the statement "From a compiler's perspective, the best thing we can do is to write code that looks like it is statically typed", can be used as an argument in favour of TypeScript, which as I understand it naturally encourages us to write code that looks like it is statically typed. Hence, does writing our code using TypeScript make it more likely that the resulting JavaScript code can be optimised in a way that increases performance? Using that argument, can it therefore be inferred that "using TypeScript makes our apps faster"?
Definitely, also, because TypeScript is great! The "types" in TypeScript are not necessarily the same "types" for V8, but by using TS you're getting automatically more statically types nature, so it's usually better for the engine's speculative optimizations.
The question is: does adding types help us understand the program better, or does it just add noise? Having used around 30 languages, including Javascript since 1996, TypeScript a bit, and a typed version of Javascript for Flash (which I would categorize as the same language in all these cases), I think the type information is mostly useless noise. I also write a lot of C++ (since 1994). It seems to always be moving more toward generics where types are inferred or deduced, so advanced C++ code is extremely noisy, sometimes becoming impossible to understand. All that extra noise merely says "do whatever you want whenever you need to, compiler." That's exactly what JS does ALWAYS and with ZERO noise.
Type refinement in JavaScript is a very cheap operation but it allows the compiler to optimize parts of the code it can be certain about (look at asm.js). Variables not changing their types certainly does help optimization. Also object literals having the same "shape" does help. But what doesn't help are "nullables" (not always the same type), tuples (don't really exist in JS) or tagged unions (while a nice feature of TS, for V8 it would actually be impossible).
Sehr nett Frage :) Theorytically you are right on point.If we discard the indirection stage added to first compile TS to JS, the generated JS is more optimized and hence might run slightly faster. To my observations the performance gains are considerably small for a mid sized app. A con is it increases the build time marginally
Some time ago the Chrom profiler would show you if a function was deoptimized. Unformtunately this "performance debugging" information is no longer available in newer versions of Chrome.
16'33": "this is the optimized code that was generated after we have ..." What does "" mean? Does it mean that the script file contains a similar code pattern repeatedly, or that you have pressed F5 a few times?
great talk! 21:00 is this the reason for the optional variables : testVar?: number etc.. in typescript? will be checking to what it will becompiled now! :D
I like how they changed the names of the processing of the V8 egine to stuff like " ignition" and "turbo fan". its easier to remember because its like a car engine now.
Thanks for the presentation. I'm in a bit over my head, but I was able to follow along. I am uncertain about one point, though. Given two objects {x:"a string", y:5} and {x:"another string", y:7}, would they be of the same type, despite differing string lengths? Is the string value of obj.x stored by reference so that the location of obj.y is always the same, relative to the object?
I maybe late for the party but, according the ECMA-262 3rd Edition Specification, each character represents a single 16-bit unit of UTF-16 text:. Hence both obj will have same types
While I'm always amazed at compiler black magic, I'm also confused at why they are even required. I get dynamic types are great for prototyping, that programmer time > cpu time n all such. Sometimes thou I wish we had access stricter typing, pointers, immovable class/struct etc just as an option. Just make it a separate mode or something. Maybe if you set a flag to true, you can no longer dynamically add properties or at least you will get some sort of warning. In exchange you are guaranteed the faster code.
Today, if a programmer wants to write JS code with high performance, he/she needs to be more under the hood, to be more specific, more about hardware. Although the V8 engine is just a virtual machine, it essentially was designed by people with a good understanding of hardware.
might be because Optimizing Compiler has nothing to optimize and everything is handled by baseline compiler. Happens a lot with short non-repetitive js code
I don't like the encouragement to write more statically typed code to make up for where the JIT is not good at optimizing the dynamically typed language is made for. How about making the engine better at doing that for the programmer, so the programmer does not have to do the engine's job?
If you represent the same type of objects by having all the abcd properties for everything is like highlighting the advantages of a class based programming and emphasizing the cons of a dynamically type language, isn't it? lol
C++ has 'auto' which works similar to 'var' in Js. But, exactly as in Js, you cannot ignore the type. Even assignment does different things, depending on the type of the variable. In Js, primitives will be copied but objects will be a copy of reference, which then refers to the same object.
In C++11, the "auto" keyword was redefined to be a placeholder for a single type deduced from their initializer. For example, "auto x = 42;" is identical to "int x = 42;". Likewise, "auto x = true;" would mean "bool x = true;". The "auto" variable is still bound *permanently* to a type. That's completely different from var, which is a variant. A variant's type can change during its lifetime. C++17 has std::any and std::variant, which are more like var: godbolt.org/z/4926dx