this post was submitted on 21 Dec 2024
37 points (100.0% liked)

Programming

17668 readers
219 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities [email protected]



founded 2 years ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 8 points 3 days ago* (last edited 3 days ago)

Now, because this article got a little long, as per a friend's suggestion, here's a table of contents:

Optimization gives us optimal programs

Branch weights and the CPU's branch predictor

-O3 produces much faster code than -O2

Javascript interpreters JIT at runtime because they don't know which paths are hot ahead of time

If you have a compiler, you don't need an interpreter

The middle-end is target/platform-independent

The compiler optimizes for data locality

-O0 gives you fast compilation

Templates are slow to compile

Separate compilation is always worth it

Why does link-time optimization (LTO) happen at link-time?

Inlining is useful primarily because it eliminates a call instruction

The role of the inline keyword

The best production compiler to study is LLVM

Undefined behavior only enables optimizations

The compiler can "simply" define undefined behavior 99% correctness rate is ok