LINUX.ORG.RU

Релиз Scala 3.0

 


0

3

После 8 лет работы, 28000 коммитов, 7400 пулл-реквестов и 4100 закрытых вопросов Scala 3 наконец-то вышла. С момента первого коммита 6 декабря 2012 года более ста человек внесли свой вклад в проект. Сегодня Scala 3 включает в себя последние исследования в области теории типов, а также промышленный опыт использования Scala 2. Основываясь на этом опыте, разработчики создали третью версию языка, простую в использовании, изучении и масштабировании.

В Scala 3 появилось много новых функций, и вы можете задаться вопросом, с чего начать изучать всё это? Основным местом для изучения Scala 3 является документация. Одна вещь полностью изменилась в Scala 3 по сравнению с Scala 2: это макросы. Здесь вы можете узнать больше о том, как они работают в Scala 3.

Для опытных разработчиков, желающих ускорить переезд на новую версию языка программирования, подготовлено отдельное руководство.

>>> Список нововведений

>>> Подробности

★★★★★

Проверено: xaizek ()
Последнее исправление: xaizek (всего исправлений: 2)

Ответ на: комментарий от quantum-troll

Опа, спасибо за ссылку на Коку - таки на Лоре можно узнать что-то интересное. Крутота, однако!

anonymous
()
Ответ на: комментарий от Im_not_a_robot

Я уж думал после питона такое в голову никому больше не придет.

В смысле? В большинстве функциональных ЯП такая песня: Haskell, Idris (построен вокруг теории типов, можно использовать для пруфов как и Coq/Gallina), Curry (логический функциональный), Elm (функциональщина для браузера, послужил вдохновением для react), PureScript (браузерная функциональщина больше похожая на Haskell, чем на огрызок Elm). Тысячи их.

anonymous
()
Ответ на: комментарий от quantum-troll

Я как раз пытаюсь ничего не переизобретать. Но на вопрос пока никто не ответил. Столь велик, видимо, интерес к Скале 3.0, и столь много лоровцев считают её достойной хвалебных слов. Это уже информация.

den73 ★★★★★
()
Ответ на: комментарий от den73

Ответ такой - ничего хорошего, Мартин в своем репертуаре…

anonymous
()
Ответ на: комментарий от anonymous

Проблемы индейцев Шерифа не волнуют

struct FnTake<'a, A, B>(Box<FnMut(A) -> Option<B> + 'a>);

pub struct Kleisli<'a, A, I, O, B> {
    phan: PhantomData<(A, B)>,
    deque: VecDeque<FnTake<'a, Box<()>, ConduitM<'a, I, O, ()>>>
}

unsafe fn fn_transmute<'a, I, O, A, B, F: 'a + FnOnce(Box<A>) -> ConduitM<'a, I, O, B>>(f: F)
    -> FnTake<'a, Box<()>, ConduitM<'a, I, O, ()>> {
    FnTake::new(move |ptr| transmute(f(transmute::<Box<()>, Box<A>>(ptr))))
}

pub fn append_boxed<'a, I, O, A, B, C, F>
    (mut k: Kleisli<'a, A, I, O, B>, f: F) -> Kleisli<'a, A, I, O, C>
    where F: 'a + FnOnce(Box<B>) -> ConduitM<'a, I, O, C> {
    k.deque.push_back(unsafe { fn_transmute(f) });
    Kleisli { phan: PhantomData, deque: k.deque }
}
anonymous
()
Ответ на: комментарий от quantum-troll

более кошерные решения это эффекты (как в Koka)

Так то ж не Кока, а Кака. «Кошерное решение» было реализовано в Mercury 27 годами ранее, о чём у них в книжечке не упоминается. Может в пейпере автора есть, посмотрим.

anonymous
()
Ответ на: комментарий от anonymous

Guess fucking what… Ни одного упоминания Mercury ни в одном из свободно доступных «исследований» этой Даши, сска, открывашки. Может мне тоже хипстерскую бородку отрастить и открыть, скажем, литий-ионные аккумуляторы. А может даже и ООП.

anonymous
()
Ответ на: комментарий от vertexua

Да не, прост надо быть чуть умней гриба чтобы писать на скале. Ты не сумел, ничо, говнокодерки тоже иногда нужны, шаурмячным софт писать.

anonymous
()
Ответ на: комментарий от Legioner

Т.е. вариант пойти поучиться не приходит в голову? Печальбеда, кукарекать на Лоре сильно много ума не надо.

anonymous
()
Ответ на: комментарий от anonymous

Да не, прост надо быть чуть умней гриба чтобы писать на скале. Ты не сумел, ничо, говнокодерки тоже иногда нужны, шаурмячным софт писать.

А те 3.5 умника, что умеют, уже заняли все 3.5 доступные вакансии.

anonymous
()
Ответ на: комментарий от Minoru

Скала давно не про better java, а про ФП (cats, akka, zio, ect…)

anonymous
()
Ответ на: комментарий от anonymous

Конкретно, эффекты это в первую очередь продолжаемые исключения, с помощью которых можно выражать нелинейный поток управления. Возможность помечать функции как грязные это скорее дополнительный бонус.
Преимущество перед продолжениями заключается в том, что эффекты типизированны и могут в композицию.

quantum-troll ★★★★★
()
Ответ на: комментарий от quantum-troll

Преимущество перед продолжениями заключается в том, что эффекты типизированны и могут в композицию.

Я не знаю, что такое «продолжения», но я смотрю на примеры Каки и вижу, что они просто спёрли концепцию «модов» из Mercury, поменяв терминологию и синтаксис. И в общем, нет ничего плохого в том, чтобы заимствовать какие-то элементы из других ЯП. Удивительно только, что «речёрчеры» из Мелкомягких не в курсе о «прайер стадис». Даже пейперы клепают по тем же темам:

this lets Koka compile directly to C code without needing a garbage collector or runtime system (2021)

Compile-time garbage collection for the declarative language Mercury (2004)

anonymous
()
Ответ на: комментарий от anonymous

Учите дети Java

что на ней хорошего написано ? ни-че-го. На scala вещи делают

Почти все big data: Hadoop, HBase, Hive, Cassandra, DynamoDB Самый популярный build server - jenkins (и менее популярный bamboo и teamcity)

Серверы артифактов nexus и artifactory.

Популярные IDE - IDEA, Eclipse и Netbeans

Наскальные надписи пишут все меньше и меньше.

anonymous
()
Ответ на: комментарий от anonymous

Моды это вообще аннотации к предикатам. Фишка чисто логического программирования, к ФП не относится вообще никак.

Compile-time garbage collection for the declarative language Mercury (2004)

Compile-time garbage collection by sharing analysis (1989). Тема compile-time gc появилась куда раньше 2004 года.

quantum-troll ★★★★★
()
Последнее исправление: quantum-troll (всего исправлений: 1)
Ответ на: комментарий от swar0g

а мне кто-нибудь может толково объяснить, чем оно лучше, чем haskell?

позволяет использовать java библиотеки включая Spring и Hibernate,
есть в наличии нормальная IDE,
на ней пишутся реальные, а не диванные проекты
Spark, Kafka - написаны на scala.

Yilativs ★★★★
()

Скала это секта джибанутых джавистов с манией величия.

anonymous
()

Вот и Скала
Ненужною стала,
Было ей жизни отпущено мало!
Раньше бывало,
Из либастрала
В Скалу любая фигня попадала,
А теперь — перестала...

Vudod ★★★★★
()
Последнее исправление: Vudod (всего исправлений: 1)
Ответ на: комментарий от anonymous
Такими были восемь Вождей и шестнадцать Могильников оснований –> по два для каждого Вождя.
let getProjectOptionsFromScript (opts: CrackerOptions): CrackedFsproj list * CrackedFsproj =
    let projectFilePath = opts.ProjFile
    let dllRefs, srcFiles =
        (([], []), IO.File.ReadLines(projectFilePath))
        ||> Seq.fold (fun (dllRefs, srcFiles) line ->
            match line.Trim() with
            | Regex @"^#r\s*""(.*?)""$" [_;path] ->
                path::dllRefs, srcFiles
            | Regex @"^#load\s*""(.*?)""$" [_;path] ->
                dllRefs, path::srcFiles
            | _ -> dllRefs, srcFiles)

let noSideEffectBeforeIdent identName expr =
    let mutable sideEffect = false
    let orSideEffect found =
        if found then true
        else
            sideEffect <- true
            true

let rec trampolineListMapAcc acc f xs =
    trampoline {
        match xs with
        | [] -> return List.rev acc
        | h::t ->
            let! x = f h
            return! trampolineListMapAcc (x::acc) f t
    }
    
let AbstractOptimizationInfoToEssentials =
    let rec abstractModulInfo (ss: ModuleInfo) =
         { ModuleOrNamespaceInfos = NameMap.map (Lazy.force >> abstractModulInfo >> notlazy) ss.ModuleOrNamespaceInfos
           ValInfos = ss.ValInfos.Filter (fun (v, _) -> v.MustInline) }
    and abstractLazyModulInfo ss = ss |> Lazy.force |> abstractModulInfo |> notlazy  
    abstractLazyModulInfo
anonymous
()
Ответ на: комментарий от quantum-troll

И да, монадки это костыль, более кошерные решения это эффекты (как в Koka) и субструктурные (то есть линейные, аффинные, etc) типы.

Прочитал доку по ссылке. На первый взгляд довольно забавно, но по послевкусию – такое же ФП-задроство как и монады. Концепции ради концепций. Как-то само собой вспомнилось древнее, сказанное применительно к менеджмент-задротству, но как по мне актуальное и здесь: сайт был удалён роскомпозором, но скриншотик я храню.

P.S. Пока писал, вспомнилось, что не в первый раз меня от этой вашей ФП-зауми корёжит.

dimgel ★★★★★
()
Ответ на: комментарий от quantum-troll

Вся эта ваша императивщина сначала компилируется в нечто функциональное перед тем, как стать машинным кодом.

Ну а промежуточные представления программы внутри компилятора прикладного программиста вообще интересовать не должны. У большинства, насколько мне известно, это стек-машина, но на языках почему-то используют инфиксную нотацию математических выражений вместо суффиксной (или как она там называется). И код редактируют как текст, а не как AST, потому что редакторы AST оказались бешено неудобными.

dimgel ★★★★★
()
Ответ на: комментарий от Im_not_a_robot

Как можно серьезно воспринимать блок, если даже невозможно понять, где он начинается, а где заканчивается?

КОнечно, если бы не IDE, хрен бы я понял, где заканчивается блок:

     }
    }
   }
     }
}

А при повреждении форматирования

никогда в жизни не видел.

Shadow ★★★★★
()
Ответ на: комментарий от Shadow

А при повреждении форматирования

никогда в жизни не видел.

А я видел неоднократно. Причём и из-за смеси space & tab indents, и в чисто пробельных проектах – вероятно из-за копи-пасты, которую IDE не удосужилась форматнуть.

Кстати, стандартные возможности по форматированию кода даже JetBrain-овских IDE далеко не всегда дают эстетически приятный результат. Например, иногда несколько следующих подряд коротких структурно одинаковых конструкций удобно форматнуть каждую в строку и выровнять одну под другую. А если отступы существенны для парсера, то трындец, код будет вырвиглазным.

dimgel ★★★★★
()
Ответ на: комментарий от anonymous

Это очень частный случай того, о чём я говорил. А то, о чём я говорил, – очень частный случай неформализуемой в общем случае эстетики.

dimgel ★★★★★
()
Ответ на: комментарий от zabbal

На самом деле он довольно лёгкий для того, чтобы войти

arcanis ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.