The lowest level is transistors, which are electronic switches that have an on and off state. In other words, they are binary and can represent 0 and 1
Those get combined into gates of two inputs. An “and” gate outputs 1 if both its inputs are 1. An “or” gate outputs 1 if either of its inputs are 1. And Xor gate outputs 1 if and only if one of its inputs is 1.
A bunch of other complicated shit happens
Boom assembly. Don’t try and read or write it, because it will make you wanna quit computers
C comes into play. Designed to unfuck, assembly so you can actually write readable code. Just don’t forget to release your memory
More complicated shit. Something about kernels and GNU. Userland vs kernel land? Idk
ARM might be different since it can run process outside of userland and kernel I think? Something about secure compute/marketing BS
Inside of user land, we have the web browser. This is there the cool shit happens.
The browser runs JavaScript, CSS and HTML. JavaScript is a single threaded, but nonblocking language with an even loop and microtask queue.
Inside of the browser we run React. React is a framework where UI is a function of state and the data flows in one direction. It can also be used to slam your CPU.
Now that we’re into high level languages, it would only be fun if it looped back around to the beginning. So we invoke some C code that has been compiled to web assembly. Mmmm how efficient
Edit: I tried to do this all off the top of my head. After writing this, I think I meant user space vs kernel space. Idk if user land is a word
I guess between C and assembly there’s abstract syntax trees and maybe LLVM, which is probably also written in C. Idk I skipped compilers in college.
I also know the networking stack has a bunch of layers, but that felt like its own separate thing to “computers”. I think UDP makes more errors than TCP but UDP also go brrrrr
Hehe, llvm is a compiler framework, basically provides all the utilities for processing an AST.
ASTs have various flavors but they’re all the same thing an intermediate representation for a program that optimizers and linkers use to create binaries.
The network stacks meh, 6 or 7 layers depending on what protocol you use but in brief: physical, transport, application. More and more functionality has moved into the transport in the name of efficiency, see quic. But in general not worth worrying about most of the abstraction was nonsense anyways.
And you missed out compilers was one of the most useful classes in cs circulums since it teaches you how languages work.
Transistors are only on and off switches when run in saturation. This is relevant to CPUs in the sense that the rising/falling edge and jitter affect the setup and hold times and thus the maximum clock rate. End pedantry.
There’s an active region between on and off where the current from the collector to emmiter is proportional to the base current. This can be used in other applications like amplifiers. But in digital applications that active region is the transition time between low and high states.
In order to obtain a deterministic outcome the rising edge must be predictable and it must stay at a logic level 1 for long enough to account for propagation delay. These considerations are known as setup and hold. The higher the frequency the clock runs, the tighter these constraints become.
My impression of C++ is that’s it’s actually C++++++++ as in, how many more decades of features can we cram into this language before it explodes
What’s a CD player /s
Fun fact about a random CD player. The USB-A external CD player Apple sold after removing the internal CD player kinda abused the USB standard. I believe it needed more current than was allowed by USB, so Apple found some way to make this specific device draw more power than the USB standard supported at the time. Today, I believe USB-C includes a handshake that negotiates power requirements, but at the time, USB-A didn’t support this.
Tbh, I don’t really know where assembly ends and machine code starts. But do know that assembly is tied to your specific architecture
Machine code is just the numbers, assembler is mnemonics and stuff and needs an “interpreter” to turn it into useful machine code (a C++ compiler also spits out machine code BTW).
Spot on about USB standards, no idea if apple did what you saulid though, wouldn’t doubt it!
Edit: I tried to do this all off the top of my head. After writing this, I think I meant user space vs kernel space. Idk if user land is a word
Did a solid effort.
I guess between C and assembly there’s abstract syntax trees and maybe LLVM, which is probably also written in C. Idk I skipped compilers in college.
I also know the networking stack has a bunch of layers, but that felt like its own separate thing to “computers”. I think UDP makes more errors than TCP but UDP also go brrrrr
Hehe, llvm is a compiler framework, basically provides all the utilities for processing an AST.
ASTs have various flavors but they’re all the same thing an intermediate representation for a program that optimizers and linkers use to create binaries.
The network stacks meh, 6 or 7 layers depending on what protocol you use but in brief: physical, transport, application. More and more functionality has moved into the transport in the name of efficiency, see quic. But in general not worth worrying about most of the abstraction was nonsense anyways.
And you missed out compilers was one of the most useful classes in cs circulums since it teaches you how languages work.
I KNOW! My biggest mistake in college was worrying about my GPA and that worry keeping me from taking harder classes. But I did learn about ASTs.
Transistors are only on and off switches when run in saturation. This is relevant to CPUs in the sense that the rising/falling edge and jitter affect the setup and hold times and thus the maximum clock rate. End pedantry.
This is the content I’m here for! Please continue I want to learn more
There’s an active region between on and off where the current from the collector to emmiter is proportional to the base current. This can be used in other applications like amplifiers. But in digital applications that active region is the transition time between low and high states.
In order to obtain a deterministic outcome the rising edge must be predictable and it must stay at a logic level 1 for long enough to account for propagation delay. These considerations are known as setup and hold. The higher the frequency the clock runs, the tighter these constraints become.
Nice 👍🏽!
Machin code comes to mind, and “more” high level languages like C++, template metaprogramming and other horror stories 💀
And CD players!
Cheers 😋
My impression of C++ is that’s it’s actually C++++++++ as in, how many more decades of features can we cram into this language before it explodes
What’s a CD player /s
Fun fact about a random CD player. The USB-A external CD player Apple sold after removing the internal CD player kinda abused the USB standard. I believe it needed more current than was allowed by USB, so Apple found some way to make this specific device draw more power than the USB standard supported at the time. Today, I believe USB-C includes a handshake that negotiates power requirements, but at the time, USB-A didn’t support this.
Tbh, I don’t really know where assembly ends and machine code starts. But do know that assembly is tied to your specific architecture
You’re not wrong about C++ 😋
Machine code is just the numbers, assembler is mnemonics and stuff and needs an “interpreter” to turn it into useful machine code (a C++ compiler also spits out machine code BTW).
Spot on about USB standards, no idea if apple did what you saulid though, wouldn’t doubt it!