Проект по тестированию эффективности языков программированияВ рамках проекта PLB предпринята попытка создания тестового комплекта, охватывающего различные аспекты при оценке эффективности языков программирования. Подготовленный тестовый комплект включает реализацию четырех базовых тестовых заданий для 11 языков программирования: Си, С#, D, Go, Java, JavaScript, Lua, Perl, Python, R и Ruby. Всего протестировано 26 различных реализаций поддерживаемых языков. Эффективность оценивается с позиции производительности и потребления памяти. В число тестов входят: Sudoku - программа для поиска решений в игре Судоку (20x50). Matmul - реализация алгоритма по умножению двух матриц размером 1000x1000, который хорошо подходит для измерения производительности циклов и оценки выполнения типичных математических задач. Patmch - программа для поиска строк в файле с использованием нескольких видов регулярных выражений (влияние скорости ввода/вывода устранено через размещение файла в памяти). Dict - поиск повторяющихся строк из списка в 5 млн строк (последовательно операция повторяется для каждой строки списка, в среднем каждая строка повторяется по 4 раза), позволяет оценить производительность хэшей и ассоциативных массивов. Тесты sudoku" и "matmul" ориентированы на измерение производительности языка, а тесты "Patmch" и "dict" производительности библиотек. Некоторые наблюдения: Быстрее всего простые регулярные выражения выполняются в Perl, при этом Perl в связанных с регекспами тестах в три раза обгоняет по скорости язык Си (GCC и библиотека regexp9 из Plan 9). JavaScript-движок V8 при выполнении регулярных выражений показал результаты аналогичные языку Cи (GCC), JavaScript-движок JaegarMonkey немного отстал от V8, но совсем незначительно. В тесте, оценивающем производительность обработки строк неплохие результаты показал CPython 2.7, который отстал от GCC всего на 25% (Perl отстал в два раза, JavaScript-движок V8 и язык Java - в два с половиной раза, JavaScript-движок JaegarMonkey и язык Ruby - в три раза). В целом JavaScript-движок V8 показал во всех тестах более высокие результаты по сравнению с движком JaegarMonkey от проекта Mozilla. В тесте умножения матриц LuaJIT немного обогнал GCC. Java и JavaScript-движок V8 отстали от GCC всего на 10%. Для сравнения, Python отстал от GCC в 66 раз, JavaScript-движок JaegarMonkey в 7 раз, Perl в 100 раз, Ruby в 273 раза. В эталонном тесте sudoku ближе всего к показателям языка Си (GCC) оказался язык Java, который отстал всего на 70%. JavaScript-движок V8 отстал в 3.7 раза, C#@Mono в 3.8 раз, JavaScript-движок JaegarMonkey в 18 раз, Ruby в 98 раз, CPython в 113 раз, Perl в 121 раз. При оценке потребления памяти при обработке строк, после языка Си (52 Мб) наиболее экономичными оказались JavaScript-движок V8 (97 Мб), CPython (112 Мб), C#@Mono (113 Мб). Ruby израсходовал 156 Мб, а Perl - 219 Мб, JavaScript-движок JaegarMonkey - 274 Мб. Наихудшие результаты показали: R - 1 Гб и Jython - 457 Мб, JRuby - 436 Мб. В тесте умножения матриц расстановка сил в плане потребления памяти изменилась: Си (GCC) 32 Мб, JavaScript-движок JaegarMonkey - 35 Мб, C#@Mono - 40 Мб, Java - 67 Мб, CPython - 91 Мб, V8 - 141 Мб, Ruby - 196 Мб, Perl - 225 Мб.
Распечатано с HostDB.ru.
|