FastCode - это проект программирования с открытым исходным кодом, направленный на предоставление расширенных подпрограмм библиотеки времени выполнения для Embarcadero Delphi и C ++ Builder. С момента своего создания в 2003 году он внес в 32-разрядную библиотеку времени выполнения Delphi (RTL) высоко оптимизированную функциональность. FastCode является уникальным среди вкладов в коммерческие библиотеки времени выполнения компилятора из-за его управляемости сообществом и с открытым исходным кодом.
Проект организован в виде конкурса, разделенного на задачи. Каждая задача выполняет одну функцию и оптимизирует ее по ряду целей. Проект предоставляет инструменты для тестирования и проверки каждой функции. Одно очко дается за каждый вклад (максимум одна функция на цель дает очки) и десять очков присуждаются за целевого победителя. Список со всеми участниками и их оценками поддерживается, и в конце каждого года, до 2008 года, отмечался победитель. Borland, Codegear и Embarcadero, владельцы Delphi и C ++ Builder, исторически спонсировали призы.
Большинство участников конкурса - разработчики ассемблера, которые часто используют 32-битный код для конкретного процессора и дополнительные наборы инструкций, такие как MMX, SSE, SSE2, SSE3, SSSE3 и SSE4.
Проект пользуется поддержкой Embarcadero, который признает вклад команды FastCode и включает их код в кодовая база для Delphi. По умолчанию диспетчер памяти для Embarcadero Delphi, FastMM4, является победителем в конкурсе FastCode Memory Manager.
Проект сначала размещался на сайте Роберта Ли, и его Домашняя страница исходного кода - [1], последний раз обновлялась в 2008 году. Исходный код содержит как расширенные подпрограммы, так и наборы для тестирования этих подпрограмм. В 2017 году процедуры тестирования для Move, FillChar и диспетчера памяти были перенесены на 64-разрядную версию, доступную по адресу [2].
Проект FastCode прилагает много усилий для тестирования и основное внимание уделяется предоставлению программного обеспечения очень высокого качества. Тестирование делится на две категории - тестирование на правильность и тестирование на скорость.
Проверка выполняется на всех ЦП из целевого набора и очень часто на других ЦП и ОС (Windows XP, Windows Vista, Windows 7 и т. Д.). Проверка выполняется по множеству различных входных функций, как в обычных, так и в случае ошибок. Проверка выполняется по известным правильным значениям и по эталонным реализациям, таким как существующие функции RTL.
Бенчмаркинг выполняется на всех ЦП, которые являются частью текущего целевого набора в данный момент времени. Эти процессоры были или являются частью целевых наборов: (Intel Pentium 3, Intel Pentium M, Intel Pentium 4, Intel Core, Intel Core 2, AMD Athlon XP, AMD Opteron, AMD Phenom ). Большое внимание было уделено тому, чтобы тесты были стабильными и реалистичными. В частности, было трудно получить справедливый тест задач диспетчера памяти, и журналы использования диспетчера памяти создавались при нормальном использовании реальных приложений, а затем воспроизводились тестом.
Тестирование выполнено на всем целевом наборе. Новый целевой набор определяется каждый год на основе опроса, в котором может проголосовать сообщество FastCode. Целевой набор обычно состоит из шести процессоров, из которых четыре от Intel и два от AMD. Это соотношение было выбрано для имитации рыночных долей. В дополнение к этим шести целевым объектам ЦП есть десять целей, определенных как смесь шести ЦП. Эти десять целей называются вычисленными целями и могут иметь только скорость или комбинацию скорости и размера. Максимально допустимый набор инструкций различен для каждой цели. Целью может быть «штраф размера IA32» или «SSE2». Штраф за размер определяется опросом для каждого испытания.
В проекте FastCode были выполнены следующие задачи [3] :
Включены функции FastCode в Delphi RTL:
Книги Марко Канту по освоению Delphi содержат главу о FastCode, в которой перечислены вклады в Delphi RTL.
Все победители конкурса включены в библиотеку FastCode (http://fastcode.sourceforge.net/challenge_content/rtl_replcmnt_pkg.html ). Эта библиотека с открытым исходным кодом, выпущена под лицензией MPL. Библиотеку можно использовать двумя способами: 1) напрямую вызывать функции и 2) использовать исправления.
При прямом вызове функций разработчик приложения полностью решает вызвать версию функции, которую он считает наиболее быстрой.
При использовании функции исправления библиотека автоматически определяет тип ЦП при загрузке приложения и использует эту информацию для перенаправления всех вызовов функций в функцию-победитель FastCode для этого конкретного ЦП.
Менеджер памяти FastMM, используемый Delphi и C ++ Builder с 2006 года, также стал победителем конкурса FastCode. Он заменил стандартный диспетчер памяти Delphi и не только менее подвержен фрагментации памяти, но и обеспечивает улучшенные возможности отладки, такие как возможность сообщать об утечках памяти при закрытии приложения, обнаруживать использование после освобождения памяти или двойные релизы.
FastMM4 также используется в качестве диспетчера памяти для приложений, разработанных в Lazarus.
FastMM4 часто указывается как обязательный инструмент для разработчиков Delphi.
Nexus DB поставляется с Интеграция FastMM4 для проверки утечек.
Использование FastMM описано в «Новый диспетчер памяти в BDS 2006».
Приложение, разработанное в Delphi или C ++ Builder, будет обычно используйте диспетчер памяти по умолчанию - FastMM4. Функции FastCode в RTL были выбраны как наиболее часто используемые, и приложение также обычно будет использовать некоторые из них, особенно если выполняется какая-либо обработка строк. Поэтому большинство приложений Delphi / C ++ Builder будут использовать код, разработанный проектом FastCode. Некоторые примеры: Skype, FL Studio и собственная RAD Studio Embarcadero. Блог Холлварда описывает FastMM4 и почему он используется в качестве диспетчера памяти в приложении «Интернет-трейдер».