Предложен проект создания сервера LLVM/Clang Предложен (http://lists.cs.uiuc.edu/pipermail/cfe-dev/2012-June/022028.html) для реализации проект постоянного кеширующего сервиса Clang Server (clangd) (https://docs.google.com/document/d/1kNv2jJK0I0JGnxJxU6w5lUOlrIBoecU4fi9d_o5e2-c/edit) для обслуживания инфраструктуры из множества разнородных, сложных и интерактивных C++ инструментов. В частности этот сервисный слой позволяет обобщить и построить в рамках libclang удобное взаимодействие множества самых разнородных редакторов, интегрированных сред разработки (IDE) и популярных Unix-инструментов разработки. Этот сервис будет реализован строго в рамках Clang/LLVM (http://clang.llvm.org/) и будет поддерживать разработку для языков C, C++, Obj-C и Obj-C++. Сервис будет предоставлять функциональность, которая традиционно присуща для IDE, но при этом задумка заключается в том, чтобы в рамках единой среды дать возможность работать сразу с несколькими разными ”плохо интегрированными в систему” редакторами с одновременным обеспечением связности с такими слоями LLVM, как Tooling library, libclang, а в потенциале этот сервис будет иметь свою собственную расширяемую через плагины структуру. Сервис будет построен на базе уже традиционной клиент-серверной архитектуры, с тем единственным исключением, что у клиента будет реализована функциональность для запуска инициализирующей части сервера, если в процессе запуска клиента сервер окажется недоступен, при этом предполагается, что сам сервер будет находиться локально на одной машине с клиентом. Общий дизайн взаимодействия выбран таким, чтобы можно было реализовать socket-подобный обмен сообщениями, ориентированный на стандартный IPC-механизм организации взаимодействия между клиентом и сервером. Поскольку взаимодействие планируется сделать унифицированным жестко в рамках фреймворка LLVM, коммуникационный протокол будет реализован в форме сериализированных сообщений, закодированных с помощью формата LLVM bitcode (http://llvm.org/docs/BitCodeFormat.html). Для всех наборов типов таких сообщений будут определены наборы возможных читателей и писателей подобных bitcode-сообщений. Главная роль сервера - это прием сообщений от клиента, совмещение разных конструкций в рамках Clang, ведение управляющей базы данных, а также результирующие ответы клиентам. Конечная цель – создание максимально упрощенного и эффективного IPC-механизма на базе LLVM, который будет давать следующие конечные преимущества: - Обеспечение перезапускаемого, долгоживущего фонового процесса, который управляет кешированием, компиляцией, индексацией и бизнес-логикой; - Определение канала и протокола межпроцессного взаимодействия для создания возможности взаимодействия инструментов разработки друг с другом. В перспективе IPC-слой будет позволять и межмашинное взаимодействие, но это задача не для начальных релизов сервера; - Возможность автоматически воспользоваться преимуществами многоядерных процессоров; - Поддержка исполнения очень быстрых запросов в интерактивно-интерфейсных режимах, например автодополнение. - Предоставление набора базовых инструментов для взаимодействия с сервером через IPC; - Предоставление стабильного интерфейса Си API (в виде подмножества вызовов libclang API) для взаимодействия с сервером через IPC; - Обеспечение биндинга с Python на основе C API и протокола IPC; - Полная совместимость и разделение ресурсов с libclang. Для этого планируется создание двух параллельных интерфейсов для одинаковой базовой функциональности; - Эффективная интерфейсная стратегия для всех базовых OpenSource-редакторов. Как минимум должны хорошо поддерживаться VIM и Emacs, также планируется поддержка нескольких редакторов из Windows и Mac; В настоящее время проект пока находится на стадии планирования и активного обсуждения. И хотя некоторые разработчики и заявили о том, что они уже приступили к работе над данным проектом, потребуется ощутимое время для согласования и реализации в полной мере как серверной, так и клиентской поддержки. 16.06.2012 http://www.opennet.ru/opennews/art.shtml?num=34113 http://www.phoronix.com/scan.php?page=news_item&px=MTEyMDQ