Работая над курсом, который посвящен проблемам методологии программирования, я столкнулся с вопросом выбора языка программирования, позволяющего продемонстрировать большую часть современных парадигм.
Последним вариантом на сегодняшний день был язык D. К его богатым методическим возможностям можно отнести, в частности:
- полноценную поддержку модулей с блоками инициализации и финализации;
- функциональные приемы, такие как чистые функции и ленивые вычисления, не говоря уже о, ставших банальными, замыканиях;
- параметрический полиморфизм с поддержкой вычислений во время компиляции;
- надежное программирование на основе контрактов; поддержка модульного тестирования на уровне синтаксиса.
Однако, несмотря на вышеперечисленные достоинства, с использованием этого языка возникает ряд проблем. Во-первых, мотивация студентов значительно снижается из-за отсутствия соответствующих вакансий, во-вторых, существует ряд парадигм, которые просто не совместимы с концепцией D, как сильнотипизированного языка, и, в-третьих, наиболее интересная вторая версия языка (D 2.0.) в настоящее время находится в активной разработке, что значительно снижает академичность изложения.
Попытка привлечения нескольких языков для демонстрации всех важных подходов приводит к необходимости изучения нескольких стандартных библиотек, нескольких интегрированных сред и т.д., что в рамках одного курса трудновыполнимо.
В процессе поиска решения данных проблем, я вернулся к первоначальной идее изложения курса на основе Java. Собственно решение состоит в использовании трех языков, работающих в среде JVM, а именно Java, Groovy и Scala.
Язык Java является сильнотипизированным, поддерживает шаблоны и перегрузку функций, а главное, предлагает наиболее чистую реализацию объектно-ориентированного подхода в духе C++. Язык Groovy позволяет продемонстрировать утиную типизацию вместе с рядом функциональных возможностей, таких как анонимные функции и карринг.
Наконец, Scala реализует механизм сопоставления с образцом и ленивые вычисления.
Результаты компиляции всех трех языков совместимы на уровне байт-кода и работают в рамках одной библиотеки классов. Кроме того, напрашивается использование среды разработки Eclipse, которая является промышленным стандартом для многих разработчиков.
К недостаткам такого подхода, я могу отнести сейчас невозможность демонстрации решений задач переносимости и обеспечения кроссплатформенности, т.к. данная проблема для JVM не существует, а также невозможность прямой работы со статическими и динамическими библиотеками, что является важной частью курса.
Комментариев нет:
Отправить комментарий