F#

Dec. 18th, 2011 04:32 am
mstone: (Default)
[personal profile] mstone
Третьего дня у нас в Бинге проездом был Дон Сайм, рассказывал про F#. Я, естественно, не мог не сходить вживую послушать евангелие от производителя.

Дон пополнил ряд "человеков из телевизора". До него ряд пополнялся, в основном, в заводской столовке. Работаю я, правда, не в Редмонде, а в Белвью, в плане селебритей у нас тут и труба пониже, и дым пожиже. Навскидку можно вспомнить ченнел-найновского... хм... ну, скажем, популяризатора Брайана Бекмана, и красиво возвышающуюся над стайкой китайцев Алёну_цпп.

На презентацию пришло на удивление мало народу, человек сорок. За пять минут до начала, когда я впопыхах прибежал, думая, что уже, небось, все стулья заняты и придётся сидеть на фонарном столбе, на весь конференц-рум было человек десять, не считая докладчика. С явным перекосом в сторону русскоязычного населения. Два сидящих рядом паренька оказались свежеприехавшими из московского Дойче. Дисциплинированные люди, уже на права сдают. Мы с Аней тут, наверное, единственные из понаехавших, кто полгода забивал болт и ездил по российским правам.

Выяснилось, что почти все присутствующие уже имеют опыт общения с F#, поэтому прелюдия и sales pitch были опущены и перешли сразу к делу. Как и следовало ожидать, презентация была про главное нововведение в F# 3.0: type providers. Нововведение представляет собой интересную попытку сбычи давнишней мечты толп практикующих программистов: обеспечить типо-безопасный доступ к наборам данных с заранее неизвестной структурой. Реляционные базы, XML, OData и т.п.

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

Сильно про подробности врать не буду, потому что сам пока толком не разобрался. Кому интересно, можно посмотреть практически ту же самую презентацию, что была у нас.

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

Вообще, у меня по поводу F# смешанные чувства. С одной стороны, вроде бы, праздник-праздник: полноценный функциональный язык, который при этом first-class citizen на любимой мейнстримовой платформе. А присмотришься повнимательней, так непонятно где радость от этой ёлочной игрушки. First-class-ность, мягко говоря, преувеличена: компиляторы C# и VB.NET живут прямо в .NET-е, а F# нужно ставить отдельно и в дальнюю жопу. То есть попользовать, например, для скрптования -- хрен там. Да и сам язык какой-то ни рыба, ни мясо. По части пролетарских функциональных фич (лямбды-замыкания, map-grep-fold) его уже догнал, а местами и перегнал, C#, а по части непролетарских фич и возможностей для расширения сознания простого быдлокодера (монады, классы типов, GADT) F# смотрится бледненько на фоне Хаскеля.

Конкретно вопрос про классы типов меня волнует давно. Без них несладко живётся даже в объектно-ориентированных языках, богатых наследованием и виртуальными функциями. Как без классов типов можно что-то ненаколенное написать на функциональном языке, я плохо представляю. Грех было, имея перед собой живого создателя языка, не взять его ласково за пуговицу и не спросить, входит ли в творческие планы автора добавление классов типов в F#. Не входит: это отдалит и обособит F# от платформы .NET и более традиционных языков. У меня, конечно, своё мнение на этот счёт, но что я буду -- учить дедушку кашлять? Отпустил пуговицу и поблагодарил.

В целом впечатление от общения осталось положительное. Товарищ имеет относительно происходящего вокруг своё мнение, вовсе не обязательно совпадающее с мнением партии и правительства, и исходя из этого выбирает приоритетные направления развития языка.

Желания бежать и глубже изучать F# вот прям щас не повяилось, но очень интересно посмотреть, взлетят или не взлетят type providers. Если взлетят, это вполне тянет на deal breaker.

Date: 2011-12-19 07:30 pm (UTC)
From: [identity profile] eugen000.livejournal.com
>По части пролетарских функциональных фич (лямбды-замыкания, map-grep-fold) его уже >догнал, а местами и перегнал, C#
Еще не догнал, Pattern matching'а и discriminated union в С# очень не хватает.

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


Date: 2011-12-20 01:45 am (UTC)
From: [identity profile] mstone.livejournal.com
Это правда. Ещё очень не хватает нормальной поддержки immutable ("with" в F#).

К сожалению, простая замена наследования с виртуальными функциями на discriminated unions с паттерн-матчингом -- это тупо перетягивание короткого одеяла с головы на ноги: что-нибудь всё равно будет мёрзнуть. (http://channel9.msdn.com/shows/Going+Deep/C9-Lectures-Dr-Ralf-Laemmel-Advanced-Functional-Programming-The-Expression-Problem)

А discriminated union без паттерн-матчинга делаются через иерархию с абстрактным классом наверху (см. AlgoDBK/AlgoDBX классы :). Громоздкость, конечно, несравнима с ML-ным синтаксисом, но жить можно.

Profile

mstone: (Default)
mstone

October 2013

S M T W T F S
  12345
6789101112
13141516171819
20212223242526
2728293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 25th, 2017 11:45 am
Powered by Dreamwidth Studios