Мне нравится ковырять новые фичи scala3, а поделиться и обсудить не с кем, в реддите запустение, в телеге одни говноеды. Или может где-то есть адекватное коммьюнити?
Здравствуйте, scf, Вы писали:
scf>Мне нравится ковырять новые фичи scala3, а поделиться и обсудить не с кем, в реддите запустение, в телеге одни говноеды. Или может где-то есть адекватное коммьюнити?
С замечанием про телегу категорически согласен. Насчет адекватного комьюнити не уверен. Из дюжины программистов на Scala, пятеро слабо понимают что они вообще делают, пятеро ударились в архитектурную астронавтику и раздули ЧСВ под потолок, а оставшиеся двое тянут работу за остальных десятерых и им не до общения.
Здравствуйте, scf, Вы писали:
scf>Мне нравится ковырять новые фичи scala3, а поделиться и обсудить не с кем, в реддите запустение, в телеге одни говноеды. Или может где-то есть адекватное коммьюнити?
Про комьюнити не знаю, но тут можно обсудить на троих. IMHO язык очень удачный, но пациент скорее мёртв, чем жив.
M>С замечанием про телегу категорически согласен. Насчет адекватного комьюнити не уверен. Из дюжины программистов на Scala, пятеро слабо понимают что они вообще делают, пятеро ударились в архитектурную астронавтику и раздули ЧСВ под потолок, а оставшиеся двое тянут работу за остальных десятерых и им не до общения.
Как будто с другими языками это как-то иначе обстоит.
Здравствуйте, 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.
Здравствуйте, scf, Вы писали:
scf>Мне нравится ковырять новые фичи scala3, а поделиться и обсудить не с кем, в реддите запустение, в телеге одни говноеды. Или может где-то есть адекватное коммьюнити?
Как это "одни говноеды". Там же было довольно активное сообщество. Может, вы патриот просто? Там их недолюбливают.
Здравствуйте, Слава, Вы писали:
С>Как это "одни говноеды". Там же было довольно активное сообщество. Может, вы патриот просто? Там их недолюбливают.
Активное, да, но бесполезное для каких-либо обсуждений. Можно получить ответ на тривиальный вопрос или конкретную проблему (и то есть шанс, что выдадут неверную информацию или направят в бибиотеку с 15 звездами и кучей неочевидных недостатков). У кого есть знания и опыт, делятся им крайне неохотно. У кого нет знаний и опыта, делают вид, что он у них есть. И в целом обсуждения направлены не на обмен опытом и знаниями, а на самоутверждение. Говноеды короче)
Здравствуйте, scf, Вы писали:
scf>А давайте. Я бы сказал, что пациент жив и развивается, просто функциональный хайп вокруг него угас, а нового (пока) нет.
Фиг знает, но не вижу энтузиазма. У нас все на двойке и переход на тройку сильно затруднен, а моя контора один из крупнейших пользователей языка.
scf>Для затравки — как вы используете inline? Я не очень люблю метапрограммирование из-за невозможности отладки, сложности написания и странных багов, но конкретно inline позволяет писать интересные абстракции без оверхеда.
Не использую. В плюсах тоже не использовал, возможно в силу специфики — я использую фундаментальные и числодробительные библиотеки, а не пишу.
scf>Например, переписать scala.util.chaining в более любимый мне по котлину let и also. Кто не знаком, это очень простые и очень полезные операции для структурирования кода. Например: scf>"hello".let(_ + " world").also(println)
pipe использую, но синтаксически предпочел бы |>, как в F#. "Let/also" имхо не интуитивно.
Другое дело, что в скале оно так не нужно, так как операции над коллекциями сделаны через методы и сцепляются через точку.
scf>Или написать foreach, который можно использовать везде, а не рисовать руками while по индексу в критичном коде.
Честно говоря я предпочту рисовать руками и не забивать голову усложненной семантикой foreach. У тебя ведь итератор никуда не делся и ты просто помогаешь компилятору с unboxing в частном случае.
Однако подобная техника имеет право на жизнь. Известный мне пример в стандартной библиотеке здесь. Однако от него отказались в следующих версиях выделив search в SeqOps и используя обычный adhoc полиморфизм.
Здравствуйте, novitk, Вы писали:
N>Фиг знает, но не вижу энтузиазма. У нас все на двойке и переход на тройку сильно затруднен, а моя контора один из крупнейших пользователей языка.
Грустно, тройка уже совершенно другой язык, более мощный и удобный.