An Expert's Guide to Compilation Terms
Description
A simple text-based image on a white background with black text. It begins with a confident but misplaced introductory sentence: 'Oh yeah I know about compiling'. This is followed by a list of common compilation and linking tool names and file extensions from the C/C++ ecosystem, each given a humorous, made-up definition. The list includes 'gcc - good code compiler', 'clang - compiler language', 'ld - linker dude', 'lld - little linker dude', 'llvm - little linker virtual machine', '.o - surprised file', and '.a - screaming file'. The humor is derived from creating funny, personified 'backronyms' for highly technical terms. It's relatable to developers who have had to navigate the often-opaque world of compilers and linkers, and it playfully mocks the jargon-heavy nature of low-level programming
Comments
77Comment deleted
I'm pretty sure 'ld' actually stands for 'lunch deferred,' because on our legacy C++ monolith, that's exactly what happens when you kick off a full build
Some days the only abstraction layer between .c and .o is the primal scream you let out while waiting for lld to finish your 4 GB static link
After 20 years of explaining to junior devs why their code won't link, I too believe object files are just surprised that they made it through compilation without segfaulting, and archive files are screaming because they contain decades of technical debt nobody wants to refactor
When your junior dev asks why the build is failing and you realize they've been pronouncing 'ld' as 'linker dude' this whole time - honestly, after 20 years of wrestling with undefined symbols and circular dependencies, that's probably the most accurate description of what it actually does. At least 'little linker virtual machine' explains why LLVM takes longer to compile than the heat death of the universe
Call it “linker dude” all you want - he still resolves left‑to‑right; pass the .a before the .o and you’ll get a genuine screaming file: undefined reference
Cute glossary, but the only thing that actually screams is your build when lld hits a stale .o and a mismatched ABI; ask ar, he wasn't invited
ld: linker dude - because after 20 years, unresolved symbols still hit like a bro ghosting the monorepo merge
pure facts, 146% true Comment deleted
.@ angry file Comment deleted
.exe - laughing file Comment deleted
.py - pooping file Comment deleted
*russian file Comment deleted
yandekc.ру Comment deleted
gross/garbage c compiler Comment deleted
wtf did u just say about gcc.. Comment deleted
exactly what it means Comment deleted
c6(and others) > clang > gcc Comment deleted
"g/gcc"💀💀🗿🗿🗿🗿🗿 Comment deleted
gcc means GNU complier collection Comment deleted
Gnu is kinda shitty tho Comment deleted
but before Comment deleted
it was called GNU C compiler Comment deleted
???? Comment deleted
gcc is obese and mid at best Comment deleted
gcc is da best :P Comment deleted
NAH Comment deleted
windows is Comment deleted
gnu is da best —.— Comment deleted
.s - asm/autism Comment deleted
.js - just shit Comment deleted
.json just sh!tting on numbers 💀💀🗿 Comment deleted
.h huge file .cc compiled code Comment deleted
I just want to share my mnemonic for tarballing files in the terminal: tar -czvf output.tar.gz file1 file2 folder1/ etc/ -c Compress -z Ze -v Vuckin -f File Comment deleted
Extracting files from one is similar, ofc tar -xzvf file.tar.gz eXtract ze vuckin file! Comment deleted
I just wanna say that new languages syntax sucks. I can't use to them once i learned C. Comment deleted
c family syntax (including rust and js for example) is the worst imo in terms of syntax haskell > lua > pascal > lisp > forth > c Comment deleted
I mean why on earth someone should define type of the variable after the name? What's wrong with the people nowadays! 😶😶 Comment deleted
do you do otherwise in math? Comment deleted
In my mind, C and D makes sense. When i see other syntax, i wanna end myself 😕😕 Comment deleted
guess what does a * b; mean without context 😄 Comment deleted
I mean why on earth someone should define types of variables manually? What's wrong with people who don't use type inference? Comment deleted
Why on earth someone should define types? What's wrong with people who use python and js? Comment deleted
When you work with small hardware, every byte is counted. Comment deleted
Jokes on you. I was packing arrays bitwise, can you name a type that consists of 3 bits? Comment deleted
In that case, 5 more bits to go 😂😂 Comment deleted
range 0 .. 7 in ada or u3 in zig 😄 Comment deleted
In my eyes the main issue with those is not even memory usage. Honestly speaking, memory is extremely cheap nowadays, relative to processing power, even in IoT-grade hardware. They're interpreted languages, which means there's a HUGE processing overhead that comes from JIT. And it has long become so bad that not even the execution time, but the slowness is human-perceptable, which is fucking insane. And also everything tries to be embedded chromium nowadays, which means insane waste of resources on unnecessary junk. And it doesn't even look or work that good comparatively Comment deleted
dynamically typed languages are only ok for prototyping since errors then aren't that much of a problem Comment deleted
i honestly wish even for excel macros to be compiled Comment deleted
interpreted languages can be statically type checked, and compiled languages can be dynamically typed Comment deleted
I do microcontroller programming. I wanna make sure everything as expected. Comment deleted
type inference is for "do thing ASAP then don't touch the it" kind of languages sadly, many languages are like this instead of encouraging clean and well-thought-of code Comment deleted
I don't see how type inference discourages clean code. It encourages thinking about actual solution to a problem instead of thinking about how to explain this solution to the compiler. Comment deleted
types are part of the solution Comment deleted
In BASIC (the best language in terms of syntax, which has not been surpassed since its inception), type distinction was added by later dialects: DIM A AS INTEGER DIM B(4, 2) AS DOUBLE In earlier dialects, all variables were numeric (floating-point), unless suffixed with an "$" to designate a string: DIM B(4, 2) DIM C$(64) Comment deleted
Basic is so disgustingly and unapologetically verbose it's not even funny Also idk about you, but there's something in the sytax of C-derivatives (esp. C#) that makes them seem technical yet understandable and natural at the same time Comment deleted
Pascal? Seriously?! 😑😑 Comment deleted
ada is way better than rust in everything, including syntax Comment deleted
I just googled the Ada syntax. Oh god save me 😵💫😵💫 Comment deleted
you like pascal family? Comment deleted
yes Comment deleted
:3 Comment deleted
The hardest thing about Haskell to me is its damn whitespace sensitivity Comment deleted
it may differ in some details, but mostly the same what else syntax family could it be in? Comment deleted
it have sets and there is type theory Comment deleted
x of Integer Comment deleted
In English we say "let x be an integer" Comment deleted
bias from programming in c Comment deleted
Modern IDEs can insert inferred type annotations for readability if you really need them Comment deleted
it encourages doing without thinking and you may need to read the code outside IDE or whatever Comment deleted
.4th — Star Wars in ASCII art .bat — call Batman .cc — closed captions .css — Counter-Strike source .cxx — programming porn .f77 — decimal number 3959 .for — one giant for loop .es — Spanish script .gnu — Stallman-compatible license .html — human-teached machine learning .lsp — least significant program .m4 — hitman"s wishlist .man — Y-chromosome supremacy declaration .omgrofl — literally it .php — PyrrolidinoHexioPhenone drug .ps — PlayStation game .rb — red-black tree .s — secret (chmod 000) .sh — secret header Comment deleted
tagged unions 🤷♀️ Comment deleted
there are scheme to c compilers for example Comment deleted
scheme is dynamically typed Comment deleted
o weka e ni Comment deleted
elixir is a very ok language, for instance "let it crash" as a way of dealing with errors in runtime is arguably more succinct than placing types everywhere in compile time Comment deleted
also there is an argument to be made about completeness of static checks, maybe a Rice theorem as well Comment deleted