Go Get Podcast

Ep. 16: Как делают GoLand: закулисье JetBrains

Поговорили с Арсением Тереховым — разработчиком из команды GoLand. Обсудили следующие темы:

- Про Арсения и его путь в JetBrains: как попал в разработку, а потом в JB, почему именно GoLand, какой был бэкграунд до этого

- Про команду и работу: как устроена команда GoLand, типичный рабочий день, процессы разработки, код-ревью

- Самое интересное - про два мира Java/Kotlin и Go: каково это писать инструмент для Go на другом языке, насколько глубоко нужно знать Go

- Техническая часть: как устроена работа с Go кодом внутри IDE, взаимодействие с командой с gopls

- Про другие IDE: VSCode, Zed

Состав:

- Николай Тузов

- Арсений Терехов — JetBrains, GoLand Team

- Ильдар Карымов: https://www.youtube.com/@deferpanic

Мой Телеграм-Канал с анонсами подкастов, роликов и др.: https://t.me/ntuzov

Наш чат - Gopher Club: https://t.me/+RfalcB42UspmMDdi

Все гости наших выпусков там присутствуют.

Тайминги:

  • 00:00 Вступление и план выпуска
  • 00:25 Представление Арсения
  • 01:34 Представление Ильдара
  • 02:45 Бэкграунд Арсения и его путь в JetBrains
  • 05:31 Про лабораторию JetBrains на Матмехе
  • 08:05 Лаборатория языковых инструментов: проекты и идеи
  • 10:45 Магистратура JetBrains в ИТМО — жесткая нагрузка
  • 16:22 Почему выбрал GoLand?
  • 19:34 Первые впечатления от Go: escape-анализ, GC, горутины
  • 24:30 Претензии Арсения к Go: проблема захвата переменных по ссылке
  • 29:28 Претензии №2: проблема nil-safety в Go
  • 33:28 Как происходят переходы между командами в JetBrains
  • 37:20 Про переход в команду IDEA или Kotlin — идеальный Dogfooding
  • 39:12 Dogfooding в команде GoLand: пет-проекты на Go (2D игра на Ebitengine)
  • 43:42 Встречи с командой gopls / Go Team
  • 43:55 Что такое gopls? LSP для Go
  • 47:08 GoLand не использует gopls — собственный LSP
  • 52:15 Состав команды GoLand: ~10 разработчиков и другие должности
  • 53:58 Общий пул задач и свобода выбора
  • 1:00:30 Процесс код-ревью
  • 1:01:50 Роль QA: как устроено тестирование?
  • 1:12:02 Поддержка новых версий Go и type inference
  • 1:17:22 Инструменты разработки: TeamCity, Space
  • 1:22:05 Как репортить баги через YouTrack
  • 1:31:58 Вопросы производительности IDE
  • 1:36:39 Совмещение Kotlin и Go в разработке
  • 1:42:09 Архитектура: IntelliJ Platform + языковые плагины
  • 1:48:45 GoLand vs IDEA + Go plugin - в чем разница?
  • 1:53:32 Регулярные встречи с командой gopls / Go Team (продолжение)
  • 1:57:10 Nil reference анализ — главная новая фича
  • 1:58:54 Глобальный анализ vs локальный (преимущества)
  • 2:04:20 Теоретическая неразрешимость задач статанализа
  • 2:10:45 Data flow analysis — как это работает
  • 2:13:31 Почему пока не поддерживаются поля структур
  • 2:20:37 Как иммутабельность упростила бы анализ
  • 2:26:45 Обсуждение других IDE: VS Code, Zed, Cursor
  • 2:33:39 Уникальность JetBrains — свои языковые движки vs LSP
  • 2:37:04 Обращение к сообществу: репортите баги!
  • 2:39:04 Планы на следующий выпуск и завершение