Дмитpий Hecтepук

Блог о программировании — C#, F#, C++, архитектура, и многое другое

Что нового в F# 3.1

leave a comment »

Недавно в пререлиз VS2013 была залита версия F# 3.1 в которой, как ни странно, есть несколько полезняшек которые немного упрощают жизнь. В частности:

  • Наконец-то кейсы дискриминированных объединений можно именовать. То есть если мы раньше писали
    type Stuff =
      | Pair of float * float
    

    то теперь можно дать имена аргументам, т.е.:

    type Stuff =
      | Pair of first : float * second : float
    

    Не могу сказать что это выглядит красиво, но это мне реально нужно для MathSharp, где разные конструкции MathML как раз и представлены таким большим объединением, и хочется помнить какой тип к чему относится. Да, и конечно же теперь есть паттерн-матчинг на все это, т.е. можно писать

    match myPair with
    | Pair(fisrt = 0.0f) -> ⋮
    
  • F# явно пытается стать чем-то вроде MATLAB-а в плане работы с матрицами – в 3.0 они сделали так чтобы матрицы можно выпиливать кусочки например так foo.[2..5,*] что в MATLAB выглядело бы как foo(2:5,:), а в 3.1 можно еще и брать отдельные элементы, например
  • foo.[2,*] // 2й ряд
    bar.[*,5] // 5я колонка
    
  • Вывод типов для LINQ. Давно пора. Пока вы в уютном сишарпике писали foo.Where(x => x.Bar), в F# творилось плохое приходилось навешшивать аннотации типов на параметр. Кажись пофиксили, теперь можно просто писать foo.Where(fun x -> x.Bar). Э-эх, если бы они еще fun убрали для лаконичности, хотя это наверное не реально.
  • Раньше, если вы импортировали из C# методы расширения с дженериками (например монаду Maybe — хотя зачем?) то F# их не видел. Теперь в 3.1 все должно работать и, более того, можно самому делать подобные расширения. Правда F# как всегда отличился и добавил анти-ООПшного изврата в сей процесс путем не давания возможности ограничить generic-параметр (в стиле where foo : Bar, new(). Обещают пофиксить в будущем, а пока рекомендуют пользоваться [<Extension>].
  • В констрантных выражениях теперь можно писать вещи вроде
    [<Literal>]
    let foo = "bar" + "baz"
    

Это что касается языка. Помимо этого, есть какие-то попытки улучшить поддержку VS, но если честно — улучшение тултипов и выравнивания кода не даст мне возможность лучше идентифицировать ошибки или делать рефакторинги. Более того, все мои дискуссии с F# community сводятся к тому что все с пеной у рта бегут доказывать что «ReSharper не нужен»,ну и следовательно продолжать диалог сложно.

Что ж, скажем спасибо что язык хотя бы не стоит на месте. Хотя хотелось бы конечно большего. Вот ссылка на пост где помимо языковой части еще затронут инструментарий и либы – может будет интересно. ■

Реклама

Written by Dmitri

27 сентября 2013 в 11:33

Опубликовано в f#

Tagged with ,

Оставить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: