Предложен проект создания сервера LLVM/Clang
Сервис будет предоставлять функциональность, которая традиционно присуща для IDE, но при этом задумка заключается в том, чтобы в рамках единой среды дать возможность работать сразу с несколькими разными ”плохо интегрированными в систему” редакторами с одновременным обеспечением связности с такими слоями LLVM, как Tooling library, libclang, а в потенциале этот сервис будет иметь свою собственную расширяемую через плагины структуру.
Сервис будет построен на базе уже традиционной клиент-серверной архитектуры, с тем единственным исключением, что у клиента будет реализована функциональность для запуска инициализирующей части сервера, если в процессе запуска клиента сервер окажется недоступен, при этом предполагается, что сам сервер будет находиться локально на одной машине с клиентом. Общий дизайн взаимодействия выбран таким, чтобы можно было реализовать socket-подобный обмен сообщениями, ориентированный на стандартный IPC-механизм организации взаимодействия между клиентом и сервером.
Поскольку взаимодействие планируется сделать унифицированным жестко в рамках фреймворка LLVM, коммуникационный протокол будет реализован в форме сериализированных сообщений, закодированных с помощью формата LLVM bitcode. Для всех наборов типов таких сообщений будут определены наборы возможных читателей и писателей подобных bitcode-сообщений. Главная роль сервера - это прием сообщений от клиента, совмещение разных конструкций в рамках Clang, ведение управляющей базы данных, а также результирующие ответы клиентам. Конечная цель – создание максимально упрощенного и эффективного IPC-механизма на базе LLVM, который будет давать следующие конечные преимущества:
- Обеспечение перезапускаемого, долгоживущего фонового процесса, который управляет кешированием, компиляцией, индексацией и бизнес-логикой;
- Определение канала и протокола межпроцессного взаимодействия для создания возможности взаимодействия инструментов разработки друг с другом. В перспективе IPC-слой будет позволять и межмашинное взаимодействие, но это задача не для начальных релизов сервера;
- Возможность автоматически воспользоваться преимуществами многоядерных процессоров;
- Поддержка исполнения очень быстрых запросов в интерактивно-интерфейсных режимах, например автодополнение.
- Предоставление набора базовых инструментов для взаимодействия с сервером через IPC;
- Предоставление стабильного интерфейса Си API (в виде подмножества вызовов libclang API) для взаимодействия с сервером через IPC;
- Обеспечение биндинга с Python на основе C API и протокола IPC;
- Полная совместимость и разделение ресурсов с libclang. Для этого планируется создание двух параллельных интерфейсов для одинаковой базовой функциональности;
- Эффективная интерфейсная стратегия для всех базовых OpenSource-редакторов. Как минимум должны хорошо поддерживаться VIM и Emacs, также планируется поддержка нескольких редакторов из Windows и Mac;
В настоящее время проект пока находится на стадии планирования и активного обсуждения. И хотя некоторые разработчики и заявили о том, что они уже приступили к работе над данным проектом, потребуется ощутимое время для согласования и реализации в полной мере как серверной, так и клиентской поддержки.
Источник: http://www.opennet.ru/opennews/art.shtml?num=34113
|
0 | Tweet | Нравится |
|