Является ли модель Roslyn настолько ориентированной на С#/VB.NET, что она исключает анализ XAML сейчас и в будущем?
Я только что прочитал запись в блоге JetBrains (Resharper), в которой говорится, что Roslyn никогда не мог анализировать XAML:
Другим основным отличием является то, что Roslyn охватывает ровно два языка, С# и VB.NET, тогда как архитектура ReSharper является многоязычной
(цитата из блога resharper)
Для непосвященного Resharper может быть очень хороший статический анализ кода XAML, позволяющий завершить и рефакторинг кода вместе с С#.
Мне любопытно. Является ли общая архитектура Roslyn достаточной для распространения на другие языки, кроме С# и VB.Net, таких как XAML, или это очень специфично.
Чтобы не предполагать, что это мнение основано, я ищу доказательства в источнике. Очевидно, что любой код может быть реорганизован/переработан с течением времени, чтобы соответствовать другим целям, но меня интересуют текущие доказательства в источнике или ссылки на цитаты из Roslyn develepors, указывающие на то, что существует намерение расширить Roslyn как механизм анализа на другие языки, такие как XAML.
Ответы
Ответ 1
Трудно учить "языки" в параграфе или двух. Люди склонны называть многие вещи "языком", и в каком-то очень общем смысле они могут быть, но в реальном мире программирования "язык" означает язык программирования. В этом мире XAML вовсе не является языком :-), потому что вы не можете писать в нем код.
XAML - это формат описания данных, и да, в самом общем смысле его можно назвать языком (имеет некоторые базовые конструкции, правила их комбинации, а результат обозначает что-то значимое). Но у него нет даже собственного синтаксиса - это XML. Так что это относится к группе, скажем, MSBuild и HTML. Вид анализа, который вы могли бы сделать в теории, совершенно другой и очень сильно связан с реальной областью, описываемой форматом.
Для файлов MSBuild вы можете написать некоторый код для анализа зависимостей, которые он обозначает и говорит, что попытайтесь найти и указать на это, но все, что вам для этого нужно, - это несколько стандартных классов .NET. Вам не нужен синтаксический анализатор, у вас нет генерации кода и т.д. Вы просто загружаете XML, как и любой другой, и у вас уже есть все, и вы путешествуете по кругу и находите отношения. То же самое для XAML. Для всех на основе XML "Roslyn" - это XmlDocument или XPathDocument.
Roslyn делает все возможное, чтобы создать древовидную структуру, которая дает вам ту же свободу передвижения, которую вы получаете, просто загружая документ XAML в XmlDocument.
Ответ 2
Я сделал простой анализ недавно скопированной копии исходного кода Roslyn (в частности, каталога Compilers
), чтобы узнать, сколько кода разделено между языками и сколько зависит от языка.
Результаты:
- всего 3072 файлов кода (расширения .cs и .vb), общая сумма которых составляет 78 МБ.
- из этого каталога
CSharp
содержит 1060 файлов кода, стоимость 30 МБ
- каталог
VisualBasic
содержит 1165 файлов кода, что составляет 41 МБ
- который оставляет 847 файлов и 7 МБ для общего кода
Итак, как вы можете видеть, два компилятора разделяют только относительно небольшую часть своего кода. Если вы хотите создать компилятор для нового языка, то его использование на Roslyn вам не поможет.