Андрей Акиньшин

Post on 13-Apr-2017

372 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Подружили CLR и JVM в Project Rider

АндрейАкиньшин

SoftwareDeveloper

JetBrains

Время перемен

2006 год

ReSharper

• Тысячи анализов и инспекций• Сотни рефакторингов• Крутые навигация и поиск• Форматирование и чистка кода• Кодогенерация на все случаи• C#, VB.NET, ASP.NET, JS• Сотни тысяч пользователей

IntelliJ IDEA

Project Rider = +

WindowsMac OS

Linux

Первые 90% продукта было готово до официального начала разработки.И вообще, мы уже 15 лет этот продукт пишем.

Kotlin

• Java interoperability• Null safety• Unchecked exceptions• Extension functions• Operator overloading• String interpolation• Zero-overhead lambdas• Pattern matching• Smart casts Можно писать в старом Java-стиле

Можно писать в новом функциональном стилеМожно легко делать DSL

Архитектурная схема

© eyezmaze.com

Andrey Akinshin

Волшебный протокол

Buzzwords:• Less• DRY• Async• Reactive

C# Model Kotlin Model

Andrey Akinshin

Как это работает

*И не забыть про порядок

Пользователь Frontend (IDEA) Backend (R#)

Alt+Enter Запускаем “Alt+Enter” ActionГотовим список действий

Создаём ViewModel

Отправка Alt+Enter

Показываем Popup

Inline VariableОтправка

Inline Variable Запускаем “Inline” ActionМеняем документ

Формируем ChangesПоказываем

новый документ

Но вот только всё это работает в 10 потоков, а порядок иногда лучше бы сохранять.

Дедупликация строк

Flag=0 Len=5 H E L L O

Flag=1 ID=#1 Len=5 R I D E R

Flag=2 ID=#1

Len=5 H E L L OБыло:

Стало:

Проблема:По протоколу летает много строк

Решение:Дедупликация

Обыкновенная строчка (95%)

Дедуплицируем строчку (5%)

(Вероятностная)

Пересылаем только ID

КешированиеОбычная C# IDE Rider

R# на Mono: Проблемы, Часть 1

• COM & WPF Хозяйке на заметкуCOM и WPF как-то не очень работают на Linux и MacOS.

Их нужно выпилить,но при этом не сломать R#.

R# на Mono: Проблемы, Часть 2

• Unmanaged code Хозяйке на заметкуЕсли структура не blittable,то MS.NET и Mono могут создавать разныйmemory layout

R# на Mono: Проблемы, Часть 3

• \r\n vs \n Хозяйке на заметкуR# использует \r\n, а IDEA — \n

А ещё, был у нас Python-скрипт, в конце строк которого оказывались \r,а в строках были пути,вот и собирай после этого под Windows…

R# на Mono: Проблемы, Часть 4

• XBuild ≠ MSBuild Хозяйке на заметкуXBuild при чтении csproj любит заменять обратные слеши на прямые.Остерегайтесь регулярных выражений прямо в csproj!

R# на Mono: Очень много проблем

• ParseFloatLiteral и неожиданный вызов внутриOleAut32Dll.VarR8FromStr

• Ограничение на длину имени файла в UnzipFileInfonew StringBuilder(128) → new StringBuilder(1024)

• Пустой AppDomainSetup.ConfigurationFile"Could not allocate -6 bytes"

• Guid.NewGuid внутри финалайзеровRNGCryptoServiceProvider из-за которого вешался AppDomain

Поэтому у нас своё Mono с блекджеком и шлюхами

CLR vs JVM: Примитивные типыТип CLR JVMGuid MS GUID Structure RFC 4122

Int Short Short

Byte Byte Byte Byte Byte Byte Byte Byte

Byte Byte Byte Byte Byte Byte Byte Byte

Byte Byte Byte Byte Byte Byte Byte Byte

CLR vs JVM: Примитивные типыТип CLR JVMGuid MS GUID Structure RFC 4122

Date 00:00:00 January 1, 0001 A.D.1 tick = 100ns

00:00:00 January 1, 1970 A.D.1 tick = 1ms

Int Short Short

Byte Byte Byte Byte Byte Byte Byte Byte

Byte Byte Byte Byte Byte Byte Byte Byte

Byte Byte Byte Byte Byte Byte Byte Byte

CLR vs JVM: Примитивные типыТип CLR JVMGuid MS GUID Structure RFC 4122

Date 00:00:00 January 1, 0001 A.D.1 tick = 100ns

00:00:00 January 1, 1970 A.D.1 tick = 1ms

Byte [0..255] [-128..127]

Int Short Short

Byte Byte Byte Byte Byte Byte Byte Byte

Byte Byte Byte Byte Byte Byte Byte Byte

Byte Byte Byte Byte Byte Byte Byte Byte

CLR vs JVM: Примитивные типыТип CLR JVMGuid MS GUID Structure RFC 4122

Date 00:00:00 January 1, 0001 A.D.1 tick = 100ns

00:00:00 January 1, 1970 A.D.1 tick = 1ms

Byte [0..255] [-128..127]Uri > new Uri("http://code/ fest")

http://code/ fest> URI("http://code/ fest")java.net.URISyntaxException: Illegal character

Int Short Short

Byte Byte Byte Byte Byte Byte Byte Byte

Byte Byte Byte Byte Byte Byte Byte Byte

Byte Byte Byte Byte Byte Byte Byte Byte

Как будем тестировать?

А ещё у нас есть своя рекордилка тестов =)

Rider — отличная .NET IDE

www.jetbrains.com/rider@jetbrainsrider

@andrey_akinshin

АндрейАкиньшин

SoftwareDeveloper

JetBrains

Вопросы?

http://aakinshin.net/

andrey.akinshin@gmail.com

top related