Revolutionizing Programming May Require Rethinking Functions

I just did a quick semi-deep dive into learning assembly!

Why? Because revolutionizing computer programming is a high priority for me, and I no longer trust the wobbling tower of poorly-designed abstractions that modern computing is built upon.

Will revolutionizing programming require the replacement of the most fundamental abstractions we make, such as the function?

I think that might just be the case. (At the very least we should make functions extensible without breaking backward compatibility by having each function accept exactly 1 parameter that is an object or struct; more on that another time, here.) Therefore, learning assembly can help me bypass all of that.

A tutorial I’m loving so far: https://cs.lmu.edu/~ray/notes/nasmtutorial/ .


FYI, if you are trying to use nasm and gcc on Linux to assemble and compile a simple program and you get an error similar to the following.

/usr/bin/ld: hola.o: relocation R_X86_64_PC32 against symbol `puts@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC

then instead of running a command like

$ nasm -f elf64 hola.asm && gcc hola.o && ./a.out

instead run

$ nasm -f elf64 hola.asm && gcc -g -no-pie hola.o && ./a.out

That is, use gcc -g -no-pie instead of just gcc.

Good luck!