Поговорите со мной о функциональном программировании, но не просто, а о Scala. Партия сказала "надо", я пошёл на Курсеру брать
курс Мартина Одерского. Курс, в целом, разумный, юношеские увлечения Лиспом и template metaprogramming на С++, в общем, помогают. Вопросы у меня, скорее, про смешение парадигм. С одной стороны, велик соблазн пользоваться только immutable частью языка и библиотек, оставаясь в рамках чисто функционального подхода. С другой, всё, что я интуитивно понимаю про производительность, паникует внутри.
Вот возьмём пример: лектор разбирает сортировку List вставками. Дай, думаю, напишу ради лучшего осознания языка HeapSort. Сказано - сделано. Но ведь пока после удаления вершины восстановишь кучу, пол-дерева заново создастся. Понятно же, что с imperative/mutable и код короче, и работает быстрее. Гляжу в исходники всяких map/fold/reduce - ну конечно же внутри есть переменные.
Короче, на что похожи реальные большие проекты на Scala?