[Nitra] Отчет на 18.02.2014
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.02.15 20:13
Оценка: 106 (9)
Сейчас ведутся работы над:
1. Nitra.LanguageCompiler.exe — компилятором поддержки IDE для языка. От универсального плагина решили отказаться. От части из-за большого количества хаков необходимых для обхода ограничений студии, а от части по просьбам трудящихся, так как не раз высказывались мнения, что лучше иметь отдельные плагины для каждого языка.

Nitra.LanguageCompiler.exe — это утилита командной строки которая принимает на вход файл вроде этого:
language NitraCSharp
{
  span class Char             = #FF0000;
  span class InlineComment    = #008000;
  span class MultilineComment = #008000;

  extension = .ncs;
  
  company = Jet Brains;

  syntax module CSharp.Main start rule CompilationUnit;
  syntax module CSharp.Linq;
}

плюс параметры командной строки:

/lang:Tests\NitraCSharp.nlang /prj+ /ns:Nitra.CSharp /out:Result /bin:..\..\..\VisualStudioExtensions\Nitra.VisualStudio\bin\Debug\ ..\..\..\Grammars\bin\Debug\CSharp.Grammar.dll

На выходе получается проект интеграции с VS. Скомпилировав его мы получаем *.vsix-файл который можно непосредственно инсталлировать в Студию.

В генерируемом проекте, на сегодня, поддерживаются:
1. Подсветка.
2. Фолдинг/оутлайнинг.
3. Отображение ошибок парсинга.
4. Автодополенине ключевых слов и прочих литералов (контекстное, по грамматике).

Степень готовности Nitra.LanguageCompiler.exe — почти завершен. Но его его нужно интегрировать в инсталлятор и процесс сборки. Так что пока код не перенесет в "мастер".

Над проектом работаю я.

2. Ведутся работы над расширяемостью парсера во время парсинга. Это нужно чтобы, например, реализовать на Nitra компилятор и IDE-плагин для Nemerle.

Степень готовности — проектирование. Объем работ там не велик. Думаю, за месяц-другой завершим.

Над проектом работает Wolfhaund.

3. Синтаксис декларативного отображения дерева разбора на декларации (что-то вроде AST-а). Это часть подстистемы типизации. Еще нужно создать отображение с деклараций на символы и язык описания символов.

Степень готовности — в работе. Сейчас Hardcase прикручивает поддержку специализированного паттерн-матчинга, чтобы можно было осуществлять не тривиальное отображение.

Работы ведет Hardcase.

Дальнейшие усилия будут сосредоточены на подсистеме связывания и типизации, а так еж интеграции всего этого в IDE и ReSharper.

По завершению этого этапа можно будет начать разработку новой версии Немерла (без хаков и компромисво).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 18.02.2015 21:13 VladD2 . Предыдущая версия .
Re: [Nitra] Отчет на 18.02.2014
От: btn1  
Дата: 19.02.15 17:32
Оценка:
Ура, новости!

Здравствуйте, VladD2, Вы писали:
VD>1. Nitra.LanguageCompiler.exe — компилятором поддержки IDE для языка. От универсального плагина решили отказаться.

Имеется ввиду "один бинарь под все студии" или что-то ещё?

VD>Отчасти из-за большого количества хаков , необходимых для обхода ограничений студии....


Вот тут не совсем понятно. Если ограничения есть, они в любом случае должны хакаться/обходиться — разве это связано с версиями?

VD>, а от части по просьбам трудящихся, так как не раз высказывались мнения, что лучше иметь отдельные плагины для каждого языка.


....и тут мы окончательно запутываемся в том, по какому критерию мы теперь разделяем плагины! Какие языкИ (мн.ч.) имеются ввиду??? Я думал, у нас будущее состоит из одного языка — Нитры, для которого будут генериться плагины, отдельно для студий 2008/2010/2013 и теперь уже 2015. "Нитра" — здесь я сильно упростил, имея ввиду "конструктор языка + язык на этом конструкторе, сильно напоминающий Немерле, но на ступень выше".

VD>2. Ведутся работы над расширяемостью парсера во время парсинга. Это нужно чтобы, например, реализовать на Nitra компилятор и IDE-плагин для Nemerle.


Не совсем понятно... "расширяемый парсер" ведь и так был киллер-фичей Немерли, не? В смысле мы делаем "using Модуль-Синтаксис" и у нас расширенный парсер для нового синтаксиса.

VD>Степень готовности — проектирование. Объем работ там не велик. Думаю, за месяц-другой завершим.


А!А!А!А!! два месяца — это "невелик"?! На фулл-тайме это очень даже велик!

VD>3. Синтаксис декларативного отображения дерева разбора на декларации (что-то вроде AST-а).


А можно написать что это за зверь? "декларации" — это ж объявления всяких штук в языке — переменных, классов.

VD>Дальнейшие усилия будут сосредоточены на подсистеме связывания и типизации


Ух ты! А как конструктор может связывать символы с типами, если он просто конструктор и не знает, кто в языке кто? Это ж проектировщик языка решает: у нас есть слово в кавычках — значит это название типа.

VD>По завершению этого этапа можно будет начать разработку новой версии Немерла (без хаков и компромисво).


Круто! Т.е. текущая стадия завершается созданием полноценного конструктора?
Re: [Nitra] Отчет на 18.02.2014
От: SergASh  
Дата: 19.02.15 17:51
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>По завершению этого этапа можно будет начать разработку новой версии Немерла (без хаков и компромисво).


Теперь контрибьюторы Немерла должны будут иметь лицензию Nitra ?
Re[2]: [Nitra] Отчет на 18.02.2014
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.02.15 20:15
Оценка:
Здравствуйте, btn1, Вы писали:

B>Имеется ввиду "один бинарь под все студии" или что-то ещё?


Ранее (точнее, пока) была одна интеграция поддерживающая любые языки созданные на базе Nitra. Нужно было только прописать язык в NitraGlobalConfig.xml.

B>Вот тут не совсем понятно. Если ограничения есть, они в любом случае должны хакаться/обходиться — разве это связано с версиями?


Студия расчитана на статическую регистрацию плагинов для каждого языка. Это верно для всех видов расширения (MPF, MEF, ReSharper plagin).

B>....и тут мы окончательно запутываемся в том, по какому критерию мы теперь разделяем плагины!


Один язык — один плагин. Под языком понимается формат файла. Ну, там .cs, .cshtmp, .n, .json...

B>Какие языкИ (мн.ч.) имеются ввиду??? Я думал, у нас будущее состоит из одного языка — Нитры,


Ну, дык разобрался бы давно что такое Nitra. Это мета-язык. У нее есть свой формат .nitra и для него будет свой, отдельный плагин.

B>...для студий 2008/2010/2013 и теперь уже 2015.


Что касается поддержки версий студий, то тут есть вопросы. Возможно мы отсечем старые версии студий. Причем пока не ясно будет ли это начиная с VS 2013 или сразу с VS 2015. А может будем поддерживать начиная с VS 2010.

B>Не совсем понятно... "расширяемый парсер" ведь и так был киллер-фичей Немерли, не? В смысле мы делаем "using Модуль-Синтаксис" и у нас расширенный парсер для нового синтаксиса.


Сейчас нет механизма чтобы реализовать нечто вроде того что используется в Nemerle, когда using в файле может изменить грамматику "на ходу". Сейчас можно только перед парсингом собрать парсер из разных модулей. Сейчас же работа ведется непосредственно над средствами для реализации using-расширяемости или чего-то вроде этого.

B>А!А!А!А!! два месяца — это "невелик"?! На фулл-тайме это очень даже велик!


Сядь, попробуй сделать. Может получится быстрее. Я на всякий случай дал запас.

B>А можно написать что это за зверь? "декларации" — это ж объявления всяких штук в языке — переменных, классов.


Некоторое описание будет в статья которую скоро выложим здесь. В двух словах — это нечто воде АСТ-а. Который имеет более простую структуру, над которым удобно производить вычисления и который будет автоматически сериализовываться в рамках солюшена и загружаться при его открытии. В РеШарпере рукописные аналоги называются "кэшами".

Для каждого файла будет создавать набор деклараций который сериализуется и доступен все время. Ну, а они, в свою очередь, будут использоваться для автоматического получения символов. Символы же это метаинформация. Нечто вроде компайл-тайм рефлексии или немерловых билдеров (TypeBuilder, MethodBuilder, ...).

Мы предоставим не захардкоженные решения (как в Немерле), а инструмент позволюящий легко получать свои типы символов и проецировать на них разбираемый код. Общая схема: код в виде текста -> декларации -> символы. Дерево деклараций создается для каждого файла. Символы уже не привязаны к файлам. Например, паршал-класс может иметь несколько деклараций, но один символ.

Так же будет подсистема связывания которая позволит получить ссылку на символ для любого имени в коде.

B>Ух ты! А как конструктор может связывать символы с типами, если он просто конструктор и не знает, кто в языке кто? Это ж проектировщик языка решает: у нас есть слово в кавычках — значит это название типа.


Я не понял что/кто понимается под конструктором. Так что отвечу на счет типов. Типы — это один из видов символов. Мы не будем выделять типы отдельно. Мы предоставим инфраструктуру для описания символов и отображения на них кода. Поддержку именно типов можно будет поместить в библиотеки.

B>Круто! Т.е. текущая стадия завершается созданием полноценного конструктора?


Что за конструктор? Что ты под этим понимаешь?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: [Nitra] Отчет на 18.02.2014
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.02.15 21:32
Оценка:
Здравствуйте, SergASh, Вы писали:

SAS>Теперь контрибьюторы Немерла должны будут иметь лицензию Nitra ?


У Nitra и Nemerle лицензия — MIT. Плюс использование языков созданных на Nitra не требует отдельных лицензий.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: [Nitra] Отчет на 18.02.2014
От: s22  
Дата: 20.02.15 15:33
Оценка:
Здравствуйте, VladD2, Вы писали:

>> Некоторое описание будет в статья которую скоро выложим здесь.

когда примерно?

есть пример со всеми возможностями парсера?
Re: [Nitra] Отчет на 18.02.2014
От: STDray http://stdray.livejournal.com
Дата: 24.02.15 17:14
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Сейчас ведутся работы над:

VD>1. Nitra.LanguageCompiler.exe — компилятором поддержки IDE для языка. От универсального плагина решили отказаться. От части из-за большого количества хаков необходимых для обхода ограничений студии, а от части по просьбам трудящихся, так как не раз высказывались мнения, что лучше иметь отдельные плагины для каждого языка.

VD>Nitra.LanguageCompiler.exe — это утилита командной строки которая принимает на вход файл вроде этого:

VD>...
VD>На выходе получается проект интеграции с VS. Скомпилировав его мы получаем *.vsix-файл который можно непосредственно инсталлировать в Студию.

VD>В генерируемом проекте, на сегодня, поддерживаются:

VD>1. Подсветка.
VD>2. Фолдинг/оутлайнинг.
VD>3. Отображение ошибок парсинга.
VD>4. Автодополенине ключевых слов и прочих литералов (контекстное, по грамматике).

1) Можно ли как-то собрать интеграцию со своим текстовым пропроцессором (в продолжение разговора про языки с indented синтаксисом)?
2) Я правильно понимаю, генерируется только поддержка студией для определенных расширений файлов, но не для новых типов проектов?
3) Существуют ли механизмы для создания автодополнения руками?
Re[2]: [Nitra] Отчет на 18.02.2014
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.02.15 20:23
Оценка:
Здравствуйте, STDray, Вы писали:

STD>1) Можно ли как-то собрать интеграцию со своим текстовым пропроцессором (в продолжение разговора про языки с indented синтаксисом)?


В принципе, можно. Интеграция генерируется по шаблонам лежащим тут.
В них можно подменить создание экземпляра класса Language на собственный наследник и реализовать в его методе Parse() препроцессирование.

Генерируемый код использует проект Nitra.VisualStudio в котором лежит универсальный код поддержки IDE.

Если что не так можно править этот проект и проект генератора и предлагать нам свои пул-реквесты. Если что можно трясти меня по скайпу.

STD>2) Я правильно понимаю, генерируется только поддержка студией для определенных расширений файлов, но не для новых типов проектов?


Пока, да. В ближайшее время мы займемся и поддержкой проектной системы. Только код поддержки проектов для новых языков мы, наверно, создавать не будем. Мы будем поддерживать эти языки в любых проектах (например, в C#-ном). Но построение символов для всего проекта (и даже для солюшена) поддерживаться будет.

STD>3) Существуют ли механизмы для создания автодополнения руками?


Студию можно расширять независимо. Можно сделать свой CompletionSourceProvider который будет добавлять элементы в список дополнения.

В будущем мы будем автоматически предоставлять автодополнение на базе типизации. Но, всегда можно сделать свой вариант реализовав ICompletionSourceProvider и другие (к сожалению это не тривиально) интерфейсы.

ЗЫ

В любом случае мы открыты для сотрудничества и готовы допиливать код так чтобы он был максимально универсален. Ну и, конечно же, мы готовы принимать пул-реквесты с доработками. Так что Nitra — это не закрытый ящик.

Так что можешь заняться поддержкой препроцессора, а мы поможем чем сможем.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: [Nitra] Отчет на 18.02.2014
От: s22  
Дата: 08.04.15 10:58
Оценка:
Здравствуйте, VladD2, Вы писали:

АП?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.