Re[20]: Список
От: alex_public  
Дата: 06.01.17 05:58
Оценка: 2 (1) +3 -1
Здравствуйте, Qbit86, Вы писали:

Q>В C++ это не так: выбираешь ли ты «Go To Declaration Ctrl+F12», или «Go To Definition F12» — он может выдать список. Потому что компилятор на «этапе чтения мной кода» (евпочя) не имеет достаточной информации; он будет её иметь, только когда я попытаюсь код вызвать, SFINAE, и всё такое. А в нормальных языках компилятору не нужна поздняя стадия инстанцирования, чтобы знать, что к чему.

Q>Разобрался?

Что-то ты тут бредишь, причём сразу по нескольким пунктам.

1. Компиляторы не имеет никакого отношения ни к каким "Go To Declaration" или "Go To Definition". Они занимаются исключительно преобразованием исходных кодов в исполняемые и всё. А то, что ты описываешь — это работа IDE, у которых для этих целей есть свои анализаторы кода.

2. IDE и для C++ и для C# бывают разные, с очень разными анализаторами кода. Начиная от простейших на базе ctags и кончая сложными решениями, строящими полноценное AST в реальном времени. Уточни про какую конкретную IDE ты пишешь и какие конкретно примеры в ней работают не так, как тебе нравится. Возможно тебе подскажут IDE, которая делает всё как надо.

3. Рассуждения о недостаточности информации у IDE для построения полноценного AST (причём почему-то именно для C++) вообще смешны. Т.е. у компилятора есть вся необходимая информация (он же создаёт вполне однозначный исполняемый файл по данных исходникам), а у IDE значит нет? Откуда тогда её берёт компилятор, телепатически? На самом деле каждому адекватному специалисту вполне очевидно, что вся необходимая информация у IDE имеется и в C# и в C++. Разница тут в другом, достаточно банальном нюансе — для анализа C++ кода требуется существенно больше процессорного времени, так что построение AST в реальном времени (а именно это надо в IDE) является не такой простой задачей, как в случае C#. Соответственно в прошлом подобные анализаторы для C++ или работали точно, но сильно подтормаживали, или же работали быстро, но использовали некоторые эмпирики. Отсюда появление у некоторых неразбирающихся программистов мифов о невозможности анализа C++ кода в IDE. Однако в большинстве случае это уже всё в прошлом — анализаторы постоянно совершенствовались, оптимизировались и сейчас уже вполне себе нормально работает в реалтаймe и для сложного C++. Естественно речь про лидеров в данной области, а не про всякие убогие IDE.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.