We’ll talk about editors in the context of a typical IDE. For this purpose let’s divide the architecture of a typical (not every!) IDE into logical layers (tiers):
Figure 1 – layered architecture of an IDE
Let’s call the part which is closest to the user a front-end – the user interface, the editor surface and the documents. A front-end is usually built upon some application framework – a complex UI library which provides hosting with UI elements (dock panels, menus, toolbars, document windows, etc).
Although the back-end normally consists of many different components, the main part of it is of course the compiler. A back-end also usually includes a debugger, a storage system (file-based or version control) etc.
For our purposes, we’ll call the mediating part the core. The core binds together all parts of the IDE, in particular, it connects the compiler to the user interface. An important part of the core is the language service, which allows the IDE to “understand” the code and which makes the IDE “intelligent”: the DOM, the parser, the code colorizer, the resolver, the background compiler, the project system etc. The core makes the text editor language-aware, because the feedback provided to the user is based on the syntax and semantics of the programming language as well as knowledge about the program being edited.
Previous: 1.1. Text vs. structured editors