To answer the original question. C
can also be very compact.
You just need to write it correctly, and tickle the toolchain's C-spots.

- Enable the optimiser to make operations consisting of two constants/literal turn into one constant.
- Enable the optimiser so the compiler uses the general purpose registers as stack.
- Do not link in unused code. Tell to linker to skip those (often default).
- Tell the compiler Main() is a special function that never returns, this will make the compiler skip stacking.
- Do not use stack, hint the compiler using the "register" keyword for certain variables, such as "i".
- Do not use C functions in a memory limited device. The stacking frame is wasted time and space.
I've programmed C for an attiny 10, got to around 800 bytes for a digital filter on 1 adc channel in a low voltage/not-charging warning indicator for motorcycles/batteries.
Could have done it in assembly, but that takes too long.