О Скале
2012-03-29
Scala - статически-типизированный, мультипарадигмальный язык программирования общего назначения на платформе JVM, делающий акцент на создании высоко-надежных, расширяемых систем. Благодаря мощной системе типизации, комбинированию функционального и объектно-ориентированного стилей, “неявному” контексту и преобразованиям, и паттерн-матчингу, Scala позволяет писать необычайно лаконичный, элегантный и безопасный код. Среди прочих JVM-языков, Scala, на сегодняшний день - это единственный язык, способный составить серьезную конкуренцию Java, и стать ее достойным приемником. В отличие от Groovy, Ceylon, Kotlin, и мн. других языков, пытающихся расширить и переосмыслить Java, не совершая коренного переворота, и наследуя, тем самым, догматы, недостатки и вынужденные ограничения, копившиеся в языке годами, язык Scala создан с чистого листа, и является уникальным самостоятельным языком, лишенный тяжелого наследия Java. Дизайном Scala занимается комитет, в который, с одной стороны, входят академики, выдающиеся ученые, и эксперты в языках программирования, четко понимающие, как должен выглядеть язык будущего, и, с другой стороны, архитекторы и инженеры, руководствующиеся практической пользой разрабатываемого языка, и соответствием потребностям рынка.
В основе концепции Scala лежит гибкое смешение объектно-ориентированного и функционального стилей программирования. Это обеспечивает полную свободу действий программиста, и значительно упрощает вхождение в язык. Так, если вы пришли из мира Java, вы можете программировать в императивном, объектно-ориентированном стиле, очень быстро адаптировавшись к синтаксису, используя все те библиотеки, к которым вы привыкли, не задумываясь смешивая в одной системе код, написанный на Scala и Java, и получая, при этом, многочисленные бенефиты, в виде удобной системы паттерн-матчинга, лаконичной декларации классов и интерфейсов, возможности множественного наследования, функций высшего порядка и пр. Если вы пришли из мира функционального программирования и теории компьютерный языков, с багажом в Haskell или OCaml, вы будете комфортно чувствовать себя и в Scala. Практически любая сложная парадигма и методика может быть реализована без лишних сложностей. Кроме этого процесс разработки сильно упрощают уникальные особенности Scala, отсутствующие в “чистых”, функциональных языках - большие возможности повторного использования кода, и создания абстрактных конструкций с помощью наследования, и “неявный” (implicit) контекст.
Несмотря на то, что Scala не демонизирует императивную парадигму, и для программирования в этом стиле в Scala созданы все условия, по мере адаптации, пользователи языка все больше и больше склоняются к “чистому”, функциональному стилю, который вкупе с мощной системой типизации делает Scala языком идеально подходящим для решения задач, стоящих перед современными программистами - быстрое создание надежных систем, способных использовать всю мощь вычислительных ресурсов (многоядерных архитектур), и масштабироваться для эффективной работы в рамках “клаудов” на сотнях и тысячах машин. Двойственная сущность Scala создает возможности для задействования не только объектно-ориентированных паттернов, и методов обобщенного функционального программирования, но и комбинирования разных подходов, что позволяет программисту достигать качественно нового уровня продуктивности.
Акцент на всесторонней расширяемости заложен в самом названии языка - Sca-La значит Scalable Language. Несмотря на величину заложенной мощи, ядро языка крайне компактное, и истинным проявлением гибкости является то, что в Scala в виде библиотек существует то, что во многих других языках можно реализовать только на уровне языка. Один из самых ярких примеров - библиотека актеров, которая вписывается в язык настолько органично и элегантно, что у новичков возникает ложное ощущение того, что API актеров - это часть синтаксического сахара.
Обладая отличной совместимостью с Java, Scala позволяет справиться с огромным количеством проблем, для решения которых в Java приходится прибегать к не самым изящным подходам. Во многих современных системах, использующих и Scala, и Java, нормой является расширение Java-кодом Scala (внедрение Scala на высокий уровень асбтракций, в тех случаях, когда решение на Java выглядит слишком громоздким), и наоборот - расширение существующих Java-систем Scala-компонентами, когда некоторую задачу на Scala можно решить намного эффективнее. Таким образом, в рамках одной разрабатываемой системы, могут легко ужиться две команды разработчиков, пишущие на Scala и Java. Они будут использовать одни билд-тулы, средства разработки и системы тестирования. Вы не будете поставлены перед выбором, и у вас нет острой необходимости сразу переучивать всю команду на новый язык - Scala может замечательно существовать в рамках имеющейся инфраструктуры.
Java - это замечательный, простой язык, который давно пересек “порог бессмертия”. За время его существования было сделано много достижений и ошибок, и сейчас самым правильным решением (как утверждается многими идеологами и евангелистами Java) было бы оставить его в покое, бросить безуспешные, болезненные, популистские попытки превратить его во что-то новое, отвечающее изменившимся потребностям рынка. Java - достойное, завершенное произведение, которое не нужно пытаться дописать и осовременить. Тем не менее, появление же большого числа альтернативных языков на востребованной платформе JVM свидетельствует о том, что эффективно работать с платформой средствами языка-первоисточника уже невозможно.
Scala - это именно тот язык, который вы сможете без страха использовать там, где раньше применяли Java. Scala, созданная с учетом злободневных, острых задач программирования, поможет адаптироваться в новых реалиях, обеспечивая плавный переход от Java к современных концепциям и парадигмам. Scala - ваша самая верная инвестиция, которая вернет утраченную радость и удовольствие от программирования, и обеспечит уверенность в будущем разрабатываемых систем.