Размышления, Scala vs F#
Я использую 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.
Такие дела. А теперь давайте устроим высокоинтеллектуальный срач по теме в комментах!