IDE больше не нужны
От: alex_public  
Дата: 26.09.21 05:05
Оценка: 7 (4) +2 -9 :))) :))) :))) :)))
Всех приветствую!

Инициировано данной сообщение этой http://rsdn.org/forum/tools/8094654
Автор: maks1180
Дата: 17.09.21
темкой на форуме. Как человек, перепробовавший (причём не на "hello world") все известные IDE и редакторы для C++, я изначально хотел просто оставить свой экспертный ответ в той темке. Но потом понял, что во-первых моё мнение сильно изменилось не так давно (так что весь этот опыт стал не так уж важен), а во-вторых причина этих изменений касается большинства языков, а не только C++. Поэтому я решил создать для этого отдельную темку.

И так, начнём с основ. Что такое IDE? По факту это просто комбайн из нескольких известных простых программистских инструментов: редактор кода (обычно средненький), система сборки (обычно максимально убогая внутренняя, но есть возможно подключения внешних), отладчик (обычно средненький), и ещё набор уже совсем мелких утилит (типа парсинга ошибок компилятора, интеграции с VCS, командных активностей и т.п.). Так вот, в большинстве случаев, когда где-то в мире встречаются подобный комбайны, они значительно уступают по своим возможностям набору отдельных, специально подобранных инструментов. Обычно их используют новички, которые ещё не могут собрать свой правильный набор под свои задачи. И только (ну на самом деле возможно и ещё где-то, но лично я про такое не слышал) у программистов наблюдается обратная ситуация: IDE — это ультимативный выбор профессионалов. И у этого явления есть объективная причина: в IDE возникает синергия между отдельными компонентами, добавляющая целый новый класс возможностей. Например всеми нами любимые автодополнения, навигация по коду, рефакторинг — это эксклюзивные возможности IDE. И это так не потому, что они какие-то сложные (хотя для C++ это действительно не просто) и доступны только в таких жирных монстрах, а потому что редактор просто физически не имеет возможности реализовать такую функциональность без информации об опциях сборки проекта. Поэтому профессионалам, желающим продуктивной работы, приходилось выбирать из небольшого числа (буквально можно пересчитать по пальцам рук) существующих IDE, каждая из которых с кучей недостатков (в силу своей сущности комбайна).

Однако совсем недавно эта ситуация коренным образом изменилась. Точнее само событие произошло уже лет 5 как назад, но пока оно расползлось по всей индустрии, пока его стали поддерживать все нужные производители... Кстати, ситуация приблизительно такая же как и с революцией с появлением WebAssembly, который появился так же лет 5 назад, но реальную поддержку обрёл не так давно. И кстати точно так же как и с WebAssembly многие программисты (в том числе и с этого форума) проглядели революцию, продолжая задавать вопросы "о лучшей IDE". Собственно поэтому я и решил написать это сообщение.

Так вот, речь естественно о появление протокола LSP (https://microsoft.github.io/language-server-protocol/specifications/specification-current/). Хотя по этой ссылке идут технические детали, а нам (как в данном случае пользователям этого протокола) гораздо интереснее будет вот эта https://langserver.org ссылка. Данный протокол позволяет вашему любимому редактору получить всю нужную информацию о коде и элементарно реализовать всю привычную функциональность, когда-то эксклюзивную для IDE. Более того, для многих языков эта реализация будет даже лучше, чем поддержка в таких IDE как VisualStudio или продукты JetBrains, потому как в них используются свои обрезанные (во всяком случае для C++) парсеры исходников, а в серверах LSP обычно используются компиляторы языка (clang в случае C++), которые гарантированно парсят даже самый сложный код (многоуровневые макросы с шаблонами C++ и т.п.). Т.е. идея комбайна под названием IDE теперь устарела и больше не нужна (ну разве что для новичков пойдёт).

И так, какой же алгоритм выбора инструментов должен быть в 2021-ом году у профессионалов?
— Идём на https://langserver.org и убеждаемся что для нашего языка есть реализация сервера с полной функциональностью. Для моих языков (C++/Python/Rust) такое есть. И вроде для большинства остальных популярных тоже. Скачиваем соответствующий сервер.
— Идём в раздел "клиентов" того же сайта и выбираем там любой редактор из списка под свой вкус. Там есть и доисторические (но до сих пор крайне популярные из-за своей мощи) Vim с Emacs и классика в стиле 2000-ых (кстати большинство IDE как раз такие же) Kate и современные Sublime и VSCode (хотя это убогое глючное и тормозное дерьмо на JS я конечно никому не рекомендую, но с точки зрения реализации функциональности IDE с помощью LSP там всё хорошо). В общем можно выбрать на любой вкус из известных любимых инструментов, какой-то из которых каждый тут наверняка использовал для правки одиночных файлов, но которые раньше не тянули на полноценную работу с целым проектом. Разве что Notepad++ (удобная штука, хотя и только для винды) ещё к сожалению не запилил у себя поддержку LSP. Всё это удобные редакторы с функциональностью работы с текстом мощнее чем в IDE и при этом обычно лёгкие (не считая VSCode) и быстрые, а не ожирелые монстры как IDE.
— Подбираем себе систему сборки. Тут уже зависит от языка и размера проекта. Для того же C++ (всё же про него был изначальный вопрос) я бы порекомендовал Bazel для серьёзных проектов, waf/scons для мелких и CMake для разработчиков библиотек, поставляемых в исходниках.
— Подбираем себе отладчик. Тут сильно зависит от проекта и целевой платформы, так что не буду писать рекомендации (а то отдельная статья получится).
— Настраиваем в редакторе кнопочки на тулбаре или хоткеи для вызова соответствующих внешних инструментов, чтобы получить поведение в точности как в IDE. И плюс настраиваем связь типа файлов с установленным LSP сервером.

В итоге получаем одновременно и более функциональное и более лёгкое и более кастомизируемое под конкретную задачу решение. Да и ещё скорее всего бесплатное, т.к. большинство инструментов в списке бесплатные. Хотя это уже не так принципиально, т.к. цена программ обычно гораздо меньше, чем цена потери времени от плохих инструментов у разработчиков.

P.S. Вообще IT индустрия постоянно меняется, развиваясь по всем направлениям каждый год. Но многие на этом форуме почему-то не видят всего этого, живя восприятием мира из 2000-ых. В чём я не раз убеждался даже в самых последних дискуссиях по совершенно разным темам. Причём они умудряются вступать в споры с абсолютно уверенным в своей правоте видом, хотя при этом даже в глаза не видели (более того, даже не слышали названий!) современных инструментов, которым они противопоставляют свои устаревшие игрушки. Это пустое надувание щёк так смешно выглядит со стороны... И да, это сообщение совсем не для таких товарищей, т.к. они безнадёжны, а для тех, кто пытается быть в курсе реальных дел в индустрии, но при этом почему-то пропустил такой прорыв как появление LSP.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.