MonoDevelop: how modern C# IDE and code editor works Atsushi Eno
Mono and Xamarin Mono open source C#/.NET framework for linux, mac, win mono, gtk-sharp, monodevelop (IDE) today Xamarin drives mono development mobile product company iOS and Android, with IDE "Xamarin Studio"
Atsushi Eno (@atsushi_eno) ex-mono hacker working at Xamarin living in Tokyo/Japan =>
Xamarin Studio / MonoDevelop Xamarin Studio basically it is MonoDevelop w/ commercial extensions MonoDevelop cross platform IDE (linux/mac/win/...) Unity, PSMobile uses MD the making of Xamarin Studio (modernizing the UI): http://blog.xamarin.com/the-making-of-xamarin-studio/
Demo: what MonoDevelop can do
Language Service Also, "Compiler as a Service" (CaaS) on-the-fly code parsing and analysis, as a service To learn about this, let's have a look at code editor evolution...
IDE text editor prior to LS/CaaS syntax highlighting based on regexp
IDE text editor prior to LS/CaaS get error / warning from stdout / stderr jump to error location.
Integrated code parser IDE to have its own parser supposed to process incomplete sources provide basic source structure (AST) to editor "where is Type T in namespace N?"
in-memory source parsing type/member selector
Type system database A type can be from sources or a reference (library). Complete type definition list can be built. Semantic analysis of sources is doable now. e.g. collect all members including base types.
Integrated code parser + type DB Gives you... "go to definition" find references (usage, inheritance, overrides...) get code completion on ".", "::" or "->" opportunity for many advanced features too Mono.CSharp.dll contains C# implementation of it.
Language (Compiler as a) Service Code analysis and transformation aid get type definition and their locations, find references and more advanced features Another aspect of LS / CaaS Historically all those features were tied to the IDE But they should be usable in any IDEs Separation of text editor and language toolkit
use (and/or create) LS / CaaS using LS / CaaS from editor mostly out-of-process model: launch host server NRefactory limits the scope to .NET creating LS / CaaS - difficult! API should be simple, to not break compatibility stringly-typed API FTW!