Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020

Developer Advocate
Jun. 8, 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020
1 of 52

More Related Content

What's hot

Wiesław Kałkus: C# functional programmingWiesław Kałkus: C# functional programming
Wiesław Kałkus: C# functional programmingAnalyticsConf
Extending Java EE with CDI and JBoss ForgeExtending Java EE with CDI and JBoss Forge
Extending Java EE with CDI and JBoss ForgeAntoine Sabot-Durand
Code camp 2011 Getting Started with IOS, Una DalyCode camp 2011 Getting Started with IOS, Una Daly
Code camp 2011 Getting Started with IOS, Una DalyUna Daly
Android application modelAndroid application model
Android application modelmagicshui
Android : How Do I Code Thee?Android : How Do I Code Thee?
Android : How Do I Code Thee?Viswanath J
Rider - Taking ReSharper out of ProcessRider - Taking ReSharper out of Process
Rider - Taking ReSharper out of Processcitizenmatt

Similar to Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020

Microservices for building an IDE – The innards of JetBrains Rider - TechDays...Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...Maarten Balliauw
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
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...Maarten Balliauw
Silverlight 2 for Developers - TechEd New Zealand 2008Silverlight 2 for Developers - TechEd New Zealand 2008
Silverlight 2 for Developers - TechEd New Zealand 2008Jonas Follesø
Whidbey old Whidbey old
Whidbey old grenaud
Code Analysis and Refactoring with CDTCode Analysis and Refactoring with CDT
Code Analysis and Refactoring with CDTdschaefer

More from Maarten Balliauw

Nerd sniping myself into a rabbit hole... Streaming online audio to a Sonos s...Nerd sniping myself into a rabbit hole... Streaming online audio to a Sonos s...
Nerd sniping myself into a rabbit hole... Streaming online audio to a Sonos s...Maarten Balliauw
Building a friendly .NET SDK to connect to SpaceBuilding a friendly .NET SDK to connect to Space
Building a friendly .NET SDK to connect to SpaceMaarten Balliauw
Indexing and searching NuGet.org with Azure Functions and Search - .NET fwday...Indexing and searching NuGet.org with Azure Functions and Search - .NET fwday...
Indexing and searching NuGet.org with Azure Functions and Search - .NET fwday...Maarten Balliauw
JetBrains Australia 2019 - Exploring .NET’s memory management – a trip down m...JetBrains Australia 2019 - Exploring .NET’s memory management – a trip down m...
JetBrains Australia 2019 - Exploring .NET’s memory management – a trip down m...Maarten Balliauw
.NET Conf 2019 - Indexing and searching NuGet.org with Azure Functions and Se....NET Conf 2019 - Indexing and searching NuGet.org with Azure Functions and Se...
.NET Conf 2019 - Indexing and searching NuGet.org with Azure Functions and Se...Maarten Balliauw
CloudBurst 2019 - Indexing and searching NuGet.org with Azure Functions and S...CloudBurst 2019 - Indexing and searching NuGet.org with Azure Functions and S...
CloudBurst 2019 - Indexing and searching NuGet.org with Azure Functions and S...Maarten Balliauw

More from Maarten Balliauw(20)

Recently uploaded

Solving today’s Traffic Problems with Sustainable Ride Hailing SolutionSolving today’s Traffic Problems with Sustainable Ride Hailing Solution
Solving today’s Traffic Problems with Sustainable Ride Hailing SolutionOn Demand Clone
9C Monthly Newsletter - SEPT 20239C Monthly Newsletter - SEPT 2023
9C Monthly Newsletter - SEPT 2023PublishingTeam
Product Research Presentation-Maidy Veloso.pptxProduct Research Presentation-Maidy Veloso.pptx
Product Research Presentation-Maidy Veloso.pptxMaidyVeloso
GIT AND GITHUB (1).pptxGIT AND GITHUB (1).pptx
GIT AND GITHUB (1).pptxGDSCCVRGUPoweredbyGo
Product Listing Presentation-Maidy Veloso.pptxProduct Listing Presentation-Maidy Veloso.pptx
Product Listing Presentation-Maidy Veloso.pptxMaidyVeloso
OpenAI API crash courseOpenAI API crash course
OpenAI API crash courseDimitrios Platis

Microservices for building an IDE - The innards of JetBrains Rider - NDC Oslo 2020

Editor's Notes

  1. This talk is about: How Rider came to be How protocol allowed us to gain additional knowledge and ideas of separating parts of our IDEs and building TOWARDS microservices This talk is also about building a new product based on many years of previous investments
  2. Open ContosoUniversity in Rider Show solution explorer Show editor where you can type, show inspections, navigation, refactoring Mention debugging Mention tools like database Mention cross platform
  3. Now that we have seen a bit of the IDE, let’s look at some history first.
  4. Talk about history of JetBrains a bit, mention Eclipse in 2002, need for a new product. Mention ReSharper plugin to VS..
  5. ReSharper 1.0 -> 2.0 – let’s do a full IDE Rely on being a plugin to VS? Or build a full .NET IDE? It was never released, but a fully functional prototype. Provided a solution explorer, an editor, find usages, code completion and refactorings. Built on .NET WinForms and Windows Presentation Foundation (WPF) wasn’t around. Project halted – VS plugin seemed best way to go
  6. Project halted (but not gone to waste) Concepts and architecture remained Action system Text control implementation Several tool windows and toolbar controls Unit test runner ReSharper command line tools (CLI) Keep functionality separate from the actual IDE Helped future versions of ReSharper: Visual Studio 2010, 2013, 2015 and 2017 Same core, IDE interoperability layer on top
  7. Headless R# as a language server Cross-platform (.NET on Windows, Mono on Linux and macOS) No constraints (64 bit process, and its own memory space) It is ReSharper! 2 products, 1 code base IntelliJ as a thin UI Control the R# process Client/server or IPC communication
  8. Is IntelliJ really a thin UI? Full IDE for its own languages, no need for R# there Combined languages (e.g. JS/TS/HTML in IJ and R#) Change tracking, VCS, REST client, tool windows, ... Three cases... Features where IJ handles everything Features where R# handles almost everything Features where both IDE’s make an awesome IDE Both sides are an IDE! Same concepts, but not the same knowledge about the project
  9. Open ContosoUniversity in Rider Navigate to *.html – Navigation already includes all flows! Files in IJ, symbols in IJ, symbols in R# HTML editor is purely IntelliJ Navigate to *.cshtml – Again both IDE’s at work CSHTML is both C# and HTML – now what? Both IDE’s! Navigate to HomeController C# is al ReSharper. Or is it? Show database tools + language injection with database query. Mention local history – tracked by IJ but R# needs to know about this too, e.g. in a big refactoring
  10. If we are going to make them talk, let’s look at how we could model the data that goes over the wire.
  11. Re-use Language Server Protocol (LSP)? Great in itself – IDE concepts like window, editor, language, diagnostics, ... Built for/with VS Code and the ideas in that IDE. Not bad! PoSh plugin uses this, and works fine! But feature set is a bit more limited than what we have in R#. We would need customizations... LSP is lowest common denominator – some R# refactorings can not be done Mixed languages? e.g. CSHTML which can be HTML + CSS + JS + C#/VB.NET Build a custom REST-like protocol? Experimented with JSON, ProtoBuf, request/response style Slow, hard to customize, hard to develop with when all is in motion
  12. Objects bind to other objects, instead of parent keeping track of just direct children
  13. Open empty project in Rider, install a NuGet package, show log tab Open Rider in IntelliJ IDEA NuGetModel.kt – explain it Extends the solution node in the model Has a bunch of inner classes, and properties Interesting is sink(“log”) Generated version: RdNuGetHost – Kotlin implementation of our view model In RiderNuGetLogPanel – init -> facade.host.log.advise(facade.lifetime) Open ReSharperHost.Generated.sln in Rider Generated version: RdNuGetHost – C# implementation of our model In NuGetNativeLogger, public override void Log(ILogMessage message) => myHost.Log.Fire( new NuGetLogMessage(message.Time, NuGetLogContext.NuGet, Convert(message.Level), message.Message)); Open Rider in IntelliJ IDEA NuGetModel.kt – find property("configFiles", immutableList(classdef("RdNuGetConfigFile") { RiderNuGetSourcesPanel – init - facade.host.configManager.configFiles.advise(facade.lifetime) { newFiles -> Similar construct to subscribe to sources being added to the view model Open ReSharperHost.Generated.sln in Rider In NuGetCredentialProviderHost, show lifetime example – when solution closes the lifetime closes, so this thing cleans up as well
  14. Mention WPF, WinForms
  15. Thought experiments: WPF/XAML renderer
  16. Rider and Unity Editor can be started independently, but this does not prevent us from both processes to look for each other’s Rider Protocol connection. When both are launched and the connection is allowed, Rider can share its view model with Unity Editor and vice-versa. This lets Rider control play/pause/and stop buttons in Unity, and also provides the ability to debug code in Rider, even though it is running in the Unity Editor.
  17. Rider and Unity Editor can be started independently, but this does not prevent us from both processes to look for each other’s Rider Protocol connection. When both are launched and the connection is allowed, Rider can share its view model with Unity Editor and vice-versa. This lets Rider control play/pause/and stop buttons in Unity, and also provides the ability to debug code in Rider, even though it is running in the Unity Editor.
  18. Also way forward with R# OOP
  19. Thought experiments: WPF/XAML renderer