Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

532 views

Published on

Подружили CLR и JVM в Project Rider
CodeFest 2016 http://2016.codefest.ru/

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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

  1. 1. Подружили CLR и JVM в Project Rider Андрей Акиньшин Software Developer JetBrains
  2. 2. Время перемен
  3. 3. 2006 год
  4. 4. ReSharper • Тысячи анализов и инспекций • Сотни рефакторингов • Крутые навигация и поиск • Форматирование и чистка кода • Кодогенерация на все случаи • C#, VB.NET, ASP.NET, JS • Сотни тысяч пользователей
  5. 5. IntelliJ IDEA
  6. 6. Project Rider = + Windows Mac OS Linux Первые 90% продукта было готово до официального начала разработки. И вообще, мы уже 15 лет этот продукт пишем.
  7. 7. Kotlin • Java interoperability • Null safety • Unchecked exceptions • Extension functions • Operator overloading • String interpolation • Zero-overhead lambdas • Pattern matching • Smart casts Можно писать в старом Java-стиле Можно писать в новом функциональном стиле Можно легко делать DSL
  8. 8. Архитектурная схема © eyezmaze.com
  9. 9. Волшебный протокол Buzzwords: • Less • DRY • Async • Reactive C# Model Kotlin Model
  10. 10. Как это работает *И не забыть про порядок Пользователь Frontend (IDEA) Backend (R#) Alt+Enter Запускаем “Alt+Enter” Action Готовим список действий Создаём ViewModel Отправка Alt+Enter Показываем Popup Inline Variable Отправка Inline Variable Запускаем “Inline” Action Меняем документ Формируем Changes Показываем новый документ Но вот только всё это работает в 10 потоков, а порядок иногда лучше бы сохранять.
  11. 11. Дедупликация строк 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
  12. 12. Кеширование Обычная C# IDE Rider
  13. 13. R# на Mono: Проблемы, Часть 1 • COM & WPF Хозяйке на заметку COM и WPF как-то не очень работают на Linux и MacOS. Их нужно выпилить, но при этом не сломать R#.
  14. 14. R# на Mono: Проблемы, Часть 2 • Unmanaged code Хозяйке на заметку Если структура не blittable, то MS.NET и Mono могут создавать разный memory layout
  15. 15. R# на Mono: Проблемы, Часть 3 • rn vs n Хозяйке на заметку R# использует rn, а IDEA — n А ещё, был у нас Python-скрипт, в конце строк которого оказывались r, а в строках были пути, вот и собирай после этого под Windows…
  16. 16. R# на Mono: Проблемы, Часть 4 • XBuild ≠ MSBuild Хозяйке на заметку XBuild при чтении csproj любит заменять обратные слеши на прямые. Остерегайтесь регулярных выражений прямо в csproj!
  17. 17. R# на Mono: Очень много проблем • ParseFloatLiteral и неожиданный вызов внутри OleAut32Dll.VarR8FromStr • Ограничение на длину имени файла в UnzipFileInfo new StringBuilder(128) → new StringBuilder(1024) • Пустой AppDomainSetup.ConfigurationFile "Could not allocate -6 bytes" • Guid.NewGuid внутри финалайзеров RNGCryptoServiceProvider из-за которого вешался AppDomain Поэтому у нас своё Mono с блекджеком и шлю
  18. 18. CLR vs JVM: Примитивные типы Тип CLR JVM Guid 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
  19. 19. CLR vs JVM: Примитивные типы Тип CLR JVM Guid 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
  20. 20. CLR vs JVM: Примитивные типы Тип CLR JVM Guid 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
  21. 21. CLR vs JVM: Примитивные типы Тип CLR JVM Guid 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
  22. 22. Как будем тестировать? А ещё у нас есть своя рекордилка тестов =)
  23. 23. Rider — отличная .NET IDE www.jetbrains.com/rider @jetbrainsrider
  24. 24. @andrey_akinshin Андрей Акиньшин Software Developer JetBrains Вопросы? http://aakinshin.net/ andrey.akinshin@gmail.com

×