# Лекция 5: Архитектура Notepad++: от Scintilla до плагинной экосистемы **Notepad++** представляет собой свободный редактор исходного кода и текста для операционной системы Windows, архитектура которого построена на компромиссе между минимальным потреблением ресурсов и максимальной расширяемостью. С инженерной точки зрения, это пример успешной реализации легковесного приложения, написанного на **C++** с использованием только **Win32 API** и стандартной библиотеки шаблонов (**STL**), что обеспечивает минимальный размер дистрибутива и высокую скорость исполнения без зависимостей от тяжеловесных фреймворков . Центральным компонентом системы является библиотека **Scintilla**, выполняющая функции редактирования текста. Scintilla предоставляет механизмы подсветки синтаксиса, сворачивания кода (code folding) и автодополнения. Notepad++ выступает в роли обертки, которая интегрирует этот компонент в нативную оболочку Windows, добавляя управление документами, вкладками и пользовательскими настройками . Ядро приложения построено вокруг класса `Notepad_plus`, который управляет буферами документов через `FileManager`, а каждый буфер (`Buffer`) инкапсулирует состояние конкретного файла, кодировку и историю изменений, независимо от представления . ![Alt](NT.png) ### Таблица 1. Ключевые компоненты архитектуры Notepad++ | Компонент | Назначение | Техническая реализация | | -------- | -------- | -------- | | **Scintilla** | Движок редактирования | Библиотека на C++, управление синтаксисом и событиями | | **Буфер (Buffer)** | Представление документа в памяти | Класс `Buffer`, управление кодировкой и состоянием | | **Менеджер плагинов** | Динамическая загрузка расширений | Загрузка DLL, управление через `PluginsManager` | Ключевая особенность для разработчика — архитектура обработки сообщений. Notepad++ работает в классическом для Windows событийно-ориентированном цикле. Все действия пользователя транслируются в сообщения, которые обрабатываются главной оконной процедурой `Notepad_plus_Window::runProc`, после чего маршрутизируются в `Notepad_plus::process` — центральный диспетчер команд, расположенный в модуле `NppBigSwitch.cpp` . Такая схема обеспечивает четкое разделение между пользовательским интерфейсом и бизнес-логикой. Расширяемость редактора реализована через **систему плагинов**. Плагины представляют собой динамически подключаемые библиотеки (DLL), загружаемые менеджером `PluginsManager` при старте приложения . Архитектура плагина требует экспорта стандартных функций (например, `isUnicode`, `getName`, `beNotified`), что позволяет основному приложению вызывать код расширения в ответ на события редактора . Плагины имеют прямой доступ к компоненту Scintilla через отправку сообщений (`SendMessage`), что дает им возможность модифицировать содержимое документа на низком уровне . С инженерной точки зрения, эффективность Notepad++ достигается за счет оптимизации использования процессора. Разработчик Дон Хо декларировал цель снижения энергопотребления: минимизация вычислительных циклов позволяет процессору переходить в режимы пониженного энергопотребления, что снижает углеродный след . Это реализуется через отказ от фоновых процессов-демонов и синхронную обработку пользовательского ввода. В контексте безопасности архитектура претерпела изменения после инцидента 2025 года, когда была скомпрометирована инфраструктура обновлений. В ответ была усилена подсистема обновления **WinGup**: теперь верифицируется не только цифровая подпись устанавливаемого файла, но и подпись XML-манифеста с сервера обновлений (XMLDSig) . Это пример того, как архитектура desktop-приложения адаптируется к современным требованиям безопасной поставки кода (supply chain security).