Ошибки при использовании THashSet из библиотеки коллекций DeHL - PullRequest
6 голосов
/ 20 июля 2011

Я довольно новичок в Delphi и пытаюсь использовать библиотеку DEHL Collections. (см. http://code.google.com/p/delphi-coll/) У меня небольшие проблемы с точки зрения IDE. Он компилируется и работает правильно, но Delphi XE показывает ошибки везде, где я использую библиотеку HashSet. Самое большое недовольство - это то, что я не могу использовать завершение кода.

Первое место, где я получаю сообщение об ошибке, находится в объявлении объекта:

uses
  SysUtils, Windows, Collections.Base, Collections.Sets, Collections.Lists,
  adscnnct, adstable,
  uOtherClass;

type
  OneClass = class(OtherClass)
    private
      _bad: THashSet<string>;   // THashSet underlined
      _good: TList<string>;     // No problems
  end;

Ошибка гласит: «Аргументы типа не соответствуют ограничениям»

Я не думаю, что это конфигурация, так как я могу нормально использовать TList, но вот как я ее настроил: я скопировал библиотеку в Projects / Libs / DeHLCollections / Library и скомпилировал библиотеку в Projects / Libs / бен. Я включил каталог bin в мой глобальный путь к библиотеке, что позволило его скомпилировать и запустить. Я попытался добавить все (/ libs, / DeHLCollections, / Library) к нему, а также в надежде получить IDE, чтобы помочь мне, но, похоже, это не помогает.

В любом случае, чтобы это исправить, или мне просто нужно разобраться с этим?

Использование DeHL Collections версия 1.1.1.119

1 Ответ

6 голосов
/ 20 июля 2011

Добро пожаловать в проблемы с использованием загруженного кода Generics. DeHL и дженерики работают в Delphi XE намного лучше, чем в любой предыдущей версии Delphi, но это не то же самое, что «без проблем». Проблемы, с которыми я сталкиваюсь, точно такие же, как ваша

Мое мнение таково, что DeHL демонстрирует все признаки того, что он написан мастером-программистом Delphi, и что это в некотором смысле прекрасно. Это также источник сильной боли, не по своей вине.

Delphi содержит не один или два, а как минимум три (может быть, четыре?) Отдельных синтаксических анализатора, включая полный анализатор компилятора, и несколько IDE-анализаторов, используемых для таких вещей, как Error Insight (ошибки, которые вы видите даже перед сборкой) и анализатор данных завершения кода. У каждого есть свои ограничения языковой поддержки в отношении дженериков. Возможно, что DeHL мог быть написан, чтобы избежать проблем с парсером со всеми различными парсерами Delphi. Я не видел ни одного написанного руководства, которое бы показывало ограничения, но я не удивлюсь, если объявления сложных типов в форме TSomething<TSomething<ISomethingElse>,TBar<IFoo>> сломают больше, чем некоторые из этих синтаксических анализаторов.

Если вы намереваетесь использовать Generics очень интенсивно, вы также можете отключить Completion Code and Error Insight. Возможно, вам также захочется часто сохранять данные и быть готовым испытать множество проблем с компилятором. И не пытайтесь скомпилировать универсальный код и помещать его в пакеты. Я испытал много URW и AV (внутренние ошибки компилятора), когда я писал обобщенный код. Я обнаружил, что команда компиляторов Delphi великолепно исправляет все, о чем сообщают, но что Generics действительно наиболее стабильны для меня, когда я ограничиваю себя использованием Generics.Collections, поставляемым с Delphi, и не использую другой код, основанный на обобщениях. Кажется, что можно написать материал, используя общие функции, которые IDE и двусторонние инструменты, и завершение кода еще не полностью готовы для обработки. Это означает, что феноменальные космические универсальные силы обходятся классическими функциями производительности RAD IDE.

Тем не менее, последние исходники DeHL из Subversion прекрасно работают для меня и собираются и работают без ошибок, но у самого последнего ZIP-архива с исходным кодом всей коллекции DeHL были проблемы для меня.

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

...