RUS  ENG
Полная версия
ЖУРНАЛЫ // Труды института системного программирования РАН // Архив

Труды ИСП РАН, 2015, том 27, выпуск 3, страницы 29–46 (Mi tisp134)

Эта публикация цитируется в 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.

Язык публикации: английский

DOI: 10.15514/ISPRAS-2015-27(3)-2



Реферативные базы данных:


© МИАН, 2024