LINUX.ORG.RU

Релиз Scala 2.13.0

 


1

3

Scala – достаточно сложный язык, но эта сложность позволяет реализовать высокую производительность и нестандартные решения на стыке функционального и объектно-ориентированного программирования. На нем созданы два крупных веб-фреймворка: Play и Lift. Play задействует платформы Coursera и Gilt.

Проекты фонда Apache, Apache Spark, Apache Ignite (свободная версия основного продукта компании GridGain) и Apache Kafka написаны в основном на Scala. Компиляторы и библиотеки Scala распространяются под лицензией BSD (Berkeley Software Distribution license).

В рейтинге популярности RedMonk Programming Language за 2019 г., Scala занимает 13 место, опережая Go, Haskell и Kotlin.

Подробности

Перемещено jollheef из opensource


Scala – считают академичным языком, писать на котором смогут немногие.

Поэтому этой поделке предпочли Kotlin. Включая меня.

В рейтинге популярности RedMonk Programming Language за 2019 г., Scala занимает 13 место, опережая Go, Haskell и Kotlin.

Звездеж. Согласно PYPL, Kotlin популярнее и с растущим трендом, в отличии от.

FilosofeM ★★ ()

Занятное совпадение. Как раз сегодня завершил специализацию по Скале на Курсере. Пользуясь случаем, рекомендую. Наверное, для настоящего программиста это всё было бы слишком банально, но вот я узнал много нового вообще и по скале в частности.

ugoday ★★★★★ ()

Не ведитесь на сладкие речи. Не бывает такого, чтоб на платформе, созданной для одного языка, был хорошо реализован язык совершенно другой парадигмы. Я краем уха услышал, какие гадости происходят на скале, даже пробовать не стал. Хватило с меня знакомства с clojure, чтоб окончательно убедится в том, что функциональным языкам нужна своя функциональная VM, и чаще всего каждому своя. Котлин - это уже другая история. Он не пытается переделать JVM в нечто иное, он просто облегчает ее использование. Впрочем с ним тоже геммороя немало выползает, но в рамках платы за удобство работы с JVM. И вообще, если есть желание иметь секс с компилятором, добро пожаловать в раст. Там хоть производительность будет на выходе. Ну а кому надо в теорию категорий, для того хаскель есть.

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

А с чего ты взял, что JVM это платформа другой парадигмы? В Java уже давно поддерживается функциональное программирование. Так-то JVM для Scala это основная платформа и язык разрабатывается с безусловной оглядкой именно на JVM. Если ты разбираешься в этом, напиши конкретно, в каких местах Scala и JVM несовместимы. А так твоё высказывание это классический пример распространения FUD.

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

созданы два крупных веб-фреймворка: Play и Lift.

всего два?

Scala – достаточно сложный

ORLY?

нестандартные решения

а?..

А по теме - много вкусностей в коллекциях.

BattleCoder ★★★★★ ()

perl предустановлен на всех популярных дистрибутивах и есть даже на shared хостингах - т е дистрибуция под массу платформ без каких либо проблем

для scala нужно ставить jvm

вывод - нет смысла учить scala если perl по синтакису практически то же самое, правда типизации нет - но потом привыкаешь

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

В расте можно программировать на типах?

Типа такого:

object Main extends App {

  trait Nat {
    type +[A <: Nat] <: Nat
    type *[A <: Nat] <: Nat
    type ! <: Nat
  }

  trait Z extends Nat {
    type +[A <: Nat] = A
    type *[A <: Nat] = Z
    type ! = _1
  }

  trait S[N <: Nat] extends Nat {
    type +[A <: Nat] = N# +[S[A]]
    type *[A <: Nat] = A# +[N# *[A]]
    type ! = S[N]# *[N# !]
  }

  type _1 = S[Z]
  type _2 = S[_1]
  type _3 = S[_2]
  type _4 = S[_3]
  type _5 = S[_4]
  type _6 = S[_5]

  implicitly[_3# ! =:= _6]
}

Это факториал, кто не понял.

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

Без всяких костылей вроде котового Eval ты заманаешься ловить stackoverflow. Оптимизация ФП кода в скале никакущая. Имплиситы вместо нормальных тайпклассов — это лажа полная (см. проблему Monad+Alternative). Сабтайпинг ломает вывод типов, из-за чего то, что пишется на Haskell в две строчки по 10 символов в скале вырастает в стены текста. Это я ещё не говорю, что язык строгий по умолчанию.

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

Я нифига не понял. Вот тебе ФП в Java:

Stream.of(1, 2, 3, 4, 5)
        .map(n -> n * 2)
        .filter(n -> n % 2 == 0)
        .collect(toList());
В скале явно не хуже. И всё прекрасно работает на JVM без всяких stackoverflow, тайпклассов и монад.

Legioner ★★★★★ ()
Последнее исправление: Legioner (всего исправлений: 1)
Ответ на: комментарий от Nexmean

Довольно интересно, спасибо. Но хотелось бы подробностей, особенно: «Оптимизация ФП кода в скале никакущая» и какой-нибудь пример «то, что пишется на Haskell в две строчки по 10 символов в скале вырастает в стены текста».

ugoday ★★★★★ ()

Из современных/новых языков, считаю завершёнными Scala, D и Swift. Go нужно развиваться в сторону ООП, желательно на подобии прототипов как в JavaScript/Lua, когда функция - основа всего.

menangen ★★★★★ ()

Apache Ignite...написаны в основном на Scala

Враньё, в Ignite на скале написано парочка плагинов и консоль управления. Весь основной код - чистая джава.

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

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

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

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

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

D

мутный он, петушиный какой-то.

Swift

да заколебал он заковыристым наследованием в своем ООП. Ну и под линухом чиста для галочки работает, ни тулзов ни либ.

Go

Правильный Go - это Crystal, так как правильный питон - это руби.

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

Кстати нахрена вообще вычислять что-то на типах, если в расте есть процедурные макросы

На этот вопрос отвечает книга «Гомотопическая теория типов: унивалентные основания математики».

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

Кому приятно в типах изъясняться, те уже давно на хаскеле сидят. Ну а те из них, кому хаскеля маловато, могут взять ту же агду. Желающие же просто реализовать гребанный алгоритм и получить гребанный результат вычислений вообще не заморачиваются понятием тип. Для них главное - формулы/условия/циклы записать в коде. Обоим лагерям скала не нужна от слова совсем.

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

Не знаю что такое spark, но на агде можно написать абсолютно всё. Только нет таких извращенцев. Если надо что-то работающее, хватит и возможностей раста. Если надо диссертацию про типы защитить, есть агда/coq/хаскель. При попытке догнать обоих зайцев можно уже и санитаров начинать вызывать. Хотя да, если по производительности не сильно жмут, можно и на хаскеле пописать работающие аппы, совмещая так сказать приятное с полезным.

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

Желающие же просто реализовать гребанный алгоритм и получить гребанный результат вычислений вообще не заморачиваются понятием тип

Вот неправда. В вычислительных задачах типами приходится заморачиваться, особенно составными. Хотя, конечно, логика там на первом месте.

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

Ну типом там можно пользоваться, но заморачиватся с монадами абсолютно незачем. Достаточно описать что есть инт, а что структ такого-то вида, а что класс такого-то интерфейса. Ну и кто овнер поинтера, если GC нету.

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

Ну если вы видели, что выплёвывают процедуры из того же scipy, то можете помнить, что там не всё очевидно. Оно передаёт что-то переменного размера, могущее содержать в себе разные типы, причём не всегда на фиксированных позициях.

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

Ну вот я и говорю, что кто-то типами не заморачиваясь, на питоне наяривает, а кто-то четко прописывает каждый свой шаг в типах. Но при этом ни тому ни другому категории не нужны. Хотя нет ничего зазорного блеснуть знанием изоморфизмов всяких, когда это в тему. Просто мало кому это интересно.

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

Хотел в своё время Скалу освоить, но не нашёл для себя ничего принципиально интересного. Так и не сложилось. Питон и Фортран нужны для работы, D и OCaml — для интереса, а эта штука — не понятно для чего.

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

Ну я что-то услышал про то как там всё криво устроено из-за того, что скрестили ежа с ужом и не стал заморачиваться. Да мне и хаскель - та еще пятиногая корова, что уж говорить о попытке запихнуть перемудрёную типовую систему в условия чужой VM-ки. Бритв Окамма на них не напасёшься. Другое дело dependent types. Исчисление конструкций, в отличии от этих бесконечных расширений системы омега, более целостное. Но все равно непрактично до жути. Вот были попытки спустить его на уровень практики, но все померли благополучно, потому что хреновые профессора за ними стояли. Возродить бы самому как нибуть на досуге...

q0tw4 ★★★ ()
Последнее исправление: q0tw4 (всего исправлений: 1)
Ответ на: комментарий от Vudod

OCaml

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

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

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

К сожалению, пока нет. Вся «производительность» там от llvm только. Сам компилятор rust пока не очень. Поэтому C++ все ещё быстрее.

anonymous ()