Здравствуйте, novitk, Вы писали:
N>Про комьюнити не знаю, но тут можно обсудить на троих. IMHO язык очень удачный, но пациент скорее мёртв, чем жив.
А давайте. Я бы сказал, что пациент жив и развивается, просто функциональный хайп вокруг него угас, а нового (пока) нет.
Для затравки — как вы используете inline? Я не очень люблю метапрограммирование из-за невозможности отладки, сложности написания и странных багов, но конкретно inline позволяет писать интересные абстракции без оверхеда.
Например, переписать scala.util.chaining в более любимый мне по котлину let и also. Кто не знаком, это очень простые и очень полезные операции для структурирования кода. Например:
"hello".let(_ + " world").also(println)
Компилируется в
String a$proxy1 = "hello world";
Predef$.MODULE$.println((Object)a$proxy1);
Или написать foreach, который можно использовать везде, а не рисовать руками while по индексу в критичном коде.
extension [A](it: IterableOnce[A]) {
inline def foreach2(inline f: A => Unit): Unit = inline it match
case is: IndexedSeq[A] =>
var i = 0
val len = is.size
while i < len do
f(is(i))
i += 1
case _ =>
val i = it.iterator
while i.hasNext do
f(i.next())
Благодаря inline match, для индексированных коллекций foreach2 скомпилируется в простой цикл по индексу, а для Seq будет instanceof.