Я очень люблю Scala, во многом благодаря моей любви, мы используем этот язык в своих проектах: писать на нём большое удовольствие. Уже пару лет я смотрел и подумывал поехать на Scala Days. В прошлом году они были в Калифорнии: прекрасное место, но достаточно далеко и поехать я не смог. В этом же году Scala Days проводили в Лондоне (17-18 апреля), это была отличная возможность, Лондон намного ближе к Москве чем Стенфорд, я выкоротал недолгий отпуск и поехал.
Ниже идёт обзор докладов, на которые я попал, и общие впечатления от мероприятия с фотографиями.
Scala Days проводили в Barbican — это большой комплекс зданий, где проводится много культурных событий, в основном связанных с искусством.
После регистрации была небольшая вступительная речь, за которой начались доклады.
Pragmatic Testing Nirvana with ScalaTest, ScalaMock and SubCut
Билл Виннерс (справа), автор «Programming in Scala» рассказал про ScalaTest, как можно писать тесты в BDD-стиле, про интеграцию с инструментами разработчика (на примере Eclipse, хотя я лично пробовал в IntelliJ IDEA, всё очень на уровне).
Дик Волл рассказал про SubCut — порт Google Guice на Scala. Методика работы и используемые термины полностью идентичны, но сделаны улучшения, позволяющие сделать код на Scala чище. Также, как в Guice, можно привязать реализацию по имени класса (и опционально идентификатору) или сделать свой провайдер, который будет полностью управлять созданием объектов. Единственное, как я услышал, полной поддержки Scopes пока нет, поэтому придётся эмулировать Scopes через провайдеры.
Concurrent Programming With Futures, Offers, and Brokers
Мариус Эриксен из Twitter говорил о примитивах синхронизации. Начал с канонического «Communicating sequential processes», перешёл к базовым объектам: Sync и Channel.
От них он перешёл к Futures и Promises. Кратко, Future позволяет возвращать результат вычисления, с оговоркой, что его ещё может не быть или при вычислении может произойти ошибка. Однако, на основе такого «будущего» результата можно создавать вычисления, получающие следующие «будущие» результаты. То есть для них определена композиция и, следовательно, они являются монадой. Promise — это обратный объект, он позволяет клиенту вызвать операцию, которая будет выполнена.
Дойдя до конца, он вспомнил про Offers и Brokers: — «а ну, Offer — это Promise, а Broker — это Channel, так у нас в Twitter они называются», говорит. Дал ссылку на открытые исходники на GitHub.
The Future I was Promised
В прошлом докладе Мариус много раз оговаривался, что про Futures и Promises дальше расскажет Виктор Клэнг.
Виктор Клэнг рассказал про то, что это очень распространённые объекты и доселе они не были никак стандартизованы: существует реализация в Scala, Java (для Future), в akka и ещё в нескольких библиотеках, которые он использовал. В Scala 2.10 будет стандартная Futures/Promises библиотека (scala.concurrent), на которую постепенно смигрирует akka. Новые стандартные Futures/Promises всем хороши, композируются, для них определено множество полезных методов, есть поддержка в стандартной библиотеке.
Coffee break
Все перерывы и обед проходили в тропическом саду. Можно было найти интересных собеседников, зарядиться кофе, залезть с ноутбука на работу по VPN или поиграть в дженгу:
Towards Haskell in the Cloud
После перерыва на сцену вышел Саймон Пейтон-Джонс, можно сказать, создатель Хаскеля. Речь Саймона была посвящена не самой Scala, но преимуществам функционального программирования для параллельных вычислений. Конкретно, Саймон рассказал про то, как организовать программу и какие для этого нужны средства языка (на примере Хаскеля), чтобы она выполнялась на облаке, а нужные вычисления могли бы свободно циркулировать и выполняться на разных узлах. Причём исходный код изначально не обязательно должен находиться на все узлах облака. В частности, он привёл в пример проект своего студента, система которого обогнала аналогичную, развёрнутую на Hadoop при большом количестве данных.
Особенно хочется отметить феерию, которая сопровождала выступление Саймона. Саймон носился по сцене, артикулировал, представлял свои тезисы в ярких красках и изредка подкалывал сообщество тем, что Хаскель в чём-нибудь лучше и чище Скалы. Я был искренне удивлён, как он может всё это рассказывать с такой скоростью. Предоставлю вам удовольствие полюбоваться на небольшую долю его экспрессии:
Async & Non-Blocking Scala for Fun And Profit
Брендан МакАдамс (автор драйвера MongoDB для Scala) рассказал, на примере своего драйвера, как правильно писать код для асинхронной неблокирующей работы, используя Netty или чистое Raw NIO. Отдельно рассказал, как могут помочь функциональные методики для упорядочения кода и обработки ошибок.
Вот так плохо писать код, блокирующий по потоку на каждый запрос:
Generic Numeric Programming Through Specialized Type Classes
Эрик Ошеим рассказал про свою библиотеку по работе с числами, где он упорядочил все операции и выделил свойства ровно так, как это происходит в математике. То есть, когда программа этого требует, с его библиотекой можно добраться до полугрупп, колец и моноидов, которые выделены в отдельные Type Classes.
Lightweight Polytypic Staging: a new approach to Nested Data Parallelism in Scala
У нашего соотечественника Александра Слесаренко был достаточно сложный доклад о том, как используя свои DSL’и (подходящие, в общем случае, для любой программы) можно было бы выполнять написанные на них программы с максимальной степенью параллельности, путём разбиения их на участки работы (unit of work) и анализа зависимостей. Если я правильно всё понял.
Asymmetric Lenses in Scala
Рунар Бьярнсон (Apocalisp) один из моих излюбленных авторов, пишущих про Scala, выступил со статьёй Тони Морриса про асимметричные линзы. Асимметричные линзы, это объекты обеспечивающие доступ или модифицирующие свойства других объектов, поскольку в чисто функциональных языках все объекты immutable. В линзе определено два метода, аналогичные getter’у и setter’у:
case class Lens[R,F] (
get: R => F
set: (R,F) => R
)
Здесь R — тип объекта, из которого мы читаем свойство, а F — тип самого этого свойства. Рунар выводит для этих линз композицию, как серию изменений объекта и говорит, что такие комплексные модификации потом можно передвавать, определять над ними более сложные операции (произведение или «выбор»), а также выражать с их помощью другие объекты и операции. В конце всё приходит к тому, что можно писать программы в практически императивном стиле, сохраняя при этом функциональную чистоту и immutability. Для работы с линзами даже есть специальный плагин для компиллятора Lensed, позволяющий использовать линзы сразу, как часть языка.
Экскурсия по Лондону и ужин
Когда речи закончились нам устроили поездку по Лондону на знаменитых красных двухэтажных автобусах. После поездки нас привезли в Lincoln’s Inn, древняя атмосфера которого никого не оставила равнодушным. Почти все в сборе:
Билл Виннерс самолично продаёт «Programming in Scala».
Иногда ужин прерывался, Мартин благодарил выступивших и собравшихся, особенно организаторов из Skills Matter, заметил, что в самый первый раз на аналогичной встрече собралось 12 человек :)
Следующий день начался с общего доклада самого Мартина.
Where is Scala going?
Мартин Одерски рассказал что нового будет в Scala 2.10: futures/promises, собственный для Scala reflection/reification, макросы и множество оптимизаций компиллятора.
Основной упор был на reflection/reification и макросы. Reflection будет построен в виде пирога пирогов :) Каждый модуль построен на основе небезызвестного cake pattern. Один пирог — это модель программы в компилляторе, второй — зеркало для отображения, общий код вынесен в третий пирог (над ними) и, наконец, поверх этих пирогов располагается один красивый пирог-фасад, которым будет удобно пользоваться и, который скроет особенности реализации нижележащих пирогов.
Макросы позволят получать доступ к AST самой программы. То есть, можно будет наподобии reflection пройтись по телу метода построчно и узнать в какой строке какой код выполняется. Такое дополнение должно дать возможность (по словам одного из собеседников) унести 90% компилятора в эти самые макросы, очистив ядро и дав возможность писать расширения языка без дорогостоящей разработки поддержки каждого из них во всех инструментах.
Introduction to Scala-IO
Джесс Эйшар занимается разработкой IO-библиотеки для Scala. Его библиотека имеет один набор абстракций, что удобно и позволяет не путаться начинающим, лучше использует выразительные возможности языка, при этом он много внимания уделяет производительности, его код проверяет 3000 тестов, из которых 300 тестирует производительность. Пока говорить об этом рано, но в дальнейшем есть шанс, что именно его библиотека станет стандартной для организации ввода-вывода в Scala, поэтому уже сейчас имеет смысл приглядеться.
Binary Resilience
Джош Суэрет (Josh Suereth) рассказал, как писать и обновлять библиотеки так, чтобы они работали со старыми версиями ПО, не ломая совместимость. Особое внимание было приковано к тому, во что преобразуются trait при компилляции в байткод и чему это эквивалентно в Java.
Remixing the Abstraction Compromise
Нейтан Хэмблен поделился общими соображениями о том, что в будущем мы должны будем взаимодействовать с более высокоуровневыми абстракциями, которые, в то же время, должны будут давать доступ к более низкоуровневым механизмам, что даст нам оптимизацию работы и увеличение производительности. Также Нейтан поделился опытом внедрения unfiltered и netty в своей компании для замены традиционных Java-сервлетов. Показывал, насколько больше запросов это позволило обрабатывать и как сократилось время ответа.
Afterparty
Когда всё закончилось, всех приглашали в паб неподалёку. Мы в компании русских участников конференции, обсуждается услышанное, строятся планы дальнейшего сотрудничества:
Видео с конференции постепенно становятся доступны по адресу: http://skillsmatter.com/event/scala/scala-days-2012. Так что, если вам хотелось, но не удалось поехать, вы уже можете начинать просматривать интересные вам доклады.
До встречи на следующих Scala Days! В следующий раз их снова обещали провести в Европе.
Автор: vuspenskiy