Реалізація методів розширення та узагальнених методів у діалекті мови програмування Go
DOI:
https://doi.org/10.34185/1562-9945-2-163-2026-10Ключові слова:
Go, компіляція, транспіляція, програмування, мова програмування, метод, функція, розширення, інформаційні технології, алгоритмАнотація
У цій статті досліджується реалізація методів розширення в GoNext, діалекті мови програмування Go, який транслюється у стандартний код Go. Go — це статич-но компільована мова з легким середовищем виконання, чудовою підтримкою паралель-ності, швидкою компіляцією та великою екосистемою, але вона також має відносно просту систему типів, яка не дозволяє визначати методи для типів поза пакетом, де вони оголошені. Методи розширення усувають це обмеження, дозволяючи розробникам додавати методи до існуючих типів, включаючи ті, що визначені в сторонніх бібліотеках або стандартній бібліотеці Go, без зміни їхнього вихідного коду. Автори розглядають, як методи розширення реалізовані в інших поширених мовах програму-вання (C#, Swift, Kotlin, Rust, Scala) та порівнюють їх з відповідною концепцією уніфікованого синтаксису виклику функцій, а потім пропонують специфічний для GoNext підхід: функції розширення оголошуються за допомогою нового ключового сло-ва розширення перед оголошенням звичайної функції та транспілюються у звичайні вільні функції шляхом простого видалення цього ключового слова, тоді як сайти викликів переписуються з синтаксису виклику методу (value.Method(params)) у явні виклики функцій (package.Method(value, params)) за допомогою алгоритму розв'язання, заснованого на правилах об'єднання типів Go. У статті також описано модифікатор розширення імпорту, який дозволяє розглядати всі функції в існуючому пакеті Go як методи розширення без додавання зайвих обгорток. Запропонований підхід демон-струється на повному прикладі, що показує, як ланцюгові виклики методів розширення перетворюються на вкладені виклики функцій під час транспіляції. У статті демон-струється, що цей підхід досягає нульових накладних витрат часу виконання, підтри-мує повну двосторонню сумісність зі стандартним Go та – як додаткову перевагу – забезпечує підтримку універсальних методів, функцію, навмисно виключену з Go через невирішені питання щодо реалізації існуючих інтерфейсів. Запропонований механізм використовує транспіляцію як практичну стратегію для розширення можливостей мови, одночасно повторно використовуючи її існуючу інфраструктуру компілятора та середовища виконання.
Посилання
Wimmer C., Würthinger T. Truffle: a self-optimizing runtime system: Proceedings of the 3rd Annual Conference on Systems, Programming, and Applications: Software for Humanity (SPLASH'12), 2012. P. 13–14. DOI: 10.1145/2384716.2384723.
Lattner C., Adve V. LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation: Proceedings of the International Symposium on Code Generation and Opti-mization (CGO'04), 2004. P. 75–86. DOI: 10.1109/CGO.2004.1281665.
Bastidas Fuertes A., Pérez M., Meza Hormaza J. Transpilers: A Systematic Mapping Re-view of Their Usage in Research and Industry. Applied Sciences. 2023. V. 13, No. 6. Article 3667. DOI: 10.3390/app13063667.
Cox R., Griesemer R., Pike R., Taylor I. L., Thompson K. The Go programming language and environment. Communications of the ACM. 2022. V. 65, No. 5. P. 70–78. DOI: 10.1145/3488716.
Forkert P. P., Sydorova M. G. ADVANTAGES OF GOLANG AS A FOUNDATION FOR NEW PROGRAMMING LANGUAGES: Conference materials of the XХІ international sci-entific and practical conference «MATHEMATICS AND SOFTWARE FOR INTELLIGENT SYSTEMS (MPZIS-2023)», Dnipro, November 22-24, 2023. P. 7–8.
Forkert P. P., Sydorova M. G. CHALLENGES OF USING GOLANG AS A FOUNDATION FOR NEW PROGRAMMING LANGUAGES: Conference materials of the VI All-Ukrainian scientific and practical internet-conference of young scholars and higher education applicants «Modern informational systems and technologies » on the topic: «Mod-ern computer systems and networks in management », Khmelnytskyi, November 30, 2023. P. 55–56.
Forkert P. P., Sydorova M. G. Integrating full-featured enums into Go programming lan-guage. Current problems of automation and information technologies. 2023. V.27. P. 3-16. DOI: 10.15421/432301.
Forkert P. P., Sydorova M. G. IMPROVING ENUMS IN GO PROGRAMMING LANGUAGE DIALECT: Conference materials of the VI international scientific and practical conference of young scholars and students «SOFTWARE ENGINEERING AND ADVANCED INFORMATION TECHNOLOGIES (SOFT TECH-2024)», Kyiv, May 21-23, 2024. P. 148-150
Bierman G. M., Meijer E., Torgersen M. Lost in translation: formalizing proposed exten-sions to C#: Proceedings of the 22nd Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA'07), Montreal, 2007. P. 479–498. DOI: 10.1145/1297027.1297063.
Extensions | Documentation. URL: https://docs.swift.org/swift-book/documentation/the-swift-programming-language/extensions#Extension-Syntax (date of access: 10.01.2026).
Extensions | Kotlin Documentation. URL: https://kotlinlang.org/docs/extensions.html (date of access: 10.01.2026).
Defining Shared Behavior with Traits – The Rust Programming Language. URL: https://doc.rust-lang.org/book/ch10-02-traits.html (date of access: 10.01.2026).
Extension Methods. URL: https://docs.scala-lang.org/scala3/reference/contextual/extension-methods.html (date of access: 10.01.2026).
Křikava F., Miller H., Vitek J. Scala implicits are everywhere: a large-scale study of the use of Scala implicits in the wild: Proceedings of the ACM on Programming Languages. 2019. V. 3, OOPSLA. Article 163. DOI: 10.1145/3360589.
Bright W., Alexandrescu A., Parker M. Origins of the D programming language: Pro-ceedings of the ACM on Programming Languages. 2020. V. 4, HOPL. Article 73. DOI: 10.1145/3386323.
Forkert P.P, Ivanchenko M.G. Uniform function call syntax in Go programming language dialect. Conference materials of the ІV international scientific and practical conference «INFORMATION TECHNOLOGIES IN EDUCATION AND SCIENCE», Zaporizhzhia, May 20, 2025. P. 561-565
The Go Programming Language Specification. URL: https://go.dev/ref/spec (date of ac-cess: 10.01.2026).
Griesemer, Robert, et al. Featherweight Go: Proceedings of the ACM on Programming Languages 4. OOPSLA, 2020. C. 1–29. DOI: 10.1145/3428217.
Type Parameters Proposal. URL: https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md#No-parameterized-methods (date of access: 10.01.2026).
Завантаження
Опубліковано
Номер
Розділ
Ліцензія
Авторське право (c) 2026 Системні технології

Ця робота ліцензується відповідно до ліцензії Creative Commons Attribution 4.0 International License.









