пятница, 16 октября 2009 г.

[comp.prog] Небольшой рассказ об опыте применения Scala в реальной жизни

На сайте языка Scala появилась информация о презентации некого Lee Momtahan про опыт использования Scala в Électricité de France Trading. Там же даны ссылки на слайды доклада, и на видеозапись доклада. Желающие могут ознакомиться с этими материалами самостоятельно, для остальных я расскажу вкратце своими словами.

Итак, Lee Momtahan со товарищи занимается разработкой приложения для моделирования методом Монте-Карло различных трейдинговых ситуаций. Оно производит вычисления на гриде из нескольких сотен компьютеров, плюс содержит GUI и специализированный внешний DSL для того, чтобы эксперты могли задавать различные условия моделирования.

Приложение разрабатывается в течении семи лет, командой из шести человек. Объем приложения – более 300K строк. До декабря 2008 года приложение разрабатывалось на Java, но затем команда решила попробовать Scala. И ей это понравилось. В основном за счет компактного синтаксиса, инфиксных операторов, паттерн-матчинга и замыканий. Все это позволяло разработчикам записывать сложные математические конструкции гораздо проще, чем на Java.

Очень важным, по словам Lee Momtahan, фактором является работа на платформе JVM и отличная интероперабельность с уже существующими Java-библиотеками. Он даже подчеркнул, что использование Java библиотек из Scala оказывается гораздо более простым делом, чем использование Java библиотек из Java.

Похоже, что транслятор их собственного DSL написан полностью на Scala, т.к. подчеркивается что с помощью отличной библиотеки комбинаторных парсеров (parser combinator library) в Scala исходный текст парсера был очень похож на BNF-грамматику. Часть транслятора была сделана в чисто функциональном стиле, но при добавлении поддержки макросов использовался императивный стиль (т.к. с его помощью получалось более простое решение).

Скорость работы всего приложения их устраивает. Мол, благодаря библиотеке Colt из CERN, они достигли производительности, сравнимой с C++.

В общем, им понравилось. И они считают Scala вполне пригодным языком для создания приложений, от которых зависят серьезные суммы денег (ну а чего не сказать, они же не самим трейдингом занимаются, а его моделированием – прим.eao197).

Добавлю так же, что по словам докладчика часть людей из проектной команды ранее уже была знакома с функциональным программированием. Сам докладчик сказал, что его производительность на Scala составила порядка 2KLoC за 6 месяцев. И что Scala позволяет писать в несколько раз меньше кода, чем Java.

Теперь пару слов без протокола :) Во-первых, эта история мне понравилась тем, что по-моему внедрение Scala сейчас именно так и должно происходить – был старый Java проект, который изрядно задолбал разработчиков. Захотелось более современного инструмента и пожалуйста – берется Scala. И старый код переиспользуется, и новый удобно писать.

Во-вторых, что-то я в последнее время фигею от производительсности западных программистов. То на SPARK-е за 9 месяцев работы написали 10KLoC, теперь вот здесь 2KLoC за 6 месяцев, а до этого 300KLoC за 7-мь лет вшестером. Я тут с мая месяца уже почти 30KLoC C++ кода наклепал… Может я что-то не так делаю? ;)

7 комментариев:

Miroslav комментирует...

судя по их отношению к железу они будут первыми кого бы RapidMind закопал, если бы их не купил интел :D
Не знаю как там в торговле, но у нас когда программка за много нулей над 300Г файлике хорошо призадумалась - кастомеры резко заинтересовались альтернативами :) тк время - деньги. Это не исследования ради исследований.

зы Все так делаете :) я за август и пол сентября сделал больше их годовой нормы :) и теперь дебажу чужое :( тк писать пока больше не дают.

Rustam комментирует...

Да интересно насчет Scala.

По объему кода, все-таки очень сильно зависит от того что пишешь, у меня на C++ на разных работах разница в объеме кода 10 раз точно есть.

Анонимный комментирует...

> Я тут с мая месяца уже почти 30KLoC C++ кода наклепал… Может я что-то не так делаю? ;)

Это очень, очень провокативный вопрос ;)

eao197 комментирует...

> По объему кода, все-таки очень сильно зависит от того что пишешь, у меня на C++ на разных работах разница в объеме кода 10 раз точно есть.

У меня сложилось впечатление, что в их задачах главное -- это математика, способы решения и пр. Сам код -- это уже вторично. В таких словиях что написать 2KLoC строк на Scala, что 10KLoC на C++ -- разница небольшая. Тем более, что на математической задаче на С++ будет даже меньше, чем на Java.

eao197 комментирует...

Это очень, очень провокативный вопрос ;)

Это был вопрос самому себе. Типа "А какого хрена я столько работаю?"

Miroslav комментирует...

ну интересный вопрос - "могу ли я выбросить что-то из тех N строк что написал для задачи Х?" Если ответ нет - тогда уже "а какого?"

eao197 комментирует...

> "могу ли я выбросить что-то из тех N строк что написал для задачи Х?"

В последние годы редко предоставляется возможность что-то выкинуть. Обычно приходится добавлять еще K строк, чтобы реализовать очередную фичу.