I'm trying to understand software at a lower level and have been wondering how frameworks and runtimes are created. For example, React lets developers write JSX that resembles HTML, even though JavaScript itself does not natively understand that syntax. How is JSX transformed into something JavaScript can execute, and how are the resulting elements represented?
I'm also curious about Node.js. It runs JavaScript outside a browser and provides access to operating-system features such as files, networking, and processes. Was Node written entirely in JavaScript, or does it rely on another language to connect JavaScript to the operating system?
More generally, can a framework or runtime for one programming language be written partly or entirely in another language?
4 Answers
Node.js is a mix of languages. Its JavaScript engine, V8, is implemented mainly in C++, and Node’s core uses C++ to expose operating-system facilities such as networking, files, timers, and processes. A substantial amount of Node’s higher-level behavior is written in JavaScript, but some native layer is needed to start the runtime and communicate with the OS. Once that foundation exists, JavaScript can implement more of the system on top of it.
You can build software for one language using another language, especially when you need native performance or access to operating-system APIs. Compilers, interpreters, virtual machines, and runtimes are commonly written in C, C++, Rust, or similar languages, while libraries and frameworks are often written in the language developers use. To understand the lowest level, it helps to study how source code becomes machine code, along with memory, operating systems, and CPU architecture.
Most frameworks are largely written in the language they support. They’re collections of reusable functions, classes, data structures, and conventions. A framework is often described as a library with more structure and opinions about how your application should run, although the boundary between “library” and “framework” isn’t exact.
JSX is not something the JavaScript engine parses directly. A tool such as Babel transforms JSX into ordinary JavaScript—typically function calls that create React element objects. React then works with those objects and eventually updates the browser DOM. You can use React without JSX; JSX is mainly a more convenient syntax.

So the main difference is that a framework tends to organize or control the application flow, while a library is something the application calls when it needs it?