LINUX.ORG.RU

IDE для девелопмента


0

0

Недавно поставил Linux, хотел посоветоваться насчет удобной IDE для девелопиента на C/C++. В винде пользовался SourceInsight, на мой взгляд для девелопмента практически иделаьная среда. Конечно, можно ее запустить под wine, но работает она под ней не совсем корректно. Есть ли в Linux нечто подобное? Для меня впервую очередь интересует возможность качественной навигации по многофайловому проекту, чтобы могла находить что и где объявлено, поиск ссылок и т.д.


Ответ на: комментарий от gaa

> > Глазами и грепом искать refrences на плюсовом коде гораздо менее эффективно, чем с помощью нормального С++ front-end. Греп же вообще не имеет понятия о контексте, он просто тупо обрабатывает код как текст.

> Я не спорю. Но случаев, когда я глазками не мог углядеть контекст, я не видел. Может быть, мне просто не попадались проекты, где глобальные переменные имеют имена i,k,p :)

Поптыюсь на примере пояснить :) Пусть имеются классы

class Base { virtual void func() {...} };

class Derived: pulbic Based { virtual void func() {...} };

class Other { void func() {...} };

Нужно найти все references для Derived::func(). При этом не должно быть ложных срабатываний для Other::func() или для Base:::func() (если func вызывается у экземпляра Base, если же по ссылке/указателю - то должно быть в результатах поиска). Также не должно быть ложных срабатываний на локальных переменных, названных func, на static функциях внутри cpp файла. Вообщем нужны только те места в коде, в которые компилятор вставит вызов функции Derived::func() явно или через ссылку/указатель на Base или Derived.

Запускаем греп и он вываливает просто огромную кучу результатов, сотни мест с разными контекстами. А правильных и интересующих результатов может быть раз в 5-10 меньше. И как же здесь глазками углядеть то? А нормальные IDE с хорошими анализаторами кода как раз и выдают только нужное и ничего лишнего, т.к. разбирают код и учитывают правила языка.

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

Вобщем щас gaa скажет что C☦☦ говно, в том числе и потому что вим с ним плехо работает.

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

> Вообщем нужны только те места в коде, в которые компилятор вставит вызов функции Derived::func() явно или через ссылку/указатель на Base или Derived.

Мне всё это понятно, причём даже без примера. Но часто ли поиск совпадений в таком коде занимает большое количество времени? (Всё-таки, я не считаю нормальным тот код, в котором куча разнородных функций имеет одинаковые имена)

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

Видимо непонятно если слово virtual ты пропустил и выдал "я не считаю нормальным тот код, в котором куча разнородных функций имеет одинаковые имена"

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

> Видимо непонятно если слово virtual ты пропустил и выдал "я не считаю нормальным тот код, в котором куча разнородных функций имеет одинаковые имена"

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

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

> Но часто ли поиск совпадений в таком коде занимает большое количество времени? (Всё-таки, я не считаю нормальным тот код, в котором куча разнородных функций имеет одинаковые имена)

А как же контекст, в котором дается название функции/переменной? Ведь С++ это уже не C, разные классы/namespaces используются в разных контекстах и запросто могут иметь функции с одинаковыми именами.

А при заведении локальной переменной предлагается не выбирать наиболее удобное и подходящее имя, а сначала просмотреть все имена функций из всех классов, чтобы коллизию для грепа не создавать?

Да и вообще уже какие-то отмазки пошли:

> не встречал проблем с поиском глазами даже в самом зверском быдлокоде

и

> Всё-таки, я не считаю нормальным тот код, в котором куча разнородных функций имеет одинаковые имена

Так что греп мало подходит для поиска refrences в большом проекте. Только как last resort.

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

>> Но часто ли поиск совпадений в таком коде занимает большое количество времени? (Всё-таки, я не считаю нормальным тот код, в котором куча разнородных функций имеет одинаковые имена)

> А как же контекст, в котором дается название функции/переменной? Ведь С++ это уже не C, разные классы/namespaces используются в разных контекстах и запросто могут иметь функции с одинаковыми именами.


Могут иметь. Любая возможность может быть использована для усложнения жизни.

> А при заведении локальной переменной предлагается не выбирать наиболее удобное и подходящее имя, а сначала просмотреть все имена функций из всех классов, чтобы коллизию для грепа не создавать?


Зачем? Достаточно давать осмысленное имя. Вероятность того, что локальное имя i2 совпадёт с глобальным numberOfMacUsers низка.

> Да и вообще уже какие-то отмазки пошли:

>> не встречал проблем с поиском глазами даже в самом зверском быдлокоде

> и

>> Всё-таки, я не считаю нормальным тот код, в котором куча разнородных функций имеет одинаковые имена


Проблем не имел, но тем не менее такой код нормальным не считаю. С чего взято, что считаться ненормальным может быть только то, с чём были проблемы?

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

Си++, наследование, полиморфизм, namespace-ы, шаблоны, препроцессор и все прочее не нужны. Ведь их ctags + grep нормально не понимают. А что еще использовать бедному вимеру ?

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

> Си++, наследование, полиморфизм, namespace-ы, шаблоны, препроцессор и все прочее не нужны. Ведь их ctags + grep нормально не понимают. А что еще использовать бедному вимеру ?

Высказался? Аж прям полегчало, как будто в кого-нибудь какашку кинул, да?

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

> А что еще использовать бедному вимеру ?

Emacs! ;-)

ott ★★★★★
()

Какая жаркая дескуссия разгорелась! Не ожидал :) Всем спасибо за ответы!

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

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

трудно спорить, только я никак не пойму: eclipse это умеет или нет? или кого вообще тут обсуждают... запутался.

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