среда, 23 ноября 2011 г.

[prog] Язык Ceylon от RedHat вышел в свет

Соответствующая новость и обсуждение на OpenNet.

Сегодня утром краем глаза глянул на сайт ceylon-lang.org. Полного впечатления о языке, конечно же, не получил. Но какие-то моменты в глаза бросились.

Из очень хороших вещей в языке встретились nullable-типы, а так же (долгожданный мной) аналог typedef из C/C++.

Так же заметно, что элементы из функциональных языков (вроде паттерн-матчинга) мигрируют в сторону мейнстрима. Но в более примитивной, а значит и более приспособленной к массовому применению ;), форме. В Ceylon это проявляется, например, в возможности указывать объединение типов. Что-то вроде:

//union type
void printName(String|Named name) {
    switch (name)
    case (is String) {
        println(name);
    }
    case (is Named) {
        println(name.first + " " + name.last);
    }
}

Здесь тип аргумента name – это или String, или Named. Чтобы работать с таким аргументом нужно использовать приведенный выше вариант оператора switch. Аналогичная штука может использоваться и для выстраивания объектных иерархий:

abstract class Node() of Leaf | Branch {}

Node node = ...;
switch (node)
case (is Leaf) { ... }
case (is Branch) { .... }

В целом же, читая Quick introduction и первые главы Tour of Ceylon складывается впечатление, что язык получился намного более простым и, вероятно, более приспособленным для “повседневных” задач мейнстрима, чем Scala. Несколько смущает количество дополнительных деклараций – shared, formal, actual, default и пр. для методов классов. Закрадывается подозрение, что авторы языка в чем-то перемудрили и напрасно отказываются от уже привычной терминологии (тех же public или override). Но, может быть, я ошибаюсь из-за незнания предмета.

Так что, на первый взгляд, у RedHat действительно получился язык, который более удобен, чем Java, и более прост, чем Scala. Но вот нужен ли он для JVM – отдельный большой вопрос. Впрочем, меня он пока не волнует, т.к. я все еще C++ программист ;)

Отправить комментарий