LINUX.ORG.RU

Опрос разработчиков C++: IDE vs Emacs + LSP (clangd)

 , , ,


1

2

Важно мнение разработчиков C++ (необязательно использующих Emacs) на тему:

какие возможности, хорошо реализованные в различных IDE для C++, отсутствуют (недостаточно полно реализованы) в Emacs.

Под «IDE» подразумеваются любые передовые среды разработки, в том числе не open source и работающие только на оффтопике, если они работают удаленно с таргетом линукс.

Под словом «отсутствуют» подразумевается, что для настройки или реализации этого функционала в Emacs будет недостаточно существующих пакетов и написания нескольких тривиальных функций втечение суток.

Критерии сравнения (уточните название IDE, чтобы я мог протестировать):

1 - отдельные возможности (features). Предполагаемый вариант ответа:

«Не использую Emacs, но вряд ли там можно сделать [feature_name] так, как можно сделать в [my_ide]».

2 - целый рабочий процесс (workflow). Предполагаемый вариант ответа:

«В Emacs будет непросто выполнить [цепочка действий, например, рефакторинг] таким образом, как можно выполнить в [my_ide]:»

  • - действие1
  • - действие2
  • - действие3

Цель вопроса?

Выделить разность по функционалу не в пользу Emacs, если есть. Особенно в свете развития LSP (например, clangd), с помощью которого индексация кода и построение различных связей между его элементами могут быть вынесены на отдельную машину. Т.е. ряд возможностей выносится за пределы средства разработки будь то Emacs, IDE, Vim и т.д. А значит возможности Emacs и IDE в этом плане уравниваются.



Последнее исправление: nasecom (всего исправлений: 3)

С точки зрения редактирования кода, разницы между редактором и IDE с приходом LSP практически не осталось, вопрос теперь скорее какой текстовый редактор удобнее, чем то как там реализована языковая поддержка.

Другое дело, что IDE на то и IDE что там есть не только текстовый редактор, а например ещё могут быть отладчик и профилировщик, или что-то более специфичное, например тулчейны для получения всех возможностей IDE на удалённом устройстве в 1 клик.

В твоей постановке, в emacs думаю будет достаточно сложно вывести в редакторе не теряя контекста времена выполнения функций после очередного прогона и подсветить их цветом в зависимости от того, какой процент времени они занимали в прогоне, как это делает например VS.

Ещё, это например отладка. Например, посмотреть первые десять элементов вектора, который является переменной экземпляра класса, который является переменной экземпляра класса, переменная которого находится под курсором.

Ну а если говорить про передовые среды, то это возможность поднять рабочее окружение в один клик в браузере прямо в UI merge/pull риквеста.

pon4ik ★★★★★
()
Последнее исправление: pon4ik (всего исправлений: 2)

Emacs + Irony + RTags, всё устраивает. Единственное, не нашёл хорошего решения для лайв слежения за переменными и профайлинга

SL_RU ★★★★
()
Ответ на: комментарий от pon4ik

Например, посмотреть первые десять элементов вектора, который является переменной экземпляра класса, который является переменной экземпляра класса, переменная которого находится под курсором.

тяжко вам без REPL-а, дядь, да?

anonymous
()

Такое чувство, что многие новички в программировании часто ожидают от IDE того, что эти IDE научаться вот-вот совсем скоро писать код вместо человека, заменят голову... По сути же, кроме удобного текстового редактора особо ничего и не нужно часто, что наличествует в том же емаксе или вскоде. К тому же, в тех же емаксе и вскоде есть некая интеграция с системами сборки, что удобно переходить сразу же на нужную строку по сообщению об ошибке. Нет, конечно, всякие штучки вроде IntelliJ IDEA и YourKit развращают после многих лет использования, но так ли необходимы все их прибамбасы?

anonymous
()
Ответ на: комментарий от anonymous

Тяжело в дебажении, легко в рантамьении. Я думаю, если ты захочешь посмотреть какого ляха у тебя цикл не развернулся в этом вашем лиспе, тебе придётся гораздо больше упражнений проделать.

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

В SBCL нельзя посмотреть какие инструкции сгенерит компайлер?

anonymous
()

единственная существенная разница - в интеграции дебагера в иде/емакс.

Keltir
()

В принципе, это все зависит от задач. Лично мне емкас полностью подходит. Есть у нас любители затмения, но чем это жабоизделие лучше/фичастее - внятно объяснить не способны. Похоже, это просто виндовое нежелание углубляться в систему

ananas ★★★★★
()
  • рефакторинг из IDE одной кнопкой

  • инспектор кода

  • интеграция с MYLIN/Jira/etc

anonymous
()

Я давно не пробовал emacs, но раньше в него с трудом интегрировался gdb (lldb). Ну чтобы запускать одно или несколько приложений из текущего проекта и одновременно отлаживать.

Честно говоря, учитывая то, что emacs редактор универсальный, а не специализированный, то, кажется, что из него нужно убирать функциональность, чтобы он лучше подходил для разработки на С++.

ien
()
Ответ на: комментарий от rupert

Изкаробочный емакс в макоси, все раскрашивается нормально.

filosofia
()

Я пользуюсь емаксом как текстовым редактором в основном, с подсветкой синтаксиса и встроенным терминалом. Никогда не любил автодополнение кода и прочие рефакторинги. Отладчик запускаю крайне редко, внешний. Профайлер тоже.

filosofia
()

какие возможности

Современные IDE не бибикают и не портят код.

отдельные возможности

Интегрированный отладчик.

целый рабочий процесс (workflow)

Удалённая сборка, запуск и отладка. Например целевой дистрибутив развёрнут в docker или в виртуалке. IDE должна подключиться к нему, скопировать туда исходники проекта, собрать и запустить. Вывод перенаправлять на хост. Автоматически синхронизировать изменения в файлах.

Так же IDE должна уметь прозрачно для пользователя тянуть с удалённой системы заголовочные файлы и именно их (а не локальные) использовать для автодополнения и прочих фишек. Т.к. на хосте может быть другой дистрибутив с совсем другими версиями библиотек.

ox55ff ★★★★★
()
Ответ на: комментарий от filosofia

Отладчик запускаю крайне редко

Любитель отлаживать printf’ами?

А я тебе скажу почему ты редко пользуешься отладчиком. Потому что отлаживать в консольном gdb это подвиг и трата лишних сил. Когда выкинешь весь имакс хлам и перейдёшь на нормальную IDE, в которой отладка удобна и запускается одной кнопкой, то начнёшь гораздо чаще пользоваться отладчиком.

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Что же делать, если я перешел с нормальной IDE на имакс-хлам?

Все ошибки отлавливаются в тестах или на проде, поэтому хорошие логи маст-хев. Отладчик нужен, чтобы заглянуть в корку, крайне редко.

Отладка принтами или дебаггером — одного поля ягоды. Ты попросту расписываешься в том, что не чухаешь, как работает твой код и «заглядываешь внутрь». Крайне печальный уровень.

Один случай, когда отладчик действительно имеет смысл — исследование чужого кода.

ЗЫ консольные gdb/lldb весьма удобны. У тебя все, что не одна кнопка, — подвиг?

filosofia
()

На страничке LSP-mode написано, что company-lsp больше не поддерживается, остаётся только жать на кнопку для автодополнения. Похоже, emacs уже мало кому нужен, а жаль.

andalevor ★★
()
Ответ на: комментарий от filosofia

Ты попросту расписываешься в том, что не чухаешь, как работает твой код и «заглядываешь внутрь».

Твой проект это хелловорлд из 10 строчек?

Представь многоступенчатый алгоритм обработки данных. Нужно понять почему на данных от нового заказчика результат работы алгоритма отличается на 0.05.

На какой стадии и почему это происходит? Ты как без отладчика это будешь исследовать? В уме считать, опираясь на то, что чухаешь свой код?

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Оставь эти прохладные истории кому-нибудь ещё, а я вашего брата хорошо знаю. Видишь ли, я за свою карьеру вдоволь наделался компиляторов и БД, вот уж где «многоступенчатые алгоритмы обработки данных», и описанной проблемой ты меня не удивишь. Напротив, я знаю, что чем чаще ты сталкиваешься с ситуацией «сложна-сложна-0.05», тем ниже уровень команды, делающей и сопровождающей этот код. Либо, как это часто бывает, апологет отладчика, оправдываясь, выдаёт единичный случай за еженедельную рутину. В любом случае, разработка через отладчик (равно как дебаг принтами) ярко характеризует разработчика, я с такими кадрами наработался и впредь стараюсь держаться от вас подальше.

Но да, мнооооогоступенчатый алгоритм обработки данных звучит круто, признаюсь; неофит, прочтя такое, будет в трепетном восторге.

filosofia
()
Ответ на: комментарий от filosofia

Но да, «вдоволь наделался компиляторов и БД» звучит круто, признаюсь; неофит, прочтя такое, будет в трепетном восторге.

Ахах. Ну так как ты будешь отлаживать мой кейс?

ox55ff ★★★★★
()

Из того что заметил, это неумение dap-mode с lldb в stdin из встроенного терминала. То есть не могу вносить при дебаге данные из клавиатуры которые запрашиваются программой.

Artamudo ★★★★
()
Ответ на: комментарий от ox55ff

Зависит. Может и дебагером, не вижу в этом проблемы.

filosofia
()
Ответ на: комментарий от pon4ik

тебе придётся гораздо больше упражнений проделать.

ну, во-первых, нет

если ты захочешь посмотреть

во-вторых, ключевое слово «если»

anonymous
()
Ответ на: комментарий от anonymous

ну, во-первых, нет

Очень интересно, можно с примером? Или оно просто никогда не анроллит циклы и поэтому типа всё Ок?

во-вторых, ключевое слово «если»

Вот поэтому, как бэ и разница возникает, типа кому чего надо. Если нет погони за наносекундочками, то почему-бы и не обмазаться REPL-совместимыми технологиями :)

Для плюсов кста были какие-то REPL, но отладчик они не заменяют как минимум в таких случаях. Ну и да, давай посложнее(в случае repl, т.к. что в UI gdb, что наверное в емаксе это делается не сильно сложнее чем в IDE) - поставить бряк на память в многопоточном приложении, чтобы race condition словить. Сильно сомневаюсь, что любой REPL сильно тут поможет, но можешь меня разубедить.

Для каждой задачи свой инструмент как бэ.

pon4ik ★★★★★
()
Последнее исправление: pon4ik (всего исправлений: 1)

О каких IDE ты говоришь? Вообще, не хватает годного интерфейса к дебаггеру иногда. Т.е. в emacs он есть, но UX страдает.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)

Я бы начал с того, что базовые вещи хоть и реализованы, но часто глючат. Даже такая операция как переименование функции в нескольких файлах может раскорячить emacs + eglot.

Vovka-Korovka ★★★★★
()
Ответ на: комментарий от hateyoufeel

О каких IDE ты говоришь?

Ограничений немного. Критерии даны, но подчеркну следующие особенности:

- поддержка языков C и C++; - любая лицензия; - любая ОС; - может (но необязательно) поддерживаться удаленная разработка. При этом хост может быть любой ОС (в том числе и оффтопик), и поддерживается таргет Linux. Некоторые среды допускают, что удаленный тулчейн может быть и FreeBSD; - может (но необязательно) поддерживаться LSP.

nasecom
() автор топика
Ответ на: комментарий от nasecom

Из того, что ты перечислил, живых IDE всего три штуки, на самом деле. Clion, MSVS и QtCreator. И у всех трёх есть жирные недостатки, которые в принципе мешают ими пользоваться нормально.

hateyoufeel ★★★★★
()
Ответ на: комментарий от ox55ff

А как надо отлаживать этот кейс отладчиком если он возникает на 100500й итерации цикла, да ещё и в параллельном коде который запущен на 10ти узлах планиррвщиком, причем входа на эти узлы нет? Упс?

AntonI ★★★★
()
Ответ на: комментарий от ox55ff

Ну остановился - и чего дальше, если на узел где код остановился нельзя войти? Доступен только стдаут/стдерр кода.

Боюсь что никакие навыки работы с отладчиков не заменят навыков чтения и понимания написанного…

AntonI ★★★★
()
Последнее исправление: AntonI (всего исправлений: 1)
Ответ на: комментарий от AntonI

Что значит недоступен? А как твой код туда попал? А как баги исправлять «не отладчиком»? Через stderr?

Вообще я не понимаю твои претензии вида «Рррряяя, а ты попробуй отладить программу без компьютера. Не можешь? Значит отладчик говно».

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Вы не понимаете значение слова «недоступен»? Ой-вэй…

Код был запущен планировщиком. Это рутовая служба такая, на головном узле кластера. Я говорю планировщику - хочу запустить свой код на 10ти узлах на сутки. Таких как я там дцать пользователей. Планировщик ставит задание в очередь. Когда очередь подходит планировщик запускает мой код на 10ти узлах, я вижу что код пишет на стандартный вывод и какие файлы создает. Зайти на узлы где код крутится я не могу, вот никак. Совсем никак.

А как баги исправлять «не отладчиком»? Через stderr?

Кажеться Вы начинаете о чем то догадываться…

Я сейчас не трогаю вопросы отладки параллельного кода, где один поток по условию встал а остальные продолжают молотить и вся балансировка уехала фиг знает куда.

Вообще я не понимаю твои претензии

Я понимаю что не понимаете. Потому что у Вас видимо не было опыта работы с параллельными кодами обрабатывающими действительно большие объемы данных, когда каждый запуск это десятки часов. И потом где то ночью код встает на брекпойнте а я сплю. А утром, как проснулся (допустим я каким то чудом могу войти на узел), код прибило по таймауту - потому что это ресурс общего пользования и мое время вышло.

Но зато Ваши претензии «не нравится отладчик - значит не умеешь пользоваться» я как раз хорошо понимаю. Типичная позиция обитателя крошечного манямирка мнящего себя мировой илитой…

AntonI ★★★★
()
Последнее исправление: AntonI (всего исправлений: 2)
Ответ на: комментарий от AntonI

Код был запущен планировщиком

Если планировшик не может запустить программу под отладчиком, то нужно запускать локально.

Я сейчас не трогаю вопросы отладки параллельного кода, где один поток по условию встал а остальные продолжают молотить

Все потоки встают на паузу.

И потом где то ночью код встает на брекпойнте а я сплю.

Я продолжаю удивляться фееричности твоих требований. Теперь нужно отлаживать не только без доступа к машине, но и ВО СНЕ. Шах и мат отлалчик!!!111

С тем же успехом я могу предложить тебе условия, в которых у тебя нет стандартного вывода и объявить о победе в споре. Прекращай шланговать.

Ты не знаешь про условные бряки и остановку всех потоков, значит ты тот самый любитель отлаживать printf’ами. Сагрился на фразу про printf и решил осадить «любителя отлалчиков», высирая портянки текста про отладку во сне. Это смешно.

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Если планировшик не может запустить программу под отладчиком, то нужно запускать локально.

Где? На головном узле что бы весь кластер раком встал? На домашней машине? Вы вообще понимаете что такое HPC, кластер и вот это все? Идите найдите прямой доступ на десяток двухпроцессорных зеонов с 256Гб памяти на каждом (это так, скромненько).

Остальной Ваш поток сознания как то комментировать лень… скорее всего когда я условными брекпойнтами пользовался в билдере, Вы если и родились то только счетные палочки осваивали;-)

Всего хорошего.

AntonI ★★★★
()
Ответ на: комментарий от AntonI

На какой домашней? На машине разработчика. Это тема про IDE, что предполагает разговор про окружение разработчика.

Если любишь выставлять экзотические условия, то я тоже так могу. Давай расскажи про отладку в условиях невозможности записи в файл, вывода в std потоки, доступа к сети и т.п. Ну а чё? И во сне чтобы.

я условными брекпойнтами пользовался

Мощный аргумент. Братья Райт совершили первый полет 17 декабря 1903 года, а значит любой современный авиаконструктор по умолчанию некомпетентный щенок. Бгг. Что ты несёшь?

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Да не сливайся ты дальше. Тебя же носом тычут: есть задачи такого уровня, что «песочница» IDE резко начинает протекать.

Короче, он тебе не рпо песочнице для дитяток, а про карьер и большие грузовики. Уровень такой, что никакая «автоматизация» и остальное навязанное «для удобства» не только несправляются, но и бывают конкретной помехой.

ИМХО, удивляет, что ты всё же закусил удила и топишь дальше… Отладчики, автодополнение, подсветка, по попке шлёпают, если бо-бо пишешь, ага.

anonymous
()
Ответ на: комментарий от anonymous

Вот и анон-дурачок вылез. Понимаешь же какую чушь несёшь, поэтому стыдно от своего имени писать.

а про карьер и большие грузовики. Уровень такой, что

Ты мне скажи а где он этот код писал. Прямо на вычислительном кластере, прямо на проде с тыщщей зиончиков? А, лалка? Не позорься.

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Мдя… код пишется конечно локально, на ноутбуке скажем. Но проблемы которые Вы вот тут описали:

Представь многоступенчатый алгоритм обработки данных. Нужно понять почему на данных от нового заказчика результат работы алгоритма отличается на 0.05.

Опрос разработчиков C++: IDE vs Emacs + LSP (clangd) (комментарий)

возникают при боевом запуске - 10 двухпроцессорных узлов с Зеонами, по 256Гб памяти на каждом (понятно что это кластер общего доступа). А на меньших расчетах все гладко. А расчет на котором начианются проблемы на что то меньшее не влезает. Типичная проблема для HPC…

Я не к тому что отладчики ненужны - я к тому, что есть задачи где они не помогут. И вот то, что Вы этого осознать не в состоянии, характеризует Вас довольно неприглядно. Добро пожаловать в список друзей.

ЗЫ Собственно если ты научился дебажить без отладчика большие задачи (вынужденно, он там не работает), то ты и с маленькими без отладчика спокойно разберешься. Можно конечно корку посмотреть иногда полезно… а можно так настроить перехват сигналов что бы стек сразу выводился на stderr например. Никто из коллег насколько я знаю отладчиком не пользуется…

AntonI ★★★★
()
Последнее исправление: AntonI (всего исправлений: 1)
Ответ на: комментарий от AntonI

А на меньших расчетах все гладко.

Если входные данные одни и те же, то и результат должен быть одним и тем же. Иначе это говнокод. Прежде чем пускать на кластерах, прогоняешь локально через valgrind и санитайзеры, чтобы отловить легендарные межпоточные синхронизации через ключевое слово volatile или что там наговнокодили.

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Если входные данные одни и те же, то и результат должен быть одним и тем же.

У Вас точно нет дислексии? Еще раз:

возникают при боевом запуске - 10 двухпроцессорных узлов с Зеонами, по 256Гб памяти на каждом (понятно что это кластер общего доступа). А на меньших расчетах все гладко. А расчет на котором начианются проблемы на что то меньшее не влезает.

Идите, прогоните на ноуте 2Тб входных данных которые на кластере сутки перелопачиваются. Да еще через валгринд, бггг! Уже чо то ржу в голос.

AntonI ★★★★
()
Ответ на: комментарий от AntonI

Все не нужно прогонять, если в коде косяк, например состояние гонки, то санитайзеры его поймают и на меньшем объёме. Ты просто не изучаешь современные инструменты, поэтому они тебе кажутся бесполезными и не применимыми.

И вообще какой объём логов даст 2 ТБ данных. А если ты не залогировал нужный участок в целях экономии, то придётся пересобирать программу и опять занимать на день вычислительные ресурсы кластера? Сколько отладочных запусков ты произведёшь в неделю? Пять?

Чудовищно низкая производительность работы. Зато дух старой школы и хипстеры со своими штучками не надоедают. Для этого и развивают инструменты отладки, чтобы не было ситуации «вонзил printf, собрал, запустил, ждёшь результат целый день, потом ещё день анализируешь терабайты логов».

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Бггг, спешите видеть - @ox55ff не имеющий понятия о кластерах и HPC пытается рассказывать о том как надо отлаживать HPC коды…

@filosofia правильно сказал - лучший способ отладки это понимание того что и как делает твой код.

Ты просто не изучаешь современные инструменты, поэтому они тебе кажутся бесполезными и не применимыми.

Из Вас Ванга примерно как специалист по HPC, т.е. никакая. В дебажной версии у меня санитайзеры включаются по умолчанию например. Но мы по другое говорим, мы говорим про

многоступенчатый алгоритм обработки данных. Нужно понять почему на данных от нового заказчика результат работы алгоритма отличается на 0.05.

Т.е. код завершается нормально, ошибка в ответе воспроизводимая. Т.е. гонка, как и промахи по памяти тут скорее всего не причем.

день анализируешь терабайты логов

логи надо уметь писать, что бы их был не терабайт и что бы они содержали все нужное. Для этого как раз надо понимать что и как делает твой код.

дух старой школы

Каюсь, мне нравится как у Вас пригорает от старой школы. Давно не видел такого мощщного батхерта ниасилятора… Но хорошего понемножку. Давайте подведем итог - как надо отлаживать Ваш же кейс с отличаем на 0.05 на больших объемах данных Вы сами понятия не имеете. Отбери у Вас отладчик и Вы тут же превращаетесь в «анскильную лалку»(с). Скучно девочки…

AntonI ★★★★
()
Ответ на: комментарий от ox55ff

та что тут спорить, всему свое место и время.
есть проблемы, которые непонятно где и как возникают, ты видишь только последствия, когда уже поздно что-то дебажить - тут логирование поможет на отлично, чтобы просмотреть всю цепочку событий и найти что где пошло не так и привело к проблеме.

а если ситуации, когда модификация изначального кода, вставка логирования, к примеру, нарушает ход выполнения программы и, к примеру, один поток теперь успевает отработать до второго и нету репро больше. получается, что нельзя ничего логировать и вообще код менять - без очень вдумчивого чтения кода и просмотра состояния дабегером тут никак.

Keltir
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.