Инструменты разработчика C++: темные области [закрываются]

Междоменный делегат только позволяет пустой метод с нулевыми параметрами, и это, вероятно, не, что Вы думаете, что это. Это только едва полезно как простой обратный вызов для целей уведомления от одного appdomain до другого, например, метод как InitComplete () или что-то.

Дистанционная работа является ЕДИНСТВЕННЫМ выбором, называете ли Вы его WCF или безотносительно, передавая сериализуемые типы, или с помощью типов MBRO (MarshalByRefObjects). Это не настолько твердо, как Вы думаете.

-Oisin

9
задан 2 revs, 2 users 100% 15 August 2017 в 08:15
поделиться

12 ответов

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

26
ответ дан 4 December 2019 в 05:51
поделиться

По вашему опыту, каких важных инструментов разработчика не хватает в C ++?

Автозавершение кода. Шутки в сторону. Рефакторинг - полезная функция, но я думаю, что завершение кода гораздо более фундаментально и более важно для обнаружения и удобства использования API.

По сути, инструменты, требующие любого незнания кода C ++, - отстой.

]
11
ответ дан 4 December 2019 в 05:51
поделиться

Генерация кода методов класса. Когда я ввожу объявление, вы сможете понять определение. И раз уж я говорю по теме, можем ли мы исправить "объявление goto / определение перехода", всегда идущее к объявлению?

Рефакторинг. Да, я знаю, что формально это невозможно из-за препроцессора, но компилятор все равно мог бы лучше выполнять поиск и замену имени переменной, чем я могу сделать это на практике. Вы также можете выделить синтаксис local, members и paramaters, пока вы в нем.

Lint. Значит, переменная, которую я только что определил, тени выше? C сказал бы мне это в 1979 году, но C ++ в 2009 году, по-видимому, предпочитает, чтобы я выяснял это самостоятельно.

Некоторые приличные сообщения об ошибках. Если я обещаю никогда не определять класс с таким же именем внутри метода класса - обещаете ли вы сообщить мне об отсутствующем "}". На самом деле, может ли компилятор иметь некоторые знания об истории - поэтому, если я добавлю несбалансированное "{" или "(" к ранее работающему файлу, можем ли мы упомянуть об этом в сообщении?

Могут ли сообщения об ошибках STL (извините за процитируйте другой комментарий) не похоже, что вы прочитали "/ dev / random", застряли перед "! / bin / perl", а затем пропустили налоговый код через результат?

Как насчет предупреждений о полезных вещах? "Используется целое число as bool performance warning "бесполезен, это не влияет на производительность, у меня нет выбора - это то, что делает библиотека, и вы уже говорили мне 50 раз. Но если я пропущу ";" от конца объявления класса или символа "}" в конце определения метода вы меня не предупреждаете - вы изо всех сил стараетесь найти наименее вероятный (но теоретически) правильный способ анализа результата.
Это похоже на встроенную в этот браузер проверку орфографии, которая с радостью принимает мои орфографические ошибки (потому что это написание - архаичный термин для кастрированного козла! Сколько раз я пишу о травоядных сопрано?)

Как насчет проверки орфографии? 40 лет назад в компиляторах Fortran для мэйнфреймов была проверка орфографии, поэтому, если вы написали с ошибкой «WRITE», вы не вернулись бы на следующий день к стопке карточек и сопливому сообщению об ошибке. Вы получили предупреждение, что "WRIET" был изменен на WRITE в строке X. Теперь компилятор с радостью продолжает и тратит 10 минут на создание большого файла просмотра и вывода отладчика, прежде чем сообщить вам, что вы сделали ошибку в printft 10 000 строк назад.

ps. Да, многие из них применимы только к Visual C ++.

pps. Да, они сейчас идут с моими лекарствами.

8
ответ дан 4 December 2019 в 05:51
поделиться

Компилятор, который пытается оптимизировать модель компиляции.

Вместо того, чтобы наивно включать заголовки по мере необходимости, повторно анализируя их в каждой единице компиляции, почему бы сначала не проанализировать заголовки, создать полный синтаксис деревья для них (которые должны были бы включать директивы препроцессора, поскольку мы еще не знаем, какие макросы определены), а затем просто проходить через это синтаксическое дерево всякий раз, когда включается заголовок, применяя известные #defines для его сокращения.

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

5
ответ дан 4 December 2019 в 05:51
поделиться

Быстрый и надежный индексатор. После этого появляется большинство необычных функций.

4
ответ дан 4 December 2019 в 05:51
поделиться

Основная Проблема с C ++ в том, что его трудно разобрать. Вот почему так мало инструментов, которые работают с исходным кодом. (И именно поэтому мы застряли с некоторыми из самых ужасных сообщений об ошибках в истории компиляторов.) В результате, за очень немногими исключениями (я знаю только doxygen и Visual Assist), все зависит от самого компилятора. чтобы поддержать все необходимое, чтобы помочь нам написать и обработать код. Поскольку компиляторы традиционно являются довольно упрощенными инструментами командной строки, это очень слабая основа для создания полноценной поддержки редактора.

Уже около десяти лет я работаю с VS. между тем, его завершение кода практически можно использовать. (Да, я работаю на двухъядерных машинах. В противном случае я бы не сказал этого, не так ли?) Если вы используете Visual Assist, автозавершение кода действительно неплохо. И сама VS, и VA в настоящее время имеют базовый рефакторинг. Это тоже почти применимо для тех немногих вещей, на которые оно направлено (хотя это все еще заметно меньше, чем завершение кода). Конечно, после более чем 15 лет рефакторинга, когда поиск и замена были единственным инструментом в коробке, мои требования, вероятно, сильно ухудшились по сравнению с другими языками, так что это может не иметь большого значения.

Однако мне по-прежнему не хватает: Полностью стандартных компиляторов и реализации стандартных библиотек на всех платформах, на которые переносится мой код. И я говорю это> 10 лет после выпуска последнего стандарта и примерно за год до выпуска следующего! (Это просто добавляет следующее: C ++ 1x получил широкое распространение к 2011 году. )

После того, как они будут решены, есть несколько вещей, которые продолжают упоминаться время от времени, но с какими поставщиками все еще борются соответствие стандарту> 10-летней давности (или, как это имеет место с некоторыми функциями, даже отказ от него), так и не удосужился заняться:

  • полезными, разумными, понятными сообщениями компилятора ( como на самом деле довольно хорош, но это только если вы сравните его с другими компиляторами C ++ ); компоновщик, который не просто вскидывает руки и говорит: «Что-то не так, я не могу продолжить» (если вы учили C ++ как первый язык, вы поймете, о чем я); концепции (' но это не может быть сказано слишком часто)
  • компилятор, который делает инструменты вроде lint бесполезными (не нужно бояться, производители lint , это просто принятие желаемого за действительное)

Если все эти и многие другие, о которых я забыл упомянуть (не стесняйтесь добавлять), решены, было бы неплохо получить поддержку рефакторинга, которая почти соответствует той же лиге, что, скажем, Java или C #. Но только тогда.

6
ответ дан 4 December 2019 в 05:51
поделиться

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

В настоящее время необходимо заменить только несколько скриптов perl, которые необходимо заменить usullay.

4
ответ дан 4 December 2019 в 05:51
поделиться

Я очень доволен состоянием инструментов C ++. Единственное, о чем я могу думать, - это установка Boost по умолчанию в VS / gcc.

3
ответ дан 4 December 2019 в 05:51
поделиться

Рефакторинг, рефакторинг, рефакторинг. И компиляция при наборе текста. Что касается рефакторинга, мне не хватает как минимум половины того, что может сделать большинство современных Java IDE. Несмотря на то, что Visual Assist X прошел долгий путь, многое не доработано. Задача написания кода на C ++ остается такой же. Написание кода на C ++. Чем больше IDE поддерживает высокоуровневый рефакторинг, тем больше становится конструкцией, чем более гибкой будет структура, тем легче будет перебирать структуру и улучшать ее. Возьмите демо-версию Intellij и посмотрите, что вам не хватает . Это лишь некоторые из тех, что я помню пару лет назад.

  • Извлечь интерфейс: взяты классы представления с общим интерфейсом,

3
ответ дан 4 December 2019 в 05:51
поделиться

Сам по себе инструмент: Соглашения об именах.

2
ответ дан 4 December 2019 в 05:51
поделиться

Интеллектуальный Intellisense / Завершение кода даже для кода с большим количеством шаблонов.

Когда вы находитесь внутри шаблона функции, конечно, компилятор ничего не может сказать точно ] о параметре шаблона (по крайней мере, без Концепций), но он должен уметь делать много предположений и оценок. В зависимости от того, как тип используется в функции, он должен иметь возможность сужать возможные типы, по сути, своего рода консервативные специальные концепции. Если одна строка в функции вызывает .Foo () для типа шаблона, очевидно, что должен существовать метод члена Foo, и Intellisense должен предложить его и в остальной части функции.

Он может даже посмотреть, где находится функция. вызывается из, и использовать это для определения хотя бы одного допустимого типа параметра шаблона, и просто предложите Intellisense внутри функции на основе этого.

Если функция вызывается с int в качестве параметра шаблона, то, очевидно, использование int должно быть допустимым, и поэтому IDE может использовать это как «типовой образец» внутри функции и предлагать предложения Intellisense на основе этого.

JavaScript только что получил поддержку Intellisense в VS, которая должна была преодолеть множество подобных проблем, так что это можно сделать. Конечно, с таким уровнем сложности C ++ это было бы нелепо. Но было бы неплохо.

внутри функции и предлагать Intellisense предложения, основанные на этом.

JavaScript только что получил поддержку Intellisense в VS, которая должна была преодолеть множество подобных проблем, так что это можно сделать. Конечно, с таким уровнем сложности C ++ это было бы нелепо. Но было бы неплохо.

внутри функции и предлагать Intellisense предложения, основанные на этом.

JavaScript только что получил поддержку Intellisense в VS, которая должна была преодолеть множество подобных проблем, так что это можно сделать. Конечно, с таким уровнем сложности C ++ это было бы нелепо. Но было бы неплохо.

2
ответ дан 4 December 2019 в 05:51
поделиться

Если говорить о MS Visual Studio C ++, Visual Assist - очень удобный инструмент для завершения кода, некоторых рефакторингов - например, переименования всех / выбранных ссылок, объявления find / goto, но я все еще скучаю по богатству Java IDE, таких как JBuilder или IntelliJ.

Я все еще скучаю по семантическому инструменту сравнения различий - вы знаете, тот, который сравнивает два файла не построчно, а операторы / выражения. То, что я нашел в Интернете, - это всего лишь несколько заброшенных попыток - если вы знаете одну, напишите в комментарии

6
ответ дан 4 December 2019 в 05:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: