LINUX.ORG.RU

Red Hat работает над новым java-подобным языком программирования ceylon

 , , ,


0

1

Вряд ли стоит в тексте новости перечислять все отличия языка от явы и общие черты с C#  — так что лучше самим прочитать слайды. Общее же направление языка:

1. Учесть те ошибки, которые совершены при проектировании явы. Ошибки, приведшие, в частности, к тому, что на яве трудно кратко и типобезопасно описать GUI и многие другие структурированные вещи — в результате чего приходится «выходить» из явы и использовать XML.

Вот что пишет об этом сам автор:

But I guess I should mention that the number one technical problem that we simply can't solve to our satisfaction in Java - or in any other existing JVM language - is the problem of defining user interfaces and structured data using a typesafe, hierarchical syntax. Without a solution to this problem, Java remains joined at the hip to XML.

2. Неудобства от использования устаревшего JDK (от себя добавлю — ява до дженериков и после — это 2 разных языка)

Сейчас имеется спецификация языка, ANTLR-грамматика, и неполный type checker, работы по генерации байт-кода только начались, но автор надеется использовать значительную долю кода из javac (как, впрочем, и код из Open JDK, JBoss, and Eclipse). Язык, похоже, будет JVM-based.

Слайды:

http://www.qconbeijing.com/download/G...

http://www.qconbeijing.com/download/G...

Обсуждение ceylon vs. scala:

http://stackoverflow.com/questions/56...

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

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

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

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

> при сталине такой иксни не было, кинга быстро бы кормить мошкару услали.

Это он бы еще легко отделался. 10 лет без права переписки вражине.

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

>Это регресс: Java -> Ceylon

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

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

Если уж совсем тошнит - можно переписать их макросом

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

> Нафига нам Скала без жабских библиотек? На llvm уже Хаскелл бегает.

А нафига нам Хаскелл без жабских библиотек?

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

>один из создателей Hibernate — недостаточно спец?

Там вверху по топику есть ссылка на форум - сходи и поднимись чуть выше постранице - найдешь вольный пересказ мнения «создателя гибернейт» про транзакции.

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

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

>В Ceylon есть подмножество синтаксиса, позволяющее лопатить что-то вроде json с проверкой типов. Очень остроумно сделано кстати.

Не очень. В той же скале http://code.google.com/p/punk/wiki/SCON. Никому не нужно.

Фишка JSON в том что он в динамическом языке. То есть его можно скормить работающей программе уже после того как программа разработана, или из удаленного источника. Или если речь идет о конфигурировании - иметь возможность менять в уже установленной программе. То есть эта фигня должна быть динамической. В scale Dynamic появился в 2.9. В цейлоне его нет. Еще раз скажем досвиданья.

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

>И чем их подход хуже лямбд? По-моему естественно получается.

В смысле полным отстутствием?

псевдокод:

func f( l: X -> Y ) {
g(l);
}

на цейлоне пожалуста.

Или ихний ADT. Один из ключевых моментов ADT - это деконструкция в паттерн матчинг. Цейлонский ADT подозрительно напоминает непонятю статью из википедии - там есть псевдкод (в разделе explanation) который выглядит точно так как сделали цейлонский ADT.

В нормальном ADT я могу написать (псевдокод)
match x
case Just Left a : Just Right (b,c) : Nothing :: xs => ....

То есть могу произвести глубокую деконструкцию и получить значения (a,b,c,xs).

Если добавить скальный экстрактор к этому:
scala> val Extr = "([^-]+)-(\\d+)".r
Extr: scala.util.matching.Regex = ([^-]+)-(\d+)

scala> val Extr(x,y) =«A43-55»
x: String = A43
y: String = 55

Мне страшно представить во что выльется даже первая строчка на циклоновских ADT, где гвидо под паттерн матчингом понимает instanceOf + cast.

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

Спецалисты как раз знают, что Java - это Modula 3 с отупленным, понятным простонародью синтаксисом. Так что := - это всего лишь возврат к историческим корням.

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

Гвидо лавры Мигеля покоя не дают. Наверное выступил в редхате про «мы создадим собственную джаву с блекджеком и как у новеля ссобственный дотнет».

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

>Это было бы щастье с большой буквы «Щ»,

Ото просто чейто личный проект а не официальный порт потому что.

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

> Это регресс: Java -> Ceylon -> «Квасик» :)

А я подумал о варианте: Java -> Ceylon -> Borjomi :)

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

>А официальный есть?

Нет. Официально есть только под jvm и .net(не production ready). А всяких желающих покомпилить скалу под tamarin, javascript или еще куда - вообще полно - компилятор многофазный, модульный, с плугиновой системой... - то есть есть вобзможности туда влезать в нужную часть и писать например бекэнд без больших инвестиций. Токо документации не много и она носит отрывочный характер: http://lamp.epfl.ch/~magarcia/ScalaCompilerCornerReloaded/

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

>один из создателей Hibernate — недостаточно спец? Впрочем, у него нет бороды и усов :)

Я к стати думаю что если бы не антиапачевская вожжа под хвостом Марка из JBoss, который занимался собирательством «антиапачевского» софта - гибернейт бы откинул копыта еще в первой половине 0вых годов. А так Марк его подобрал и дал шанс переписать эту ужастную поделку полностью, доведя до ума.

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

>Кто гвидо ты гвидо епт %)

Фу блин. Гэвину.

r ★★★★★ ()
Ответ на: комментарий от r
func f( l: X -> Y ) {
    g(l);
}

Не понял причём тут лямбды, но держи:

void f(Y l(X)) {
   g(l);
}

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

sort(array, boolean lambda T x, T y.x<=y);
В Цейлоне будет вот так:
sort(array)
boolean compare(T x, T y) {return x<=y;};

Просто при вызове создали функцию с именем параметра вызова. Думаю ты и сам это знаешь, если читал те пдфки.

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

А у них там и нет паттерн матчинга. Где ты его увидел вообще? Насколько я понимаю, они собираются сделать как можно более компактный и понятный язык для массового программиста. Что-то вроде java с учётом старых ошибок. Философия внутри лежит та же самая: ничего лишнего и минимум возможностей выстрелить в ногу. Крутым парням понятное дело нужно что-то повыразительней.

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

Что в паттерн матчинге может быть непонятно массовому программисту? И как с его помощью выстрелить в ногу?

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

> гуглу не нужен такой язык для нэйтива

Гуглисты - это студенты-неосиляторы, понабрали дешёвок и строят из себя новаторов. При их капитале и тех.базе они давно могли выпилить M$. Но не смогли - ламеры птамучта.

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

Не понял причём тут лямбды, но держи:

Ты уверен? Уверен что не так?:

void f(Y l(X)) {
   g() l(X x) {
      return l(x);
   } 
}

Там нет возможности присваивать методы - переменным. В цейлоне ссылка на метод - это имя метода без аргументов. Здесь параметр - переменная - следовательно ее нельзя передать в более глубокую функцию которая ждет method reference.

Если эти параметры - не переменные - язык еще более противоречивый и шизоидный. Это значит что например такое невозможно:

void f(String key, Y x(Z)) { map.put(key, x); }

Это значит что там нефига не higher order functions - а какая-то ограниченная синтаксическая мимикрия под них.

Просто при вызове создали функцию с именем параметра вызова. Думаю ты и сам это знаешь, если читал те пдфки.

Вот именно. И не нашел там действительных возможностей ссылаться на функцию переменной. Все что я вижу - это решения не на концептуальном уровне объктов языка - а на уровне каких-то синтаксических выкрутасов.

Как например разницу вызова с именованными и неименованными аргументами:

f(1,2) - обычный вызов

f { x = 1, 2 } - первый аргумент именованный.

То есть круглые скобки на именованный апргумент - запрещены.

Читая там некоторые подбные решения я начинаю сильно подозревать что синтаксис языка вызрел не в форме «вот такой синтаксис был бы удобен», а в форме «на вот такую фигню мы можем написать грамматику для ANTLR - по другому не получается». Как говорил Одерский - если вы разрабатываете серьезный синтаксис языка программирования - можете забыть про парсер генераторы.

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

> f { x = 1, 2 } - первый аргумент именованный.

То есть круглые скобки на именованный апргумент - запрещены.

Херасе.

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

> Ужос - это доллар перед именем переменной.

Так типа ближе к бизнесу. :^)

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

А у них там и нет паттерн матчинга. Где ты его увидел вообще?

Pattern Matching - это неотъемлимая часть ADT. У них там ADT без pattern matching'а? Такие ADT - нафиг не нужны.

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

У них не получилось.

Сколько из «массовых программистов» расшифруют что что что в этом коде без знакомства с языком?

repeat { 
   times = 3;
   void perform() { 
        writeLine(“Hola Mundo!”);
   }
};

Любой человек знающий плюсы может читать жабыошарпы всякие. Что написано вот тут - он в жизни без мануала не расшифрует.

Одним из критериевости массовости - есть базовія структура на «знакомых синтаксических конструкциях». Поэтому жаба имела C++ный синтаксис.

Тут мы видим странного фрика. Вот ихние «ADT»

abstract class Node<T>(String name) of Branch<T> | Leaf<T> { ... }

class Leaf<T>(String name, T value) extends Node<T>(name) { ... }

class Branch<T>(String name, Node<T> left, Node<T> right) extends Node<T>(name) { ... }

а вот ихний «pattern match»

Node<String> node = ... ;
switch (node)
case (is Leaf<String>) {
       leaf(node.value);
}
case (is Branch<String>) {
       branch(node.left, node.right);
}
else {
  somethingElse(node);
}

Прочитав это и увидев вот это: http://en.wikipedia.org/wiki/Algebraic_data_type#Explanation

У меня возникло подозрение что все что Гэвин знает об ADT - он почерпнул из статьи в википедии.

Если он делал свой бейсик с блекджеком и шлюхами - нахрена он вообще полез в ADT, HOF и прочий карринг?

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

>на вот такую фигню мы можем написать грамматику для ANTLR - по другому не получается

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

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

При их капитале и тех.базе они давно могли выпилить M$


выпелить. ололо. MS и так уже на них в суд подала за использование монополистических практик, им нельзя зарываться, а то суд нах разделит как разделил Microsoft™

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

скоро выходит JDK 7?


Так в нем весь груз обратной совместимости остался. Имеется в виду новый JDK&JVM, где генерики будут reified, где будет TOC и прочая, прочая

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

Сомневаюсь, что у них что-то серьезное получится без судов с Ораклом, тем более

но автор надеется использовать значительную долю кода из javac (как, впрочем, и код из Open JDK, JBoss


Сомневаюсь, что компания, использовавшая всегда Java, перейдет на Ceylon.

Ceylon - это не нужно.

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

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

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

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

>Я не понял, откуда ты взял, что функции-параметры недоступны вложенным функциям.

Там сказано что ссылка на метод - это имя метода без параметров.

Там нельзя написать что-то типа:

var f = System.out.println

а можно только

void f() = System.out.println; // - это декларация метода.

Там нет типа «функция». Судя по тому что там написано - функция - это не first class object в языке - это какой-то синтаксический ход конем. Передача функциии в другую функцию там «ничем не отличается от декларации» - там же написано. Это может быть method reference или специальный синтаксис «со стыренным из смолтолка (судя по всему смолтолк ему тоже рабинович напел) именованием». То есть судя по всему в отличии от прочих типов - параметр «типа» функция - не является обычной переменной (только так можно непротиворечиво оъяснить почему ее можно передавать в другую функцию, но нельзя присвоить переменной).

Далее - поскольку функция - не тип - ее нельзя использовать в параметрическом полиморфизме (чему там оно должно быть satisfies") или присваивании переменных - что исключает например List[String => String]. А раз функция в языке не first class object - говорить о каком-то higher-order functions тут не приходится. Это скорее «специальный синтаксис» для нескольких случев там где применяют higher order. То есть это больше похоже на то как бы HOF были реализованы подстановочной макросистемой.

ока мало информации, чтобы делать конечный вердикт.


Мало - но та что есть не внушает подозрений на скольнибудь годный результат.

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

А что лиспворкс уже догоняет жабу?

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

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

Грубо говоря на цейлоне невозможно написать что-то вроде:

var z = f( x>y ? \x => x+1 : \x => x - 1 )

А можно только:

local z;
if (x > y) 
    z = f() int f(int x) { return x + 1 }
else 
    z = f() int f(int x) { return x - 1 }

А как говаривал дохтор хауз: «This is not a TB^H HFO!».

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

> переведите, пожалуйста, слово «and».

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

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

> Хреносозидатели что-то кругами ходят, пытаясь создать лисп.

ну не все сразу — постепенно-то догоняют, глядишь лет через 20 все-таки полностью догонят

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

ну не все сразу — постепенно-то догоняют, глядишь лет через 20 все-таки полностью догонят

Если бы догоняли... Я ж говорю, кругами ходят. На лямбду вот бочку погнали.

Хотя, в RH ещё те жаберы работают. Я как-то получил выговор, обсмеяв при толпе мелкого начальника из jboss за его высказывание, что, мол, как функциональные языки смогут работать без jvm? Кругом толерастия, уже идиота даже загнобить нельзя, чтобы не обидеть, убогого...

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