Сборники трудов ИСП РАН


Проблемы обобщений C# и способы их решения с помощью концептов

Ю.В. Белякова (ЮФУ, Ростов-на-Дону), С.С. Михалкович (ЮФУ, Ростов-на-Дону)

Аннотация

Как было показано в предыдущих исследованиях, по сравнению с классами типов 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 con-straints; generic interfaces.

Издание

Труды Института системного программирования РАН, том 27, вып. 3, 2015, стр. 29-46

ISSN 2220-6426 (Online), ISSN 2079-8156 (Print).

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

Полный текст статьи в формате pdf (на английском) Вернуться к содержанию тома