- PVSM.RU - https://www.pvsm.ru -

Scala Days 2012

Я очень люблю Scala, во многом благодаря моей любви, мы используем этот язык в своих проектах: писать на нём большое удовольствие. Уже пару лет я смотрел и подумывал поехать на Scala Days [1]. В прошлом году они были в Калифорнии: прекрасное место, но достаточно далеко и поехать я не смог. В этом же году Scala Days проводили в Лондоне (17-18 апреля), это была отличная возможность, Лондон намного ближе к Москве чем Стенфорд, я выкоротал недолгий отпуск и поехал.

Scala Days 2012

Ниже идёт обзор докладов, на которые я попал, и общие впечатления от мероприятия с фотографиями.

Scala Days проводили в Barbican [2] — это большой комплекс зданий, где проводится много культурных событий, в основном связанных с искусством.

Scala Days 2012

Scala Days 2012

После регистрации была небольшая вступительная речь, за которой начались доклады.

Pragmatic Testing Nirvana with ScalaTest, ScalaMock and SubCut

Билл Виннерс (справа), автор «Programming in Scala» [3] рассказал про ScalaTest [4], как можно писать тесты в BDD-стиле, про интеграцию с инструментами разработчика (на примере Eclipse, хотя я лично пробовал в IntelliJ IDEA, всё очень на уровне).

Дик Волл рассказал про SubCut [5] — порт Google Guice [6] на Scala. Методика работы и используемые термины полностью идентичны, но сделаны улучшения, позволяющие сделать код на Scala чище. Также, как в Guice, можно привязать реализацию по имени класса (и опционально идентификатору) или сделать свой провайдер, который будет полностью управлять созданием объектов. Единственное, как я услышал, полной поддержки Scopes пока нет, поэтому придётся эмулировать Scopes через провайдеры.

Scala Days 2012

Concurrent Programming With Futures, Offers, and Brokers

Мариус Эриксен из Twitter говорил о примитивах синхронизации. Начал с канонического «Communicating sequential processes» [7], перешёл к базовым объектам: Sync и Channel.

От них он перешёл к Futures и Promises. Кратко, Future позволяет возвращать результат вычисления, с оговоркой, что его ещё может не быть или при вычислении может произойти ошибка. Однако, на основе такого «будущего» результата можно создавать вычисления, получающие следующие «будущие» результаты. То есть для них определена композиция и, следовательно, они являются монадой [8]. Promise — это обратный объект, он позволяет клиенту вызвать операцию, которая будет выполнена.

Дойдя до конца, он вспомнил про Offers и Brokers: — «а ну, Offer — это Promise, а Broker — это Channel, так у нас в Twitter они называются», говорит. Дал ссылку на открытые исходники на GitHub [9].

Scala Days 2012

The Future I was Promised

В прошлом докладе Мариус много раз оговаривался, что про Futures и Promises дальше расскажет Виктор Клэнг.

Виктор Клэнг рассказал про то, что это очень распространённые объекты и доселе они не были никак стандартизованы: существует реализация в Scala, Java (для Future), в akka [10] и ещё в нескольких библиотеках, которые он использовал. В Scala 2.10 [11] будет стандартная Futures/Promises библиотека (scala.concurrent), на которую постепенно смигрирует akka. Новые стандартные Futures/Promises всем хороши, композируются, для них определено множество полезных методов, есть поддержка в стандартной библиотеке.

Scala Days 2012

Coffee break

Все перерывы и обед проходили в тропическом саду. Можно было найти интересных собеседников, зарядиться кофе, залезть с ноутбука на работу по VPN или поиграть в дженгу:

Scala Days 2012

Scala Days 2012

Scala Days 2012

Scala Days 2012

Scala Days 2012

Towards Haskell in the Cloud

После перерыва на сцену вышел Саймон Пейтон-Джонс [12], можно сказать, создатель Хаскеля. Речь Саймона была посвящена не самой Scala, но преимуществам функционального программирования для параллельных вычислений. Конкретно, Саймон рассказал про то, как организовать программу и какие для этого нужны средства языка (на примере Хаскеля), чтобы она выполнялась на облаке, а нужные вычисления могли бы свободно циркулировать и выполняться на разных узлах. Причём исходный код изначально не обязательно должен находиться на все узлах облака. В частности, он привёл в пример проект своего студента, система которого обогнала аналогичную, развёрнутую на Hadoop при большом количестве данных.

Scala Days 2012

Особенно хочется отметить феерию, которая сопровождала выступление Саймона. Саймон носился по сцене, артикулировал, представлял свои тезисы в ярких красках и изредка подкалывал сообщество тем, что Хаскель в чём-нибудь лучше и чище Скалы. Я был искренне удивлён, как он может всё это рассказывать с такой скоростью. Предоставлю вам удовольствие полюбоваться на небольшую долю его экспрессии:

Scala Days 2012

Async & Non-Blocking Scala for Fun And Profit

Брендан МакАдамс (автор драйвера MongoDB для Scala) рассказал, на примере своего драйвера, как правильно писать код для асинхронной неблокирующей работы, используя Netty или чистое Raw NIO. Отдельно рассказал, как могут помочь функциональные методики для упорядочения кода и обработки ошибок.

Scala Days 2012

Вот так плохо писать код, блокирующий по потоку на каждый запрос:

Scala Days 2012

Generic Numeric Programming Through Specialized Type Classes

Эрик Ошеим рассказал про свою библиотеку [13] по работе с числами, где он упорядочил все операции и выделил свойства ровно так, как это происходит в математике. То есть, когда программа этого требует, с его библиотекой можно добраться до полугрупп, колец и моноидов, которые выделены в отдельные Type Classes [14].

Scala Days 2012

Lightweight Polytypic Staging: a new approach to Nested Data Parallelism in Scala

У нашего соотечественника Александра Слесаренко был достаточно сложный доклад о том, как используя свои DSL’и (подходящие, в общем случае, для любой программы) можно было бы выполнять написанные на них программы с максимальной степенью параллельности, путём разбиения их на участки работы (unit of work) и анализа зависимостей. Если я правильно всё понял.

Scala Days 2012

Asymmetric Lenses in Scala

Рунар Бьярнсон (Apocalisp [15]) один из моих излюбленных авторов, пишущих про Scala, выступил со статьёй Тони Морриса про асимметричные линзы. Асимметричные линзы, это объекты обеспечивающие доступ или модифицирующие свойства других объектов, поскольку в чисто функциональных языках все объекты immutable. В линзе определено два метода, аналогичные getter’у и setter’у:

case class Lens[R,F] (
  get: R => F
  set: (R,F) => R
)

Здесь R — тип объекта, из которого мы читаем свойство, а F — тип самого этого свойства. Рунар выводит для этих линз композицию, как серию изменений объекта и говорит, что такие комплексные модификации потом можно передвавать, определять над ними более сложные операции (произведение или «выбор»), а также выражать с их помощью другие объекты и операции. В конце всё приходит к тому, что можно писать программы в практически императивном стиле, сохраняя при этом функциональную чистоту и immutability. Для работы с линзами даже есть специальный плагин для компиллятора Lensed [16], позволяющий использовать линзы сразу, как часть языка.

Scala Days 2012

Экскурсия по Лондону и ужин

Когда речи закончились нам устроили поездку по Лондону на знаменитых красных двухэтажных автобусах. После поездки нас привезли в Lincoln’s Inn [17], древняя атмосфера которого никого не оставила равнодушным. Почти все в сборе:

Scala Days 2012

Билл Виннерс самолично продаёт «Programming in Scala» [18].

Scala Days 2012

Иногда ужин прерывался, Мартин благодарил выступивших и собравшихся, особенно организаторов из Skills Matter [19], заметил, что в самый первый раз на аналогичной встрече собралось 12 человек :)

Scala Days 2012

Следующий день начался с общего доклада самого Мартина.

Where is Scala going?

Мартин Одерски рассказал что нового будет в Scala 2.10: futures/promises, собственный для Scala reflection/reification, макросы и множество оптимизаций компиллятора.

Scala Days 2012

Основной упор был на reflection/reification и макросы. Reflection будет построен в виде пирога пирогов :) Каждый модуль построен на основе небезызвестного cake pattern [20]. Один пирог — это модель программы в компилляторе, второй — зеркало для отображения, общий код вынесен в третий пирог (над ними) и, наконец, поверх этих пирогов располагается один красивый пирог-фасад, которым будет удобно пользоваться и, который скроет особенности реализации нижележащих пирогов.

Scala Days 2012

Макросы позволят получать доступ к AST [21] самой программы. То есть, можно будет наподобии reflection пройтись по телу метода построчно и узнать в какой строке какой код выполняется. Такое дополнение должно дать возможность (по словам одного из собеседников) унести 90% компилятора в эти самые макросы, очистив ядро и дав возможность писать расширения языка без дорогостоящей разработки поддержки каждого из них во всех инструментах.

Introduction to Scala-IO

Джесс Эйшар занимается разработкой IO-библиотеки для Scala [22]. Его библиотека имеет один набор абстракций, что удобно и позволяет не путаться начинающим, лучше использует выразительные возможности языка, при этом он много внимания уделяет производительности, его код проверяет 3000 тестов, из которых 300 тестирует производительность. Пока говорить об этом рано, но в дальнейшем есть шанс, что именно его библиотека станет стандартной для организации ввода-вывода в Scala, поэтому уже сейчас имеет смысл приглядеться.

Scala Days 2012

Binary Resilience

Джош Суэрет (Josh Suereth) рассказал, как писать и обновлять библиотеки так, чтобы они работали со старыми версиями ПО, не ломая совместимость. Особое внимание было приковано к тому, во что преобразуются trait при компилляции в байткод и чему это эквивалентно в Java.

Scala Days 2012

Remixing the Abstraction Compromise

Нейтан Хэмблен поделился общими соображениями о том, что в будущем мы должны будем взаимодействовать с более высокоуровневыми абстракциями, которые, в то же время, должны будут давать доступ к более низкоуровневым механизмам, что даст нам оптимизацию работы и увеличение производительности. Также Нейтан поделился опытом внедрения unfiltered [23] и netty в своей компании для замены традиционных Java-сервлетов. Показывал, насколько больше запросов это позволило обрабатывать и как сократилось время ответа.

Scala Days 2012

Afterparty

Когда всё закончилось, всех приглашали в паб неподалёку. Мы в компании русских участников конференции, обсуждается услышанное, строятся планы дальнейшего сотрудничества:

Scala Days 2012

Видео с конференции постепенно становятся доступны по адресу: http://skillsmatter.com/event/scala/scala-days-2012 [24]. Так что, если вам хотелось, но не удалось поехать, вы уже можете начинать просматривать интересные вам доклады.

До встречи на следующих Scala Days! В следующий раз их снова обещали провести в Европе.

Автор: vuspenskiy


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/scala/5983

Ссылки в тексте:

[1] Scala Days: http://days2012.scala-lang.org/

[2] Barbican: http://days2012.scala-lang.org/node/84

[3] «Programming in Scala»: http://www.artima.com/shop/programming_in_scala_2ed

[4] ScalaTest: http://www.scalatest.org/

[5] SubCut: https://github.com/dickwall/subcut

[6] Google Guice: http://code.google.com/p/google-guice/

[7] «Communicating sequential processes»: http://en.wikipedia.org/wiki/Communicating_sequential_processes

[8] являются монадой: http://apocalisp.wordpress.com/2008/06/18/parallel-strategies-and-the-callable-monad/

[9] GitHub: https://github.com/twitter/util/tree/master/util-core/src/main/scala/com/twitter/concurrent

[10] akka: http://akka.io/

[11] Scala 2.10: http://www.scala-lang.org/downloads

[12] Саймон Пейтон-Джонс: http://en.wikipedia.org/wiki/Simon_Peyton_Jones

[13] свою библиотеку: https://github.com/azavea/numeric

[14] Type Classes: http://en.wikipedia.org/wiki/Type_class

[15] Apocalisp: http://apocalisp.wordpress.com/

[16] Lensed: https://github.com/gseitz/Lensed

[17] Lincoln’s Inn: http://www.lincolnsinn.org.uk/

[18] «Programming in Scala»: http://www.amazon.com/Programming-Scala-Comprehensive-Step-Step/dp/0981531644

[19] Skills Matter: http://skillsmatter.com/

[20] cake pattern: http://habrahabr.ru/post/68633/

[21] AST: http://en.wikipedia.org/wiki/Abstract_syntax_tree

[22] IO-библиотеки для Scala: https://github.com/scala-incubator/scala-io

[23] unfiltered: http://unfiltered.lessis.me/

[24] http://skillsmatter.com/event/scala/scala-days-2012: http://skillsmatter.com/event/scala/scala-days-2012