понедельник, 25 января 2010 г.

[comp.prog] Ссылки от читателей: OCaml в Jane Street

Ув.тов.Rustam дал в комментарии к одной из предыдущих заметок ссылку на сайт компании Jane Street Capital, в которой активно используется OCaml: http://www.janestreet.com/technology/ocaml.php

На этой странице перечислены три PDF-ки с описанием того, как Jane Street пришла к использованию OCaml, что хорошего в OCaml, что плохого, чем им OCaml помог.

Первая PDF-ка, Caml Trader: Adventures of a functional programmer on Wall Street (2006 год) – это слайды презентации с конференции Commercial Users of Functional Programming. Такой небольшой, в виде тезисов, рассказ. Кроме того, там приведен объем написанного в Jane Street OCaml-овского кода – на 2006 год это 250KLoc (учитывая, что OCaml-овский код в 1.5-2.5 раза компактнее C++ного, это вполне внушительная цифра).

Две следующие PDF-ки, Caml Trading: Experiences in Functional Programming on Wall Street (2007 год) и Caml trading: experiences with functional programming on Wall Street (2008 год), по сути, являются раскрытием тезисов из первой презентации. Причем обе настолько похожи между собой, что при беглом просмотре не понятно, чем они друг от друга отличаются.

В кратце, суть такова: была маленькая, никому не известная трейдинговая компания Jane Street, у которой в 2003 году даже не было клиентов. Софт у нее был написан, в основном на Excel-е и VB (плюс еще что-то на C#, Java и C++). Поскольку Excel+VB не справлялись с возрастающим объемом торгов, то нужно было переходить на что-то более быстрое. Попытки использовать C# не увенчались успехом, зато OCaml эпизодически применялся в Jane Street с 2002-го года и в 2005 руководство дало добро на его широкомасштабное применение. С тех пор OCaml является основным языком разработки.

Перечислять сильные и слабые стороны OCaml-а, которые упоминались в статье, я не буду – лучше их прочитать и самостоятельно сделать выводы. Поскольку некоторые моменты там интересные (например, во второй PDF-ке одним из достоинств OCaml-а называют возможность программирования без использования наследования).

Я же заострю внимание на двух вещах.

Во-первых, как OCaml проник в Jane Street. Как я понял, основным “разносчиком заразы” ;) стал Yaron Minsky. Который получил PhD в области распределенных систем в Cornell, потом около года работал консультантом (в том числе и на Jane Street), а затем перешел в Jane Street на постоянную работу. OCaml он использовал еще в Cornell-е, потому и подвинул его в Jane Street. Но важнее как раз сам факт наличия PhD – я давно подозревал, что для успешного использования функциональных языков нужна ученая степень ;)

Во-вторых, в каждой из трех перечисленных работ подчеркивается один и тот же важный момент: OCaml помогает им набирать хороших программистов. Мол, Java-разработчиков полно и среди них есть отличные ребята, но вот как толковых найти среди толпы посредственностей – вопрос без ответа. А с OCaml все просто – раз человек программирует на OCaml, значит он уже по факту не может быть бестолковым (грубо говоря).

Так что я еще раз повторю мысль, которую озвучивал уже неоднократно: сейчас функциональное программирование выглядит очень привлекательно потому, что его применяют очень умные люди в очень ограниченных контекстах. Как только ФП проникнет в широкие массы и на OCaml/Haskell/Erlang начнут писать толпы обычных программистов, то мало никому не покажется. Если не верите – посмотрите на то, что мы уже сделали с ООП ;)

PS. Еще одно соображение не могу не высказать. OCaml в 2003-2005 действительно был вне конкуренции по сравнению с VB и C#. Тогда ведь в C# даже дженериков не было. Сейчас, возможно, преимущества OCaml над C# не так очевидны. Хотя практика показывает, что .NET для биржевых приложений – это как-то не очень… ;)

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

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

Тут http://www.lexifi.com/ еще финансовая компания использующая OCaml, но они также используют дополнительно C# и С/C++ http://www.lexifi.com/faq.html они даже подерживают биндинг OCaml - C# http://www.lexifi.com/csml/

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

Спасибо, покурим и эту тему.

Если не секрет, ты сам OCaml в какой предметной области пытался применять (ты говорил о прототипе, который разрабатывал недавно)?

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

Евгений, я вот не понимаю что именно вы пытаетесь у фпшников узнать? вопрос ессно риторический :)

зы Возможность не использовать наследование это огромный плюс :D я сам форсирую это в плюсах.

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

В совершенно не пригодной :). Делал специализированный анализатор дискового пространства, в той части где нужно было лазить по деревьям анализировать распределение, генерировать отчеты OCaml очень хорошо себя показал. Но чтобы довести это до уровня продукта нужен GUI плюс некоторый доступ к низкоуровневому Native API (это решаемо конечно в виде сишной библиотеки). Пробовал идущий c OCaml TK он уже слишком непрезентабелен, нет поддержки например TIX идущей с tcl и питоном, потом пробовал GTK к которому есть полноценный биндинг, он слишком страшен под windows и слишком неудобен в дистрибуции. Еще как вари
72;нт был прикрутить HTMLayout но трудоемко пока на это нет времени.

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

2Rubanets Myroslav:

Я пытаюсь следить за тем, как ФП приходит в мейнстрим. В свое время я очень удачно сориентировался и вскочил на подножку поезда ООП, когда он в СНГ-овии только-только набирал ход. От чего получил массу бенефитов. Хочется проделать такой же фокус и с ФП (если оно того стоит, конечно).

Но, поскольку любая пропаганда вызывает во мне бурный протест (будь то реклама Java, .NET или ФП), то я не оказываю себе в удовольствии подколоть пропагандистов :)

>Возможность не использовать наследование это огромный плюс :D я сам форсирую это в плюсах

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

Так что если дать разработчикам убогое ООП (как в Java), то для них отсутствие наследования будет просто таки манной небесной :)

Но, с другой стороны, если ООП сделано нормально (SmallTalk, Ruby, Eiffel), то ситуация совсем другая.

Аналогично в гибридных языках, вроде C++.

Так что подобные "достоинства" скорее являются показателями апупеоза приверженности одной модели (в данном случае ООП на примере Java и C# 1.0). Такого же точно апупеоза можно достичь, если отбросить ООП и нырнуть с головой в функциональщину (как это предлагают некоторые любители Haskell-я и Erlang-а).

Так что "отсутствие наследования" это такое же достоинство языка, как и "отсутствие goto".

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

2Rustam: спасибо за ответ. При обработке каких-либо более-менее сложных структур данных языки вроде Java и C++ сливают по полной. Помню, насколько проще это было делать на Ruby с блоками кода, чем на C++.

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

На самом деле дело не в языках. Кадры решают все!(c)
>Возможность не использовать наследование это огромный плюс

Сомнительно, особенно для больших программных систем.

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

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

[DiMa] комментирует...

Уже не помню где, но видел что - то вроде суцесс стори про F# в финансовой сфере.

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

2[DM]

Может вот это?

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

Сегодня наткнулся на интересную пдфку ftp://ftp.inria.fr/INRIA/publication/publi-pdf/RR/RR-4797.pdf на тему использования OCaml от разработчиков MLDonkey (http://mldonkey.sourceforge.net/). Кстати редкая крупная программа, активно использующая объектную часть OCaml'а.