Preview

Труды Института системного программирования РАН

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

Дизайн средств обобщённого программирования в объектно-ориентированных языках: ключевые решения

https://doi.org/10.15514/ISPRAS-2016-28(2)-1

Полный текст:

Аннотация

Принято считать, что объектно-ориентированные (ОО) языки программирования обеспечивают более слабую поддержку обобщённого программирования (ОП) по сравнению с такими функциональными языками как Haskell или SML. Это было показано в нескольких работах, посвящённых сравнительному анализу языков программирования. Но в последние годы появились новые объектно-ориентированные языки. Улучшили ли они поддержку обобщённого программирования? И если нет, есть ли причина, по которой ОО-языки до сих пор уступают функциональным языкам в этом отношении? В предыдущих исследованиях объектно-ориентированные языки не рассматривались специальным образом. Однако, возможности ОО-программирования влияют и на средства обобщённого программирования в языке, а также на сам стиль обобщённого программирования. В этой статье мы проводим сравнение средств обобщённого программирования в десяти современных объектно-ориентированных языках и их расширениях. В результате сравнительного анализа было обнаружено, что каждый из этих языков и расширений придерживается в точности одного из двух подходов к ограничению типовых параметров обобщённого кода. Таким образом, первый ключевой вопрос дизайна средств ОП, рассматриваемый в статье, это «какой подход лучше» (если он вообще есть). Оказывается, что большинство исследованных нами ОО-языков используют более ограниченный подход. Второй момент, который оказывает существенное влияние на выразительную мощь языка программирования, это поддержка множественных моделей. В статье рассматриваются преимущества и недостатки этой возможности, а также её связь с другими языковыми средствами поддержки обобщённого программирования.

Об авторе

Ю. В. Белякова
Институт математики, механики и компьютерных наук им. И.И. Воровича, Южный федеральный университет
Россия


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

1. J. Belyakova. Language Support for Generic Programming in Object-Oriented Languages: Peculiarities, Drawbacks, Ways of Improvement. To appear in Lecture Notes in Computer Science, 2016.

2. D. R. Musser, A. A. Stepanov. Generic Programming. Proceedings of the International Symposium ISSAC’88 on Symbolic and Algebraic Computation, ISAAC ’88, London, UK, UK: Springer-Verlag, 1989, pp. 13–25.

3. R. Garcia et al. An Extended Comparative Study of Language Support for Generic Programming. J. Funct. Program., Mar. 2007, 17(2), pp. 145–205.

4. J.-P. Bernardy et al. A Comparison of C++ Concepts and Haskell Type Classes. Proceedings of the ACM SIGPLAN Workshop on Generic Programming, WGP ’08, Victoria, BC, Canada: ACM, 2008, pp. 37–48.

5. R. Garcia et al. A Comparative Study of Language Support for Generic Programming. SIGPLAN Not., Oct. 2003, 38(11), pp. 115–134.

6. B. Oliveira, J. Gibbons. Scala for Generic Programmers: Comparing Haskell and Scala Support for Generic Programming. J. Funct. Program. July 2010, 20(3-4), pp. 303–352.

7. S. Wehr, P. Thiemann. JavaGI: The Interaction of Type Classes with Interfaces and Inheritance. ACM Trans. Program. Lang. Syst., July 2011, 33(4), pp. 12:1–12:83.

8. J. G. Siek, A. A. Lumsdaine. Language for Generic Programming in the Large. Sci. Comput. Program., May 2011, 76(5), pp. 423–465.

9. J. Belyakova, S. Mikhalkovich. Pitfalls of C# Generics and Their Solution Using Concepts. Proceedings of the Institute for System Programming, June 2015, 27(3), pp. 29–45.

10. Y. Zhang et al. Lightweight, Flexible Object-oriented Generics. Proceedings of the 36th ACM SIGPLAN Conference on Programming Language Design and Implementation, PLDI 2015, Portland, OR, USA: ACM, 2015, pp. 436–445.

11. P. Canning et al. F-bounded Polymorphism for Object-oriented Programming, Proceedings of the Fourth International Conference on Functional Programming Languages and Computer Architecture, FPCA ’89, Imperial College, London, United Kingdom: ACM, 1989, pp. 273–280.

12. K. Bruce et al. On Binary Methods. Theor. Pract. Object Syst., Dec. 1995, 1(3), pp. 221–242.

13. A. Kennedy, D. Syme. Design and Implementation of Generics for the .NET Common Language Runtime. SIGPLAN Not., May 2001, 36(5), pp. 1–12.

14. Ю.В. Белякова, С.С. Михалкович. Средства обобщённого программирования в современных объектно-ориентированных языках. Часть 1. Анализ проблем. Труды научной школы И.Б. Симоненко. Выпуск 2, 2015, № 2, Ростов-на-Дону, стр. 63–77.

15. J. Järvi, J. Willcock, A. Lumsdaine. Associated Types and Constraint Propagation for Mainstream Object-oriented Generics. Proceedings of the 20th Annual ACM SIGPLAN Conference on Object-oriented Programming, Systems, Languages, and Applications, OOPSLA ’05, San Diego, CA, USA: ACM, 2005, pp. 1–19.

16. A. Martelli, U. Montanari. An Efficient Unification Algorithm, ACM Trans. Program. Lang. Syst., Apr. 1982, 4(2), pp. 258–282.

17. The Ceylon Language Specification, version 1.2.2 (March 11, 2016).

18. http://ceylon-lang.org/documentation/1.2/spec/

19. The Kotlin Reference, version 1.0 (February 11, 2016).

20. https://kotlinlang.org/docs/reference/

21. Java Platform, Standard Edition (Java SE) 8. http://docs.oracle.com/javase/8/

22. B. C. Oliveira, A. Moors, M. Odersky. Type Classes As Objects and Implicits. Proceedings of the ACM International Conference on Object Oriented Programming Systems Languages and Applications, OOPSLA ’10, Reno/Tahoe, Nevada, USA: ACM, 2010, pp. 341–360.

23. A. Pelenitsyn. Associated Types and Constraint Propagation for Generic Programming in Scala. Programming and Computer Software, 2015, 41(4), pp. 224–230.

24. The Rust Reference, version 1.7.0 (March 3, 2016).

25. http://doc.rust-lang.org/stable/reference.html

26. C. V Hall. et al. Type Classes in Haskell. ACM Trans. Program. Lang. Syst., Mar. 1996, 18(2), pp. 109–138.

27. P. Wadler, S. Blott. How to Make Ad-hoc Polymorphism Less Ad Hoc. Proceedings of the 16th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL ’89, Austin, Texas, USA: ACM, 1989, pp. 60–76.

28. B. Stroustrup. Concept Checking — A More Abstract Complement to Type Checking. Technical Report N1510=03-0093, ISO/IEC JTC1/SC22/WG21, C++ Standards Committee Papers, 2003.

29. B. Stroustrup, G. Dos Reis. Concepts — Design Choices for Template Argument Checking. Technical Report N1522=03-0105, ISO/IEC JTC1/SC22/WG21, C++ Standards Committee Papers, 2003.

30. G. Dos Reis, B. Stroustrup. Specifying C++ Concepts. Conference Record of the 33rd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL ’06, Charleston, South Carolina, USA: ACM, 2006, pp. 295–308.

31. B. Stroustrup, A. Sutton. A Concept Design for the STL. Technical Report N3351=12-0041, ISO/IEC JTC1/SC22/WG21, C++ Standards Committee Papers, 2012.

32. A. A. Stepanov, M. Lee. The Standard Template Library. Technical Report 95-11(R.1), HP Laboratories, 1995.

33. A. Sutton. C++ Extensions for Concepts PDTS. Technical Specification N4377, ISO/IEC JTC1/SC22/WG21, C++ Standards Committee Papers, 2015.

34. B. Greenman, F. Muehlboeck, R. Tate. Getting F-bounded Polymorphism into Shape. Proceedings of the 35th ACM SIGPLAN Conference on Programming Language Design and Implementation, PLDI ’14, Edinburgh, United Kingdom: ACM, 2014, pp. 89–99.

35. L. White, F. Bour, J. Yallop. Modular Implicits. ArXiv e-prints, Dec. 2015, arXiv: 1512.01895 [cs.PL].


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


Белякова Ю.В. Дизайн средств обобщённого программирования в объектно-ориентированных языках: ключевые решения. Труды Института системного программирования РАН. 2016;28(2):5-32. https://doi.org/10.15514/ISPRAS-2016-28(2)-1

For citation:


Belyakova J. Language Support for Generic Programming in Object-Oriented Languages: Design Challenges. Proceedings of the Institute for System Programming of the RAS (Proceedings of ISP RAS). 2016;28(2):5-32. https://doi.org/10.15514/ISPRAS-2016-28(2)-1

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


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


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