LINUX.ORG.RU

Вышла Scala 2.9

 ,


0

5

После нескольких релиз-кандидатов на этой неделе, сегодня наконец-то вышла стабильная версия скалы 2.9. Основным нововведением стали параллельные коллекции, которые уже успели вдоволь обсудить. Также среди нововведений:

  • Трейт App, безопасная и более мощная альтернатива трейту Application, который отныне deprecated.
  • Трейт DelayedInit, который позволяет настраивать порядок инициализации классов и объектов.
  • Новые директивы в REPL: :imports, :implicits, :keybindings, :javap
  • Аннотация @strictfp
  • Новые пакеты scala.sys и scala.sys.process, взятые из sbt.Process
  • Новые методы в коллекциях: collectFirst, maxBy, minBy, span, inits, tails, permutations, combinations, subsets
  • А также много всего по мелочи. Ну и по традиции, багфиксы и ускорение производительности.

P.S. Для интересующихся, сегодня также вышла версия 1.1 фреймворка легковесных акторов, Akka. Подробности там -> Akka User List

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



Проверено: maxcom ()

Меня пугает сообщение эклипса, что для скалы хорошо бы выделить 1 Гб хипа. Это функциональный стиль так сильно память тратит?

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

какая же у Scala теоретическая база?


ты так и не продемонстрировал теоритеческую базу лежащую в основе C#

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

Это функциональный стиль так сильно память тратит?


а ты разве не знал? лиспмашины вроде не меньше 256Мб памяти при загрузке отъедают, не?

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

Дотнет, это выдумка. его придумали, чтобы отвлечь народ от событий 9/11

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

>Это функциональный стиль так сильно память тратит?

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

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

> И какая же у Scala теоретическая база?

Человек не видел статьи Одерского. В скале до черта теории.

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

Вполне вероятно.
Мне нравится скала как язык, а то, что ее можно использовать совсем рядом с явой - еще больше, и хотел некоторые части серверного приложения на нее перевести. Сильно ли пострадает производительность и потребление памяти при обычном использовании функциональных конструкций?

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

Ололо. В качестве следующей Java общепризнана Java7


Сам ололо, официально уже признано, САМ Гослинг это сказал: If I were to pick a language to use today other than Java, it would be Scala http://is.gd/lyJqBX

Karapuz ★★★★★
()

Спасибо ТС за новость.
А книга Одерского с учетом обновлений когда выйдет неизвестно?

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

>Сильно ли пострадает производительность и потребление памяти при обычном использовании функциональных конструкций?

Нет.

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

> А книга Одерского с учетом обновлений когда выйдет неизвестно?

Не настолько большие различия между 2.8 и 2.9 - лучше сейчас купить 2-е издание. Оно вышло, если мне не изменяет память, через год после релиза 2.8

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

Кого колышет Гослинг? Он больше в Oracle не работает. Пусть трендит что захочет. К старости все с ума сходят. Томсон с Пайком вон тоже, туда же.

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

Ты чо, опух? Какая такая теоретическая база? Какая такая сишарпа?

Вопрос был в том, что следующая Java это Java7. И скакали всякие никаким боком тут не примазались. И Гослинг со своим опухшим мнением теперь уже к Java никаким боком не относится.

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

> Зачем они, если есть С#?

Чтобы программить. А Java и C# - чтобы программить могли и неосиляторы. Неосиляторы же тоже люди - зачем их обижать.

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

Я?!? Ты подозреваешь МЕНЯ в том, что я мог потратить свое драгоценное время и посмотреть, что это за скакалка такая? Да ты точно опух, пацан. Мне лично глубоко насрать на эти ваши скакалки. У меня есть Java, и я точно знаю, инфа 100%, что следующей Java будет Java7.

anonymous
()

К стати забыли упомянуть

>scala -Xexperimental
Welcome to Scala version 2.9.0.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_25).
Type in expressions to have them evaluated.
Type :help for more information.

scala> class X extends scala.Dynamic {
     | def applyDynamic(name: String)(args: Any*) = println("aga" + name + ":" + args)
     | }
defined class X

scala> new X();
res0: X = X@1339a0dc

scala> res0.x(1,2)
agax:WrappedArray(1, 2)
r ★★★★★
()
Ответ на: комментарий от anonymous

> Скала:

1) ужасные треды (если сравнить с эрлангом)


Давайте не писать детские глупости «а у моего папы длиннее»? Нафик нам не нужен ваш ырланг. Возьмите трэды скалы и объясните, что в них плохо сделано и в каких задачах это проявляется.

2) никакой паттерн-матчинг


Чушь какая... Си тоже без ПМ, работает как часы. Не велика фича, алгоритмы спокойно пишутся и без неё. Более того - ПМ дай бог нужен в 0.001% мест, чего ради им выпячиваться?

3) отсутствие инструментов для мета-программирования


Опять же, как и ПМ, даёт в некоторых задачах улучшения, но не является фичей, без которой нельзя написать приложение.

4) отсутствие теоритической базы


«теорЕтической».
эээ.... какая ТБ вам нужна? Сколько разных ТБ вы знаете? Как их наличие влияет на способности писать на языке? Какая ТБ есть, например, у Бейсика? Или это не язык? :)

5) непонятный синтаксис(тут пишу на джаве, там на питоне)


Может быть. Но это одно из устоявшихся различий ВСЕХ языков! Что непривычно вам, вполне легко даётся _реальным_ прогерам на скале.

6) любой код на скале сводится к бину с джавовскими геттерами и сеттерами


И...? Каковы недостатки этого подхода?

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

> Зачем оно, если есть Common Lisp и Haskell?

Затем, что с жабы туда перебегут тысячи прогеров, а ЛИСПы и Хацкели до сих пор напоминают подпольный кружок макраме из макаронин - настолько их мало и настолько они «далеки от народа».

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

> Чушь какая... Си тоже без ПМ, работает как часы. Не велика фича, алгоритмы спокойно пишутся и без неё. Более того - ПМ дай бог нужен в 0.001% мест, чего ради им выпячиваться?

Ой не надо ля-ля. ПМ нужен везде. Где есть структуры данных, там нужен и ПМ.

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

Чем плох ПМ в скале? Я как-то пропустил.

applyDynamic о_О таки запилили.

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

Кому там теории не хватало

Книги http://www.scala-lang.org/node/959 (около 20 штук)

Книга Мартина Одрески http://www.artima.com/shop/programming_in_scala_2ed Свободна в pdf и интересна не только для изучающих язык, но и для программистов вообще, простое объяснение общих понятий, таких как наследование, композиция, рекурсия и т.д.

Ну и на последок практический курс http://www.scala-lang.org/docu/files/ScalaByExample.pdf

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

А да каюсь. Но если она продается в pdf формате, то понятно, что скачать ее труда не составит :)

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

Онлайн версия, прошу прощения.

folone
() автор топика
Ответ на: комментарий от r

Сильно ли пострадает производительность и потребление памяти при обычном использовании функциональных конструкций?

Нет.

А вот и правда же, компилятор оказался очень умный. Появилось немного времени, захотелось проверить, что за код получается.

Например, такой код генерирует абсолютно нормальный tableswitch:

def digit (v: Int) {
v match {
case 0 => print ('0')
case 1 => print ('1')
case 2 => print ('1')
case _ => print ('unknown')
}
}

А такой - несколько if-ов:

def digit (v: Int) {
v match {
case v if (v >= 0 && v <= 10) => print ('0' + v)
case _ => print ('unknown')
}
}

Здесь k будет обычной локальной переменной примитивного типа, а, несмотря на запись, приведение типов выполняется без боксинга, стандартными опкодами jvm.

var k : Int = 3;
k *= Math.floor (Math.Pi).toInt;
println (k);

А тут k будет объектом типа IntRef

object Main {
def test (action: (Int) => Int) {
println (action (5));
}

def main(args: Array[String]) = {
var k : Int = 3;
   test (v => k * v * 2);
   k = 6;
   test (v => k * v * 2);
}
}

Скала мне теперь нравится еще больше)

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

> А такой - несколько if-ов:

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

Здесь k будет обычной локальной переменной примитивного типа, а, несмотря на запись


В отличии от последнего который я смотрел groovy, который генерировал просто фееризм вложенных боксиногов/анбоксингов.

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

>И какая же у Scala теоретическая база? Не путай освоение грантов европейской ассоциацией клоунов и маразматиков с теорбазой.

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

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

> Кстати, а анонимные функции, если они одинаковые, никогда в один класс не объединяются?

Точно не скажу - но врядли. Потому что они как бы не совсем одинаковые - по причине того что это все таки разные классы, и это уже неодинаковость которая с точки зрения jvm может быть кому-то интересной.

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

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