Системы анализа и обработки данных

СИСТЕМЫ АНАЛИЗА И ОБРАБОТКИ ДАННЫХ

ISSN (печатн.): 2782-2001          ISSN (онлайн): 2782-215X
English | Русский

Последний выпуск
№4(100) Октябрь - Декабрь 2025

Сравнение производительности для различных способов реализации мультиметодов

Выпуск № 4 (100) Октябрь - Декабрь 2025
Авторы:

Косов Павел Владимирович ,
Легалов Александр Иванович ,
DOI: http://dx.doi.org/10.17212/2782-2001-2025-4-69-84
Аннотация

Мультиметоды, определяемые как функции, полиморфные к нескольким аргументам, регулярно встречаются при разработке программного обеспечения. Они непосредственно реализованы в ряде языков программирования, для которых компиляторы автоматически порождают соответствующий машинный код, используя при этом различные подходы. Отсутствие реализации мультиметодов компенсируется либо непосредственным написанием кода, либо их включением в состав библиотек языков программирования. Разнообразие алгоритмов реализации мультиметодов часто связано с необходимостью достижения требуемых критериев качества, одним из которых является эволюционная расширяемость без изменения ранее написанного кода. Скрывая внутренние решения за высокоуровневыми конструкциями языков программирования, компиляторы формируют окончательное связывание альтернативных фрагментов мультиметодов, расположенных в независимых единицах компиляции, используя различные приемы, что обеспечивает необходимую целостность на выходе. При этом подходы к реализации множественного полиморфизма обладают разной производительностью и сложностью поддержки в добавлении новых комбинаций аргументов при расширении функциональности. Одним их подходов, обеспечивающих гибкую реализацию мультиметодов, является процедурно-параметрическая парадигма программирования. Она предлагает эффективное решение, основанное на параметризации функциональных зависимостей через многомерные массивы. Это обеспечивает эволюционное расширение функциональности и данных без изменения ранее написанного кода, поддерживая при этом безопасность за счет статической типизации. В работе проводится сравнение процедурно-параметрической реализации мультиметодов с существующими подходами. Для различных алгоритмов сформированы временные оценки поиска комбинаций параметров, необходимых для вызова мультиметода. Эксперименты демонстрируют эффективность процедурно-параметрического полиморфизма по сравнению с другими подходами. На основе результатов проведенного исследования даны рекомендации по реализации мультиметодов в зависимости от требований к производительности.


Ключевые слова: языки программирования, компиляция, процедурно-параметрическое программирование, поли-морфизм, множественный полиморфизм, мультиметоды, эволюционная разработка программного обеспечения, парадигмы программирования, методы разработки программного обеспечения
Косов Павел Владимирович
РФ, 101000, г. Москва, ул. Мясницкая, 20, Национальный исследовательский университет «Высшая школа экономики»,
pvkosov@hse.ru
Orcid: 0000-0002-9035-312X

Легалов Александр Иванович
РФ, 101000, г. Москва, ул. Мясницкая, 20, Национальный исследовательский университет «Высшая школа экономики»,
alegalov@hse.ru
Orcid: 0000-0002-5487-0699
РИНЦ AuthorID: 9288-0537
Scopus ID: 57219476499
ResearcherID (WoS): A-4787-2014

Список литературы

1. Shafer D., Ritz D.A. Practical Smalltalk: using Smalltalk/V. – Springer, 1991. – 233 p.



2. Hunt J. Advanced guide to Python 3 programming. – Springer, 2019. – 497 p.



3. Gregoire M. Professional C++. – John Wiley & Sons, 2018. – 1122 p.



4. Sciore E., Java program design. – Apress Media, 2019. – 473 p.



5. Albahari J., Albahari B. C# 6.0 Pocket Reference. – O’Reilly Media, 2016. – 224 p.



6. Freeman A. Pro Go: the complete guide to programming reliable and efficient software using Golang. – Apress Media, 2022. – 1076 p.



7. Blandy J., Orendorff J., Tindall L.F.S. Programming Rust. – O’Reilly Media, 2021. – 1470 p.



8. Report on the programming language Haskell: a non-strict, purely functional language version 1.2 / P. Hudak, S. Peyton Jones, P. Wadler, B. Boutel, J. Fairbairn, J. Fasel, M.M. Guzmán, K. Hammond, J. Hughes, T. Johnsson, D. Kieburtz, R. Nikhil, W. Partain, J. Peterson // ACM SIGPLAN Notices. – 1992. – Vol. 27 (5). – P. 1–164.



9. Peyton Jones S., Jones M., Meijer E. Type classes: an exploration of the design space // Proceedings of the Haskell Workshop. – Amsterdam, Netherlands, 1997. – P. 1–16.



10. Ingalls D.H.H. A simple technique for handling multiple polymorphism // ACM SIGPLAN Notices. – 1986. – Vol. 21 (11). – P. 347–349.



11. Design patterns: Elements of reusable object-oriented software / E. Gamma, R. Helm, R. Johnson, J. Vlissides. – Addison-Wesley Professional, 1994. – 416 p.



12. Alexandrescu A. Modern C++ design: Generic programming and design patterns applied. – Addison-Wesley Professional, 2001. – 360 p.



13. Meyers S. More effective C++: 35 new ways to improve your programs and designs // Addison-Wesley Professional, 1996. – 318 p.



14. Легалов А.И. ООП, мультиметоды и пирамидальная эволюция // Открытые системы. СУБД. – 2002. – № 3. – С. 41–45.



15. Demichiel L.G. Overview: The common Lisp Object System // Lisp and Symbolic Computation. – 1988. – Vol. 1 (2). – P. 227–244.



16. Stroustrup B. The design and evolution of C++. – Addison-Wesley Publishing, 1994. – 427 p.



17. Rust library for Multimethods support – URL: https://github.com/fcard/multimethods.rs (accessed: 28.11.2025).



18. Legalov A.I., Kosov P.V. C language extension to support procedural-parametric polymorphism // Automatic Control and Computer Sciences. – 2024. – Vol. 58 (7). – P. 762–778. – DOI: 10.3103/S014641162470024X.



19. Polymorphic symmetric multiple dispatch with variance / G. Park, J. Hong, G.L. Steele Jr., S. Ryu // Proceedings of the ACM on Programming Languages. – 2019. – Vol. 3. – P. 1–28.



20. Mugridge W.B., Hamer J., Hosking J.G. Multi-methods in a statically-typed programming language // ECOOP '91: Proceedings of the European Conference on Object-Oriented Programming. – Springer, 1991. – P. 307–324.



21. Leavens G.T. Verifying object-oriented programs that use subtypes. – Massachusetts Institute of Technology, 1989. – 211 p.



22. The Cecil Language. Specification and Rationale. Version 3.2. – URL: https://projectsweb.cs.washington.edu/research/projects/cecil/www/Release/doc-cecil-lang/cecil-spec.pdf (accessed: 28.11.2025).



23. Leavens G.T., Millstein T.D. Multiple dispatch as dispatch on Tuples // ACM SIGPLAN Notices. – 1998. – Vol. 33 (10). – P. 374–387.



24. Amiel E., Gruber O., Simon E. Optimizing multi-method dispatch using compressed dispatch tables // ACM SIGPLAN Notices. – 1994. – Vol. 29 (10). – P. 244–258.



25. A fast method dispatcher for compiled languages with multiple inheritance / R. Dixon, T. McKee, M. Vaughan, P. Schweizer // ACM SIGPLAN Notices. – 1989. – Vol. 24 (10). – P. 211–214.



26. Chambers C., Chen W. Efficient multiple and predicated dispatching // ACM SIGPLAN Notices. – 1999. – Vol. 34 (10). – P. 238–255.



27. Foote B., Johnson R.E., Noble J. Efficient multimethods in a single dispatch language // ECOOP'05: Proceedings of the 19th European Conference on Object-Oriented Programming. – Springer, 2005. – P. 337–361.



28. Легалов А.И., Швец Д.А. Процедурный язык с поддержкой эволюционного проектирования // Научный вестник НГТУ. – 2003. – № 2 (15). – С. 25–38.



29. Легалов А.И., Косов П. Процедурно-параметрическое расширение языка программирования C. Синтаксис и семантика. – URL: http://www.softcraft.ru/ppp/ppc/ (accessed: 28.11.2025).



30. Julia Documentation. – URL: https://docs.julialang.org/en/v1/ (accessed: 28.11.2025).



31. Julia Compiler Source Code. Generic Functions. – URL: https://github.com/JuliaLang/julia/blob/v1.11.3/src/gf.c (accessed: 28.11.2025).



32. GNU Manual. Getting the Return or Frame Address of a Function. – URL: https://gcc.gnu.org/onlinedocs/gcc/Return-Address.html (accessed: 28.11.2025).



33. Язык программирования PPC. – URL: https://gitverse.ru/kpdev/llvm-project/content/pp-extension-v2 (accessed: 15.06.2025).



34. Benchmarks for multiple dispatch mechanisms. – URL: https://gitverse.ru/kpdev/multimethod-benchmarks (accessed: 15.06.2025).



35. taskset – Linux manual page. – URL: https://man7.org/linux/man-pages/man1/taskset.1.html (accessed: 28.11.2025).

Просмотров аннотации: 10
Скачиваний полного текста: 6
Просмотров интерактивной версии: 0
Для цитирования:

Косов П.В., Легалов А.И. Сравнение производительности различных подходов реализации диспетчеризации для мультиметодов // Системы анализа и обработки данных. – 2025. – № 4 (100). – С. 69–84. – DOI: 10.17212/2782-2001-2025-4-69-84.

For citation:

Kosov P.V., Legalov A.I. Sravnenie proizvoditel'nosti razlichnykh podkhodov realizatsii dispetcherizatsii dlya mul'timetodov [Performance comparison for different approaches to implementing multimethods]. Sistemy analiza i obrabotki dannykh = Analysis and data processing systems, 2025, no. 4 (100), pp. 69–84. DOI: 10.17212/2782-2001-2025-4-69-84.