resharper vs roslyn

Post on 17-Jul-2015

307 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

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

/kskrygan

Кирилл Скрыган, JetBrains

Вопросы?

zombieprogramming.blogspot.com

Kirill.Skrygan@jetbrains.com

top related