“Эта статья не Zed Объявление редактора, но хотелось бы изучить Zed за командойизделовая мотивацияистек технологий。Не начинайте войну редакторов из-за этой статьи!
Zed[1] представляет собой продукт, изготовленный из Atom[2] и Tree-sitter[3] Высокопроизводительный многопользовательский редактор кода от создателей .
“Atom,да GitHub Текстовый редактор, созданный . Сидящий на дереве да Rust Реализован инкрементный парсер.
Zed излозунгда «Написание кода со скоростью мышления» — этот лозунг передает как минимум следующие понятия:
Zed в настоящий моментиз ХарактеристикадаХорошая производительность,Независимо от задержки вставки, времени запуска или использования памяти,,Вседа Подобные компиляторыи IDE серединаЗанимает наименьшее количество временных и пространственных ресурсовиз。
Zed Предлагает некоторые другие редакторв настоящий моментеще нетизКонцепция современного развития:
В общем, Зед в настоящий момент «Дайте мне опыт» и Этот слоган более последователен и подчеркивает его цель — обеспечить беспрепятственное и эффективное программирование. Зед После трех лет разработки вчера его исходный код был открыт, а стабильная версия была выпущена для скачивания.
Основная идея Zed зародилась как внутренний проект GitHub под названием Xray в 2018 году.
Xray[4] да GitHub Atom Проект, разработанный командой ранее Electron текстовый редактор, потому что Atom После запуска Редактора производительность подверглась критике со стороны пользователей сообщества. Проблема с производительностью особенно очевидна при загрузке больших файлов, поэтому. Atom Команда разработчиков надеется пройти WebGL Переопределите интерфейс. Но они не хотят отказываться Электрон, потому что они верят Electron Также даразвивайте кроссплатформенный расширяемый интерфейс лучшей из технологических платформ. и Xray Начать выбор Rust достичь.
Однако к концу 2018 года Xray оказался слишком сложным, чтобы быть устойчивым, и проект застопорился.
Xray Два главных создателя Nathan и Antonio существовать 2019 Канун Нового года 2020 Год начал их заново реализовывать изновыйиз Редактора, просто да Zed и GPUI(Zed для внутреннего использования GUI библиотека) прототип.
2020 Год Nathan полученный Warp[5] (Rust реализованный терминал) изпредложение о работе, но он существует Warp Я уволился через три месяца.,Потому что он никогда не мог отказаться от своей мечты создать совершенный Редакториз.。
Поэтому он собрал Антонио Еще одна разработка Max , трое из них начали с 2021 Год начал работать полный рабочий день Zed разработка.
приезжать 2022 Год 3 Мун, Зед Команды перестают работать за закрытыми дверями и начинают строить Alpha Сообщество публичной бета-версии постепенно расширяет круг пользователей, чтобы подготовиться к публичной бета-версии. Сейчас эта стратегия кажется довольно хорошей, и это тоже правда. исходный код Деловому сообществу стоит изучить стратегию. Не да, и другие продукты полностью закончены и затем ориентированы на потребителей, но давайте попытаемся продвигать эту идею. Редактор Zed с открытым исходным кодом,Zed Сообщество представит новую группу пользователей.
Zed РедакторизИнструкции по лицензии с открытым исходным кодом:
Zed использовать Channels запустить программу под названием Fireside Hacks из Новый проект, существование Этот проект середина, глобальное развитие может существовать как публичный канал серединаи появляются из всех вместе в режиме реального времени Zed。
Я думаю, Зед Channel может быть Открытый исходный код社区贡献带来一добрый全новыйиз Способ:Открытый исходный код проекта от сопровождающих может пройти Zen Редакторы Новинки участников проекта, общение и рекомендации в режиме реального времени.。
Может быть и основательсуществовать Wrap Опыт работы в компании, Зед из Бизнес-модели Wrap похожий:Бесплатно для частных лиц и поэтапная оплата, командный сбор。В будущем, специфичные для предприятияиспользоватьпродукт。
Zed из Channel Функции в будущем также будут платными для частных лиц (да во время тестового периода полностью бесплатны), но я ожидаю, что их плата за использование будет не слишком дорогой, как это может быть для Открытого. исходный код Вклад сообщества открывает новый путь. Не разрушайте эту возможность, заплатив слишком много.
Zed Также доступен AI Функция, это также способ дополнительной оплаты. Шепот: Обернуть AI дабесплатноиз。
Зед также обещает никогда не размещать рекламные баннеры на нашем сайте.
Это все Zed Текущее видение бизнес-модели и надежды команды Zed Лучше приезжать, в конце концов, использование любит производить электричество и не может длиться долго.
Zed обладает высокой производительностью и поддерживает совместную работу нескольких человек. Секрет заключается в следующем технологическом стеке:
использовать Rust Поддерживает безопасный параллелизм и параллельную обработку на нескольких ядрах, не влияя на стабильность прикладной программы. на основе Rust асинхронный, будет CPU Интенсивные задачи вынесены из основного потока середина, таким образом достигается быстрота реагирования, которую невозможно достичь с помощью однопоточного Редакторсередина.
CRDTs(Conflict-Free Replicated Data Types,Бесконфликтное копирование типа) да специальная изданная структура,использовать Всуществоватьраспределенная системасередина синхронизации и хранения данных. Таким образом, несколько реплик могут обновляться независимо, а затем эти обновления объединяются, чтобы гарантировать, что все реплики в конечном итоге согласованы. CRDT из Ключевые характеристики да Они существуют в конструкции, позволяющей работать параллельно и независимо на разных узлах без необходимости немедленной центральной координации или блокировки середина.
CRDT из основных функций:
CRDT в основном делятся на две категории.:
CRDTs из Сценарии применения
существовать Zed Редакторсередина, каждый буфер (Редакториспользовать пользователь открывает содержимое файла из области памяти) один CRDTs структура。использовать CRDTs да Для поддержки нескольких пользователей в режиме реального времени функция редактирования. проходить CRDTs,Редактор может гарантировать, что даже если условия сети нестабильны из-за,Несколько изменений также можно объединить без конфликтов.,Поддерживать целостность и полноту документации. Это позволяет членам команды одновременно работать над одним и тем же документом.,Не нужно беспокоиться о конфликтах редактирования или отсутствующих файлах.
Tree-sitter да Zed Еще один соучредитель работ, также даразвивавший много Года. Он реализует парсеры специально для написания Редактор. Потому что исходный код часто меняется и требует быстрого повторного анализа, а правильно написанный код может быть неполным, но его все равно необходимо правильно анализировать. Другие существующие парсеры не обладают достаточной производительностью для поддержки этого сценария. Zed из Идеал.
Tree-sitter использовать контекстно-свободную грамматику точной формы для анализа принятого кода; использовать тип, называемый обобщенным. LR Разобрать (или GLR)изалгоритм,Поддерживает практически любойпрограммированиеязыкизграмматика。иПоддерживает инкрементный синтаксический анализ, позволяющий эффективно анализировать существующее содержимое после редактирования.,и具有一добрыйновый Иньизметоды восстановления ошибок,Даже если файл находится в недопустимом состоянии,Анализатор также может выдавать результаты использования.
Расширить знания:
Zed середина использовать Sum Tree Для хранения абстрактного синтаксического дерева (AST), созданного после анализа. существовать Zed середина также широко используется для хранения упорядоченных коллекций.
"Sum «дерево» (иtree) даа изданные структуры особого типа, имеющие B-дерево (B-дерево) и копирование при записи (при написании копировать) и характеристика. Эта структура данных обычно используется для эффективного управления переменными данными, особенно в тех случаях, когда необходимо оптимизировать производительность чтения и записи в сценариях середина.
Как работает дерево сумм:
Сценарии применения
Современные мониторы имеют частоту обновления от 60 приезжать 120 кадров в секунду,этотиметь в виду一индивидуальныйотвечатьиспользовать Каждый кадр программы имеет только8.33миллисекундаизчаснажимать пикселиприезжать Экран。этот Включает в себя большеновыйотвечатьиспользоватьстатус программы,Макет элементов пользовательского интерфейса,Наконец данные записываются в фреймбуфер.
Для выступления Редакториз занимайте это 8.33 Миллисекунды означают для пользователей плавный и плавный отклик. Поэтому Зед Решил разработать сам GUI Рамку и общую идею нужно будет визуализировать. Zed изиспользовать Пользовательский интерфейс из Написание собственных шейдеров для каждого конкретного графического примитива. По существу CPU Опишите атрибуты каждого примитива на основе данных, делегируя всю тяжелую работу GPU, существуют там параллельные рисунки UI элемент.
текущий Открытый исходный кодиз Zed GPUI Пережила капитальную реконструкцию и вторая версия. существуют первое издание GPUI серединаиспользоватьиздапохожий Flutter из макета. После реконструкции использование продукта станет более гибким. Flexbox Гибкая планировка. использовать изда Rust библиотека макетов DioxusLabs/taffy[6] 。
в настоящий момент Zed Поддерживает только Mac из-за причины, текущий нижний слой GPU Платформа поддерживает только Metal платформа, основанная на gfx-rs/metal-rs[7] из библиотеки для работы Metal 3D Graphics API. Но с точки зрения реализации исходного кода Зед существующие уже хорошо поработали над кроссплатформенной абстракцией в архитектуре, но, по оценкам, Windows и Linux Поддержка появится не скоро, поскольку код конкретной реализации платформы еще не написан.
Zed Автор: Team существует GPUI изпроцесссередина Самая большая проблема — это Rust изсобственность。Как использовать Rust изхарактеристика для динамического выражения реального мира в графическом интерфейсе, да Zed Большой вызов для команды。
Zed В настоящее время команда изучает методы существования: GPUI середина, следует использовать программу серединаиз Каждая модель или представление фактически представлены программой под названием AppContext
из Объект верхнего уровня владеет。当创建一индивидуальныйновыйизмодель или вид(сущности)час,Передача ему права собственности на приложение,Чтобы он мог участвовать в различных службах приложений и взаимодействовать с другими объектами.
use gpui::{prelude::*, App, AppContext, Model};
struct Counter {
count: usize,
}
fn main() {
App::new().run(|cx: &mut AppContext| {
let counter: Model<Counter> = cx.new_model(|_cx| Counter { count: 0 });
// Call `update` to access the model's state.
counter.update(
cx,
|counter: &mut Counter, cx: &mut ModelContext<Counter>|
{
counter.count += 1;
}
);
// ...
});
}
Для иллюстрации рассмотрим простой пример кода выше. По вызову run
чтобы запустить приложение и передать функцию обратного вызова (закрытие), которая получает AppContext
известииспользовать,Должен AppContext
Иметь все статусы прикладной программы, использовать. этот AppContext
да Доступ ко всем службам и входам уровня приложения, таким как открытие окон, отображение диалоговых окон и т. д. у него также есть new_model
Метод, существующий, вызывает его для создания модели и передачи права собственности на нее программе.
вызов new_model
Возвращает дескриптор модели, содержащий параметры типа, на основе типа объекта, на который указывает ссылка. В одиночку использовать это Model<Counter>
Дескриптор не может получить доступ к модели из состояния. Это просто ленивый идентификатор плюс метка типа во время компиляции, и он поддерживает базовый код, принадлежащий прикладной программе. Counter
Счётчик использования объекта.
Чтобы обновить счетчик, вызовите update
,Передайте ссылку на контекст в функцию обратного вызова. Для переменной счетчика referenceuse предусмотрена функция обратного вызова.,Вы можете использовать его для управления статусом.
GPUI Существуют также внутренние реализации режима наблюдателя и режима подписки для изменения состояния и распределения событий. Подробнее о графическом процессоре Внутреннее управление состояниемиз Контент можно просмотреть максимальноновыйиз Официальный блог:gpui-ownership[8] . Официальная команда раскроет более подробную информацию о реализации в будущем.
Здесь нет никакого сравнения.