Preview

Моделирование и анализ информационных систем

Расширенный поиск

Расширение языка C для поддержки процедурно-параметрического полиморфизма

https://doi.org/10.18255/1818-1015-2023-1-40-62

Аннотация

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

Об авторах

Александр Иванович Легалов
Национальный исследовательский университет «Высшая школа экономики»
Россия


Павел Владимирович Косов
Национальный исследовательский университет «Высшая школа экономики»
Россия


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

1. D. Shafer and D. A. Ritz, Practical Smalltalk. Using Smalltalk/V, Springer-Verlag. 1991, p. 233.

2. H. John, Advanced Guide to Python 3 Programming, Springer. 2019, p. 497.

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

4. E. Sciore, Java Program Design, Apress Media. 2019, p. 1122.

5. J. Albahari and B. Albahari, C# 6.0 Pocket Reference: Instant Help for C# 6.0 Programmers, O’Reilly Media. 2016, p. 224.

6. A. Freeman, Pro Go: The Complete Guide to Programming Reliable and Efficient Software Using Golang, Apress. 2022, p. 1105.

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

8. E. Gamma, R. Helm, R. Johnson, and J. Vlissides, Design Patterns. Elements of Reusable Object-Oriented Software, Addison-Wesley Professional. 1994, p. 416.

9. A. Alexandrescu, Modern C++ Design. Generic Programming and Design Patterns Applied., Addison-Wesley Professional. 2001, p. 360.

10. S. Meyers, More effective C++. 35 New Ways to Improve Your Programs and Designs, Addison-Wesley Professional. 1996, p. 318.

11. A. I. Legalov, “OOP, Multimethods and Pyramidal Evolution,” Open Systems, no. 3, pp. 41–45, 2002.

12. L. G. Demichiel, “Overview: The common lisp object system,” Lisp and Symbolic Computation, no. 1, pp. 227–244, 1989.

13. B. Stroustrup, Design and Evolution of C++, Addison-Wesley Professional. 1994, p. 480.

14. A. I. Legalov, Procedurally-parametric programming paradigm. Is it possible as alternative to the object-oriented style?, Dep. hands. Number 622-V00 Dep. VINITI 13.03.2000. 2000, p. 43.

15. I. A. Legalov, “Using of generalized records in procedural-parametric programming language,” Scientific Bulletin of the NSTU, vol. 28, no. 3, pp. 25–37, 2007.

16. A. I. Legalov and D. A. Schvetc, “Procedural language with support for evolutionary design,” Scientific Bulletin of the NSTU, vol. 15, no. 2, pp. 25–38, 2003.

17. A. I. Legalov and P. V. Kosov, “Evolutionary extension of programs using the procedural-parametric approach,” Computational Technologies, vol. 21, no. 3, pp. 56–69, 2016.

18. “Linux x86 Program Start Up or - How the heck do we get to main()? .” [Online]. Available: http://dbp-consulting.com/tutorials/debugging/linuxProgramStartup.html.

19. “An example of an evolutionary extension of a program using a procedural-parametric approach.” [Online]. Available: https://github.com/kreofil/c-evolution-example.

20. A. I. Legalov, “Multimethods and paradigms,” Open Systems, no. 5, pp. 33–37, 2002.

21. “Clang: a C language family frontend for LLVM.” [Online]. Available: https://clang.llvm.org/.

22. “The LLVM Compiler Infrastructure.” [Online]. Available: https://llvm.org/.

23. “LibTooling.” [Online]. Available: https://clang.llvm.org/docs/LibTooling.html.


Рецензия

Для цитирования:


Легалов А.И., Косов П.В. Расширение языка C для поддержки процедурно-параметрического полиморфизма. Моделирование и анализ информационных систем. 2023;30(1):40-62. https://doi.org/10.18255/1818-1015-2023-1-40-62

For citation:


Legalov A.I., Kosov P.V. C Language Extension to Support Procedural-Parametric Polymorphism. Modeling and Analysis of Information Systems. 2023;30(1):40-62. (In Russ.) https://doi.org/10.18255/1818-1015-2023-1-40-62

Просмотров: 504


Creative Commons License
Контент доступен под лицензией Creative Commons Attribution 4.0 License.


ISSN 1818-1015 (Print)
ISSN 2313-5417 (Online)