SlideShare une entreprise Scribd logo
1  sur  40
Télécharger pour lire hors ligne
Taking ReSharper
out of process
Matt Ellis
@citizenmatt
Why build a .NET IDE now?
How do you build a .NET IDE?
How do you build a 

cross platform .NET IDE?
How do you build a 

cross platform IDE?
Hello IntelliJ
Hello IntelliJ IDEA
Hello IntelliJ Platform
https://github.com/JetBrains/intellij-community
Uh-oh. JVM
How do you build a .NET IDE in the JVM?
Options?
ReSharper out of process
• Language server
• Headless. Command line process. IntelliJ provides the UI

Client/server communication
• Cross platform

.NET Framework on Windows. Mono on MacOS and Linux
• Removes Visual Studio in-process constraints

Memory usage. 64 bit
• Continued investment in ReSharper
Thick Client? Thin Client?
• IntelliJ provides high level UI elements, functionality and infrastructure

Editors, Alt+Enter, completion, Find Usages, test runner, debugging…

Searchable tree views, popup dialogs, settings pages…
• No knowledge of syntax trees or semantic model

Parsing, resolving, syntax highlighting, folding, inspections, refactoring,
code completion, etc. all owned by ReSharper
• (Some standalone functionality)

Find in path, REST client, Databases, VCS
• Optimisations

Lexing for initial syntax highlighting
Alt+Enter
• IntelliJ provides editor, text caret, and tracks Alt+Enter keypress
• Asks current language for items
• Current language is an IntelliJ facade for ReSharper out-of-proc

Asks ReSharper for items at current location
• ReSharper returns list of display names, icons and submenus
• IntelliJ displays items in Alt+Enter menu
Inspection highlights
• IntelliJ provides infrastructure to display “squigglies”
• Opposite direction, pushed from ReSharper
• Source file is opened, or modified

IntelliJ notifies ReSharper
• ReSharper analyses the file, runs inspections, gathers highlights
• ReSharper publishes list of range, severity and tooltip
• IntelliJ displays squiggles
Modifying source
• Bi-directional
• User typing

IntelliJ publishes changes as delta of typed characters at offset
• ReSharper rewriting code

Publishes delta as chunk of code

Renamed variable, new method, additional `using` statement, etc.
Observations
• Enabling functionality, rather than implementing it

Can show all Alt+Enter menus, run all inspections, rewrite code in
context actions and quick fixes
• As long as there is no UI…
• The data is very lightweight
IPC - RPC?
• Boilerplate - define calls and messages for each required action
• Imperative
• Conflict resolution?

Who wins? How to reset/resync state?
• JSON? Protobuf?
Client

(IntelliJ)
Server

(ReSharper)
MVVM
• Only send data required for UI components
• Lightweight View Model data
View

(IntelliJ)
Model

(ReSharper)
View

Model
Hierarchical View Model
Shared View Model
• Single view of state of entire IDE

Shared between front end and back end

Keep in sync. Only need to update changed fields
• Becomes declarative

No more boilerplate messages, just update View Model
• Reactive/observable. Composable

Subscribe for changes
• Two way

Client and server can both contribute to View Model

E.g. button click/refactoring results
• Tightly coupled? 🤔
Conflict resolution
• The client is always right
• Each value has a version
• Version increments only when client changes value
• If server changes value, no version update
• Only accept change with same or newer version
“foo”/1
“foo”/1
“bar”/2
“bar”/2
“quux”/2
“quux”/2
“wibble”/3 “blah”/2
“wibble”/3
Client
(IntelliJ)
Server
(ReSharper)
Wire protocol
• Becomes trivial - no messages, just deltas

Don’t change the protocol, just extend model
• Supports batching
• Serialisation by code generation via DSL
• Binary wire protocol, with logging
• Sockets
Rider Framework
• Two libraries, C# and Kotlin

Provides primitives and handles communication
• Kotlin based DSL to describe View Model
• Generates real code - C# and Kotlin

Interfaces, implementation and serialisation
• Business logic subscribes to and manipulates “real model”

Magic happens
View Model building blocks
• Lifetime
• Signals (events)
• Properties (observable value)
• Maps (observable collections)
• Fields (immutable)
• Call (async RPC)
• string
• int
• enum
• classdef (node)
• structdef (data)
Lifetime
class Lifetime {
static Lifetime Eternal;
void Add(Action action);
}
class LifetimeDef {
ctor(Lifetime parent);
Lifetime Lifetime;
void Terminate();
}
Dual of IDisposable
Signal
// Produce event
interface ISource<T> {
void Fire(T value);
}
// Subscribe to event
interface ISink<T> {
void Advise(Lifetime l, Action<T> handler);
}
// Composable event
interface ISignal<T> : ISource<T>, ISink<T> {
}
Properties
// Subscribe to event
interface ISink<T> {
void Advise(Lifetime l, Action<T> handler);
}
// Observable property
interface IProperty<T> : ISink<T> {
T Value { get; set; }
void View(Lifetime l, Action<Lifetime, T> action);
}
Stateful signal
Maps
class MapEvent<K,V> {
enum Kind { Add, Remove }
Kind kind;
K key;
V value;
}
// Observable collection
interface IViewableMap<K,V>
: IDictionary<K,V>, ISink<MapEvent<K,V >> {
void View(Lifetime l, Action<Lifetime, K, V> action);
}
Kotlin DSL
fun classdef (
name : String,
init : ClassdefNode.() -> Unit
)
classdef (
“Foo”,
{
myClassdef.map(…)
	 }
)
classdef (
“Foo”,
{
map(…)
}
)
Kotlin DSL
fun classdef (
name : String,
init : ClassdefNode.() -> Unit
)
classdef (
“Foo”,
{ lambda_expression }
)
classdef (“Foo”) {
lambda_expression
}
object Solution {
init {
map(“editors”, string, classdef(“Editor”) {
list(“document”, char)
property(“caret”, int)
map(“highlighters”, Range, Highlighter)
property(“completion”, Completion.nullable)
})
voidSource(“build”)
}
val Range = classdef(“Range”) {
field(“start”, int)
field(“length”, int)
}
val Highlighter = classdef(“Highlighter”) {
…
}
}
Challenges
• Rider’s Project Model very different to IntelliJ

Replace Project view with Solution Explorer

IntelliJ uses “project” where we expect “solution”
• What about duplicate language implementations?

E.g. JavaScript - WebStorm or ReSharper?

C++ CLion or ReSharper?
• Plugins are more complex

Front end and back end
• ReSharper out of process with Visual Studio? 🙊
Thanks!
Matt Ellis
@citizenmatt
www.jetbrains.com/rider

Contenu connexe

Similaire à Rider - Taking ReSharper out of Process

NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...Maarten Balliauw
 
.Net overviewrajnish
.Net overviewrajnish.Net overviewrajnish
.Net overviewrajnishRajnish Kalla
 
Use C++ and Intel® Threading Building Blocks (Intel® TBB) for Hardware Progra...
Use C++ and Intel® Threading Building Blocks (Intel® TBB) for Hardware Progra...Use C++ and Intel® Threading Building Blocks (Intel® TBB) for Hardware Progra...
Use C++ and Intel® Threading Building Blocks (Intel® TBB) for Hardware Progra...Intel® Software
 
E yantra robot abstractions
E yantra robot abstractionsE yantra robot abstractions
E yantra robot abstractionsAkshar Desai
 
Summer training vhdl
Summer training vhdlSummer training vhdl
Summer training vhdlArshit Rai
 
Unmanaged Parallelization via P/Invoke
Unmanaged Parallelization via P/InvokeUnmanaged Parallelization via P/Invoke
Unmanaged Parallelization via P/InvokeDmitri Nesteruk
 
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...Sang Don Kim
 
Ice mini guide
Ice mini guideIce mini guide
Ice mini guideAdy Liu
 
El camino a las Cloud Native Apps - Introduction
El camino a las Cloud Native Apps - IntroductionEl camino a las Cloud Native Apps - Introduction
El camino a las Cloud Native Apps - IntroductionPlain Concepts
 
Summer training vhdl
Summer training vhdlSummer training vhdl
Summer training vhdlArshit Rai
 
02 direct3 d_pipeline
02 direct3 d_pipeline02 direct3 d_pipeline
02 direct3 d_pipelineGirish Ghate
 
Windows 8 für .net Entwickler
Windows 8 für .net EntwicklerWindows 8 für .net Entwickler
Windows 8 für .net EntwicklerPatric Boscolo
 
An Open Source Workbench for Prototyping Multimodal Interactions Based on Off...
An Open Source Workbench for Prototyping Multimodal Interactions Based on Off...An Open Source Workbench for Prototyping Multimodal Interactions Based on Off...
An Open Source Workbench for Prototyping Multimodal Interactions Based on Off...Jean Vanderdonckt
 
The Evolution of Async-Programming on .NET Platform (.Net China, C#)
The Evolution of Async-Programming on .NET Platform (.Net China, C#)The Evolution of Async-Programming on .NET Platform (.Net China, C#)
The Evolution of Async-Programming on .NET Platform (.Net China, C#)jeffz
 
dot net technology
dot net technologydot net technology
dot net technologyImran Khan
 
Using Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systemsUsing Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systemsSerge Stinckwich
 
Summer training vhdl
Summer training vhdlSummer training vhdl
Summer training vhdlArshit Rai
 
Summer training vhdl
Summer training vhdlSummer training vhdl
Summer training vhdlArshit Rai
 

Similaire à Rider - Taking ReSharper out of Process (20)

NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
 
.Net overviewrajnish
.Net overviewrajnish.Net overviewrajnish
.Net overviewrajnish
 
Fluttering
FlutteringFluttering
Fluttering
 
E sampark with c#.net
E sampark with c#.netE sampark with c#.net
E sampark with c#.net
 
Use C++ and Intel® Threading Building Blocks (Intel® TBB) for Hardware Progra...
Use C++ and Intel® Threading Building Blocks (Intel® TBB) for Hardware Progra...Use C++ and Intel® Threading Building Blocks (Intel® TBB) for Hardware Progra...
Use C++ and Intel® Threading Building Blocks (Intel® TBB) for Hardware Progra...
 
E yantra robot abstractions
E yantra robot abstractionsE yantra robot abstractions
E yantra robot abstractions
 
Summer training vhdl
Summer training vhdlSummer training vhdl
Summer training vhdl
 
Unmanaged Parallelization via P/Invoke
Unmanaged Parallelization via P/InvokeUnmanaged Parallelization via P/Invoke
Unmanaged Parallelization via P/Invoke
 
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
[Td 2015] what is new in visual c++ 2015 and future directions(ulzii luvsanba...
 
Ice mini guide
Ice mini guideIce mini guide
Ice mini guide
 
El camino a las Cloud Native Apps - Introduction
El camino a las Cloud Native Apps - IntroductionEl camino a las Cloud Native Apps - Introduction
El camino a las Cloud Native Apps - Introduction
 
Summer training vhdl
Summer training vhdlSummer training vhdl
Summer training vhdl
 
02 direct3 d_pipeline
02 direct3 d_pipeline02 direct3 d_pipeline
02 direct3 d_pipeline
 
Windows 8 für .net Entwickler
Windows 8 für .net EntwicklerWindows 8 für .net Entwickler
Windows 8 für .net Entwickler
 
An Open Source Workbench for Prototyping Multimodal Interactions Based on Off...
An Open Source Workbench for Prototyping Multimodal Interactions Based on Off...An Open Source Workbench for Prototyping Multimodal Interactions Based on Off...
An Open Source Workbench for Prototyping Multimodal Interactions Based on Off...
 
The Evolution of Async-Programming on .NET Platform (.Net China, C#)
The Evolution of Async-Programming on .NET Platform (.Net China, C#)The Evolution of Async-Programming on .NET Platform (.Net China, C#)
The Evolution of Async-Programming on .NET Platform (.Net China, C#)
 
dot net technology
dot net technologydot net technology
dot net technology
 
Using Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systemsUsing Smalltalk for controlling robotics systems
Using Smalltalk for controlling robotics systems
 
Summer training vhdl
Summer training vhdlSummer training vhdl
Summer training vhdl
 
Summer training vhdl
Summer training vhdlSummer training vhdl
Summer training vhdl
 

Plus de citizenmatt

How to Parse a File (NDC London 2018)
How to Parse a File (NDC London 2018)How to Parse a File (NDC London 2018)
How to Parse a File (NDC London 2018)citizenmatt
 
How to Parse a File (DDD North 2017)
How to Parse a File (DDD North 2017)How to Parse a File (DDD North 2017)
How to Parse a File (DDD North 2017)citizenmatt
 
The how-dare-you-call-me-an-idiot’s guide to the .NET Standard (NDC London 2017)
The how-dare-you-call-me-an-idiot’s guide to the .NET Standard (NDC London 2017)The how-dare-you-call-me-an-idiot’s guide to the .NET Standard (NDC London 2017)
The how-dare-you-call-me-an-idiot’s guide to the .NET Standard (NDC London 2017)citizenmatt
 
.NET Core Blimey! Windows Platform User Group, Manchester
.NET Core Blimey! Windows Platform User Group, Manchester.NET Core Blimey! Windows Platform User Group, Manchester
.NET Core Blimey! Windows Platform User Group, Manchestercitizenmatt
 
.NET Core Blimey! (Shropshire Devs Mar 2016)
.NET Core Blimey! (Shropshire Devs Mar 2016).NET Core Blimey! (Shropshire Devs Mar 2016)
.NET Core Blimey! (Shropshire Devs Mar 2016)citizenmatt
 
.NET Core Blimey! (dotnetsheff Jan 2016)
.NET Core Blimey! (dotnetsheff Jan 2016).NET Core Blimey! (dotnetsheff Jan 2016)
.NET Core Blimey! (dotnetsheff Jan 2016)citizenmatt
 
.net Core Blimey - Smart Devs UG
.net Core Blimey - Smart Devs UG.net Core Blimey - Smart Devs UG
.net Core Blimey - Smart Devs UGcitizenmatt
 
.Net Core Blimey! (16/07/2015)
.Net Core Blimey! (16/07/2015).Net Core Blimey! (16/07/2015)
.Net Core Blimey! (16/07/2015)citizenmatt
 
C# 6.0 - DotNetNotts
C# 6.0 - DotNetNottsC# 6.0 - DotNetNotts
C# 6.0 - DotNetNottscitizenmatt
 
What's New in ReSharper 9?
What's New in ReSharper 9?What's New in ReSharper 9?
What's New in ReSharper 9?citizenmatt
 

Plus de citizenmatt (10)

How to Parse a File (NDC London 2018)
How to Parse a File (NDC London 2018)How to Parse a File (NDC London 2018)
How to Parse a File (NDC London 2018)
 
How to Parse a File (DDD North 2017)
How to Parse a File (DDD North 2017)How to Parse a File (DDD North 2017)
How to Parse a File (DDD North 2017)
 
The how-dare-you-call-me-an-idiot’s guide to the .NET Standard (NDC London 2017)
The how-dare-you-call-me-an-idiot’s guide to the .NET Standard (NDC London 2017)The how-dare-you-call-me-an-idiot’s guide to the .NET Standard (NDC London 2017)
The how-dare-you-call-me-an-idiot’s guide to the .NET Standard (NDC London 2017)
 
.NET Core Blimey! Windows Platform User Group, Manchester
.NET Core Blimey! Windows Platform User Group, Manchester.NET Core Blimey! Windows Platform User Group, Manchester
.NET Core Blimey! Windows Platform User Group, Manchester
 
.NET Core Blimey! (Shropshire Devs Mar 2016)
.NET Core Blimey! (Shropshire Devs Mar 2016).NET Core Blimey! (Shropshire Devs Mar 2016)
.NET Core Blimey! (Shropshire Devs Mar 2016)
 
.NET Core Blimey! (dotnetsheff Jan 2016)
.NET Core Blimey! (dotnetsheff Jan 2016).NET Core Blimey! (dotnetsheff Jan 2016)
.NET Core Blimey! (dotnetsheff Jan 2016)
 
.net Core Blimey - Smart Devs UG
.net Core Blimey - Smart Devs UG.net Core Blimey - Smart Devs UG
.net Core Blimey - Smart Devs UG
 
.Net Core Blimey! (16/07/2015)
.Net Core Blimey! (16/07/2015).Net Core Blimey! (16/07/2015)
.Net Core Blimey! (16/07/2015)
 
C# 6.0 - DotNetNotts
C# 6.0 - DotNetNottsC# 6.0 - DotNetNotts
C# 6.0 - DotNetNotts
 
What's New in ReSharper 9?
What's New in ReSharper 9?What's New in ReSharper 9?
What's New in ReSharper 9?
 

Dernier

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 

Dernier (20)

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 

Rider - Taking ReSharper out of Process

  • 1. Taking ReSharper out of process Matt Ellis @citizenmatt
  • 2.
  • 3. Why build a .NET IDE now?
  • 4. How do you build a .NET IDE?
  • 5. How do you build a 
 cross platform .NET IDE?
  • 6. How do you build a 
 cross platform IDE?
  • 7.
  • 13. How do you build a .NET IDE in the JVM?
  • 15.
  • 16. ReSharper out of process • Language server • Headless. Command line process. IntelliJ provides the UI
 Client/server communication • Cross platform
 .NET Framework on Windows. Mono on MacOS and Linux • Removes Visual Studio in-process constraints
 Memory usage. 64 bit • Continued investment in ReSharper
  • 17. Thick Client? Thin Client? • IntelliJ provides high level UI elements, functionality and infrastructure
 Editors, Alt+Enter, completion, Find Usages, test runner, debugging…
 Searchable tree views, popup dialogs, settings pages… • No knowledge of syntax trees or semantic model
 Parsing, resolving, syntax highlighting, folding, inspections, refactoring, code completion, etc. all owned by ReSharper • (Some standalone functionality)
 Find in path, REST client, Databases, VCS • Optimisations
 Lexing for initial syntax highlighting
  • 18.
  • 19. Alt+Enter • IntelliJ provides editor, text caret, and tracks Alt+Enter keypress • Asks current language for items • Current language is an IntelliJ facade for ReSharper out-of-proc
 Asks ReSharper for items at current location • ReSharper returns list of display names, icons and submenus • IntelliJ displays items in Alt+Enter menu
  • 20. Inspection highlights • IntelliJ provides infrastructure to display “squigglies” • Opposite direction, pushed from ReSharper • Source file is opened, or modified
 IntelliJ notifies ReSharper • ReSharper analyses the file, runs inspections, gathers highlights • ReSharper publishes list of range, severity and tooltip • IntelliJ displays squiggles
  • 21. Modifying source • Bi-directional • User typing
 IntelliJ publishes changes as delta of typed characters at offset • ReSharper rewriting code
 Publishes delta as chunk of code
 Renamed variable, new method, additional `using` statement, etc.
  • 22. Observations • Enabling functionality, rather than implementing it
 Can show all Alt+Enter menus, run all inspections, rewrite code in context actions and quick fixes • As long as there is no UI… • The data is very lightweight
  • 23. IPC - RPC? • Boilerplate - define calls and messages for each required action • Imperative • Conflict resolution?
 Who wins? How to reset/resync state? • JSON? Protobuf? Client
 (IntelliJ) Server
 (ReSharper)
  • 24. MVVM • Only send data required for UI components • Lightweight View Model data View
 (IntelliJ) Model
 (ReSharper) View
 Model
  • 26. Shared View Model • Single view of state of entire IDE
 Shared between front end and back end
 Keep in sync. Only need to update changed fields • Becomes declarative
 No more boilerplate messages, just update View Model • Reactive/observable. Composable
 Subscribe for changes • Two way
 Client and server can both contribute to View Model
 E.g. button click/refactoring results • Tightly coupled? 🤔
  • 27. Conflict resolution • The client is always right • Each value has a version • Version increments only when client changes value • If server changes value, no version update • Only accept change with same or newer version
  • 29. Wire protocol • Becomes trivial - no messages, just deltas
 Don’t change the protocol, just extend model • Supports batching • Serialisation by code generation via DSL • Binary wire protocol, with logging • Sockets
  • 30. Rider Framework • Two libraries, C# and Kotlin
 Provides primitives and handles communication • Kotlin based DSL to describe View Model • Generates real code - C# and Kotlin
 Interfaces, implementation and serialisation • Business logic subscribes to and manipulates “real model”
 Magic happens
  • 31. View Model building blocks • Lifetime • Signals (events) • Properties (observable value) • Maps (observable collections) • Fields (immutable) • Call (async RPC) • string • int • enum • classdef (node) • structdef (data)
  • 32. Lifetime class Lifetime { static Lifetime Eternal; void Add(Action action); } class LifetimeDef { ctor(Lifetime parent); Lifetime Lifetime; void Terminate(); } Dual of IDisposable
  • 33. Signal // Produce event interface ISource<T> { void Fire(T value); } // Subscribe to event interface ISink<T> { void Advise(Lifetime l, Action<T> handler); } // Composable event interface ISignal<T> : ISource<T>, ISink<T> { }
  • 34. Properties // Subscribe to event interface ISink<T> { void Advise(Lifetime l, Action<T> handler); } // Observable property interface IProperty<T> : ISink<T> { T Value { get; set; } void View(Lifetime l, Action<Lifetime, T> action); } Stateful signal
  • 35. Maps class MapEvent<K,V> { enum Kind { Add, Remove } Kind kind; K key; V value; } // Observable collection interface IViewableMap<K,V> : IDictionary<K,V>, ISink<MapEvent<K,V >> { void View(Lifetime l, Action<Lifetime, K, V> action); }
  • 36. Kotlin DSL fun classdef ( name : String, init : ClassdefNode.() -> Unit ) classdef ( “Foo”, { myClassdef.map(…) } ) classdef ( “Foo”, { map(…) } )
  • 37. Kotlin DSL fun classdef ( name : String, init : ClassdefNode.() -> Unit ) classdef ( “Foo”, { lambda_expression } ) classdef (“Foo”) { lambda_expression }
  • 38. object Solution { init { map(“editors”, string, classdef(“Editor”) { list(“document”, char) property(“caret”, int) map(“highlighters”, Range, Highlighter) property(“completion”, Completion.nullable) }) voidSource(“build”) } val Range = classdef(“Range”) { field(“start”, int) field(“length”, int) } val Highlighter = classdef(“Highlighter”) { … } }
  • 39. Challenges • Rider’s Project Model very different to IntelliJ
 Replace Project view with Solution Explorer
 IntelliJ uses “project” where we expect “solution” • What about duplicate language implementations?
 E.g. JavaScript - WebStorm or ReSharper?
 C++ CLion or ReSharper? • Plugins are more complex
 Front end and back end • ReSharper out of process with Visual Studio? 🙊