|
Эта публикация цитируется в 1 научной статье (всего в 1 статье)
Pitfalls of C# generics and their solution using concepts
[Проблемы обобщений C# и способы их решения с помощью концептов]
Julia Belyakova, Stanislav Mikhalkovich Institute for Mathematics, Mechanics and Computer Science, Southern Federal University
Аннотация:
Как было показано в предыдущих исследованиях, по сравнению с классами типов Haskell и концептами C++ такие промышленные объектно-ориентированные языки как C# и Java предоставляют намного менее выразительные механизмы обобщённого программирования на основе F-ограниченного полиморфизма. В этой статье подробно рассматриваются основные подводные камни обобщений C#. Особое внимание уделяется недостаткам рекурсивных ограничений (F-ограничений), неоднозначной семантике интерфейсов, отсутствию языковой поддержки для ограничений на несколько типов и ретроактивной реализации интерфейсов, а также проблемам паттерна проектирования «Концепт», который широкой применяется не только в C#, но также и в языках Java и Scala. Для решения проблем обобщений C# предлагается расширить язык концептами: концепты, как новая языковая конструкция, должны использоваться исключительно в роли ограничений на типовые параметры обобщённого кода, в то время как интерфейсы используются в роли типов. В отличие от базовых концептов C++, концепты C# могут содержать ограничения подтипирования и надтипирования, допускают синонимы концепт-требований и возможность автоматической генерации моделей. Основным отличием предлагаемого дизайна является поддержка множественных моделей. Эта последняя возможность не поддерживается ни в концептах C++, ни в классах типов Haskell. В заключение очерчены основные принципы реализации концептов путём трансляции кода в базовый C#. Наиболее важной чертой этой трансляции является возможность восстановить исходный код на расширенном языке из скомпилированного модуля.
Ключевые слова:
generic programming; (C++) concepts; generics; C# language; concept pattern; recursive constraints; generic interfaces.
Образец цитирования:
Julia Belyakova, Stanislav Mikhalkovich, “Pitfalls of C# generics and their solution using concepts”, Труды ИСП РАН, 27:3 (2015), 29–46
Образцы ссылок на эту страницу:
https://www.mathnet.ru/rus/tisp134 https://www.mathnet.ru/rus/tisp/v27/i3/p29
|
|