Browse Source

Добавить 'Лекции/Notepad/Попков.md'

u20kovalev_den 1 week ago
parent
commit
059e0a01b2
1 changed files with 22 additions and 0 deletions
  1. 22 0
      Лекции/Notepad/Попков.md

+ 22 - 0
Лекции/Notepad/Попков.md

@@ -0,0 +1,22 @@
+# Лекция 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).