Скорость компиляции Perl + OOP (Несколько методов). Тупые тесты

Никто не делал, наверное, полноценное тестирование производительности всех или почти всех методов и подходов, реализующих объекты в перле. Никто не делал, и я не буду. 

Вместо этого я понаделал тупые тесты при помощи команды time perl myscript.pl. Просто для того, чтобы кое-что прояснить для себя.

1. Чистый перл, атрибуты в массиве 

Массивы в перле быстрые. Пробуем такой код:

Для проверки код почти всегда один и тот же:

Что показывает time:

real  0m0.029s
user      0m0.024s
sys       0m0.000s

2. Чистый перл, атрибуты в хеше

Хеши в перле медленные, медленнее, чем массивы, поэтому, возможно, если делать акцессоры на хеше, то будет медленнее. Пробуем:

Время выполнения:

real       0m0.033s
user      0m0.020s
sys       0m0.008s

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

3. Используем Mojo::Base

Mojo::Base — удивительно легковесная штука с очень простым, незамутненным синтаксисом, реализующая базовые возможности объектов. Давно хотел протестить, насколько велика цена синтаксического сахара Mojo::Base:

Код сократился, а время выполнения? Смотрим:

real       0m0.032s
user      0m0.024s
sys       0m0.000s

Вообще, в среднем, такой код получается сравним по скорости с предыдущим, или, если все же придираться, то чууууть-чуть медленнее. Но есть Mojo::Base::XS, который, возможно, решит такую проблему. Неожиданно приятно.

4. Используем Class::Struct

Class::Struct очень старый, но, тем не менее, очень известный модуль, к которому приложились довольно известные, именитые перл-программисты. Поэтому его было тоже интересно.

В итоге:

real       0m0.050s
user      0m0.012s
sys       0m0.016s

В целом медленнее, причем заметно. 

5. Используем Moose

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

Шок:

real       0m0.419s
user      0m0.320s
sys       0m0.032s

В заключение еще раз повторю, что тесты тупые, о производительности тех или иных решений можно судить относительно. Mojo::Base интересен и, на мой взгляд, нуждается в более взрослых сравнительных тестах. Но это в будущем.