Assembler, der Grund wieso alle Programmiersprachen sich ähneln.
Bei Assembler handelt es sich um eine Sprache, welche sehr CPU und System nahe ist.
Jede Programmiersprache wird irgendwann in Assembler umgewandelt, um ausgeführt zu werden.
Wieso gibt es überhaupt andere Programmiersprachen als Assembler?
Assembler ist schwer verständlich und umständlich, man kann auch nur schwer schnell einen Überblick über ein Programm verschaffen, dazu ist Assembler sehr System nahe und würde nur auf einem System mit genau der gleichen CPU Architektur funktionieren.
Assembler wird aus diesem Grund nicht dazu verwendet große Programme zu erstellen, es ist also nur eine Sprache, welche der CPU ihre Befehle gibt.
Das Zuweisen einer Variable, in dem man diese in ein CPU-Register schiebt mit push(Schiebe auf Stapel) mov(in Register verschieben) pop (vom Stapel nehmen), wäre im Alltag unglaublich aufwendig.
Eine Funktion wird unter Assembler auch mit Call < Speicheradresse > aufgerufen.
Mit Jump < Speicheradresse > kann man im Code herumspringen mit je (Wenn) jne (Wenn Nicht) cmp (Vergleichen) kann man If Abfragen gestalten.
Mathematische Aufgaben, sind natürlich auch möglich addieren add < Register >, < Register >.
Es ist auch möglich, Code mit nop zu überschreiben und vieles mehr, das hängt aber von euerer CPU Architektur ab, was ihr alles machen könnt und wie ihr es machen könnt.
Das ist jedenfalls der Grund, wieso alle Programmiersprachen die gleichen Möglichkeiten bieten.
Selbst so Sprachen wie Brainfuck und Whitespace, welche es schaffen noch schmerzhafter, als Assembler zu sein.
Bei Java, Python wird der Code meist zuerst umgewandelt in Bytecode, dieser wird dann von einer Runtime Umgebung in Assembler übersetzt, das hat den Vorteil, dass das Programm auf jedem System lauffähig ist, wo auch die Runtime Umgebung unterstützt wird.
Bei Sprachen wie C, C++ muss der Code vom Compiler für das System und die entsprechende Hardware angepasst werden.
Wenn anderer Hardware oder ein anderes System genutzt wird, ist daher immer ein anderes Programm nötig, eine ARM CPU kann mit Assembler Code von einer x86 64 Bit CPU nichts anfangen.
Die API von Linux kann mit API Befehlen von der Windows API nichts anfangen.
Eine Programmdatei für mehrere Systeme würde also nur für ein System funktionieren mit gleicher Hardware, wäre aber sehr aufgeblasen und bräuchte eine extra Bibliothek, die jedes System unterstützt, die das für das ausführende System übersetzt.
Das hat aber auch nicht nur Nachteile, C, C++ ist wie gesagt System nahe und wird daher zum Beispiel für Treiber genutzt, die dann auch dank der direkten Ausführung schnell laufen.
Es kommt also auf die Anwendung an, welche geschrieben wird, muss es schnell geschrieben werden und überall laufen ist C, C++ sicher keine gute Idee.
Hier würde sich dann eher eine Sprache wie Python oder Java eigenen.
Bei einer Browser-Anwendung natürlich Javascript.
Aber bis auf Grammatik und vielleicht kleine Besonderheiten wie Sicherheit, Objektorientiert, Funktional, Schleifen, usw. sind die meisten Sprachen sich bei den Grundfunktionen sehr ähnlich und das kommt durch Assembler.