Что нужно тестировать в 64-битном Delphi



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



Что должны тестировать бета-тестеры?

555   4  

4 ответов:

Embarcadero, вероятно, предоставит руководство тестировщика для бета-тестеров. Но вот некоторые идеи:

  • Выделение памяти, выравнивание, куча и стек. 32-бит может использовать до 4 ГБ (ну, 3,5) адресного пространства на 64-разрядной версии Windows с переключателем /LARGEADDRESSAWARE: Delphi64 должен быть в состоянии использовать гораздо больше. Попробуйте выделить 8, 16 и 32 ГБ. (Даже если у вас меньше оперативной памяти, выделение должно работать, так как это виртуальное адресное пространство.) Теперь читайте и запишите в него значения определенного места: проверьте ваше распределение и указатели все работают. Посмотрите, что Process Explorer сообщает для приложения. Проверьте свой стек: он работает сверху вниз, в отличие от кучи - как он выглядит, какие адреса он использует? Как выглядит 16-байтовое выравнивание? Сохраняется ли это выравнивание для всех внутренних функций Pascal или только для тех, которые вызывают внешний код? В 32-битном VCL были некоторые биты кода, которые не были безопасны для адресов размером более 2 ГБ. Иметь их уже починили? Что-нибудь ломается, когда оно выделяется, скажем, в 53-м ГБ адресного пространства вашей программы? (Попробуйте выделить огромное количество, а затем динамически создавать формы, элементы управления и т. д.-Они, вероятно, будут созданы с высокими адресами.) Фрагментирует ли менеджер памяти? Насколько быстро память перемещается и копируется?

  • Предупреждения компилятора. (Это очень важно.) обновите свои программы-скомпилируйте их без изменений и посмотрите, какие предупреждения / ошибки вы получите; исправьте любые; а затем исправьте ошибки, которые происходят, даже если вы не были предупреждены. С какими проблемами вы столкнулись? Компилятор должен был предупредить вас, но не сделал этого? Получаете ли вы предупреждения при усечении указателя при приведении к целому числу? А как насчет более сложных вопросов: если вы используете тип Single с плавающей запятой, что происходит? Предупреждение, или оно молчаливо представлено как double? Что делать, если вы передадите параметр методу другого размера - например, PostMessage, и вы передадите 32-разрядное значение в параметр handle - будет ли компилятор достаточно умен, чтобы догадаться, что если размер неправильный, ваш код может быть неправильным, даже если часто допустимо передавать меньший тип большему параметру? При каких обстоятельствах он должен это сделать? (Еще одна вещь: что делать, если вы передаете 64-битный указатель на 32-битный тип в методе, ожидающем указатель на 64-битный тип-безопасность типа должна громко кричать, но делает ли это? Примером использования для этого является чтение блоков из двоичного файла, что может легко вызвать проблемы с типами неправильных размеров.)...и т.д.

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

  • Пользовательские элементы управления и WinAPI. вероятно, у вас есть несколько таможенных контролей или битов кода, которые интенсивно используют API Windows вместо VCL. Есть ли какие-либо проблемы, связанные с Windows API?

  • Совместимость языков. работает ли старый файловый IO-код - AssignFile и т. д.? Библиотеку RTTI? Если у вас есть сигнатура события с типом Integer, и обработчик событий автоматически создается IDE, он генерируется как целое число или a размер-определенный целочисленный тип в зависимости от платформы, которая в данный момент установлена? А что, если событие родное, что тогда? (Я уже видел ошибки в генерации сигнатур метода обработчика событий, хотя только на стороне C++.)

  • Различные типы применения. мы можем предположить, что GUI-программы были хорошо протестированы. А как насчет консольных и служебных приложений?

  • Генерация файлов, совместимых с C++Builder. C++Builder не будет 64-битным в XE2, но надеюсь, будет в XE3. Дельфы могут производить ..ГЭС и .однако obj-файлы для кода Pascal. Что происходит в 64-битной платформе? Можете ли вы создать эти файлы, даже если они бесполезны? Генерирует ли компилятор специфичные для C++предупреждения в 64-разрядном режиме, или он сдается и не позволяет вам сделать это? В 32-разрядном режиме можно ли что-нибудь сделать для 64-разрядной совместимости, чтобы создать предупреждение, создающее заголовок C++?

  • Линкер. можете ли вы связать .Либ И.obj файлы создан с другими компиляторами? (Я ожидал этого .Либ да, .возражение нет.) Использует ли компоновщик COFF или OMF для 64-битной версии-они изменились? этот поток подразумевает формат ELF. Он тоже изменился на 32-битный? Влияет ли это на формат DCU, получим ли мы сверхбыструю компиляцию / компоновку?

  • COM и 64-битные Плагины. есть ли какие-либо проблемы с сортировкой? Можете ли вы построить 64-битный плагин для Explorer прямо сейчас?

  • Вызывая условности. Предполагается, что Safecall является единственным "соглашением о вызове" (если safecall считается...) это все еще другое - это все еще работает? Указатели функций и процедур, а также замыкания (указатели методов объектов): работают ли они? Как они выглядят в инспекторе отладки? Учитывая, что все соглашения о вызовах теперь одинаковы, если вы смешаете соглашения о вызовах в объявлении метода и указателе вызова, что произойдет? Есть ли вокруг какой-то наследственный материал, который сломается или он прозрачно работает? Сделать это сейчас дать вам (ошибочное) предупреждение о том, что типы несовместимы?

  • Математика с плавающей точкой. вDelphi 64 preview говорилось, что плавающая точка будет только двойной. Может ли Delphi обрабатывать long doubles? Существуют ли какие-либо процедуры совместимости для обработки старых Real (48 бит, я думаю??) типа? Генерирует ли компилятор код SSE или SSE2 или смесь, и насколько это хорошо?

  • Производительность. Это их первый переход на 64-битный компилятор; он будет вероятно, будет доработано в течение следующих нескольких релизов. Но есть ли какие-либо очевидные проблемы с производительностью, с:

    • Компиляция; связывание; инсайт IDE?

    • Сгенерированный код: ваши программы быстрее или медленнее? FP math быстрее или медленнее? Работает ли inline и генерирует ли он ненужные биты верхнего / нижнего колонтитула вокруг встроенных методов?

  • Отладка . Это, вероятно, легче всего проверить на протяжении всего процесса тестирования все остальное, но насколько хорошо работает 64-битный отладчик? Обладает ли он всеми функциональными возможностями 32-битного? Сделать IDE для отладки плагинов визуализатор работает? Что делать, если вы отлаживаете не Delphi 64-разрядную программу или подключаетесь к процессу, а не работаете нормально?

  • Misc сам Delphi компилируется как 64-битная программа? Если нет, то почему? (Они "едят свой собственный собачий корм"?) Код проверяет новый VCL(предполагая, что предварительный просмотр поставляется с исходным кодом VCL.) Что они сделали со мной? сделать VCL 32/64 совместимым? Есть ли какие-либо ошибки, или если вы уже хорошо знаете 64-битный код из других IDE, есть ли лучшие подходы, которые они могли бы использовать вместо этого?

...и т.д. Я мог бы печатать часами, но я думаю, что это хорошее начало:)

Я уверен, что Embarcadero предоставит некоторые рекомендации по тестированию. Как бы то ни было, это то, что я бы проверил; в основном потому, что это то, о чем я забочусь:

  • небольшое консольное приложение должно работать.
  • позволяет мне выделить 4 ГБ плоской части памяти. На самом деле это не нужно, но это будет первая вещь, которую попробует мое консольное приложение, сразу после WriteLn('I''m using all 64 bits!!!!');
  • можно создать 64-битную библиотеку DLL, а библиотеку DLL можно импортировать и использовать из другой среды.
  • Сделайте несколько простых вещи и посмотрите на сгенерированный ассемблер, просто для удовольствия.
  • может создать Firebird 64bit совместимый UDF
  • я бы, наверное, попробовал скомпилировать свои" утилитарные " блоки, потому что они делают изрядное количество манипуляций с указателями, посмотрите, как они работают.
  • Если VCL работает, я бы поставил его через его шаги: создайте маленькую форму, поместите на нее кнопку, ShowMessage.
Вообще говоря, единственное, что мне действительно нужно для 64-битного Delphi, - это 64-битный UDFs Firebird. Это незначительно и может быть " исправлено" использование FPC. Я предполагаю, что лучшее тестирование будет сделано людьми, которым на самом деленужен 64-битный delphi. И эти люди не нуждаются в тестовых предложениях.

На первом месте будет стоять базовый фундамент, чтобы гарантировать, что Delphi 64 можно использовать для того, что Delphi 32 нельзя использовать:

  • корректность компилятора : прежде всего, отсутствие внутренних ошибок, отсутствие неправильного кода-gen
  • возможность компиляции в 64-битные библиотеки DLL и стабильность их работы
  • выделите диспетчер памяти: с большими объектами, фрагментированным распределением, многопоточным распределением и т. д.
  • многопоточность: она стабильна? это эффективно? масштабируется ли он? что за основные RTL-функции и блоки, а также не забывая о ссылочных типах.
  • плавающая точка: предоставляет ли компилятор правильный SSE? правильно ли реализованы и корректны математические функции? что произойдет, если вы подчеркнете набор регистров SSE сложными выражениями?

И в качестве бонуса возможность принимать 64-битные объектные файлы от обычных компиляторов C++.

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

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

Майк

Comments

    Ничего не найдено.