resharper vs roslyn

22
ReSharper vs Roslyn Кирилл Скрыган, JetBrains

Upload: codefest

Post on 17-Jul-2015

307 views

Category:

Software


0 download

TRANSCRIPT

Page 1: ReSharper vs Roslyn

ReSharper vs Roslyn

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

Page 2: ReSharper vs Roslyn
Page 3: ReSharper vs Roslyn

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

Page 4: ReSharper vs Roslyn

Features

• >1500 code inspections• ~1000 quick fixes• ~100 refactorings (50 for C#)• >1000 feature actions

ReSharper• <100 code analyzers• ~20 code fixes

Roslyn

Page 5: ReSharper vs Roslyn

Базовая IDE функицональность

• Go to declaration• Code completion• Rename, extract method, introduce variable• Find Usages

Page 6: ReSharper vs Roslyn

Плавность UI потока

UIBackground model update

Page 7: ReSharper vs Roslyn

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

Page 8: ReSharper vs Roslyn

UI Thread

Pool thread

Interruptable Readlock

Typing!

WriteLock request

Interrupt!

Idle

Check for interrupt

Page 9: ReSharper vs Roslyn

ReSharper: contentions

UI Thread ждёт на WriteLock’е

Кэши что-то делают под непрерываемым Readlock’ом

Page 10: ReSharper vs Roslyn

Roslyn

• Neal M. Gafter, “Efficient immutable syntax representation with incremental change”

• Полностью Immutable• Максимально ленивый• Thread safe

Page 11: ReSharper vs Roslyn

Абстрактное синтаксическое дерево

if (a + b < c){ //smth}

Lexer + Parser

a + b

+a b

с<

a + b < c

Page 12: ReSharper vs Roslyn

Красно-зелёные деревья

• Зелёные ноды1. Не знают своего местоположения в буфере2. Знают только про своих детей3. Переиспользуемые4. Строятся снизу вверх• Красные ноды1. Построены поверх зелёных2. Знают про родителей3. Знают где находятся4. Лениво строятся сверху вниз

Page 13: ReSharper vs Roslyn

Roslyn: обновление зелёных деревьев

Page 14: ReSharper vs Roslyn

Работаем с Syntax Tree v.1

Typing!

Новое Syntax Tree v.2

Interrupt!

Idle

UI Thread

Pool thread

Page 15: ReSharper vs Roslyn

Roslyn: memory traffic problems

UI поток достаточно свободный

Page 16: ReSharper vs Roslyn

ReSharper’s TrieRoot

{JetBrains}

{System}

{Collections}

{ProjectModel}

ISolution IProject {Impl}

ProjectImpl SolutionElement

… …

List<T>

Page 17: ReSharper vs Roslyn

Будет ли в Roslyn’е Solution Wide Analysis?

Project1 Project2 Project3

Page 18: ReSharper vs Roslyn

Memory management

STORAGE

DirectMappedCache

Custom Marshallers

SymbolCache TreeNodeStubCache ...

Page 19: ReSharper vs Roslyn

ReSharper + Roslyn = love?

Page 20: ReSharper vs Roslyn

Roslyn + ReSharper vs. Users

Page 21: ReSharper vs Roslyn

Overview

• Ultimate IDE с огромной функциональностью

• «Сладкая» жизнь вместе с Roslyn в 32-битном процессе Visual Studio

ReSharper• Добротный, открытый

компилятор с небольшим количеством хорошо работающих фич

• Всё же не идеально быстрый• Наверняка будут пытаться

полностью сделать Roslyn out-of-process

Roslyn

Page 22: ReSharper vs Roslyn

/kskrygan

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

Вопросы?

zombieprogramming.blogspot.com

[email protected]