LINUX.ORG.RU

Вышла Scala Final 2.6.0


0

0

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

Структурные типы позволяют использовать в коде Ruby-like конструкции:
def test(f: { def getName(): String }){
println(f.getName)
}

Здесь test принимает в качестве параметра любой объект, имеющий в составе метод getName, возвращающий String

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

anonymous

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

Урааааа

anonymous
()

Новости - сто лет в обед! ЛОР начинает просыпаться и опохмеляться?

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

> а написать что это такое "религия не позволяет"(R)?

Язык программирования под Java VM.

Fice ★★
()

>Здесь test принимает в качестве параметра любой объект, имеющий в составе метод getName, возвращающий String

а если нету? runtime exception или проверка компилятором?

ЗЫ. интерфейсы придумали трусы?

k0l0b0k ★★
()

Куда катится мир... на яве другие языки пишут. Ладно б ява была действительно для этого пригодна, так нет... все кому не лень клепают каждый свое колесо.

Таким темпом, скоро выйдет язык Stone написанный на Scala, который в свою очередь на Java, а потом... :)

Deleted
()

Ну и при чем тут линукс?

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

>Куда катится мир... на яве другие языки пишут. Ладно б ява была действительно для этого пригодна, так нет... все кому не лень клепают каждый свое колесо.

Вы не путайте Java - язык и Java - платформу, прошу вас. Есть JVM, есть java byte-code для JVM, именно в него и компилируется Scala.

Вообще язык очень интересный, всё чаще про него слышно. Начинаем ботать :)

achy
()

"Ruby-like конструкциями" назвали использование особой формы для реализации duck typing? Ежели так, то Scala становится очень и очень интересным языком, так как имеет массу интересных решений из самых разных языков, а компилируется все равно под ту же JVM.

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

>Вы не путайте Java - язык и Java - платформу, прошу вас. Есть JVM, есть java byte-code для JVM, именно в него и компилируется Scala.

ну, первая скала на яве и писалась :)

>Вообще язык очень интересный, всё чаще про него слышно. :)

+1

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

> Кстати, почему-то на сайте нет раздела Success Stories или Who Using it.

Так ведь тем и интересен, какой красноглазый джедай будет смотреть на реальные проверенные временем решения, э?

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

> ЗЫ. интерфейсы придумали трусы?

да уж, странно пускать слюни от такой дикой конструкции, которая в жабе выглядит гораздо элегантнее

впрочем, чем бы дитя не тешилось... только бы не пугалось от такого "человеческого лица" :-)

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

>Так ведь тем и интересен, какой красноглазый джедай будет смотреть на реальные проверенные временем решения, э?

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

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

>да уж, странно пускать слюни от такой дикой конструкции, которая в жабе выглядит гораздо элегантнее

в идеях - ога, элегантнее. однако чтобы сделать такое в яве, надо сляпать интерфейс, у которого есть этот метод getName(), и все классы, в том числе и сторонних разработчиков, обязать его заимплементить. В идеале — красивее. В реалиях — не пришлось бы через рефлекшены ходить

>впрочем, чем бы дитя не тешилось... только бы не пугалось от такого "человеческого лица" :-)

Ещё один пример — with. Когда можно сказать, что принимаемый параметр должен реализовывать не один, а несколько интерфейсов. В яве придётся либо опять перекраивать дерево наследования, без особой на то причины, либо использовать незабвенные instanceof

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

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

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

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

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

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

adarovsky ★★★★
()

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

ЗЫ. После функциональных языков синтаксис scala в применении к функциоанльному подходу выглядит как то не кузяво.

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

> в идеях - ога, элегантнее. однако чтобы сделать такое в яве, надо сляпать интерфейс, у которого есть этот метод getName(), и все классы, в том числе и сторонних разработчиков, обязать его заимплементить.

представь себе, это и проще, и читабельнее, и надежнее

впрочем, если тебе runtimeException больше нравится, я не буду возражать ;)

> В идеале — красивее. В реалиях — не пришлось бы через рефлекшены ходить

ну да, если только по клаве барабанить, вместо того чтобы подумать, то так и бывает у жабакодеров

> Ещё один пример — with. Когда можно сказать, что принимаемый параметр должен реализовывать не один, а несколько интерфейсов. В яве придётся либо опять перекраивать дерево наследования, без особой на то причины, либо использовать незабвенные instanceof

"перекраивать дерево" это лишний implements довавить что-ли?

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

> если тебе runtimeException больше нравится

Насколько я понимаю, там будет ошибка при компиляции.

> перекраивать дерево" это лишний implements довавить что-ли?

Да. А если у тебя нет исходников библиотеки, то даже это невозможно.

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

>> если тебе runtimeException больше нравится

>Насколько я понимаю, там будет ошибка при компиляции.

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

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

>> перекраивать дерево" это лишний implements довавить что-ли?

>Да. А если у тебя нет исходников библиотеки, то даже это невозможно.

сомнительно, ПМСМ это легко исправляется обычным фасадом/декоратором или proxy на худой конец

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

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

Именно ошибка при компиляции. Как и в случае с with

В том и синус, иначе никакого интереса этот язык не представлял бы

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

>сомнительно, ПМСМ это легко исправляется обычным фасадом/декоратором или proxy на худой конец

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

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

>Жутковатый язык, напоминает свалку. Нет, идея конечно правильная: много возможностей - это хорошо, но синтаксис какой-то непоследовательный.

Сначала я тож испугался. Однако последовательности в нём довольно много. А вот сущностей — не так много, как кажется сначала

>ЗЫ. После функциональных языков синтаксис scala в применении к функциоанльному подходу выглядит как то не кузяво.

он же не чисто функциональный. При желании на нём можно императивщину лабать за милую душу :)

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

> Именно ошибка при компиляции. Как и в случае с with

врешь ты все ;-) я пробежался немного, в лучшем случае контроль только для Scala классов, так что о нормальном использовании жаба-платформы можно забыть, да и для родных scala как мне показалось можно получить runtime подарочек во время new

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

> ты ж заблудишься в этих фасадах в конце концов.

гм... а в "суперпупермультипарадигменной" Scala ты, значится, не заблудишься?

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

>в идеях - ога, элегантнее. однако чтобы сделать такое в яве, надо сляпать интерфейс, у которого есть этот метод getName(), и все классы, в том числе и сторонних разработчиков, обязать его заимплементить. В идеале — красивее. В реалиях — не пришлось бы через рефлекшены ходить

Не факт. В реалиях, в случае скалы мы получим Exception, в софте тех же сторонних разработчиков, которые уверен "поблагодарят" вас за такую фигню. Софт на яве тоже получит Exception, но! При следующей сборке компилятор _заставит_ разработчика имплементировать getName(). ИМХО лучше пусть будет прога менее красива внутренне, зато более устойчива. А рефлексия - это не так уж и плохо кстати (исключение - софт критичен ко времени выполнения).

k0l0b0k ★★
()

Кто реально и для реальных задач использует это поделие?

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

> всё чаще про него слышно

И сколько же господин achy набашлял бабла за использование этого языка? Или пионЭры-кульхацкеры за "чупа-чупс" работают. :) Пора взрослеть.

Bioreactor ★★★★★
()

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

AiFiLTr0 ★★★★★
()

Java сам по себе не плох и не хорош. Плохо или хорошо выбирать или не выбирать Джаву под конкретную задачу. А то можно или телескопом гвозди забивать или очередной "велосипед из руды" изобретать.

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

>линупсоидам

К логопеду, быдло!

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

>Есть опыт програмирования на scala?

Неа. Только посмотрел чуток и всё. В проекте не стали использовать, я и забил на неё. А впечатления приятные остались, да.

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

>врешь ты все ;-) я пробежался немного, в лучшем случае контроль только для Scala классов, так что о нормальном использовании жаба-платформы можно забыть, да и для родных scala как мне показалось можно получить runtime подарочек во время new

заинтересовал. Щас проверю, результаты сюда отпишу

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

>> Неа. Только посмотрел чуток и всё. В проекте не стали использовать, я и забил на неё. А впечатления приятные остались, да.

Насколько я понял scala номально интегрируется с Java, в смысле Java классы и пакеты можно импортировать в scala-код? Я прав?

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

> >Насколько я понимаю, там будет ошибка при компиляции.

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

Не гони пургу. Scala - статически типизированный язык. С системой типов сильно более мощной, чем в Java (хотя и слабее, чем в Haskell). И generics (ну, ээ, там они называются параметризованные типы, IIRC), там лучше - там можно запросить любой тип наследования между type[parent] и type[child], что небесполезно.

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

> Насколько я понял scala номально интегрируется с Java, в смысле Java классы и пакеты можно импортировать в scala-код? Я прав?

Ага. У нее, например, вообще нет своего ввода-вывода, во всех примерах в начале стоит import java.lang.System._ и потом println("blah blah). Или оно System._ даже само импортирует, забыл.

Ну и она, типа, теоретически переносима на .NET должна быть - хотя программы будут несовместимы между такими диалектами, естественно.

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

Докладаюсь:

$ cat Interface1.java
public interface Interface1 {
    public void func1();

$ cat Interface2.java
public interface Interface2 {
    public void func2();

$ cat Impl.java
public class Impl implements Interface1 {
    public void func1() {
        System.out.println("func1()");
    }

    public void func2() {
        System.out.println("func2()");
    }
}

$ cat TestMixin.scala

object TestMixin {
    def func(arg: Interface1 with Interface2): Unit = {
        arg.func1();
        arg.func2()
    }

    def main(args: Array[String]): Unit = {
      func( new Impl() )
    }
}

$ scalac TestMixin.scala
TestMixin.scala:9 error: type mismatch;
 found   : Impl
 required: Interface1 with Interface2
      func( new Impl() )
            ^
one error found


Если добавляем Interface2 в Impl:

$ scala TestMixin
func1()
func2()

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

>И сколько же господин achy набашлял бабла за использование этого языка? Или пионЭры-кульхацкеры за "чупа-чупс" работают. :) Пора взрослеть.

Набашлянием приходится пока заниматься на Java. Но: 1) есть и свои проекты, 2) пару раз уже удавалось убеждать начальство не использовать технологии прошлого века.

Вообще за подобными языками будущее :) Я в это свято верю. Если ты пишешь метод - то он должен уметь принимать любой параметр, удовлетворяющий интерфейсу, который использует этот метод. Вот только задавать отдельно этот интерфейс незачем, если подобную проверку можно сделать автоматически. Сколько примеров кода на Ruby, которые работают вне зависимости от того, какого типа параметр ты им передаёшь уже видел... Но без проверок на этапе компиляции.

Гениальнейшая идея, обидно, что они её придумали и без меня, но радует, что без меня реализовали. :)

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

>Насколько я понял scala номально интегрируется с Java, в смысле Java классы и пакеты можно импортировать в scala-код? Я прав?

Да. Влёт. И обратно. Но, понятно, с ограничениями. Я пример отпостил (правда, без обратного использования, только java -> scala)

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

Вот то, что в байт-код нагенерилось:

$ cat TestMixin\$.jad
// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: packimports(3)
// Source File Name:   TestMixin.scala

import scala.ScalaObject;

public final class TestMixin$
    implements ScalaObject
{

    public TestMixin$()
    {
    }

    public void main(String args[])
    {
        func(new Impl());
    }

    public void func(Interface1 interface1)
    {
        interface1.func1();
        ((Interface2)interface1).func2();
    }

    public int $tag()
    {
        return scala.ScalaObject.class.$tag(this);
    }

    public static final TestMixin$ MODULE$ = this;

    static
    {
        new TestMixin$();
    }
}

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