Re[2]: А скалисты тут есть?
От: scf  
Дата: 29.03.24 11:33
Оценка:
Здравствуйте, 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.