Russian Qt Forum
Ноябрь 25, 2024, 13:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Какая IDE лучше для кода С++? (На данный момент)  (Прочитано 18942 раз)
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #15 : Февраль 23, 2013, 21:40 »

Мелко. Пусть он сам программы пишет. Зачем вообще с тобой согласовывать? Улыбающийся
Причем здесь сам пишет? Автоматический рефакторинг  - трансформация кода с полным сохранением семантики. В нормальных IDE для Java/C# это есть и работает корректно.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #16 : Февраль 23, 2013, 21:43 »

Причем здесь сам пишет? Автоматический рефакторинг  - трансформация кода с полным сохранением семантики. В нормальных IDE для Java/C# это есть и работает корректно.
Так ты так и не написал, что по твоему мнению IDE должна была сделать в этом случае.
Записан
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #17 : Февраль 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);
}
« Последнее редактирование: Февраль 23, 2013, 22:22 от kamre » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #18 : Февраль 23, 2013, 22:26 »

Во-первых, IDE не должна по тихому ломать код (менять семантику). А во-вторых, переименование A::func должно приводить к переименованию B::func
То есть переименовав по тихому B::func (хотя ее никто не просил) она поступит лучше? Или изменив шаблон с дефайном?
Записан
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #19 : Февраль 23, 2013, 22:36 »

То есть переименовав по тихому B::func (хотя ее никто не просил) она поступит лучше? Или изменив шаблон с дефайном?
А ничего, что при rename все ссылки в коде на элемент также должны быть корректно переименованы?
И если, например, переименовывается виртуальная функция, то изменения будут во всей иерархии классов перегружающих эту функцию. Это и есть автоматический рефакторинг rename.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #20 : Февраль 23, 2013, 22:56 »

А ничего, что при rename все ссылки в коде на элемент также должны быть корректно переименованы?
А корректно это как? Улыбающийся

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

Сообщений: 4350



Просмотр профиля
« Ответ #21 : Февраль 23, 2013, 23:05 »

Но вот почему, почему для самого крутого языка программирования нет среды нормальной?
А какие языки программирования вы еще посмотрели? Может есть круче? Улыбающийся
Записан
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #22 : Февраль 23, 2013, 23:07 »

А корректно это как? Улыбающийся
С полным сохранением семантики кода, как еще?

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

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

Сообщений: 4350



Просмотр профиля
« Ответ #23 : Февраль 23, 2013, 23:11 »

А не то как сейчас все подряд IDE переименовывают что попало и ничего не проверяют на корректность.
Сейчас она исправляет, то в чем она уверена, точнее именно то что попросил пользователь. Это ожидаемое поведение, в отличие от исправления всего, что подходит под шаблон.
Записан
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #24 : Февраль 23, 2013, 23:29 »

Сейчас она исправляет, то в чем она уверена, точнее именно то что попросил пользователь. Это ожидаемое поведение, в отличие от исправления всего, что подходит под шаблон.
Некорректно же исправляет, код после после рефакторинга даже не компилируется. Это разве ожидаемое поведение?

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

Сообщений: 4350



Просмотр профиля
« Ответ #25 : Февраль 23, 2013, 23:40 »

Некорректно же исправляет, код после после рефакторинга даже не компилируется. Это разве ожидаемое поведение?
Так к "не компилируемости" можно прийти и переименовав все методы. Очень сложно оценить, что нужно переименовывать, а что нет.
Под твой шаблон подходят все классы, в которых есть метод func.
Записан
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #26 : Февраль 24, 2013, 00:05 »

Под твой шаблон подходят все классы, в которых есть метод func.
С чего бы вдруг? При инстанцировании шаблона устанавливается связь между методом A::func и вызовом func внутри шаблона. Если с классом B не было инстанцирований этого же шаблона, то не нужно переименовывать B::func, даже если такая функция там есть. Неужели не очевидно, что инстанцирование шаблонов и раскрытие макросов вводит новые связи между разными элементами в коде? И при тупом переименовывании эти связи нарушаются и код обычно перестает компилироваться.
Записан
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #27 : Февраль 24, 2013, 00:08 »

Так к "не компилируемости" можно прийти и переименовав все методы.
При корректном рефакторинге rename нельзя прийти к "не компилируемости", это же рефакторинг и он не меняет семантику кода. Все ссылки на элемент должны быть аккуратно переименованы.
Записан
Nagdiel
Гость
« Ответ #28 : Февраль 24, 2013, 02:09 »

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

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

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

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


Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #29 : Февраль 24, 2013, 09:44 »

С чего бы вдруг? При инстанцировании шаблона устанавливается связь между методом A::func и вызовом func внутри шаблона. Если с классом B не было инстанцирований этого же шаблона, то не нужно переименовывать B::func, даже если такая функция там есть.
Для "понятия" этого IDE должна быть по сути компилятором или пользоваться для раскручивания этого компилятором. Когда clang будет торт, он этот функционал сможет предоставлять всем желающим. А пока... как мне кажется, слишком тяжело, только для рефакторинга, писать полноценный парсер C++.
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.192 секунд. Запросов: 22.