Я использую Scala как свой основной рабочий инструмент уже около 8 лет. Вполне достаточно для того, чтобы в голове образовались рельсы, и чтобы, держа в руке молоток, любую задачу считать гвоздём. Для борьбы с этим я стараюсь держать себя в курсе интересных тенденций в дизайне языков. Вот, дошли руки и до F#. Давно уже собирался, а ещё и то, что Microsoft делает с .Net core, вызывает живой интерес.

Честно говоря, от F# я ожидал большего. Вот список того, что мне было бы интересно в нём найти:

  • Type classes. Без них грустно. И если в OCaml это компенсируется мощной системой модулей, то в F# мы имеем босый хрен.
  • Higher kinded types. Ибо без них тайпклассы имеют весьма ограниченный смысл.
  • Call by name. Полезная штука чтобы не писать каждый раз уродство типа fun () -> blah в аргументах функций.
  • Computation expressions для всех монад в стандартной библиотеке из коробки. Ребята, серьёзно? Запилить такую крутую штуку, и не положить в коробку реализацию даже для опций? Ну как это вообще называется?!
  • Макросы.
  • И на правах совсем уж странной хотелки. Доступ к компилятору как к библиотеке. В сочетании с такой прикольной фичей, как code quotations, это была бы бомба. Я недавно реализовывал транслятор SQL-like языка в Scala-код, который затем компилируется и выполняется. Если бы я это делал на F#, то мне пришлось бы гораздо труднее.

Ничего из этого не является dealbreaker'ом, впрочем. И теперь список того, что в F# лучше, чем в Scala.

  • Человеческие ADT. Это вообще must have!
  • Computation expressions. Несмотря на наркоманию с наличием одновременно Yield/Return, Bind/For и т. п. пар, которые делают ровно одно и то же, этот сахарок гораздо слаще for-comprehension в Scala.
  • Автокарринг. Без него бесточечный стиль применим гораздо реже, чем хотелось бы.
  • Типовыводилка. Тема спорная, но мне нравится типовыводилка из ML-ей.
  • Type providers. В Scala это реализуется макросами, но они до сих пор в экспериментальном статусе.
  • Code quotations. В Scala есть quasi-quotations и reify, но это добро вместе с макросами в экспериментальном статусе. Что-то сопоставимое появится только когда зарелизится Dotty.

Такие дела. А теперь давайте устроим высокоинтеллектуальный срач по теме в комментах!








 , ,






URL записи