ide — Сложнее ли разбирать синтаксическую структуру C ++, чем другие языки?

Я заметил, что почти во всех IDE завершение кода для Java и C # лучше, чем для C ++. Например, в Netbeans автоматическое завершение Java намного превосходит автоматическое завершение C ++, в то время как в Visual Studio автоматическое завершение C # намного лучше, чем Visual C ++.

Существует множество IDE, предлагающих очень хорошее автозаполнение Java, но это не относится к C ++, хотя это более старый язык.

Сложнее ли разбирать C ++? Если так, то почему?

5

Решение

Разбор C ++ сложнее, потому что грамматика очень сложная. Зная ли A * b; такое объявление указателя или умножение зависит от того, является ли идентификатор A в текущей области видимости ссылается на тип или переменную.

Но это не просто разбор. Автозаполнение требует семантического анализа, разрешения перегрузки, расширения шаблона, выбора специализаций шаблона, оценки функций constexpr, поскольку они могут появляться в списках аргументов шаблона …

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

Большинство из вышеперечисленных шагов не относятся к языкам, которые не имеют специализации шаблонов.

9

Другие решения

C ++ FQA имеет много информации об этом (хотя она написана в стиле, который можно охарактеризовать как «очень неформальный»).

Вот что говорит об этих факторах:

является AA BB(CC); определение объекта или объявление функции? Получается, что ответ сильно зависит от кода перед оператором — «контекста». Это показывает (на интуитивном уровне), что грамматика C ++ довольно контекстно-зависима.

Итак, давайте найдем определение CC и продолжим, верно?

невозможно определить, в каких файлах определен CC, или какие файлы нужно проанализировать, чтобы «понять» его определение

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

Другое преимущество, которое Java и C # имеют перед C ++ в этой области, — это отражение. После того, как вы скомпилировали класс Java, вы можете загрузить его в JVM (и вы знаете, в каком файле он находится, потому что Java определяет эти вещи) и использовать стандартный интерфейс, чтобы узнать о его методах и так далее. C ++ не предоставляет такую ​​возможность.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector