Russian Qt Forum

Qt => Общие вопросы => Тема начата: yarick от Февраль 23, 2013, 10:48



Название: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: yarick от Февраль 23, 2013, 10:48
Сейчас работаю в QtCreator, в общем им доволен, однако там не хватает некоторых полезных фишек, которые есть в NetBeans (например, автозаполнение не такое умное)
Вообще, какая среда лучше чисто для языка?
В QtCreator есть конструктор форм, который мне нафиг не нужен, т.к. всё в коде размещаю - много динамического контента.
Мне нужен именно хороший, удобный редактор С++ кода. Желательно, чтобы к нему было много плагинов (крутая расширяемость) и можно было настроить под себя.

VS не предлагать, только открытые и бесплатные.
Как мне кажется, лучшим решением будет NetBeans - он самый удобный, но не будет ли это извращенством? Он ведь на яву оптимизирован, хотя плюсы поддерживает тоже.
Есть ещё Code::Blocks, работал там одно время но он не такой удобный...


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: kuzulis от Февраль 23, 2013, 11:40
KDevelop :)


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: kamre от Февраль 23, 2013, 11:46
Для C++ все IDE косячные, ни одна не умеет корректно рефакторинг rename  делать.
Но самый нормальный отладчик в MSVC, да и Visual Assist хоть и глючная штука, но вполне можно пользоваться.


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: yarick от Февраль 23, 2013, 13:13
Для C++ все IDE косячные
Это я заметил... Но вот почему, почему для самого крутого языка программирования нет среды нормальной? На нём же большинство софта для ПК создаётся


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: Patrin Andrey от Февраль 23, 2013, 13:24
Для C++ все IDE косячные, ни одна не умеет корректно рефакторинг rename  делать.
Ни разу не замечал чтобы креатор, студия или sourceinsight косячили при ренэймах. пример можно?


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: kamre от Февраль 23, 2013, 13:43
Ни разу не замечал чтобы креатор, студия или sourceinsight косячили при ренэймах. пример можно?
Да элементарно, достаточно препроцессором воспользоваться или шаблонами.
Код:
#define call_func(x) x.func();

template <typename T>
void call_func_templ(T t) { t.func(); }

struct A {
  void func() {}  // <== rename this function
};

struct B {
  void func() {}
};

int main()
{
  A a;
  B b;
  call_func(a);
  call_func(b);
  call_func_templ(a);
  call_func_templ(b);
}


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: kambala от Февраль 23, 2013, 13:56
студия+ассист. в мак ос xcode стал неплохим, правда порой выжирает всю оперативку и крашится.


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: Old от Февраль 23, 2013, 14:40
Для C++ все IDE косячные, ни одна не умеет корректно рефакторинг rename  делать.
Не знаю, что такое рефакторинг rename, но у меня KDevelop такие навороты раскручивает с шаблонами и typedef'ами. Сам удивляюсь.
А скоро, когда в QtCreatore доделают подсветку с использован clang, так он вообще все будет раскручивать, наравне с компилятором.


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: kamre от Февраль 23, 2013, 14:57
Не знаю, что такое рефакторинг rename, но у меня KDevelop такие навороты раскручивает с шаблонами и typedef'ами.
Переименование элемента же. Расскажи как он у тебя делает переименование на простейшем коде с шаблоном/макросов выше.


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: Old от Февраль 23, 2013, 15:06
Переименование элемента же. Расскажи как он у тебя делает переименование на простейшем коде с шаблоном/макросов выше.
Переименовал только в одном месте, в самой структуре.


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: Nimbus от Февраль 23, 2013, 15:15
Eclipse + CDT


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: kamre от Февраль 23, 2013, 15:17
Переименование элемента же. Расскажи как он у тебя делает переименование на простейшем коде с шаблоном/макросов выше.
Переименовал только в одном месте, в самой структуре.
Типичное некорректное поведение. Семантика кода не сохранилась, даже компилироваться не будет.


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: Old от Февраль 23, 2013, 15:22
Типичное некорректное поведение. Семантика кода не сохранилась, даже компилироваться не будет.
А как бы ты хотел, что бы он сделал?  ::)


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: kamre от Февраль 23, 2013, 15:53
А как бы ты хотел, что бы он сделал?  ::)
Чтобы сообщил, что переименование затронет еще и B::func, спросил подтверждения и переименовал все корректно с сохранением семантики кода. А не тупо переименовал что попало и привел код в несовместное состояние.


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: Old от Февраль 23, 2013, 21:26
переименовал все корректно с сохранением семантики кода.
Мелко. Пусть он сам программы пишет. Зачем вообще с тобой согласовывать? :)


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: kamre от Февраль 23, 2013, 21:40
Мелко. Пусть он сам программы пишет. Зачем вообще с тобой согласовывать? :)
Причем здесь сам пишет? Автоматический рефакторинг  - трансформация кода с полным сохранением семантики. В нормальных IDE для Java/C# это есть и работает корректно.


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: Old от Февраль 23, 2013, 21:43
Причем здесь сам пишет? Автоматический рефакторинг  - трансформация кода с полным сохранением семантики. В нормальных IDE для Java/C# это есть и работает корректно.
Так ты так и не написал, что по твоему мнению IDE должна была сделать в этом случае.


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: kamre от Февраль 23, 2013, 22:18
Так ты так и не написал, что по твоему мнению IDE должна была сделать в этом случае.
Как это не написал? Во-первых, IDE не должна по тихому ломать код (менять семантику). А во-вторых, переименование A::func должно приводить к переименованию B::func и соответствующих мест в макросе и шаблонной функции:
Код:
#define call_func(x) x.do_smth();

template <typename T>
void call_func_templ(T t) { t.do_smth(); }

struct A {
  void do_smth() {}  // <== renamed: func => do_smth
};

struct B {
  void do_smth() {}
};

int main()
{
  A a;
  B b;
  call_func(a);
  call_func(b);
  call_func_templ(a);
  call_func_templ(b);
}


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: Old от Февраль 23, 2013, 22:26
Во-первых, IDE не должна по тихому ломать код (менять семантику). А во-вторых, переименование A::func должно приводить к переименованию B::func
То есть переименовав по тихому B::func (хотя ее никто не просил) она поступит лучше? Или изменив шаблон с дефайном?


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: kamre от Февраль 23, 2013, 22:36
То есть переименовав по тихому B::func (хотя ее никто не просил) она поступит лучше? Или изменив шаблон с дефайном?
А ничего, что при rename все ссылки в коде на элемент также должны быть корректно переименованы?
И если, например, переименовывается виртуальная функция, то изменения будут во всей иерархии классов перегружающих эту функцию. Это и есть автоматический рефакторинг rename.


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: Old от Февраль 23, 2013, 22:56
А ничего, что при rename все ссылки в коде на элемент также должны быть корректно переименованы?
А корректно это как? :)

И если, например, переименовывается виртуальная функция, то изменения будут во всей иерархии классов перегружающих эту функцию. Это и есть автоматический рефакторинг rename.
:)
Смотри: у нас есть 100500 файлов с 100500 классов в которых есть метод run. Эти классы вообще никак не связаны между собой. При изменении в одном из классов метода run на calc эти методы должны быть переименованы во всех остальных классах? Ну, что бы они подходили под один шаблон?


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: Old от Февраль 23, 2013, 23:05
Но вот почему, почему для самого крутого языка программирования нет среды нормальной?
А какие языки программирования вы еще посмотрели? Может есть круче? :)


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: kamre от Февраль 23, 2013, 23:07
А корректно это как? :)
С полным сохранением семантики кода, как еще?

Смотри: у нас есть 100500 файлов с 100500 классов в которых есть метод run. Эти классы вообще никак не связаны между собой. При изменении в одном из классов метода run на calc эти методы должны быть переименованы во всех остальных классах? Ну, что бы они подходили под один шаблон?
А какие другие варианты, если все 100500 классов участвуют в инстанцировании одного и того же шаблона? Концептов же до сих пор нет в C++, вот они и определяли бы связь между этими 100500 классами, чтобы они могли использоваться при инстанцировании.

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


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: Old от Февраль 23, 2013, 23:11
А не то как сейчас все подряд IDE переименовывают что попало и ничего не проверяют на корректность.
Сейчас она исправляет, то в чем она уверена, точнее именно то что попросил пользователь. Это ожидаемое поведение, в отличие от исправления всего, что подходит под шаблон.


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: kamre от Февраль 23, 2013, 23:29
Сейчас она исправляет, то в чем она уверена, точнее именно то что попросил пользователь. Это ожидаемое поведение, в отличие от исправления всего, что подходит под шаблон.
Некорректно же исправляет, код после после рефакторинга даже не компилируется. Это разве ожидаемое поведение?

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


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: Old от Февраль 23, 2013, 23:40
Некорректно же исправляет, код после после рефакторинга даже не компилируется. Это разве ожидаемое поведение?
Так к "не компилируемости" можно прийти и переименовав все методы. Очень сложно оценить, что нужно переименовывать, а что нет.
Под твой шаблон подходят все классы, в которых есть метод func.


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: kamre от Февраль 24, 2013, 00:05
Под твой шаблон подходят все классы, в которых есть метод func.
С чего бы вдруг? При инстанцировании шаблона устанавливается связь между методом A::func и вызовом func внутри шаблона. Если с классом B не было инстанцирований этого же шаблона, то не нужно переименовывать B::func, даже если такая функция там есть. Неужели не очевидно, что инстанцирование шаблонов и раскрытие макросов вводит новые связи между разными элементами в коде? И при тупом переименовывании эти связи нарушаются и код обычно перестает компилироваться.


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: kamre от Февраль 24, 2013, 00:08
Так к "не компилируемости" можно прийти и переименовав все методы.
При корректном рефакторинге rename нельзя прийти к "не компилируемости", это же рефакторинг и он не меняет семантику кода. Все ссылки на элемент должны быть аккуратно переименованы.


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: Nagdiel от Февраль 24, 2013, 02:09
Как мне кажется, лучшим решением будет NetBeans - он самый удобный, но не будет ли это извращенством? Он ведь на яву оптимизирован, хотя плюсы поддерживает тоже.

Ну и пользуйтесь им, если нравится. NetBeans c Qt отлично интегрируется.

...но не будет ли это извращенством? Он ведь на яву оптимизирован, хотя плюсы поддерживает тоже.

А какая разница, на чем интерфейс IDE сделан? Или Вам эстетические соображения мешают писать С++ код в IDE, сделанной на яве?




Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: Old от Февраль 24, 2013, 09:44
С чего бы вдруг? При инстанцировании шаблона устанавливается связь между методом A::func и вызовом func внутри шаблона. Если с классом B не было инстанцирований этого же шаблона, то не нужно переименовывать B::func, даже если такая функция там есть.
Для "понятия" этого IDE должна быть по сути компилятором или пользоваться для раскручивания этого компилятором. Когда clang будет торт, он этот функционал сможет предоставлять всем желающим. А пока... как мне кажется, слишком тяжело, только для рефакторинга, писать полноценный парсер C++.


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: kamre от Февраль 24, 2013, 10:53
Для "понятия" этого IDE должна быть по сути компилятором или пользоваться для раскручивания этого компилятором.
А нормальные IDE всегда содержат полноценный front-end компилятора для того языка, который поддерживают. Это верно для Java/Scala/C# IDE. В Eclipse JDT вообще полностью свой инкрементальный компилятор, и все связи в коде устанавливаются корректно и автоматические рефакторинги работают. А для C++ пока нет нормальных и удобных IDE, все обзавелись какими-то кривыми парсерами, которые не позволяют полностью учитывать семантику языка.


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: Old от Февраль 24, 2013, 11:11
пока нет нормальных и удобных IDE, все обзавелись какими-то кривыми парсерами, которые не позволяют полностью учитывать семантику языка.
Ждем clang... :)


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: Bepec от Февраль 24, 2013, 13:17
Парсер должен полностью знать весь синтаксис С++, полностью просчитывать связи и зависимости между классами/проектами и прочим. Если б был готовый функционал из коробки (допустим возвращение компилятором мест где используется текущая переменная), тогда проблемы не было.

Сейчас же проблема именно в том, что парсеры видят не проект, а файлы. Максимум может поменять в cpp/h одного файла.


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: ViTech от Февраль 24, 2013, 13:37
Тут не все компиляторы могут полностью реализовать все возможности C++ (в частности С++11), чего же ждать от самопальных парсеров :).


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: kamre от Февраль 24, 2013, 13:53
Сейчас же проблема именно в том, что парсеры видят не проект, а файлы. Максимум может поменять в cpp/h одного файла.
Да даже в одном простом файле IDE не могут разобраться, так что это не проблема проект/файл.


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: Bepec от Февраль 24, 2013, 16:54
Незнаю, пользуюсь последним лицензионным Visual assist - переименовывает нормально, но в пределах одного класса (h/cpp реализации).


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: Igors от Февраль 24, 2013, 17:22
Тема конечно "та еще", но по поводу переименования: я перетаскиваю на 64 и мне приходится заменять long на SInt32 и.т.п, так как long имеет разный sizeof на 32/64. Пробовал автоматизировать и так и сяк и в конце-концов пришел к выводу: лучше всего Cmd-F и Cmd-G, т.е. "по одному" и с обязательным просмотром контекста, хотя бы 1-2 сек. Иначе конечно можно заменить очень быстро (сэкономив 10-15 мин), но поиск ошибки выполнения может занять много часов. После пары таких залетов - энтузиазм к "автоматике" полностью испаряется.

Да, и какое вумное слово "семантика" (не так себе, хухры-мухры :))


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: yarick от Февраль 24, 2013, 17:30
Всё-таки лучше останусь на Qt Creator, раз нет единого мнения) Он очень даже неплох как редактор


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: kamre от Февраль 24, 2013, 18:43
Незнаю, пользуюсь последним лицензионным Visual assist - переименовывает нормально, но в пределах одного класса (h/cpp реализации).
И как он "нормально" переименовывает приведенный выше пример кода?
У меня VA какой-то не очень новый (и не очень лицензионный) переименовывает кроме самой функции A::func еще только внутри макроса тем самым полностью поломав код.


Название: Re: Какая IDE лучше для кода С++? (На данный момент)
Отправлено: Пантер от Февраль 25, 2013, 09:27
KDevelop

//тред не читал