resharper vs roslyn
TRANSCRIPT
ReSharper vs Roslyn
Кирилл Скрыган, JetBrains
Overview
• Разработка с 2003 года• Visual Studio plugin +
Command Line• Расширяемый, более 100
плагинов• C#, VB, C++(!!!), JavaScript,
Html, Css, Xml, Json, Razor, TypeScript, Xaml, Regexp, ...
ReSharper• Разработка с 2010 года, в
production – с 2015.• Переписывался два раза • Visual Studio 2015 +
standalone• Расширяемый + уже
встроенный в CodeRush, DuoCode, Scrawl, …
• C#, VB only
Roslyn
Features
• >1500 code inspections• ~1000 quick fixes• ~100 refactorings (50 for C#)• >1000 feature actions
ReSharper• <100 code analyzers• ~20 code fixes
Roslyn
Базовая IDE функицональность
• Go to declaration• Code completion• Rename, extract method, introduce variable• Find Usages
Плавность UI потока
UIBackground model update
Project ModelProjects, Files, Folders, Project
References, Assemblies, …
AST Trees
Symbols IndexesWord index, persistentIdIndex, …
PSI Supporting cachesWeb symbols, Dependent files, Resources
Pool thread UI thread Pool thread
ReSharper Content Model
Pool thread Pool thread
ReadWriteLock
UI Thread
Pool thread
Interruptable Readlock
Typing!
WriteLock request
Interrupt!
Idle
Check for interrupt
ReSharper: contentions
UI Thread ждёт на WriteLock’е
Кэши что-то делают под непрерываемым Readlock’ом
Roslyn
• Neal M. Gafter, “Efficient immutable syntax representation with incremental change”
• Полностью Immutable• Максимально ленивый• Thread safe
Абстрактное синтаксическое дерево
if (a + b < c){ //smth}
Lexer + Parser
a + b
+a b
с<
a + b < c
Красно-зелёные деревья
• Зелёные ноды1. Не знают своего местоположения в буфере2. Знают только про своих детей3. Переиспользуемые4. Строятся снизу вверх• Красные ноды1. Построены поверх зелёных2. Знают про родителей3. Знают где находятся4. Лениво строятся сверху вниз
Roslyn: обновление зелёных деревьев
Работаем с Syntax Tree v.1
Typing!
Новое Syntax Tree v.2
Interrupt!
Idle
UI Thread
Pool thread
Roslyn: memory traffic problems
UI поток достаточно свободный
ReSharper’s TrieRoot
{JetBrains}
{System}
{Collections}
{ProjectModel}
ISolution IProject {Impl}
ProjectImpl SolutionElement
… …
List<T>
Будет ли в Roslyn’е Solution Wide Analysis?
Project1 Project2 Project3
Memory management
STORAGE
DirectMappedCache
Custom Marshallers
SymbolCache TreeNodeStubCache ...
ReSharper + Roslyn = love?
Roslyn + ReSharper vs. Users
Overview
• Ultimate IDE с огромной функциональностью
• «Сладкая» жизнь вместе с Roslyn в 32-битном процессе Visual Studio
ReSharper• Добротный, открытый
компилятор с небольшим количеством хорошо работающих фич
• Всё же не идеально быстрый• Наверняка будут пытаться
полностью сделать Roslyn out-of-process
Roslyn