Looking Under the Hood of JavaScript

Sdílet
Vložit
  • čas přidán 19. 01. 2023
  • Ever wonder what in the world is going on with JS? Well in this we deep dive into v8, into the internals to figure out WTF IS GOING ON WITH SETTIMEOUT???
    SMI in v8?? v8.dev/blog/pointer-compression
    Aleksei: / the_kozy
    Twitch
    Everything is built live on twitch
    Twitch : bit.ly/3xhFO3E
    Discord: discord.gg/ThePrimeagen
    Spotify DevHour: open.spotify.com/show/4MLaDrQ...
    Editor
    All my videos are edited by Flip. Give him a follow! / flipmediaprod He is also open to do more editing, so slide deeeeeeeeep into his dms.
    Join this channel to get access to perks:
    / @theprimeagen
    Links
    Linode: linode.com/prime
    / discord
    Twitch: / theprimeagen
    Insta: / theprimeagen
    Twitter: / theprimeagen
    VimRC & i3: github.com/ThePrimeagen/.dotf...
    Keyboard 15% off bit.ly/Prime360 USE CODE PRIME360
    #coding #neovim #typescript #programming #vim #softwareengineering #codinglife #webdesign #webdevelopment #webdev #javascript #rustlang #rust #twitch #twitchstreamer #programmerhumor #codinghumor #software #softwareengineer #softwaredeveloper #softwaredevelopment
  • Věda a technologie

Komentáře • 574

  • @ThePrimeagen
    @ThePrimeagen  Před rokem +1098

    I really enjoyed making this video. Its more of a new style for me, do you like it? Should I do more of this style? (send the algorithm signals!!!)

    • @the_flask
      @the_flask Před rokem +28

      Yes

    • @dhruvtekker1220
      @dhruvtekker1220 Před rokem +14

      It's super complicated and i didn't understand most of it.
      But i liked it bc i wanna learn more about js--> c++ stuff

    • @matiasbpg
      @matiasbpg Před rokem +4

      I loved the video. It's really difficult to give content like this that deep dive into the internals

    • @mouradaouinat8721
      @mouradaouinat8721 Před rokem

      Duh

    • @user-alesomething123
      @user-alesomething123 Před rokem +1

      Yes please, I really like that the content is aimed towards explanation for intermediary stuff. Especially the fact that you’ve posted a link for further explanation and I can go and see things I don’t understand. There’s already content on CZcams code space aimed towards beginners and people with an agenda to obscure info to sell a course. It’s why I mostly avoid CZcams these days and just focus on odin project.

  • @RunningRay9
    @RunningRay9 Před rokem +1111

    this shows that JS is BLAZINGLY fast. It executes a code that is supposed to take infinitely long time in just an instant.
    Blazingly fast

    • @wlockuz4467
      @wlockuz4467 Před rokem +81

      It has done executing while Rust hasn't even compiled!

    • @wadecodez
      @wadecodez Před rokem +22

      Or is it infinitely fast?

    • @igorordecha
      @igorordecha Před rokem +8

      @@wlockuz4467 I just thought...
      You have an algorithm written in both JS and Rust (both in source form). You enter commands "node program.js" and "cargo build && ./target/debug/program" respectively and measure time from pressing enter to the program returning.
      How large the input must be (the N in big O notation) for rust to win? Then check how building for production changes the results.

    • @kamuridesu
      @kamuridesu Před rokem +3

      @@igorordecha I made this test some time ago with python and it really depends on the operation and performance of the machine. Using an 7th gen Intel core i7 and a simples multiplication operation, even with compilation rust executed faster than Python. I assume that JavaScript has a performance similar, if not worse, than python

    • @HuntingKingYT
      @HuntingKingYT Před rokem +3

      @@igorordecha cargo run**

  • @kebien6020
    @kebien6020 Před rokem +375

    To summarize (please correct me if I misunderstood):
    - The infinity case is just special handling where it's treated the same as 0
    - Any other number gets casted to a 32 bit integer so some of the bigger numbers get truncated to small or even negative values
    - Negative values are handled effectively the same as 0

    • @ricardoamendoeira3800
      @ricardoamendoeira3800 Před rokem +44

      What I don't understand is if you're making a special case for infinity why would you run it immediately instead of simply not scheduling it at all?!

    • @MrSuperNova46
      @MrSuperNova46 Před rokem +30

      @@funnyav "This is the way"

    • @alxandr90
      @alxandr90 Před rokem +14

      @@ricardoamendoeira3800 As far as I understood, the converting of Infinity to 0 has nothing to do with `setTimeout`. Rather, `Infinity` converts to 0 if you try to treat it as an integer. If you do `Infinity | 0` you get 0.

    • @nathanhedglin931
      @nathanhedglin931 Před rokem +3

      @@funnyav divide by zero would be NaN. Weird stuff

    • @rosenthalpiano
      @rosenthalpiano Před rokem +4

      @@nathanhedglin931 setTimeout with NaN also executes immediately. Fun huh?

  • @mattshnoop
    @mattshnoop Před rokem +298

    Excellent video. This video has less of a "look how shitty JS is" vibe and is more just a great deep dive into the internals of V8.

    • @ThePrimeagen
      @ThePrimeagen  Před rokem +103

      thats the point!
      no need to bag on JS, its been bagged on enough, its more "why" does it do something

    • @SleepeJobs
      @SleepeJobs Před rokem +1

      👍👍

    • @ricardoamendoeira3800
      @ricardoamendoeira3800 Před rokem +15

      @@ThePrimeagen Actually I think this was more the "how it happens", in the future it would be nice to include the discussions on why some decisions were made (from issue trackers, PR's, etc.
      For example why choose to treat infinity as 0 instead of not scheduling the callback at all.

    • @lawrencedoliveiro9104
      @lawrencedoliveiro9104 Před rokem

      So basically, it is V8 that is shitty.

    • @jongeduard
      @jongeduard Před rokem +1

      For me it's not completely the first thing about V8 that I have watched around the subject of data types. I forgot which video it was, but it was some years ago and they had a very detailed explanation about the V8 engine and how you could write your code smarter to become more high performant.
      They also talked about SMI numbers and how using arrays of SMI's where the most efficient ones to use (because of preventing those extra pointers and memory allocations), also how important it was in general not to mixup several types in the same array. For example 1 object or string inside your array also containing numbers makes the whole thing based on extra pointers and allocations (in other words, the whole array becomes a boxed one).
      It's also true the language has a ton of initial design problems. But other languages also have their issues. C and C++ have their own huge problems for example (being very unsafe and vulnerable for example).
      It's great that powerfull JS engines exist these days. I would like to know more about the Firefox JS engine as well. Because V8 is not the only workhorse one that exists.

  • @snoopy8870
    @snoopy8870 Před rokem +107

    this type of content on programming is what we need more!!!

  • @spicybaguette7706
    @spicybaguette7706 Před rokem +52

    Massive props to the v8 devs for making a garbage (collecting) language actually performant, these optimizations are just insane.
    Also SO to the people working at JSC and SpiderMonkey

    • @ThePrimeagen
      @ThePrimeagen  Před rokem +26

      yayay! its nuts that v8 team is so talented they took a language that is TERRIBLE for perf and made it semi decent. its ackshually nuts.

  • @Nurof3n_
    @Nurof3n_ Před rokem +78

    More videos like this one please!

  • @SoKette
    @SoKette Před rokem +7

    Diving into internals is always fun ! When everything gets demystified after a long and arduous journey of grepping and filling your brain with as much as you can, it's sooooo satisfying.

  • @scottiedoesno
    @scottiedoesno Před rokem +6

    Love love love this video. This is the kind of stuff that really gives so much insight into what's going on behind the scenes. Thanks a ton for taking the time, not only to figure out why, but also to explain it so well.

  • @johndavidson8096
    @johndavidson8096 Před rokem +2

    Great video! Love seeing in-depth JS stuff! It's crazy impressive how much work V8 does to make JS run faster

  • @user-dz7bi8de7z
    @user-dz7bi8de7z Před rokem

    I am so happy that I stumpled across this channel. You are such an inspiration, your videos are so well made, funny and you are very authentic. Love it! Thank you very much for your content!

  • @ThePrimeagen
    @ThePrimeagen  Před rokem +6

    I also didn't fight anyone, i got a stye, a duct in my eye closed and eff'd me for a few days...

    • @tini_
      @tini_ Před rokem +4

      hmmmm, your last sentence "he is the best Engineer I have ever worked with" sounded kinda sus. Blink twice with the other eye if you need help!

    • @lawrencedoliveiro9104
      @lawrencedoliveiro9104 Před rokem +1

      Hey, it was a chance to use the old “you should see the other guy” joke ...

  • @m.minkov
    @m.minkov Před rokem

    Really enjoyed this video! Love covering these details that are much more in depth than what you regularly see. Thanks! :D

  • @bryanchulander
    @bryanchulander Před rokem

    This is so entertaining as well as informative. Learned a lot! Found you from the vim and algorithm courses on frontend master . Huge fan of your teachings

  • @SuperRedstoneman
    @SuperRedstoneman Před rokem +9

    Saddens me that not more people are doing videos like this and there are some concepts you go through very quickly but nevertheless I like how you explained a single thing in detail quickly while throwing in knowledge and remarks about how things work

  • @vvarhand3985
    @vvarhand3985 Před rokem

    I loved this!! Would really enjoy seeing more intricate and technical details of the browser’s implementation. You have a great instructional style

  • @JosephHenryDrawing
    @JosephHenryDrawing Před rokem +2

    This is really important to teach that! Don't be afraid to understand the internals and check the source code. Amazing video

  • @masteringmui
    @masteringmui Před rokem

    This video was awesome. I'd love more stuff like it, and also more stuff on your learning process and how you set about getting such in-depth knowledge on nitty-gritty stuff like this.

  • @judedavis92
    @judedavis92 Před rokem +3

    It’s actually refreshing to see a JS dev with a good understanding of under-the-good mechanics. We need more like that.

  • @samsupplee-niederman1752

    More of this, please. I've never seen what "under the hood" of JS before this video, and this was an awesome introduction to the WHY behind the weirdness.

  • @marcoaugustovitangeli1300

    I really enjoyed this video, this kind of content is great, is beautiful to see how "high-level" code, works all the way down and spot this kind of tricky things.

  • @shekishral6570
    @shekishral6570 Před rokem +17

    Very informative and interesting, please more of those videos when you brake the javascript code into c++ code!

  • @peternoire
    @peternoire Před rokem +162

    I know we are kinda making fun of JavaScript but.. its so educational it just makes me love JavaScript more. You're great at doing this type of content. Definitely do more.

    • @peternoire
      @peternoire Před rokem +7

      I said we as in we made this video together apparently. I don't know why I typed that.

    • @ThePrimeagen
      @ThePrimeagen  Před rokem +72

      btw, i am not trying to make fun of javascript, just trying to have fun with it :)
      and try to explain things in a fun way!

    • @RainOrigami
      @RainOrigami Před rokem

      classic case of stockholm syndrome

    • @peternoire
      @peternoire Před rokem +2

      @@ThePrimeagen you killin it, thanks for the good content. 👍

    • @professornumbskull5555
      @professornumbskull5555 Před rokem +14

      Yo... You love JS? Are you alright? Do you need therapy?
      /s

  • @Simon-vy8fe
    @Simon-vy8fe Před rokem

    Love these deep dives! Keep them going please. :)

  • @bashbunni
    @bashbunni Před rokem +1

    This is amazing! You crushed this new format 🔥

  • @y3v4d
    @y3v4d Před rokem

    Awesome video, short and full of interesting information and analysis!

  • @blackfrog1534
    @blackfrog1534 Před rokem

    Wow awesome video :3 the more technical the content the more prime shines

  • @juniorrueda8180
    @juniorrueda8180 Před rokem +1

    That’s quite deep indeed
    Amazing video and thanks for sharing your knowledge!

  • @oscarh4066
    @oscarh4066 Před rokem +1

    I just found you, Prime, and man I became a fan BLAZINGLY FAST!

  • @mediopalodev
    @mediopalodev Před rokem +5

    Brilliant Video. Absolutely more, please!

  • @timdithmer9184
    @timdithmer9184 Před rokem +8

    This really is some next level sh*t! Thank you very much. I was already enjoying your content a lot. But this teaches people how to find out stuff by themselves, along with providing a very deep understanding of this specific topic. Again, thanks alot! MORE! :D

  • @Ma1ne2
    @Ma1ne2 Před rokem

    This was actuall very interesting, I was building a project for university with Rust to Webassembly and a lot of the ideas that you explained here to interface JS with C++ actually apply directly or similarly to wasm-bindgen, including how there is a wrapper struct for passed and returned JS values.

  • @jgttech
    @jgttech Před rokem

    I loved this video. It explains the situation really well.

  • @jfdirienzo
    @jfdirienzo Před rokem

    This style of video is pure gold 🔥🔥🔥

  • @CodeWithAhsan
    @CodeWithAhsan Před rokem

    I loved this Deep dive. Been working with JS for the past 10 years I never knew about this :) I'd love more of this and would perhaps now start looking into the chromium source code myself as well! Thanks the swolleyeagen

  • @deank179
    @deank179 Před rokem

    Super interesting! Would love to see more content like this

  • @jocdiazm
    @jocdiazm Před rokem +1

    Loved the new format!

  • @moodynoob
    @moodynoob Před rokem

    Absolutely love this kind of content!

  • @thehibbi
    @thehibbi Před rokem

    I like understanding stuff like this by inspecting the source code. Very nice video, thanks :)

  • @diegolikescode
    @diegolikescode Před rokem

    That is some juicy ass content. Loved this format, you keep getting better and I'll keep coming to you (wat?)

  • @pd5711
    @pd5711 Před rokem +1

    Thanks for that video !
    Props for Westbrook usage :D

  • @sooollchhu
    @sooollchhu Před rokem +3

    i am gonna have to rewatch it a couple of times to understand it, my brain is not cooperating today . Thank for this video.

  • @st-jn2gk
    @st-jn2gk Před rokem

    love your videos (waiting on your rust ergonomics vid btw 🥺)

  • @alexibnz
    @alexibnz Před rokem

    This style reseembles a lot with what I do at my job, but without SAP frameworks… fortunately for the rest of the viewers. Pls do more!

  • @hendersonfernandes7378
    @hendersonfernandes7378 Před rokem +1

    You are the senior I'd like to have in my life...
    Awesome video!!! ❤

  • @hugodsa89
    @hugodsa89 Před rokem

    God I love these videos. Thanks prime.

  • @stefanhall6415
    @stefanhall6415 Před rokem +6

    Love your videos❤

  • @henrybenedict6357
    @henrybenedict6357 Před rokem

    I just watch your course about vim on frontend masters and I love it.

  • @headlights-go-up
    @headlights-go-up Před rokem +11

    This was simultaneously interesting and confusing. I'm not smart enough for this, should I be ashamed? lol

  • @UsefulProgrammer
    @UsefulProgrammer Před rokem

    I really liked this one. Keep it up.

  • @bravesirrobin9576
    @bravesirrobin9576 Před rokem

    I love this video, I'd like to see more of this type.

  • @abhishekgururani6993
    @abhishekgururani6993 Před rokem

    This video is pure gold, I learned how to research things.

  • @quintencabo
    @quintencabo Před rokem

    I really loved this video!

  • @petrpechkurov3095
    @petrpechkurov3095 Před rokem

    Thank you, Mr. ThePrimeagen!

  • @npgoalkeeper
    @npgoalkeeper Před rokem +1

    Reviewing an example of chromium doing something seemingly unexpected while on Firefox, truly a chad move

  • @danielknight1570
    @danielknight1570 Před rokem

    sometimes idk wtf ur talking about Prime but it’s soothing to hear ur voice

  • @lastink444
    @lastink444 Před rokem

    alright, wow. that was an interesting dive into V8. thanks for "What JS really looks like 101"

  • @petarkolev6928
    @petarkolev6928 Před rokem +1

    This video is beyond amazing!

  • @kardashevr
    @kardashevr Před rokem

    a fascinating piece of knowledge I'm never gonna need

  • @awave7710
    @awave7710 Před rokem

    def looking forward to more of these

  • @AlexanderBorshak
    @AlexanderBorshak Před rokem

    Nice investigation, many thanks!

  • @smile4992
    @smile4992 Před rokem

    I didn't know gimp can be used to create tutorial videos like this. This is amazing.

  • @alexibnz
    @alexibnz Před rokem

    This sparks joy!!!!!!!!!!!

  • @lotfikamel5947
    @lotfikamel5947 Před rokem +2

    Really special content 💖

  • @totalmonkeyspeed260
    @totalmonkeyspeed260 Před rokem

    Good video, do whatever you want dude.🙏

  • @edupsousa
    @edupsousa Před rokem +2

    It's kind of scary the number of assumptions or best guesses a web browser does. The last time I dove in Chromium code was to find out why it was trying to autocomplete a random text field in my form as a credit card number. Lots of obscure heuristics.

  • @Vim_Tim
    @Vim_Tim Před rokem +9

    Follow-up question: what does the spec say? Is this Google’s interpretation, or do all browsers implement SetTimeout this way?

    • @lawrencedoliveiro9104
      @lawrencedoliveiro9104 Před rokem

      I had a look at the MDN page (probably the most readable description I could find), and apart from warning about non-numbers being implicitly coerced into numbers, it says nothing like this. There are situations where delays may last longer than expected, but they should never be shorter.
      So it seems like this is some kind of weird Chrome/Chromium bug.

    • @Vim_Tim
      @Vim_Tim Před rokem

      @@lawrencedoliveiro9104 MDN is not a specification… I believe ECMA-262 is the authority for this behavior.

    • @Vim_Tim
      @Vim_Tim Před rokem +6

      I found the answer: the W3C HTML5 standard says “if timeout is an Infinity value, a Not-a-Number (NaN) value, or negative, let timeout be zero.” So this is behavior is by design.

    • @lawrencedoliveiro9104
      @lawrencedoliveiro9104 Před rokem +1

      @@Vim_Tim But that doesn’t say that large values should overflow.

    • @omarb155
      @omarb155 Před rokem

      It it interesting to consider edge cases like in this video, but hopefully this issue shouldn't arise too often.

  • @andrewrush7667
    @andrewrush7667 Před rokem

    Great video, thanks!

  • @ImranSheikh-kg4qd
    @ImranSheikh-kg4qd Před rokem +1

    We need more of this type of content...

  • @palkollar7739
    @palkollar7739 Před rokem

    this is an awesome channel

  • @igboman2860
    @igboman2860 Před rokem

    So in summary, setTimeout expects a 32 bit signed integer and overflows . Thanks for the video. I actually didn't know that

  • @AlexSharikov
    @AlexSharikov Před rokem

    Yes, entertaining and knowledgeable 💥

  • @mondirhallouli
    @mondirhallouli Před rokem

    you sir are just different! in a very awesome way!

  • @alexIVMKD
    @alexIVMKD Před rokem

    Amazing stuff dad

  • @mzg147
    @mzg147 Před rokem +2

    I hate js, I am doing challenges to write web apps without touching js, but this deep dive is just great. Makes appreciating it much easier (it's still hard tho), thank you really much!

  • @leonardoantunes1598
    @leonardoantunes1598 Před rokem

    Awesome type of vídeo! I want to see more

  • @Aspiiire
    @Aspiiire Před rokem

    Thanks really amazing and informative video

  • @ubitubee
    @ubitubee Před rokem

    Amazing drawing skills!

  • @_randombob
    @_randombob Před rokem

    Amazing vid, may have to watch again but neat

  • @pro.gateway
    @pro.gateway Před rokem

    Please do more of this......awsome content

  • @ascourter
    @ascourter Před rokem

    Nothing like pulling out the ole 2's complement to see some jaws hit the floor

  • @eliasrojas5326
    @eliasrojas5326 Před rokem

    beautiful, prime

  • @kr0k3tt
    @kr0k3tt Před rokem

    Liked for the instance promotion. Thanks prime

  • @anshsharma5514
    @anshsharma5514 Před rokem

    Loved the video tho, pretty informative ❤

  • @RBZzzStyle
    @RBZzzStyle Před rokem

    Awesome mate!

  • @michaeldeloatch7461
    @michaeldeloatch7461 Před rokem

    I'm a little stopped up in the ears tonight, and a lot hearing impaired every night, and the speakers on my laptop are lousy. @ 2:40 I thought you said "ideologue" which certainly could figure in philosophically between the loosy-goosy world of JS and the cold, heartless metal of C calls ;-) -- oh, you actually said IDLong

  • @matthewvaccaro8877
    @matthewvaccaro8877 Před rokem

    More! More you son of a bitxh!!! More content like this, it’s absolutely amazing ❤❤❤

  • @amans6504
    @amans6504 Před rokem

    This time i finally could understand a little c++ in production.

  • @ARLX-yo1wr
    @ARLX-yo1wr Před 4 měsíci

    man, it's blazingly amazing)

  • @adamclarke403
    @adamclarke403 Před rokem

    Really interesting content!

  • @palaciokaesar
    @palaciokaesar Před rokem

    an programmer youtube with a huge charisma??? YES I AM INNNN

  • @boulaakladyous
    @boulaakladyous Před rokem

    I love your channel❤😂

  • @dano7675
    @dano7675 Před rokem

    Bah gawd! The SwoleEyeAgen strikes again!

  • @chrissaltmarsh6777
    @chrissaltmarsh6777 Před rokem +5

    This is hilarious. Reminds me of an ancient Sinclair calculator, very cheap, which got things wromg; the fun was to work out why.
    Lack of RAM - can't deal with edge cases, oh well, WTF.
    Javascript does not have that excuse.

    • @ThePrimeagen
      @ThePrimeagen  Před rokem +2

      hah, i like investigations, they are funny

  • @drsensor
    @drsensor Před rokem

    Thanks for sum it up your stream 👍
    Request Topic: JSX vs Go template vs Mustache (i.e Ramhorn)

  • @zacanger
    @zacanger Před rokem +1

    So in the first few seconds my mind already jumped to "32 bit signed integers" and it turns out that was right, but I didn't know the default behavior for something larger was 0. The spec is really fascinating, especially since it includes so much stuff that JS users (like me) would love to see changed, but it can never change because JS has to be backwards-compatible forever. There's always a _logical_ explanation for JS weirdness that made sense at one point in time, but that doesn't mean it's always rational in 2023 (except for typeof null, which was just an accident, but now we're stuck with it).

  • @medamine3142
    @medamine3142 Před rokem

    my mind is exploded from this explanation😵

  • @bobobo1673
    @bobobo1673 Před rokem

    Good vídeo , very interesting

  • @darylclarino5439
    @darylclarino5439 Před rokem

    this is an inspiration to create confusing prs that work to confuse colleagues for the lols

  • @qodesmith520
    @qodesmith520 Před rokem +2

    You're a friggin genius.