Как действительно Возражает. GetHashCode работают, когда GC перемещает объект?

  • Emacs
  • Vim

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

23
задан Wesley Hill 10 November 2009 в 12:03
поделиться

1 ответ

Нет, это неправда. Люди просто используют то, что им больше всего нравится. Определение IDE также немного слабое. В Linux очень мощны многие текстовые редакторы, например Emacs. Возможно, вы уже могли бы назвать этот текстовый редактор IDE. Хотя, чтобы указать на разницу, Emacs (и другие текстовые редакторы) изначально были очень общими и писали с его помощью что угодно, а удобные инструменты / функции для разработки C / C ++ / чего угодно были добавлены позже. И их поддержка языков программирования в основном * охватывает только подсветку синтаксиса, не более того.

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

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

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

Я перечислю некоторые IDE, которые я считаю лучшими с точки зрения функциональности, специфичной для этого языка (например, автозавершение кода и многое другое).

Для C / C ++:

  1. KDevelop

    Насколько я знаю, не существует IDE, которая лучше поддерживала бы C / C ++. Я не нашел другого инструмента, который обрабатывает C ++ таким образом, чтобы он действительно понимал STL, что важно, чтобы вы могли использовать автозаполнение для контейнеров STL и тому подобного. Он даже понимает макросы, поэтому автозаполнение работает даже в очень сложных случаях с множеством макротрюков. Я работаю над проектом C ++ с локальным размером ~ 250 тыс., И он понял весь код. (Чтобы использовать расширенную поддержку C / C ++, вы должны активировать ее в настройках проекта, она по умолчанию отключена. Кроме того, чтобы иметь полную поддержку STL, я подготовил заголовки STL и добавил их к поддержке C ++ в настройках проекта вручную. . Не знаю, нужно ли это еще. Но я думаю, что это все еще не работает из коробки.)

    Кроме того, KDevelop очень шустрый и быстрый (разработан сам на C ++), по сравнению со многими другие IDE. Он загружается почти так же быстро, как и любой другой простой текстовый редактор, и кажется таким же быстрым. И это также не меняется для очень больших проектов. При этом я сам использую его только для редактирования / написания кода, а не для управления компиляцией проекта. У него есть поддержка automake, но я предпочитаю использовать CMake. Но KDevelop с этим отлично справляется: когда я нажимаю "компиляция" в KDevelop, он просто запускает make.

    Изначально KDevelop разрабатывался как инструмент разработки для приложений KDE, но он отлично работает для любого проекта C / C ++. На самом деле я никогда не делал с ним никаких проектов Qt / KDE. Кроме того, позже была добавлена ​​поддержка других языков, таких как Ada, но я этого не пробовал.

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

  2. Eclipse

    Вы, наверное, уже это знаете. Первоначально он был разработан на Java и для нее. Позже была добавлена ​​поддержка C / C ++.

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

    Поддержка C ++ хорошая, хотя и не идеальная; Есть случаи, когда автозаполнение не работает.

    Возможности и особенности самой IDE очень богаты. Я не знаю многих других таких больших (раздутых) IDE. Это, вместе с тем, что он находится в Java, заставляет его часто чувствовать себя очень медленным, а иногда и зависать, когда вы что-то пишете. Также очень велико использование памяти.

  3. Qt Creator

    Первоначально для разработки Qt, но также подходит для любых других проектов C / C ++. Очень хорошая поддержка qmake.

    Поддержка C ++ хороша, только небольшие проблемы. Кроме того, IDE является быстрой и быстрой.

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

  4. CLion

    (коммерческая, но бесплатная версия.) Новичок от JetBrains. Очень многообещающе.

Для Java:

  1. Eclipse

    См. Мои комментарии выше.

    Для Java, я думаю, это самая распространенная IDE в Linux. Те же недостатки, что отмечены выше, применимы и здесь, но я не знаю лучшей IDE, поэтому я продолжаю использовать Eclipse при разработке на Java.

  2. NetBeans

    Также и для Java. Никогда не пробовал, потому что в моем дистрибутиве Linux это не поддерживалось (я думаю, из-за проблем с лицензированием, не помню точно).

    В прошлом я видел много огорчений по поводу NetBeans-vs-Eclipse. На самом деле не знаю о текущем состоянии.

Для C #:

  1. MonoDevelop

    Я сам не пробовал, только слышал, что это один из лучших инструментов для C #. Просто хотел отметить, что, поскольку вы упомянули Visual Studio и вас может заинтересовать C #.

Я хочу добавить несколько слов об использовании терминала:

В дополнение к такой IDE очень часто встречается используйте терминал параллельно с вашей IDE. Терминал и все его оболочки вместе со всеми инструментами Unix и другими инструментами очень мощные, и вы можете выполнять многие задачи очень простым способом. Как только вы получите хорошее представление обо всех инструментах Unix и о том, как их использовать, они могут сэкономить вам много работы.

Часто в проекте есть задачи, которые нужно выполнять снова и снова. Это могут быть простые задачи, такие как управление исходным кодом и его распространение среди товарищей по команде, или более сложные задачи.

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

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

Возможно, это немного не по теме, но я просто хотел отметить это, потому что это распространенный и мощный способ работы. Когда вы как разработчик перешли с Windows на Linux, вы должны взглянуть на все те дополнительные возможности, которые у вас есть сейчас. Это основная причина для меня (и многих других), почему я предпочитаю разработку на Linux / Unix, чем на любой другой системе.


(*) Еще раз несколько слов к Emacs: Emacs может быть расширен моими многочисленными инструментами и плагинами, которые делают его очень богатой системой с той же функциональностью, что и IDE. Например, есть CEDET , который поставляется с реальной языковой поддержкой, т.е. у вас также есть такие функции, как интеллектуальное завершение слов / IntelliSense , а также система управления проектами. Сам я не пробовал, но сделаю это в ближайшие недели.

t возвращает значение на основе адреса. Он возвращает значение, основанное на блоке синхронизации для объекта.

Блок синхронизации выделяется при первом вызове объекта. Вызывается GetHashCode (если не переопределено) или есть разногласия по замок для объекта. (Он может быть выделен, если вы вызываете Wait / Pulse / PulseAll тоже, я не смотрел.)

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

Вызывается GetHashCode (если он не переопределен) или возникает конфликт за блокировку объекта. (Он может быть выделен, если вы вызываете Wait / Pulse / PulseAll тоже, я не смотрел.)

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

Вызывается GetHashCode (если он не переопределен) или возникает конфликт блокировки для объекта. (Он может быть выделен, если вы вызываете Wait / Pulse / PulseAll тоже, я не смотрел.)

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

21
ответ дан 29 November 2019 в 02:56
поделиться
Другие вопросы по тегам:

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