Re[4]: Kotlin - новый язык для JVM
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 26.07.11 14:14
Оценка: 87 (7)
Cyberax,

C>>>5) Множественное наследование.

A>>можно сказать, что они в Скале есть через трэйты
C>Они кривые. Скажем, для них нет конструкторов и вообще их инициализация неудобна. Diamond-проблему trait'ы в Scala никак не решают, а просто задают детерминированный механизм разрешения конфликта.

C>Так что в Kotlin поступили правильно — взяли обычное множественное наследование, убрав разницу между интерфейсом и классом.


Это как раз случай простого и неправильного решения для сложной проблемы. Вообще, я понимаю, об окончательном решении сейчас рано говорить — язык ещё даже не оформлен, не то что не реализован. Но если эта залепуха (а по другому я это "решение" назвать не могу) останется в релизе, то это будет полнейший фэйспалм. Можно понять Страуструпа — он лепил из того, что было, и опыта хождения по граблям множественного наследования не было никакого. Гослинг (а вслед и Хейлсберг) посмотрели на это, и сказали — нафиг надо и ввели ограничения, так что выразительность упала значительно, но и грабли были убраны. А что мы видим здесь? возврат к старому и злому С++.

Diamond-проблему как раз трейты решают, и это решение модульное, типобезопасное и непротиворечивое (см. статью Scalable component abstractions). Соглашусь, что несколько громоздкое из-за правил линеаризации. И ограничения есть — нетривиальные конструкторы недопустимы. Впрочем, если мы хотим позволить себе конструкторы с параметрами, тогда придётся навернуть систему типов и отношений между классами.

Самый продвинутый известный мне вариант описан в статье CZ:MultipleInheritance Without Diamonds — а именно ввести 2 вида отношений: extends и requires, и разделить понятия subtype и subclass.
Вкратце, любые ромбы запрещены, но чтобы сохранить выразительность и переиспользовать функционал, можно ввести отношение requires: C requires A. Означает это, что C становится абстрактным, будет подтипом A (то есть можно приводить ссылки), и конкретные наследники C должны будут также наследовать и от A.
Таким образом, ромб типа

заменяется на иерархию

Никаких неоднозначностей не осталось, и вместе с тем, конкретные классы заиспользовали все нужные им куски из функционала предков.

А вот то что я вижу в Котлине вызывает ряд вопросов:
open class A(virtual var v : int)
open class B(v : Int) : A(v)
open class C(v : Int) : A(v)

class D(v : Int) : B(v), C(v) {
  override var v : Int
    get() = this<B>.v
    set(value) { this<B>.v = value }
}

1. Требуется ли всегда вручную явно указать как разрешать противоречия? (Если да, то печаль.)
2. Сколько подобъектов A содержится в D (если 2, то это грабли, и тогда эти сопли не нужны, лучше использовать композицию, если 1, то см ниже.)
3. Как будем инициализировать подобъект А если напишем
open class A(virtual var v : int)
open class B(v : Int) : A(100)
open class C(v : Int) : A(200)

class D(v : Int) : B(v), C(v) { ... }

Сколько раз будем вызывать конструктор для A? Я надеюсь, один раз, но тогда с каким аргументом? (Для Скалы пофиг, у всех трейтов одинаковые то бишь дефолтные конструкторы, поэтому выбор очевиден — вызываем один раз единственно имеющийся конструктор).

Плюс, в Скале есть мембер-типы и селфтипы, что позволяет элегантно расправиться с Expression Problem. А Котлин?

Короче, будем смотреть
(Думаю, черкануть пару строчек кому-нибудь из JetBrains, авось заинтересуются идеей из CZ).
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
множественное наследование kotlin
Re[17]: Kotlin - новый язык для JVM
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.08.11 14:15
Оценка: 27 (2) +1 :))) :)
Здравствуйте, Klapaucius, Вы писали:

K>К примеру, когда ицелоп по ночам бьет


Эцилоп. Проверочное слово police
... << RSDN@Home 1.2.0 alpha 5 rev. 1530 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[16]: Kotlin - новый язык для JVM
От: Klapaucius  
Дата: 27.07.11 13:15
Оценка: 1 (1) +2 :)
Здравствуйте, Cyberax, Вы писали:

K>>А, т.е. это был пример кода на Котлине, а не некий псевдокод с гипотетическим решением проблемы?

C>Я не уверен насчёт возможность определить оператор "+?" (т.е. возможно придётся использовать plus?),

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

C>но оператор "?" точно в документации есть.


Да, я видел.

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


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

C>Мне не особо интересно, чтобы язык был полностью вытекающим из общего механизма без всяких исключений.


А этого и не нужно. Нужна возможность называть одинаковые вещи одинаково, а разные — по-разному.

C>А макросы меня откровенно пугают — я понимаю, что это очень мощная вещь, но я боюсь того, что накосячат на них Джамшуты Рамдисамрутаны.


Ну, допустим, пугают — так тут и без макросов можно обойтись.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[10]: Kotlin - новый язык для JVM
От: Klapaucius  
Дата: 26.07.11 11:18
Оценка: 1 (1) +2
Здравствуйте, Cyberax, Вы писали:

K>>И в чем удобство и практичность заключается? Как, например, сделать "safe call" не только по первому аргументу, а по двум? Т.е. val z = x + y, и чтоб z равнялась x + y если x и y не null и равнялось null в остальных случаях?

C>
C>z= (x!=null && y!=null) ? x + y : null;
C>


У этого вашего "удобства" недетское злое лицо. Обычно такое "удобство" называют неудобством. Выделенный жирным шрифтом код совсем не нужен и писать такой код не нужно. Котлин же заставляет писать ненужный код. Это — практично?

K>>Почему можно лифтить функции в nullable, а в List, например, нельзя?

C>То есть?

Ну, оператор ?. "поднимает" U -> V в "контекст" Nullable и мы получаем по факту Nullable<U> -> Nullable<V> ну или сокращенно U? -> V?. Все это, понятно, в кавычках, потому что он ничего такого он разумеется не делает — это ad-hoc костыль, потому что авторы Котлина не читатели и страдают синдромом Уолта Брайта. Но у читателя возникают некоторые ассоциации. И тут сразу возникает вопрос — а почему только Nullable<_>, а не любой другой функтор? Наверное, когда котлиностроители начнут вставлять в язык какое-нибудь асинхронное программирование они возьмут и вцементируют в язык какой-нибудь оператор ||. или что-то наподобие.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Kotlin - новый язык для JVM
От: QrystaL Украина  
Дата: 20.07.11 06:57
Оценка: 68 (2)
Kotlin

Интересно, займет ли он свою нишу?
Re[9]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 20.07.11 18:39
Оценка: -1 :)
Здравствуйте, VladD2, Вы писали:

C>>Оператор "стрелочка" у них зарезервирован для анонимных функций: "val doubled = ints.map {it => it * 2}".

VD>Ты внимательно на эту стрелочку посмотри. В типах используется "->". В Нмерле для типов используется "->", а "=>" используется для лямбд (=> — это макрос).
Это не такое уж хорошее решение, тогда.

VD>Зачем в лябде нужны фигурные скобки я так же понять не могу. В лямбдах каждый символ на счету.

Фигурные скобки, наверное, можно опускать. Действует то же правило, что и в Java/C. Впрочем, мелочи.

C>>В принципе, неплохое решение — fun(), сигнатуры и вызовы разделены.

VD>Где? Ты точно разобрался в синтаксисе?
Да. Мне в Скале не очень нравится то, что функциональные типы и лямбды описываются с помощью одного и того же символа "=>". Их разделение мне кажется правильным решением.
Sapienti sat!
Re[6]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.07.11 00:56
Оценка: +2
Здравствуйте, VladD2, Вы писали:

LCR>>2. Сколько подобъектов A содержится в D (если 2, то это грабли, и тогда эти сопли не нужны, лучше использовать композицию, если 1, то см ниже.)


VD>Как я понимаю — один.


Похоже я поторопился с ответом...

LCR>>3. Как будем инициализировать подобъект А если напишем

LCR>>
LCR>>open class A(virtual var v : int)
LCR>>open class B(v : Int) : A(100)
LCR>>open class C(v : Int) : A(200)

LCR>>class D(v : Int) : B(v), C(v) { ... }
LCR>>

LCR>>Сколько раз будем вызывать конструктор для A? Я надеюсь, один раз, но тогда с каким аргументом? (Для Скалы пофиг, у всех трейтов одинаковые то бишь дефолтные конструкторы, поэтому выбор очевиден — вызываем один раз единственно имеющийся конструктор).

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

В общем, стало еще интереснее выслушать объяснение авторов Котлина.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Kotlin - новый язык для JVM
От: Klapaucius  
Дата: 28.07.11 12:27
Оценка: +2
Здравствуйте, Cyberax, Вы писали:

C>Естественно, для оператора "+" не определено поведение с nullable-аргументом.


Как же так? А почему для метода blahBlahBlah(this, x, y) при таком вот использовании maybenull?.blahBlahBlah(x, y) вдруг — рраз! — и определено такое поведение для первого аргумента, а для всех прочих аргументов вдруг не определено?

C>Честно говоря, я не помню, чтобы у меня было много подобного кода. Оператор "?" вот сильно поможет.


Если есть общая установка, что такой вот код — это нормально, аналогичный бессмысленный код других видов также будет присутствовать, как же иначе-то?

C>Нужно. Но так, чтобы в месте вызова менять поведение в зависимости от null-абельности аргумента — это вряд ли. Это уже плохой дизайн.


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

K>>Да обычными option и синтаксическим сахаром для любых монад/аппликативных функторов. С idiom brackets например, это будет выглядеть как-то так: z = (| x + y |)

C>Во-во. Прекрасная иллюстрация к тому, что Котлин делает правильный выбор.

Котлин белает выбор между
z = (x!=null && y!=null) ? x + y : null
и
z = (| x + y |)
в пользу первого. Тут два варианта, либо у нас спор чисто терминологический и вы все это время употребляли слово "правильный" в том смысле в котором я употребляю слово "неправильный", либо вы сейчас начнете доказывать что бедным и больным быть лучше чем богатым и здоровым. Вы, конечно, можете попробовать, но, по моему скромному мнению, код говорит сам за себя.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[7]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.07.11 14:35
Оценка: 13 (1)
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>4. Ну и просто сплошь и рядом дубликаты одного и того же кода — просто потому что некуда или нельзя выделить повторяющийся функционал.


LCR>Дискасс, или всё и так очевидно?


Я бы с тобой согласился, если не одно но. Десять лет назад я писал на С++ и думал как ты. Последние 10 лет я пишу на языке с теми самыми интерфейсами (которые, все же нужны как удобная абстракция и для совместимости с КОМ) и без того самого МН.

И знаешь что? За все время МН мне захотелось попользовать только раза два.

Не так часто оно реально надо.

Когда я писал на С++, то использовал ATL. Вот там МН было (казалось?) кстати. Но когда я перешел на дотнет, то казалось, что КОМ можно делать в разы проще и для этого вовсе не нужно МН.

Вот здесь http://nemerle.org/wiki/Traits описано как реализовать Traits для Nemerle. Этой страничке уже 6 лет, но Traits так никто и не реализовал. Причем реализация довольно тривиальна. Как ты думаешь, почему ее никто так и не сделал? Правильно, потому что она, как и Неуловимый Джо, на фиг никому не нужна.

По сему, возможно, что все эти разговоры о МН не так уж и актуальны. Правда в Немерле есть средства которые позволяют легко добавлять нужную реализацию куда нужно. Так что возможно, именно это снимает острую необходимость в МН.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.07.11 15:10
Оценка: 7 (1)
Здравствуйте, QrystaL, Вы писали:

QL>Kotlin


QL>Интересно, займет ли он свою нишу?


Не понял зачем было давать ссылку на мелкую заметку на Хабре, когда на jetbrains.net целый раздел этому языку посвящен:
http://confluence.jetbrains.net/display/Kotlin/

Для справки — это новый язык для платформы Java создаваемый Jetbrains. Язык очень похож на Скалу, но проще в дизайне (рассчитан на ява-программистов, а не на гиков-функциональщиков) и в чем-то даже приятнее.

Из самых интересных фич я бы выделил следующие:
* Общая "гражданская" направленность. Авторы не упиваются крутостью, а думаю о простых смертных.
* Множественное наследование (точнее его эмуляция).
* Отсутствие null по умолчанию и приятные фичи по работе необязательными данными.
* Билдеры. Эдакая попытка добавить в язык следства создания простеньких ДСЛ-ей не вводя метапрограммирования.

Минусы тоже есть, но о них пока говорить рано, так как дизайн языка еще не завершен.

Ах, да МП и макросы. Их похоже не будет, так как авторы их побаиваются. Но это опять же не окончательно. Так что если комьюнити нажмет, то... ничего не исключено.

ЗЫ

Сразу отвечаю на вопрос. в Jetbrains про Nemerle знают . Сплай-строки, например, похоже появились именно по его влинием. Хотя могу ошибаться.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Kotlin - новый язык для JVM
От: Silver_S Ниоткуда  
Дата: 25.07.11 17:52
Оценка: 4 (1)
Здравствуйте, VladD2, Вы писали:

VD>Если все это выбросить и вернуться назад к COM-у и нэйтив-реализации, то это будет огромным шагом назад. Думаю, что на такой глупый шак в МС не пойдут.


VD>Ну, а ГУЙ, особенно какие-то там диалоги настроек — это мелочь на которую лично я даже не обращал внимание. Не они делают погоду. Приделывать же нэйтив-гуй к менеджед-кишкам по меньшей мере странно.


До сентября об этом думать рано — о том что будет с нативом,COM,... У MS сейчас в самом разгаре глобальный проект — переписывание всего WinAPI, WinC++, SLR (System Language Rantime — что то среднее между managed и unmanaged). Текущей реализации WPF больше не будет совсем, хотя сам API может и остаться как обертка над новым. Как это все отразится на новой студии, и успеют ли, сумеют ли это, и сам MS наверно еще не знает.
Re: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 20.07.11 10:05
Оценка: 3 (1)
Здравствуйте, QrystaL, Вы писали:

QL>Kotlin

QL>Интересно, займет ли он свою нишу?
Супер. Читаю доку.

Мне этот язык всё больше и больше нравится:
1) Pattern matching сделан более вменяемо, чем в Скале.
2) Нет implicit'ов, что я считаю большим плюсом.
3) Null-safety вмонтировано в язык. В Скале только уродский Option, который даже для Pattern matching'а использовать нормально нельзя.
4) Есть break и continue. Как ни странно, в Скале их нет и замены не всегда удобны.
5) Множественное наследование.
6) Мини-DSL для конструкторов.
7) Именованные параметры, в том числе для туплов.

Из того что в Скале есть, но чего не вижу в Kotlin:
1) Удобные конструкторы для списков и PM по ним.
2) Библиотеки коллекций выглядят менее развитыми.

В целом, супер! Жду релиза.
Sapienti sat!
Re: Kotlin - новый язык для JVM
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 20.07.11 09:01
Оценка: 1 (1)
Здравствуйте, QrystaL, Вы писали:

QL>Kotlin


QL>Интересно, займет ли он свою нишу?

Какую конкретно нишу?
Sic luceat lux!
Re[13]: Kotlin - новый язык для JVM
От: hattab  
Дата: 24.07.11 17:22
Оценка: 1 (1)
Здравствуйте, VladD2, Вы писали:

VD> H>На 99.99% это сильно не тянет. Берешь Spy++ и находишь кучу нативных контролов


VD> Да ну?


Ну да

VD> H>ServerExplorer — дерево нативное, Solution Explorer — дерево нативное, Object browser — дерево нативное (у WPF'а, похоже, совсем туго с деревьями ),


VD> Это все пример одного контрола — дерева. Скорее всего сделали обертку для него на С++ и используют в виде контрола.


Прикол то в том, что почему то не WPF Неужто спустя столько лет у WPF нет достойного контрола — дерева Впрочем, там не только дерево засветилось, но и самый обычный ListView (открывай, скажем, Bookmarks), и тоже в нескольких местах.

VD> H>Properties — винформсовые оберточки


VD> Гы. А что винформс у нас уже нэйтивом стал? Ну-ну.


Я же не сказал, что винформсы нативные (хотя они суть оболочка над нативными контролами). Я о том, что почему то снова не WPF. Помнишь о чем разговор то?

Например, визуальная часть на WPF

На что я заметил, что она на WPF частично.

VD> H> Более того, открываешь диалог Options, а он вообще весь нативный


VD> Это контейнер. Что было старое осталось старым. Но есть там страницы и сделанные в медеджед кода. Это как раз таки новые странички. Открой, например, настройки форматирования для шарпа.


Я же не говорю, что менеджед страничек там нет, но и нативных там куча, с нативными контролами

VD> H>Attach to process, Code snippets manager, Add-in manager, External tools это все полностью нативные диалоги. И это мне просто лень все проверять, т.ч. твои 99.99% это красивая фантазия и не более


VD> С диалогами — да. Но это не там много кода. Да и он не сложный. В студии код совершенно в других местах дислоцируется. Скажем огромная часть студии это msenv.dll. Вот там анменеджед-кода полно. И качество его, порой, ужасное. Обработка ошибок на грани фола. Тупо возвращают E_ЧтоТоТам, если что не так. И плевать на то как другие будут ошибки искать.


А я не про код. Я про гуй, который не на WPF

VD> Что до гуи — то тут основное объем кода — это, как не странно, редатор кода и всякого рода дизайнеры.


VD> Я же имел в виду сам интерфейс студии (окошки).


Ну вот окошки доступные из View (как вышеупомянутое Bookmarks), относятся к тому, что ты имел ввиду? Если да, то и в них нативные контролы есть.

VD> H>Чудно, но я как бы о гуе


VD> Честно говоря не понимаю чем тебе гуй сдался.


Я указал выше, относительно какого тезиса (WPF-гуй) идет разговор.

VD> H>Нужно же будет куда-то применять DirectUI. WPF вот что-то не пошел совсем. Разгонят одних индусов, наберут других и спираль начнет новых виток


VD> Это у тебя ошибочная информация. В плане разработки студии объем менеджед-кода только увеличивается.


VD> В ближайшем будущем, скорее всего, на менеджед код будет переведены сервисы интеграции шарпа и васика, а так же и компилятор шарпа. Ну, а там менедежед-код будет выкидываться еще больше.


Это все конечно хорошо, но только какое отношение это имеет к WPF-гую? Почему бы им не выкинуть WPF и не заменить его менеджед обертками от DirectUI? Вполне себе вариант

VD> И знаешь почему будет выкидываться менеджед код? Потому что он хреновый и очень плохой в поддержке.


Ой, не надо военных песен. Менеджед не сделает код хорошим, вероятность скатывания в говнокод увеличится, это факт. Как это уже произошло с семерочными MMC-снапинами EventViewer и Scheduler.

VD> Создавать модули интеграции других языков к студии, на сегодня, очень не просто. Анменеджед-интерфейсы — это черные ящики. Получить информацию по ним почти невозможно. Обработка ошибок в них требует море кодирования и потому частенько просто выливается в возврат E_INVALIDARG или чего-то подобного. Так что понять что ты сделал не так в не тривильных случаях почти невозможно. Учитывая, что исходники МС вряд ли откроет — единственный путь сделать студию более дружественной к внешним расширениям — это дальнейший перевод ее на менеджед-код.


Ты хочешь сказать, что отсутствие документации по внутренним интерфейсам это проблема нативного кода? Я тебя правильно понял? Отчего же это не мешает ребятам из RemObjects, которые сделали интеграцию своего Oxygen в студию?

VD> В 2010 студии для этого сделано не мало. Новый формат расширений очень красив и позволяет вынести различные фичи интеграции в отдельные, независимые модули. Новый редактор кода имеет продуманное, мощное и хорошее АПИ.


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

VD> H>Как пользователю, мне чхать на красивое API.


VD> Как недальновидному пользователю — да. А дальновидный пользователь понимает, что от качества АПИ редактора зависит качество и количество сервисов с ним интегриумых.


Пользователь вообще не в курсе этих ваших API. Для него существуют другие категории ценностей. Ему интеграцию немерлей к студии припиливать не нужно.

VD> Например, новое АПИ позволяет подлкючать расширения редактора кода (вроде интеллисенса) отдельными модулями. При этом все расширения делаются через простой и хорош документированный АПИ, а не через жопу автогеном как это делалось 10 лет назад (в том же Томато, например).


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

VD> H> Как пользователь, я хочу отзывчивого гуя, а с приходом менеджед студия стала тормозом.


VD> Гуй как раз работает весьма шустренько. И это не смотря на навороты.


Мне так не кажется. Под виртуалкой студией пользоваться просто неприятно.

VD> Слова "стала тормознутой" говорили про все версии студии. Только через год-два те же слова уже говорили про следующую версию, а текущая оказывалась шустрой и пушистой .


Угу. Увеличивается количество менеджед кода — становится больше разговоров о тормозах студии. Прямое следствие.

VD> Понятно, что с ростом функционала растет и нагрузка на систему. Плюс много кода пишется откровенно хатлтурно. Но от от того на управляемом это языке делается или нет практически ничего не зависит.


Еще как зависит. Для примера возьми MMC-снапин EventViewer. Сделали его менеджед. Функционала не добавилось (просмотрщик, он и есть просмотрщик). Зато появились такие тормоза... И это на ровном месте. А ты говоришь...

VD> H>Оно и понятно, куда без натива в нативной то среде


VD> Естественно. Возможно сей факт как-то сгладит батхерт вызываемый у некторых товарищей тем фактом, что доля менеджед-кода в студии с каждым годом увеличивается .


Возможно у кого то действительно батхерт от сего факта, но лично я тут говорю о гуе, который на WPF лишь частично
avalon 1.0rc3 rev 419, zlib 1.2.3
Re[6]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.07.11 15:33
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>>>Я, как программист на Scala, читаю программы на Kotlin вообще сразу

A>>а мне вот ключевое слово fun режет глаза. Слишком плотная ассоциация с "удовольствие", прямо каждый раз как натыкаюсь, первая мысль "что за удовольствие? А, function"
C>Мне понравилось, наоборот Видимо, из-за опыта с OCaml'ом.

Мне не понравилось, но не из-за ассоциаций с фанатством, а из-за того, что это трата места и непривычно. ОКамл тут не причем. В ОКамле fun используется как ключевое слово для декларации лямбд. У Котлина лябды имеют другой синтаксис (с избыточными, на мой взгляд, скобками), а fun используется для описания функциональных типов, т.е. вместо "->", по сути. Стрелочка авторам не понравилась. Хотя на мой взгляд — зря.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Kotlin - новый язык для JVM
От: MasterZiv СССР  
Дата: 20.07.11 18:00
Оценка: +1
On 20.07.2011 14:05, Cyberax wrote:

> Мне этот язык всё больше и больше нравится:


Как бы не понравится сложно: Java уже давно
плесенью покрылась, и не в один слой.
Что там у них Гай Стил делает -- не понимаю.
Posted via RSDN NNTP Server 2.1 beta
Re[10]: Kotlin - новый язык для JVM
От: mima  
Дата: 21.07.11 08:56
Оценка: +1
Здравствуйте, avpavlov, Вы писали:

A>Сайберакс имеет ввиду что названия .left .right мы потеряли, и нужно вводить свои (t1,t2) или пользоваться анонимными ._1/._2


Не понимаю. Можно показать, где именно потеряли?

Ведь можно и так:

case tree @ TreeWrapper(left, right) =>


и у нас связаны три переменные tree: Tree и left, right.

A>На самом деле нет ни одной причины не объявить Tree как case class. Так что на мой взгляд он просто привередничает


Варианты в Nemerle кажутся синтаксически удобнее, правда, не знаю, можно ли их расширять. Что касается сравнения Scala vs Kotlin соглашусь, разница незначительна.
Re[11]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 21.07.11 16:31
Оценка: :)
Здравствуйте, VladD2, Вы писали:

C>>Это не такое уж хорошее решение, тогда.

VD>Поздравляю с началом фанатства.
Я тут товарищам помог на Дельфи проект допинать. Мне сейчас синтаксис так пофиг, что вообще.

C>>Фигурные скобки, наверное, можно опускать. Действует то же правило, что и в Java/C. Впрочем, мелочи.

VD>Нельзя. И как раз из-за наличия синтаксиса с it. Иначе нельзя будет определить начало одного и конец другого выражения.
Почему же? "it" будет валиден в пределах одного оператора, как в обычном старом добром С.
Sapienti sat!
Re[12]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.07.11 19:23
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>Почему же? "it" будет валиден в пределах одного оператора, как в обычном старом добром С.


Как без скобок вырзить вот такую лямбду:
x => y => x * y

?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.07.11 19:34
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>"Деструктурирующее присваивание" — вполне себе термин.


"Деструктивное" — да. Только это из другой оперы. Это означает "разрушающее", т.е. меняющее что-то по месту.

C>Ну ты знаешь моё мнение насчёт макросов.


Ага. Но уверен, что оно изменилось бы, если бы ты попробовал их на практие.

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

Обещаю — это будет увлекательно. Нужно только найти достойную, интересную задачу на которой изучать язык.

C>Откуда фиксированное??

C>
C>arr map {k,v => "Key: "+k+",val: "+v }
C>


Ну, дык и здравствуй совершенно не нужные скобки и описание параметров. Я же говорил о сокращенном синтаксисе с it.

Ну, да ладно. Возможно на меня давлеют привычки.


C>>>Не, ну про implicit так же говорили. А получился ужастик в итоге.

VD>>Зависит от того как его готовить и для чего использовать. В Немерле и Шарпе неявное приведение есть, но оно ничему не мешает. Просто в Скале на базе неявного приведения стали эмулировать методы-расширения. Вот это было перебором.
C>И не только расширенные методы, а ещё и DSLи.

С этим я не знаком. Даже не прдеставляю как на приведении типов делать ДСЛ-и. ДСЛ-ти там вроде бы на неявном параметре функций делают. И в этом плане инлайн-функции в Котлине — это тоже самое, точнее, переработанное решение. В Немерле это решение не нужно, так как макросы отлично решают те же проблемы.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Kotlin - новый язык для JVM
От: Jack128  
Дата: 22.07.11 17:11
Оценка: +1
Здравствуйте, avpavlov, Вы писали:

A>Здравствуйте, QrystaL, Вы писали:


QL>>Здравствуйте, Kernan, Вы писали:

K>>>Какую конкретно нишу?

QL>>The language way simpler than the most mature competitor – Scala.


A>Такая меня мысль посетила — сам язык ДжетБрэйну без надобности. Писали значит от скуки — есть ресурсы, есть деньги, давайте из интереса язык напишем.


Если ты читал ссылку заглавную, то там написано, что JetBrains 200 мегобайт сорцов на джаве. 200 СОРЦОВ. Это безумная цифра, на самом деле. Скорее всего их реально за№@%ла жаба. ПРи таком кол-ве сорцов и людей, которые более менее в теме языков прог-ния(а сам понимаешь, в компании, которая делает IDE специалистов по ЯП достаточно) написать новый ЯП под туже платформу — это не самая глупая идея.
Re[8]: Kotlin - новый язык для JVM
От: Ziaw Россия  
Дата: 24.07.11 13:35
Оценка: +1
Здравствуйте, avpavlov, Вы писали:


VD>>Причем тут студия? Я же говорю Idea. Это IDE для Явы от JetBrains. Одна из лучший.


A>При том что выход .Net не привёл к переписыванию студии. А прошло уже 9 или 10 лет. Тоже будет и с ИДЕЕЙ — не будут они её брать и переписывать на Котле, как бы изначально не хорохорились на форумах. Просто тупо оценят объём работ и отступятся. Будут новые вещи дописывать, а старые оставят как есть.


При чем тут полное переписывание? Я подозреваю, что разработка более интеллектуальных рефакторингов (а JetBrains явный мировой лидер в этом деле) тупо упирается в уровень сложности кода.

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

Вот только для IDE часто важна еще и скорость. А высокоуровневые фичи в языке часто с ней несовместимы. Поэтому тут лучше подошел бы аналог немерла, где можно строить высокоуровневый DSL который генерит очень шустрый код. Но у них в руках компилятор, могут допиливать прямо его, пока не поймут, что метапрограммирование нужно иметь в шаговой доступности.
Re[11]: Kotlin - новый язык для JVM
От: hattab  
Дата: 24.07.11 13:53
Оценка: -1
Здравствуйте, VladD2, Вы писали:

VD> H>Да я что, спорю что-ли


VD> Похоже, что да.


Это твое заблуждение. С тем, что студия переписывается под менеджед у меня и мыслей спорить небыло

VD> H>Однако, того факта, что гуй там только частично на WPF (а тот что на WPF еще имеет вкрапления нативных контролов. Зачем кстати?) это не отменяет.


VD> GUI там на 99.99 менеджед. Не весь, правда, WPF, но тем не менее менеджед. Единственное что там осталось анменеджед — это контрол с деревом. Говорят что по соображениям совместимости. А там черт его знает.


На 99.99% это сильно не тянет. Берешь Spy++ и находишь кучу нативных контролов ServerExplorer — дерево нативное, Solution Explorer — дерево нативное, Object browser — дерево нативное (у WPF'а, похоже, совсем туго с деревьями ), Properties — винформсовые оберточки Более того, открываешь диалог Options, а он вообще весь нативный Attach to process, Code snippets manager, Add-in manager, External tools это все полностью нативные диалоги. И это мне просто лень все проверять, т.ч. твои 99.99% это красивая фантазия и не более

VD> Но менеджед там далеко не только гуй. Там много всего менедед стало.


Чудно, но я как бы о гуе

VD> H>Прикольно будет, если в дальнейшем они решат выкинуть весь WPF и запилят морду на каком нибудь нативном DirectUI


VD> Ты явно не понимаешь о чем говоришь. Такие объемы кода просто так не выкидываются.


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

VD> Один только редактор кода — это горы кода. Редактор, кстати, получился очень хороший (с точки зрения API).


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

VD> А анменеджед и так есть. WPF основан на маленькой, но тем не менее нэйтивной библоотеке которая и занимается низкоуровневыми вопросами отрисовки.


Оно и понятно, куда без натива в нативной то среде
avalon 1.0rc3 rev 419, zlib 1.2.3
Re[6]: Kotlin - новый язык для JVM
От: Klapaucius  
Дата: 25.07.11 10:19
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>Авторазвёртывание вполне определено и удобно


Авторазвертывание это грабли. Собственно, nullable-ссылки — это и есть option с авторазвертыванием и первоклассная головная боль.

C>В Kotlin'е сделали всё правильно.


Нет, там сделали какой-то набор ad-hoc подпорок, хотя все это должно решаться средствами языка.

C>А ошибку компиляции здесь сделать трудно, так как equals() обязан работать с объектами разного типа.


Кому он обязан-то? Если в язык вводятся АТД, то и сранение обычно делают структурным, а не ссылочным. В данном случае, разумеется, сравнивать значения разных типов — бессмысленно:
nemerle:
- Some(4) == 4;;
error: comparing values of types option.Some[int-] and int with reference equali
ty
hint: upcast one of the values to object if this is desired

f#:
> Some 4 = 4;;

  Some 4 = 4;;
  ---------^

stdin(1,10): error FS0001: This expression was expected to have type
    int option
but here has type
    int

Не понятно, о чем авторы scala вообще думали.
Добиться скаловского (добавляем в язык "атд" а потом делаем вид что забыли об этом) поведения в этих языках можно только скастив значения к Object
> (Some 4 :> obj) = (4 :> obj);;
val it : bool = false
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[7]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 25.07.11 13:17
Оценка: -1
Здравствуйте, Klapaucius, Вы писали:

C>>В Kotlin'е сделали всё правильно.

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

C>>А ошибку компиляции здесь сделать трудно, так как equals() обязан работать с объектами разного типа.

K>Кому он обязан-то? Если в язык вводятся АТД, то и сранение обычно делают структурным, а не ссылочным. В данном случае, разумеется, сравнивать значения разных типов — бессмысленно:
Это не очень подходит для ОО-языков.
Sapienti sat!
Re[9]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.07.11 20:26
Оценка: +1
Здравствуйте, Jack128, Вы писали:

J>Надо, не надо — это вопрос. Вот вы например написали парсер шарпа чтобы можно было компилить шарповские и немерливские сорцы внутри одной сборки. Нафиг это надо было если всё равно все в итоге в байткод преобразуется?


Тому было много причин. Одна из них — парсер был тестом для генератора парсеров на базе которого планируется делать следующую версию немерла.

J>Нет, мне кажется логичным написать конвертер Java=>Kotlin.


Такой конвертер имеет мало смысла, так как это все равно будет Ява, только с другим синтаксисом. Выигрыша от этого не велик. Было бы намного лучше иметь возможность просто подключать явские файлы к проекту (как это делается в немерел с C#). Тогда миграция проекта могла бы проходить в две стадии. Сначала просто конвертим проект так чтобы он компилировался другим компилятором. А потом уже потихонечку заменяем файлы Явы на файлы Котлина (все время хочется написать — котлеты ).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Kotlin - новый язык для JVM
От: Klapaucius  
Дата: 27.07.11 09:53
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>Ну можно вот так...


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

C>Ты говоришь так, как будто в этом что-то плохое.


Верно. И как раз потому, что в этом есть что-то плохое.

C>Я не против хорошо сделанного языка


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

C>со специальными случаями.


Вопрос в том, где остановится со всем этим ползучим частнослученизмом. А то умножать, например, целые числа оператором *, а числа с плавающей точкой — PLEASE MULTIPLY удовольствие сомнительное.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[18]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.07.11 14:46
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>>>А макросы меня откровенно пугают — я понимаю, что это очень мощная вещь, но я боюсь того, что накосячат на них Джамшуты Рамдисамрутаны.

K>>Ну, допустим, пугают — так тут и без макросов можно обойтись.
C>Как именно?

Монадами, например. Когда Klapaucius говорил "лифтить", он имел в виду "поднимать в монаду".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 28.07.11 11:07
Оценка: +1
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

C>>Diamond-проблема на практике во многом надумана, она встречается раз в пятилетку. Поэтому стоит ввести какое-то поведение для неё, но не трогать самые частые случаи использования наследования — частичные mixin'ы.

LCR>Я бы сказал несколько иначе: мы научились жить в кандалах, однако раз в пятилетку очередная примерка новых кандалов вдруг переполняет чашу терпения.
Нет, сложный diamond, как и глубокие иерархии классов вообще, реально не нужны.

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

LCR>1. Существование интерфейсов как сущности — нафиг бы они сдались, если бы можно было оставить полноценные классы
Обычно интерфейсы сравнительно небольшие по объёму, что не создаёт проблем с их полной реализацией.

LCR>2. Постоянно встречающийся совершенно дурацкий паттерн MyInterface <- MyInterfaceImpl, с единственной (!) реализацией. А почему нельзя просто использовать класс MyInterfaceImpl?

Вообще-то, описанное тобой — это антипаттерн. Если есть только одна реализация, то она просто и используется. При необходимости делается рефакторинг.

LCR>Ну конечно, вдруг получится, что надо наследовать от чего-то ещё и от MyInterfaceImpl, и мы окажемся в неудобном положении тогда.

А не надо так делать.

LCR>3. Якобы best practice "никогда не наследуйте реализацию, используйте делегирование". Ребята, а в чём проблема-то, если можно всегда отпочковать наследника, подмешать нужный функционал из других классов, переопределить что надо и вперёд? Увы, с интерфейсами и одиночным наследованием такой фокус не провернёшь, вот и вылезла "бест практика".

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

LCR>4. Ну и просто сплошь и рядом дубликаты одного и того же кода — просто потому что некуда или нельзя выделить повторяющийся функционал.

LCR>Дискасс, или всё и так очевидно?
Вот это и есть единственный плюс от MH — немного сократить дублирующийся тупой код.
Sapienti sat!
Re[8]: Kotlin - новый язык для JVM
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 28.07.11 16:53
Оценка: :)
Klapaucius,

K>А я вот считаю, что любой сабтайпинг и след. отношение наследования — это грабли. В принципе. И как грабли не перекрашивай — астролябии из них не получить.


Я понимаю. Классы типов. Функциональные зависимости. Типы как первоклассные значения. Типы как теоремы. Нирвана.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[20]: Kotlin - новый язык для JVM
От: Klapaucius  
Дата: 29.07.11 10:16
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Кстати, в котлине вроде как список операторов раширять нельзя.


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

VD>Но можно любую бинарную фукнцию как оператор (без приоритета) использовать.


А вот к такому у меня отношение неоднозначное. Более правильные подходы — это когда можно или на этапе объявления определять, что будет использоваться как инфиксный оператор как в SML (или, скорее, как в алгол 68), или явно помечать инфиксное использование префиксных по-умолчанию функций с и менами из букв и префиксное использование инфиксных по-умолчанию операторов из спецсимволов.
И невозможность указать приоритеты и, видимо, ассоциативность — это точно плохая идея. От этого потом будет скобок как в лиспе.

VD>Думаю, что они исходят из того, что с null-абл типами им придется иметь дело редко.


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

VD>Идея поднимать работу с null в монады конечно красива, но боюсь что это приведет к серьезному снижению производительности при работе с null (а значит почти со всеми классами Явы). Тут нужно чтобы человек мог как-то осознанно выбирать подъем в монаду.


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

K>>Да, и кстати, разработчики языка-то кого боятся? Самих себя? IDEA Джамшуты разве пишут?

VD>Хороший вопрос. Но макросов они реально боятся. Это факт.

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

K>>С idiom brackets например, это будет выглядеть как-то так: z = (| x + y |)

VD>Надо будет к немерлу прикрутить

Да, это может быть полезно. При использовании всякого синтаксического сахара типа list comprehensions или там computation expressions достаточно часто встречаются простые случаи типа
$[f(x, y) | x in xs, y in ys]

maybe{ let! x = mx; let! y = my; return f x y }

При этом простые "извлечения" значений внутри контекста x in xs, y in ys — это просто мусорный код.
Idiom brackets позволяют писать просто (| f(xs, ys) |), обозначая скобками контекст и без всякого мусора.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[22]: Kotlin - новый язык для JVM
От: Klapaucius  
Дата: 29.07.11 10:16
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>Ещё как определено. "maybenull?.blahBlahBlah(isnull, y)" вызовет ошибку времени компиляции


Вот я и говорю — не определено.

C> аргументы методов по умолчанию тоже notnull — ровно как и аргумент "this". И для включения null'абельности нужно явно это указывать.


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

C>Нету бессмысленного кода тут.


Еще раз. Бессмысленный код выделен жирным:
(x!=null && y!=null) ? x + y : null

Если вы его не видите — как вам удалось его написать?

C>Всё вполне стройно.


У вас в этом треде вечно оруэльщина какая-то. Двоемыслие. Удобство — это неудобство. Стройность — это кривость. И т.д.

C>Варианта тут, как минимум, три.


О, вариантов куда больше. Во многих языках, появившихся в последние лет 10-15 есть способ решения той или иной степени кривости и, часто, не один, но Котлин к этому множеству языков не принадлежит. Там только деревянные игрушки прибитые к потолку.

C>Я уже предложил "z = x ?plus? y", который лично мне более понятен и удобен.


Т.е. вам удобнее писать определение нового оператора, а не воспользоваться готовым. Ну вот и еще один случай, когда вы хотите писать код без всякой причины, цели и смысла. А второй случай — это уже тенденция.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[7]: Kotlin - новый язык для JVM
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.08.11 14:03
Оценка: +1
Здравствуйте, VladD2, Вы писали:

C>>О! И даже оператор typeinfo есть: http://confluence.jetbrains.net/display/Kotlin/Runtime+Type+Information


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


Ага. memberinfo был бы куда интереснее. Ну и введенная синтаксическая неоднородность для type и type expression совершенно непонятна.
... << RSDN@Home 1.2.0 alpha 5 rev. 1530 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[2]: Kotlin - новый язык для JVM
От: QrystaL Украина  
Дата: 20.07.11 09:05
Оценка:
Здравствуйте, Kernan, Вы писали:
K>Какую конкретно нишу?

The language way simpler than the most mature competitor – Scala.
Re[3]: Kotlin - новый язык для JVM
От: nau  
Дата: 20.07.11 09:47
Оценка:
Здравствуйте, QrystaL, Вы писали:

QL>Здравствуйте, Kernan, Вы писали:

K>>Какую конкретно нишу?

QL>The language way simpler than the most mature competitor – Scala.


Не похоже, что Котлета сильно проще.
В теории практика не отличается от теории, но на практике — отличается
Re: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 20.07.11 09:49
Оценка:
Здравствуйте, QrystaL, Вы писали:

QL>Kotlin

QL>Интересно, займет ли он свою нишу?
Reified generics. Вау!!!!!!
Sapienti sat!
Re[2]: Kotlin - новый язык для JVM
От: WFrag США  
Дата: 20.07.11 13:57
Оценка:
Здравствуйте, Cyberax, Вы писали:

QL>>Kotlin

QL>>Интересно, займет ли он свою нишу?
C>Reified generics. Вау!!!!!!

А Gosu смотрел? Эти ребята им вдохновлялись, инфа 100%.
Re[2]: Kotlin - новый язык для JVM
От: avpavlov  
Дата: 20.07.11 13:58
Оценка:
C>5) Множественное наследование.

можно сказать, что они в Скале есть через трэйты

C>7) Именованные параметры,


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

case class Address(bld:String, street:String, city:String, country:String)
val a = Address("1","Arbat","Moscow","Russia")
val a2 = a1.copy(bld="2")

C>в том числе для туплов.


вообщем, тоже есть

def getPoint = (1,2)
val (x,y) = getPoint
println(x)

C>Из того что в Скале есть, но чего не вижу в Kotlin:

C>1) Удобные конструкторы для списков и PM по ним.
C>2) Библиотеки коллекций выглядят менее развитыми.

Кэйс классы у них есть, но названия они им не дали, и именуют "classes that declare all their primary constructor parameters val"

C>В целом, супер! Жду релиза.


Скала у всех на слуху, а взлетает долго. Мне кажется этот ещё дольше будет взлетать.
Re[3]: Kotlin - новый язык для JVM
От: WFrag США  
Дата: 20.07.11 14:03
Оценка:
Здравствуйте, avpavlov, Вы писали:

C>>В целом, супер! Жду релиза.


A>Скала у всех на слуху, а взлетает долго. Мне кажется этот ещё дольше будет взлетать.


Это-то как раз неудивительно. Напихали фич.
Re[2]: Kotlin - новый язык для JVM
От: avpavlov  
Дата: 20.07.11 14:07
Оценка:
C>1) Pattern matching сделан более вменяемо, чем в Скале.
C>2) Нет implicit'ов, что я считаю большим плюсом.
C>3) Null-safety вмонтировано в язык. В Скале только уродский Option, который даже для Pattern matching'а использовать нормально нельзя.
C>4) Есть break и continue. Как ни странно, в Скале их нет и замены не всегда удобны.
C>5) Множественное наследование.
C>6) Мини-DSL для конструкторов.
C>7) Именованные параметры, в том числе для туплов.

ещё делегирование как альтернатива наследованию выглядит занятно

http://confluence.jetbrains.net/display/Kotlin/Classes+and+Inheritance#ClassesandInheritance-Delegation

Ещё они утверждают, что в Скале нет инлайн функций, но в пример приводят ровно то, что Скала прекрасно умеет делать

http://confluence.jetbrains.net/display/Kotlin/Functions#Functions-Inlinefunctions
Re[3]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 20.07.11 14:08
Оценка:
Здравствуйте, WFrag, Вы писали:

QL>>>Kotlin

QL>>>Интересно, займет ли он свою нишу?
C>>Reified generics. Вау!!!!!!
WF>А Gosu смотрел? Эти ребята им вдохновлялись, инфа 100%.
Смотрел. Не понравилось.
Sapienti sat!
Re[4]: Kotlin - новый язык для JVM
От: avpavlov  
Дата: 20.07.11 14:13
Оценка:
WF>Это-то как раз неудивительно. Напихали фич.

В этом меньше, но их за это будут пинать, и они всё равно напихают
Re[3]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 20.07.11 14:19
Оценка:
Здравствуйте, avpavlov, Вы писали:

C>>5) Множественное наследование.

A>можно сказать, что они в Скале есть через трэйты
Они кривые. Скажем, для них нет конструкторов и вообще их инициализация неудобна. Diamond-проблему trait'ы в Scala никак не решают, а просто задают детерминированный механизм разрешения конфликта.

Так что в Kotlin поступили правильно — взяли обычное множественное наследование, убрав разницу между интерфейсом и классом.

C>>7) Именованные параметры,

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

C>>в том числе для туплов.

A>вообщем, тоже есть
Нету.
def getPoint = (1,2,3)
val t = getPoint
//t._1, t._2, t._3 вместо t.x, t.y, t.z

А хочется так:
def getPoint = (x=1,y=2,z=3)
val t = getPoint
t.x, t.y, t.z


Если тупл большой (4-5 элементов) — уже неудобно. И особенно неудобно это для конструкторов case-классов.

Ну и именованые туплы (т.е. анонимные типы, по сути) — шаг на пути к LINQ.

C>>2) Библиотеки коллекций выглядят менее развитыми.

A>Кэйс классы у них есть, но названия они им не дали, и именуют "classes that declare all their primary constructor parameters val"
В Scala PM на практике требует использования case-классов. В Kotlin оно реализовано, как я вижу, через деструктурирующие функции, в том числе для обычных бинов.

C>>В целом, супер! Жду релиза.

A>Скала у всех на слуху, а взлетает долго. Мне кажется этот ещё дольше будет взлетать.
Scala слишком кривая местами.

Kotlin выглядит как почищенная от мусора Scala. Я, как программист на Scala, читаю программы на Kotlin вообще сразу — всё знакомое. Но при этом ВСЕ мои проблемы в Скале исправлены в Котлине.
Sapienti sat!
Re[3]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 20.07.11 14:21
Оценка:
Здравствуйте, avpavlov, Вы писали:

C>>7) Именованные параметры, в том числе для туплов.

A>ещё делегирование как альтернатива наследованию выглядит занятно
A>http://confluence.jetbrains.net/display/Kotlin/Classes+and+Inheritance#ClassesandInheritance-Delegation
А кстати да, не заметил сначала, но тоже жутко нравится.

A>Ещё они утверждают, что в Скале нет инлайн функций, но в пример приводят ровно то, что Скала прекрасно умеет делать

A>http://confluence.jetbrains.net/display/Kotlin/Functions#Functions-Inlinefunctions
Не совсем. Scala пытается инлайнить функции почти всегда. Там есть @inline-аннотация, которая выдаёт ошибку компиляции, если инлайнинг не получился.
Sapienti sat!
Re[5]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 20.07.11 14:29
Оценка:
Здравствуйте, avpavlov, Вы писали:

WF>>Это-то как раз неудивительно. Напихали фич.

A>В этом меньше, но их за это будут пинать, и они всё равно напихают
Scala слишком эволюционно развивалась. Скажем, из-за ранних грехов нет возможности сделать break/continue в циклах. Или цикл for в Scala временами работает раз в 20 медленнее аналогичного цикла while (да, это полный WTF, я знаю). Trait'ы тоже получились откровенно неудачны.
Sapienti sat!
Re[4]: Kotlin - новый язык для JVM
От: avpavlov  
Дата: 20.07.11 14:38
Оценка:
C>Я, как программист на Scala, читаю программы на Kotlin вообще сразу

а мне вот ключевое слово fun режет глаза. Слишком плотная ассоциация с "удовольствие", прямо каждый раз как натыкаюсь, первая мысль "что за удовольствие? А, function"
Re[5]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 20.07.11 14:38
Оценка:
Здравствуйте, avpavlov, Вы писали:

C>>Я, как программист на Scala, читаю программы на Kotlin вообще сразу

A>а мне вот ключевое слово fun режет глаза. Слишком плотная ассоциация с "удовольствие", прямо каждый раз как натыкаюсь, первая мысль "что за удовольствие? А, function"
Мне понравилось, наоборот Видимо, из-за опыта с OCaml'ом.
Sapienti sat!
Re[4]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.07.11 15:06
Оценка:
Здравствуйте, nau, Вы писали:

nau>Не похоже, что Котлета сильно проще.


Проще. Но главное, что он будет сильно удобнее явы. В дотент хотя бы шапр есть с лямбдами и линком. А в Ява мире только жуткая Ява и перенавороченная Скала.

Плюс к этому языку будет первоклассная IDE, от лучшего производителя IDE. Для Скалы, насколько мне известно, ничего качественного так и не было сделано.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.07.11 15:30
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Они кривые. Скажем, для них нет конструкторов и вообще их инициализация неудобна. Diamond-проблему trait'ы в Scala никак не решают, а просто задают детерминированный механизм разрешения конфликта.


C>Так что в Kotlin поступили правильно — взяли обычное множественное наследование, убрав разницу между интерфейсом и классом.


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

C>>>7) Именованные параметры,

A>>Для кэйс классов в Скале поддерживаются даже дефолтные значения и копирование с изменением всего нескольких параметров, например
C>Case-классы я вообще в принципе ненавижу. Это запредельная кривость.

А что ты предлагаешь? Варианты/объеденения как в классихческих ФП?

C>В Scala PM на практике требует использования case-классов. В Kotlin оно реализовано, как я вижу, через деструктурирующие функции, в том числе для обычных бинов.


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

C>>>В целом, супер! Жду релиза.

A>>Скала у всех на слуху, а взлетает долго. Мне кажется этот ещё дольше будет взлетать.
C>Scala слишком кривая местами.

Например?

C>Kotlin выглядит как почищенная от мусора Scala.


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

C>Я, как программист на Scala, читаю программы на Kotlin вообще сразу — всё знакомое. Но при этом ВСЕ мои проблемы в Скале исправлены в Котлине.


Дык описал бы эти проблемы и то как они решены в Kotlin.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Kotlin - новый язык для JVM
От: avpavlov  
Дата: 20.07.11 15:38
Оценка:
VD>Сразу отвечаю на вопрос. в Jetbrains про Nemerle знают . Сплай-строки, например, похоже появились именно по его влинием. Хотя могу ошибаться.

На Хабре жетбрэйновский человек написал, что это их ПХП так торкнул
Re[7]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 20.07.11 15:58
Оценка:
Здравствуйте, VladD2, Вы писали:

C>>Мне понравилось, наоборот Видимо, из-за опыта с OCaml'ом.

VD>Мне не понравилось, но не из-за ассоциаций с фанатством, а из-за того, что это трата места и непривычно. ОКамл тут не причем. В ОКамле fun используется как ключевое слово для декларации лямбд. У Котлина лябды имеют другой синтаксис (с избыточными, на мой взгляд, скобками), а fun используется для описания функциональных типов, т.е. вместо "->", по сути. Стрелочка авторам не понравилась. Хотя на мой взгляд — зря.
Оператор "стрелочка" у них зарезервирован для анонимных функций: "val doubled = ints.map {it => it * 2}". В принципе, неплохое решение — fun(), сигнатуры и вызовы разделены.

Кстати, я так подумал, что это действительно реально удобно.
Sapienti sat!
Re[5]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 20.07.11 16:11
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Справидливости ради надо заметить, что их множественное наследование так же требует ручного разрешения конфликтов. Если в у двух наследников есть один и тот же метод, то нужно его обязательно переопределить.

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

C>>Case-классы я вообще в принципе ненавижу. Это запредельная кривость.

VD>А что ты предлагаешь? Варианты/объеденения как в классихческих ФП?
Мне не нравится явное выделение их в специальную сущность. В Скале они используются для:
1) Специальный случай для классов-значений, с автогенерируемыми hashCode, equals и т.п. Нафиг не надо — должен быть общий механизм.
2) Только для них, по сути, в языке и встроено деструктурирование для PM (ну ещё для списков). Что тоже должно быть доступно для всех классов, в том числе и legacy-бинов.

C>>В Scala PM на практике требует использования case-классов. В Kotlin оно реализовано, как я вижу, через деструктурирующие функции, в том числе для обычных бинов.

VD>По-моему ты ошибаешься. В Kotlin точно так же описываются классы с неявным конструктором, что аналогично кейс-классам (вид в профиль).
http://confluence.jetbrains.net/display/Kotlin/Pattern+matching Всё что требуется от классов для участия в PM — это иммутабельность. Ну и явная возможность задавать деструктуризатор, тогда как в Scala надо делать case-класс и implicit-конвертор в него.

A>>>Скала у всех на слуху, а взлетает долго. Мне кажется этот ещё дольше будет взлетать.

C>>Scala слишком кривая местами.
VD>Например?
Управляющие конструкции (в Kotline есть нелокальный return), trait'ы, case class'ы.

C>>Kotlin выглядит как почищенная от мусора Scala.

VD>Во многом так оно и есть. В прочем, местами перечистили. Лябды какие-то кривенькие.
Из примера в http://confluence.jetbrains.net/display/Kotlin/Functions :
strings filter {it.length == 5} sortby {it} map {it.toUpperCase()}

Это ещё и получше будет, чем в Scala. Особенно учитывая наличие анонимных типов (aka "именованые туплы").

C>>Я, как программист на Scala, читаю программы на Kotlin вообще сразу — всё знакомое. Но при этом ВСЕ мои проблемы в Скале исправлены в Котлине.

VD>Дык описал бы эти проблемы и то как они решены в Kotlin.
Частично описал здесь: http://rsdn.ru/forum/philosophy/4349959.aspx
Автор: Cyberax
Дата: 20.07.11


В общем, если эти товарищи сейчас не будут пытаться запихать незапихиваемое, то получится очень неплохой язык. С метапрограммированием лучше подождать, так как слишком уж опасная это штука. Как implicit'ы в Scala.
Sapienti sat!
Re[5]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 20.07.11 16:15
Оценка:
Здравствуйте, VladD2, Вы писали:

C>>Я, как программист на Scala, читаю программы на Kotlin вообще сразу — всё знакомое. Но при этом ВСЕ мои проблемы в Скале исправлены в Котлине.

VD>Дык описал бы эти проблемы и то как они решены в Kotlin.
О! И даже оператор typeinfo есть: http://confluence.jetbrains.net/display/Kotlin/Runtime+Type+Information

Следующий шаг, понятное дело, это Expression Tree внутри typeinfo.
Sapienti sat!
Re[8]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.07.11 16:41
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Оператор "стрелочка" у них зарезервирован для анонимных функций: "val doubled = ints.map {it => it * 2}".


Ты внимательно на эту стрелочку посмотри. В типах используется "->". В Нмерле для типов используется "->", а "=>" используется для лямбд (=> — это макрос).

Зачем в лябде нужны фигурные скобки я так же понять не могу. В лямбдах каждый символ на счету.

C>В принципе, неплохое решение — fun(), сигнатуры и вызовы разделены.


Где? Ты точно разобрался в синтаксисе?

C>Кстати, я так подумал, что это действительно реально удобно.


Что?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.07.11 18:05
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>О! И даже оператор typeinfo есть: http://confluence.jetbrains.net/display/Kotlin/Runtime+Type+Information


Для дотнетчика (вроде меня) это настолько само собой разумеется, что я не предал этому особого внимания.

C>Следующий шаг, понятное дело, это Expression Tree внутри typeinfo.


Ну, это уже довольно большой шаг. Да и не в том направлении. Лучше бы сделать макросы, а уже все финтифшюшки на их базе.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.07.11 18:17
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, VladD2, Вы писали:


VD>>Справидливости ради надо заметить, что их множественное наследование так же требует ручного разрешения конфликтов. Если в у двух наследников есть один и тот же метод, то нужно его обязательно переопределить.

C>Но в Скале для этого сделали целый механизм трейтов, с кучей исключений и непоняток. В Котлине, зато, всё тупо и примитивно. А делегирование явно выделено в отдельный паттерн, а не вмешано в трейты.

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

Я именно это и хотел сказать. Идея с эмуляция МН мне очень даже нравится. Единственное, что она не очень вяжется с явой. Интерфейсов то в явном виде нет. У людей могут возникнуть непонятки.

C>>>Case-классы я вообще в принципе ненавижу. Это запредельная кривость.

VD>>А что ты предлагаешь? Варианты/объеденения как в классихческих ФП?
C>Мне не нравится явное выделение их в специальную сущность. В Скале они используются для:
C>1) Специальный случай для классов-значений, с автогенерируемыми hashCode, equals и т.п. Нафиг не надо — должен быть общий механизм.
C>2) Только для них, по сути, в языке и встроено деструктурирование для PM (ну ещё для списков). Что тоже должно быть доступно для всех классов, в том числе и legacy-бинов.

Почти уверен, что у Котлина те же ограничения и то же поведение. Ну, разве что hashCode и equals не нужно реализовывать.

C>>>В Scala PM на практике требует использования case-классов. В Kotlin оно реализовано, как я вижу, через деструктурирующие функции, в том числе для обычных бинов.

VD>>По-моему ты ошибаешься. В Kotlin точно так же описываются классы с неявным конструктором, что аналогично кейс-классам (вид в профиль).
C>http://confluence.jetbrains.net/display/Kotlin/Pattern+matching Всё что требуется от классов для участия в PM — это иммутабельность.

Что-то я там такого не увидел. По-моему, ты что-то путаешь.
Потом я с автором языка общался пару месяцев назад, и он мне четка сказал, что описание берется из определения класса. Вряд ли что-то за это время изменилось.

C>Ну и явная возможность задавать деструктуризатор, тогда как в Scala надо делать case-класс и implicit-конвертор в него.


Какие еще на фиг деструкторы? Это ты про Decomposer functions?

A>>>>Скала у всех на слуху, а взлетает долго. Мне кажется этот ещё дольше будет взлетать.

C>>>Scala слишком кривая местами.
VD>>Например?
C>Управляющие конструкции (в Kotline есть нелокальный return),

Чё? Это ты о инлайн-функциях что ли? Можно пример?

C> trait'ы, case class'ы.


Проблемы то где?

C>>>Kotlin выглядит как почищенная от мусора Scala.

VD>>Во многом так оно и есть. В прочем, местами перечистили. Лябды какие-то кривенькие.
C>Из примера в http://confluence.jetbrains.net/display/Kotlin/Functions :
C>
C>strings filter {it.length == 5} sortby {it} map {it.toUpperCase()}
C>


И что? А если нужно два параметра? И зачем эти скобки? Сравни Шарп:
from s in strings where s.length == 5 orderby s select s.toUpperCase()

или без сахара:
strings.Where(s => s.length == 5).OrderBy(s => s).Select(s => s.toUpperCase())

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

C>Это ещё и получше будет, чем в Scala. Особенно учитывая наличие анонимных типов (aka "именованые туплы").


Как только речь заходит о случаях которые не укладываются в сахар с it, то все становится не так радужно.

C>>>Я, как программист на Scala, читаю программы на Kotlin вообще сразу — всё знакомое. Но при этом ВСЕ мои проблемы в Скале исправлены в Котлине.

VD>>Дык описал бы эти проблемы и то как они решены в Kotlin.
C>Частично описал здесь: http://rsdn.ru/forum/philosophy/4349959.aspx
Автор: Cyberax
Дата: 20.07.11


Там описано что тебе понравилось. Но про проблемы ни слова.

C>В общем, если эти товарищи сейчас не будут пытаться запихать незапихиваемое, то получится очень неплохой язык. С метапрограммированием лучше подождать, так как слишком уж опасная это штука. Как implicit'ы в Scala.


Ничего там опасного нет. Это домыслы. Авторы на грани. Мысли есть. Но есть страх неизведанного (как у тебя).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Kotlin - новый язык для JVM
От: Курилка Россия http://kirya.narod.ru/
Дата: 20.07.11 18:26
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>On 20.07.2011 14:05, Cyberax wrote:


>> Мне этот язык всё больше и больше нравится:


MZ>Как бы не понравится сложно: Java уже давно

MZ>плесенью покрылась, и не в один слой.
MZ>Что там у них Гай Стил делает -- не понимаю.

А ты разве не в курсе? Давно уже Fortress делает
Re[7]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 20.07.11 18:58
Оценка:
Здравствуйте, VladD2, Вы писали:

C>>1) Специальный случай для классов-значений, с автогенерируемыми hashCode, equals и т.п. Нафиг не надо — должен быть общий механизм.

C>>2) Только для них, по сути, в языке и встроено деструктурирование для PM (ну ещё для списков). Что тоже должно быть доступно для всех классов, в том числе и legacy-бинов.
VD>Почти уверен, что у Котлина те же ограничения и то же поведение. Ну, разве что hashCode и equals не нужно реализовывать.
У Котлина как минимум PM по всем иммутабельным типам делается, в том числе и legacy. Генерация hashCode/equals — пока непонятно.

VD>>>По-моему ты ошибаешься. В Kotlin точно так же описываются классы с неявным конструктором, что аналогично кейс-классам (вид в профиль).

C>>http://confluence.jetbrains.net/display/Kotlin/Pattern+matching Всё что требуется от классов для участия в PM — это иммутабельность.
VD>Что-то я там такого не увидел. По-моему, ты что-то путаешь.
VD>Потом я с автором языка общался пару месяцев назад, и он мне четка сказал, что описание берется из определения класса. Вряд ли что-то за это время изменилось.
То есть?

C>>Ну и явная возможность задавать деструктуризатор, тогда как в Scala надо делать case-класс и implicit-конвертор в него.

VD>Какие еще на фиг деструкторы? Это ты про Decomposer functions?
Деструктуризаторы, не деструкторы — это стандартный термин в PM. Т.е. функции, разбирающие объект на составные части, которые можно использовать в PM.

В Kotlin:
decomposer fun Any?.Tree() : (Tree?, Tree?)? 
{ 
  if (this is Tree) return (left=this.left, right=this.right) return null 
}
//И дальше спокойно матчим


В Скале:
//Есть класс:
class Tree {
   val left : Tree;
   val right : Tree;
}

//Хочешь PM по этому классу делать? А вот обломись!

//Нужно делать что-то типа:
implicit object TreeWrapper {
   def unapply(t : Tree) = {
      (t.left, t.right)
  }
}

//Теперь можно делать так:
val tr : Tree = ....;

match(tr) {
    case TreeWrapper(t) => Console.print(t._1, t._2);
}
//Если хотим вместо неименованых параметров _1, _2 
//использовать left и right - то нужно делать отдельный case-class


Стоит ли говорить, что после этого использование PM при работе с legacy-кодом превращается в ужас?

C>>Управляющие конструкции (в Kotline есть нелокальный return),

VD>Чё? Это ты о инлайн-функциях что ли? Можно пример?
Ага. http://confluence.jetbrains.net/display/Kotlin/Nonlocal+returns+and+jumps (раздел "Break and continue is custom control structures") — в Скале такое не получается.

VD>И что? А если нужно два параметра? И зачем эти скобки? Сравни Шарп:

VD>
VD>from s in strings where s.length == 5 orderby s select s.toUpperCase()
VD>

VD>или без сахара:
VD>
VD>strings.Where(s => s.length == 5).OrderBy(s => s).Select(s => s.toUpperCase())
VD>

VD>Можно вбить внятные имена. Нет непонятных скобок. Нет проблем, если параметров у лямбды должно быть несколько.
Различие с Котлином будет только в скобках. По мне — пофиг.

C>>Это ещё и получше будет, чем в Scala. Особенно учитывая наличие анонимных типов (aka "именованые туплы").

VD>Как только речь заходит о случаях которые не укладываются в сахар с it, то все становится не так радужно.
То есть?

C>>Частично описал здесь: http://rsdn.ru/forum/philosophy/4349959.aspx
Автор: Cyberax
Дата: 20.07.11

VD>Там описано что тебе понравилось. Но про проблемы ни слова.
То что понравилось — в Скале неудобно.

C>>В общем, если эти товарищи сейчас не будут пытаться запихать незапихиваемое, то получится очень неплохой язык. С метапрограммированием лучше подождать, так как слишком уж опасная это штука. Как implicit'ы в Scala.

VD>Ничего там опасного нет. Это домыслы. Авторы на грани. Мысли есть. Но есть страх неизведанного (как у тебя).
Не, ну про implicit так же говорили. А получился ужастик в итоге.
Sapienti sat!
Re[8]: Kotlin - новый язык для JVM
От: mima  
Дата: 21.07.11 08:31
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>В Скале:

C>
C>//Есть класс:
C>class Tree {
C>   val left : Tree;
C>   val right : Tree;
C>}

C>//Хочешь PM по этому классу делать? А вот обломись!

C>//Нужно делать что-то типа:
C>implicit object TreeWrapper {
C>   def unapply(t : Tree) = {
C>      (t.left, t.right)
C>  }
C>}

C>//Теперь можно делать так:
C>val tr : Tree = ....;

C>match(tr) {
C>    case TreeWrapper(t) => Console.print(t._1, t._2);
C>}
C>//Если хотим вместо неименованых параметров _1, _2 
C>//использовать left и right - то нужно делать отдельный case-class
C>


Это на каком языке код? В Scala
class Test {
    class Tree(val left : Tree, val right : Tree)

    implicit object TreeWrapper {
        def unapply(t : Tree) = Some(t.left, t.right)
    }

    def main(args: Array[String]) {
        val tr : Tree = null;

        tr match {
            case TreeWrapper(t1, t2) => println(t1, t2);
        }
    }
}

прекрасно работает.

C>Стоит ли говорить, что после этого использование PM при работе с legacy-кодом превращается в ужас?


Ну ужас. Но не ужас-ужас-ужас. Ведь есть RichXXX, плюс, как видно экстракторы лишь на строчку длинее декомпозера.

C>>>Управляющие конструкции (в Kotline есть нелокальный return),

VD>>Чё? Это ты о инлайн-функциях что ли? Можно пример?
C>Ага. http://confluence.jetbrains.net/display/Kotlin/Nonlocal+returns+and+jumps (раздел "Break and continue is custom control structures") — в Скале такое не получается.

Отчего же? Есть scala.util.control.Break

C>Не, ну про implicit так же говорили. А получился ужастик в итоге.


Есть такое.
Re[9]: Kotlin - новый язык для JVM
От: avpavlov  
Дата: 21.07.11 08:40
Оценка:
M>Это на каком языке код? В Scala
M>
M>class Test {
M>    class Tree(val left : Tree, val right : Tree)

M>    implicit object TreeWrapper {
M>        def unapply(t : Tree) = Some(t.left, t.right)
M>    }

M>    def main(args: Array[String]) {
M>        val tr : Tree = null;

M>        tr match {
M>            case TreeWrapper(t1, t2) => println(t1, t2);
M>        }
M>    }
M>}
M>

M>прекрасно работает.


Сайберакс имеет ввиду что названия .left .right мы потеряли, и нужно вводить свои (t1,t2) или пользоваться анонимными ._1/._2

На самом деле нет ни одной причины не объявить Tree как case class. Так что на мой взгляд он просто привередничает
Re[2]: Kotlin - новый язык для JVM
От: mima  
Дата: 21.07.11 08:45
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>3) Null-safety вмонтировано в язык. В Скале только уродский Option, который даже для Pattern matching'а использовать нормально нельзя.


Есть NotNull, но его ещё не допилили до человеческого состояния. И это nullable по умолчанию, а не notnull.

Почему Option уродский? Почему нельзя нормально использовать для паттерн-матчинга?

C>7) Именованные параметры, в том числе для туплов.


Что имеется в виду?

C>В целом, супер! Жду релиза.


Присоединяюсь.
Re[11]: Kotlin - новый язык для JVM
От: avpavlov  
Дата: 21.07.11 09:05
Оценка:
M>Ведь можно и так:

M>
M>case tree @ TreeWrapper(left, right) =>
M>


Но это уже на совести программиста
Re[12]: Kotlin - новый язык для JVM
От: mima  
Дата: 21.07.11 09:09
Оценка:
Здравствуйте, avpavlov, Вы писали:

A>Но это уже на совести программиста


Можно пример из Kotlin, где left, right не теряются?
Re[12]: Kotlin - новый язык для JVM
От: mima  
Дата: 21.07.11 09:10
Оценка:
Здравствуйте, avpavlov, Вы писали:

A>Но это уже на совести программиста


Я, кажется, понимаю. Имеется в виду неявное приведение, если переменная сматчилась с каким-то типом?
Re[12]: Kotlin - новый язык для JVM
От: nau  
Дата: 21.07.11 09:11
Оценка:
Здравствуйте, avpavlov, Вы писали:

M>>Ведь можно и так:


M>>
M>>case tree @ TreeWrapper(left, right) =>
M>>


A>Но это уже на совести программиста

Во-первых, та же Идея подсказывает имена по Ctrl-P в экстракторах,
во-вторых, есть случаи, когда хочется дать другие имена.
В теории практика не отличается от теории, но на практике — отличается
Re[13]: Kotlin - новый язык для JVM
От: avpavlov  
Дата: 21.07.11 09:21
Оценка:
M>Можно пример из Kotlin, где left, right не теряются?

В Котлин не нужен враппер, поэтому сохраняется исходный тип, как если бы в Скале был case class.
Re[13]: Kotlin - новый язык для JVM
От: avpavlov  
Дата: 21.07.11 09:21
Оценка:
M>Я, кажется, понимаю. Имеется в виду неявное приведение, если переменная сматчилась с каким-то типом?

да, при имплисит конверсии мы потеряли исходный тип и соответственно все имена
Re[10]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.07.11 09:25
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>>>Оператор "стрелочка" у них зарезервирован для анонимных функций: "val doubled = ints.map {it => it * 2}".

VD>>Ты внимательно на эту стрелочку посмотри. В типах используется "->". В Нмерле для типов используется "->", а "=>" используется для лямбд (=> — это макрос).
C>Это не такое уж хорошее решение, тогда.

Поздравляю с началом фанатства.

VD>>Зачем в лябде нужны фигурные скобки я так же понять не могу. В лямбдах каждый символ на счету.

C>Фигурные скобки, наверное, можно опускать. Действует то же правило, что и в Java/C. Впрочем, мелочи.

Нельзя. И как раз из-за наличия синтаксиса с it. Иначе нельзя будет определить начало одного и конец другого выражения.

C>>>В принципе, неплохое решение — fun(), сигнатуры и вызовы разделены.

VD>>Где? Ты точно разобрался в синтаксисе?
C>Да. Мне в Скале не очень нравится то, что функциональные типы и лямбды описываются с помощью одного и того же символа "=>". Их разделение мне кажется правильным решением.

Да откуда ты это взял? Для описания типа используется ->, а для лямбд =>. Это уже стало классикой вроде.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.07.11 09:39
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>У Котлина как минимум PM по всем иммутабельным типам делается, в том числе и legacy. Генерация hashCode/equals — пока непонятно.


Откуда ты это взял (и про неизменяемость, и про "по всем")?

VD>>Потом я с автором языка общался пару месяцев назад, и он мне четка сказал, что описание берется из определения класса. Вряд ли что-то за это время изменилось.

C>То есть?

Какие из букв непонятны?

VD>>Какие еще на фиг деструкторы? Это ты про Decomposer functions?

C>Деструктуризаторы, не деструкторы — это стандартный термин в PM. Т.е. функции, разбирающие объект на составные части, которые можно использовать в PM.

Нет такой терминологии. Ты ее только что придумал.

Что до функций, то это отдельный механизм. Такую функцию нужно описывать вручную и ПМ на их основе получается довольно медленный, так как нельзя получить информацию о зависимостях между паттернами.

C>Стоит ли говорить, что после этого использование PM при работе с legacy-кодом превращается в ужас?


Чудес не бывает. Если информацию о соответствии параметров конструктора полям/пропертям взять неоткуда, то сделать ПМ автоматически будет невозможно. Поверь тому кто занимался этим вопросом не ради интереса.

C>>>Управляющие конструкции (в Kotline есть нелокальный return),

VD>>Чё? Это ты о инлайн-функциях что ли? Можно пример?
C>Ага. http://confluence.jetbrains.net/display/Kotlin/Nonlocal+returns+and+jumps (раздел "Break and continue is custom control structures") — в Скале такое не получается.

Это особенность одного вида функций, а не фича как таковая. И реально это косяк в языке. Просто авторы боятся макросов, которые решают проблему принципиально, вот и выдумали костыль. А ты радуешься этому костылю, так как до этого видел языки и без макросов, и без костылей.

VD>>И что? А если нужно два параметра? И зачем эти скобки? Сравни Шарп:

VD>>
VD>>from s in strings where s.length == 5 orderby s select s.toUpperCase()
VD>>

VD>>или без сахара:
VD>>
VD>>strings.Where(s => s.length == 5).OrderBy(s => s).Select(s => s.toUpperCase())
VD>>

VD>>Можно вбить внятные имена. Нет непонятных скобок. Нет проблем, если параметров у лямбды должно быть несколько.
C>Различие с Котлином будет только в скобках. По мне — пофиг.

Фиксированное имя параметров (it). В общем, на мой взгляд — это весьма спорное решение.

C>>>Это ещё и получше будет, чем в Scala. Особенно учитывая наличие анонимных типов (aka "именованые туплы").

VD>>Как только речь заходит о случаях которые не укладываются в сахар с it, то все становится не так радужно.
C>То есть?

Будет нагромождение не нужных вложенных скобок.

C>Не, ну про implicit так же говорили. А получился ужастик в итоге.


Зависит от того как его готовить и для чего использовать. В Немерле и Шарпе неявное приведение есть, но оно ничему не мешает. Просто в Скале на базе неявного приведения стали эмулировать методы-расширения. Вот это было перебором.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Kotlin - новый язык для JVM
От: dotneter  
Дата: 21.07.11 11:42
Оценка:
Здравствуйте, QrystaL, Вы писали:
Сколько ж можно клепать одно и тоже? Что лет как есть lisp, haskell, нет мы возьмем java добавим пару фич, и вот новый мега язык готов.
... << RSDN@Home 1.2.0 alpha 5 rev. 1526>>
Talk is cheap. Show me the code.
Re[2]: Kotlin - новый язык для JVM
От: QrystaL Украина  
Дата: 21.07.11 13:25
Оценка:
Здравствуйте, dotneter, Вы писали:

D>Здравствуйте, QrystaL, Вы писали:

D>Сколько ж можно клепать одно и тоже? Что лет как есть lisp, haskell, нет мы возьмем java добавим пару фич, и вот новый мега язык готов.

lisp и haskell на другой платформе; здесь же цель увеличить выбор языков под jvm. Судя по всему, если их "клепают", значит существующие не полностью удовлетворяют сообщество
Re[10]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 21.07.11 16:12
Оценка:
Здравствуйте, avpavlov, Вы писали:

A>Сайберакс имеет ввиду что названия .left .right мы потеряли, и нужно вводить свои (t1,t2) или пользоваться анонимными ._1/._2

A>На самом деле нет ни одной причины не объявить Tree как case class. Так что на мой взгляд он просто привередничает
Заметь про то, что мне интересен legacy-код. Да и не всё можно завернуть в case-классы.
Sapienti sat!
Re[9]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 21.07.11 16:13
Оценка:
Здравствуйте, mima, Вы писали:

C>>Ага. http://confluence.jetbrains.net/display/Kotlin/Nonlocal+returns+and+jumps (раздел "Break and continue is custom control structures") — в Скале такое не получается.

M>Отчего же? Есть scala.util.control.Break
Неудобно. Хочется break/continue с метками в циклах for. И без бросков исключений, чтоб работало не со скоростью улитки.
Sapienti sat!
Re[3]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 21.07.11 16:27
Оценка:
Здравствуйте, mima, Вы писали:

C>>3) Null-safety вмонтировано в язык. В Скале только уродский Option, который даже для Pattern matching'а использовать нормально нельзя.

M>Есть NotNull, но его ещё не допилили до человеческого состояния. И это nullable по умолчанию, а не notnull.
M>Почему Option уродский? Почему нельзя нормально использовать для паттерн-матчинга?
Option уродский из-за того, что "Some(4)==4" будет false. Без всяких ошибок во время компиляции.

Это объясняется тем, что Option'ы могут быть вложены друг в друга (абсолютно теоретическая вещь, на практике используется крайне изредка), так что авторазвёртывание Option'ов не стали делать.

C>>7) Именованные параметры, в том числе для туплов.

M>Что имеется в виду?
//Пример 1
def getPoint = (x=1,y=2,z=3)

val f = getPoint()
println(f.x);

//Пример 2
case class GeoPosition(val degLat : Int, val degLong : Int, 
   val height : Int, val minutesLat : Int, val minutesLong : Int, val ts : Timestamp);

x match {
    case GeoPosition(_, _, _, 11) => println("Высота 11 метров!!");
//Упс. Слегка промахнулись. Это не высота, а минуты широты.
...
}
Sapienti sat!
Re[9]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 21.07.11 16:35
Оценка:
Здравствуйте, VladD2, Вы писали:

C>>У Котлина как минимум PM по всем иммутабельным типам делается, в том числе и legacy. Генерация hashCode/equals — пока непонятно.

VD>Откуда ты это взял (и про неизменяемость, и про "по всем")?
Да, вижу что торможу.

VD>>>Какие еще на фиг деструкторы? Это ты про Decomposer functions?

C>>Деструктуризаторы, не деструкторы — это стандартный термин в PM. Т.е. функции, разбирающие объект на составные части, которые можно использовать в PM.
VD>Нет такой терминологии. Ты ее только что придумал.
"Деструктурирующее присваивание" — вполне себе термин.

C>>Стоит ли говорить, что после этого использование PM при работе с legacy-кодом превращается в ужас?

VD>Чудес не бывает. Если информацию о соответствии параметров конструктора полям/пропертям взять неоткуда, то сделать ПМ автоматически будет невозможно. Поверь тому кто занимался этим вопросом не ради интереса.
Ок, верю.

C>>Ага. http://confluence.jetbrains.net/display/Kotlin/Nonlocal+returns+and+jumps (раздел "Break and continue is custom control structures") — в Скале такое не получается.

VD>Это особенность одного вида функций, а не фича как таковая. И реально это косяк в языке. Просто авторы боятся макросов, которые решают проблему принципиально, вот и выдумали костыль. А ты радуешься этому костылю, так как до этого видел языки и без макросов, и без костылей.
Ну ты знаешь моё мнение насчёт макросов.

VD>>>Можно вбить внятные имена. Нет непонятных скобок. Нет проблем, если параметров у лямбды должно быть несколько.

C>>Различие с Котлином будет только в скобках. По мне — пофиг.
VD>Фиксированное имя параметров (it). В общем, на мой взгляд — это весьма спорное решение.
Откуда фиксированное??
arr map {k,v => "Key: "+k+",val: "+v }

Из примеров анонимных функций там.

C>>Не, ну про implicit так же говорили. А получился ужастик в итоге.

VD>Зависит от того как его готовить и для чего использовать. В Немерле и Шарпе неявное приведение есть, но оно ничему не мешает. Просто в Скале на базе неявного приведения стали эмулировать методы-расширения. Вот это было перебором.
И не только расширенные методы, а ещё и DSLи.
Sapienti sat!
Re[2]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 21.07.11 16:36
Оценка:
Здравствуйте, dotneter, Вы писали:

D>Сколько ж можно клепать одно и тоже? Что лет как есть lisp, haskell, нет мы возьмем java добавим пару фич, и вот новый мега язык готов.

Из подобных языков есть только более-менее близкий OCaml и Go. Оба мало приспособлены для JVM.
Sapienti sat!
Re[11]: Kotlin - новый язык для JVM
От: avpavlov  
Дата: 21.07.11 18:02
Оценка:
C>Заметь про то, что мне интересен legacy-код. Да и не всё можно завернуть в case-классы.

Легаси код в Котле придётся разруливать через implicit def decomposer — так что с точки зрения работы с легаси кодом, вообще разницы нет между Скалой и Котлом
Re[11]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 22.07.11 06:58
Оценка:
Здравствуйте, VladD2, Вы писали:

C>>"Деструктурирующее присваивание" — вполне себе термин.

VD>"Деструктивное" — да. Только это из другой оперы. Это означает "разрушающее", т.е. меняющее что-то по месту.
Именно что "деструктурирующее" (пример: http://www.bitstampede.com/2006/05/24/destructuring-assignment-part-one/ ). Т.е. разбирающее объект на кусочки.

C>>Ну ты знаешь моё мнение насчёт макросов.

VD>Ага. Но уверен, что оно изменилось бы, если бы ты попробовал их на практие.
Я боюсь, что их будут пробовать другие. Implicit в Scala тоже выглядит неплохо, но вот разбираться в том, что понаписали во всяких там Specs с их помощью — это АДЪ.

VD>Кстати, предлагаю провести эксперимент. Могу посодействовать в освоении немерла и его макросов. А потом посмотрим, поменяешь ты свое мнение или нет.

VD>Обещаю — это будет увлекательно. Нужно только найти достойную, интересную задачу на которой изучать язык.
Я в принципе не хочу работать на .NET-языках, хотя бы из-за того, что не работаю в Windows. А так, с макросами Nemerle я игрался пару лет назад.

C>>И не только расширенные методы, а ещё и DSLи.

VD>С этим я не знаком. Даже не прдеставляю как на приведении типов делать ДСЛ-и. ДСЛ-ти там вроде бы на неявном параметре функций делают. И в этом плане инлайн-функции в Котлине — это тоже самое, точнее, переработанное решение. В Немерле это решение не нужно, так как макросы отлично решают те же проблемы.
В Scala делается так: ключевые слова сделаны в виде объектов, на основании которых имплицитно конструируются обёртки, а дальше с помощью инфиксных фукнций они мутируются.

Самый безобидный пример из Specs:
class helloWorld extends Specification {
  "'hello world' has 11 characters" in {
     "hello world".size must be equalTo(11)
  }
  "'hello world' matches 'h.* w.*'" in {
     "hello world" must be matching("h.* w.*")
  }
}
Sapienti sat!
Re[13]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 22.07.11 07:01
Оценка:
Здравствуйте, VladD2, Вы писали:

C>>Почему же? "it" будет валиден в пределах одного оператора, как в обычном старом добром С.

VD>Как без скобок вырзить вот такую лямбду:
VD>
VD>x => y => x * y
VD>

VD>?
А что тут такого? Разбираем: (x => (y => x*y)) — два вложенных блока.

Абсолютно аналогично в С:
for(int f=0;f<10;++f)
   if (f==2)
      doSomething();
Sapienti sat!
Re[12]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.07.11 13:24
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Именно что "деструктурирующее" (пример: http://www.bitstampede.com/2006/05/24/destructuring-assignment-part-one/ ). Т.е. разбирающее объект на кусочки.


Ах вот ты о чем. Ясно. Только что за деструктуризаторы ты имеешь в виду? Если речь о функциях, то я уже говорил, что у этого подхода есть два недостатка: 1) он не позволяет порождать быстрый код, 2) он не позволяет вычислять полноту охвата (все ли варианты паттернов присутствуют в сопоставлении с образцом).

C>Я боюсь, что их будут пробовать другие. Implicit в Scala тоже выглядит неплохо, но вот разбираться в том, что понаписали во всяких там Specs с их помощью — это АДЪ.


А что бояться то? Другие уже используют. Жалоб пока нет. Точнее жалобы есть, но только на то что макры не столь гибки как хотелось бы.

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

В общем, мое дело предложить...

C>Я в принципе не хочу работать на .NET-языках, хотя бы из-за того, что не работаю в Windows.


Есть Моно, если что. Проблема только в том, что под Моно (и тем более Линукс) нет IDE. А без нее конечно это все не то.

C>А так, с макросами Nemerle я игрался пару лет назад.


Игрался не считается. Надо написать, пусть небольшое, но реальное приложение в котором требуется МП или ДСЛ. А игры они обычно только неверное впечатление создают.

C>Самый безобидный пример из Specs:

C>
C>class helloWorld extends Specification {
C>  "'hello world' has 11 characters" in {
C>     "hello world".size must be equalTo(11)
C>  }
C>  "'hello world' matches 'h.* w.*'" in {
C>     "hello world" must be matching("h.* w.*")
C>  }
C>}
C>


Это примерно то что предлагается сделать в Котлин. Проблем две: 1) опять же скорость невысокая, так как интерпретация; 2) выразительные возможности ограниченные.

Но где здесь неявные приведения типов?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.07.11 13:25
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, VladD2, Вы писали:


C>>>Почему же? "it" будет валиден в пределах одного оператора, как в обычном старом добром С.

VD>>Как без скобок вырзить вот такую лямбду:
VD>>
VD>>x => y => x * y
VD>>

VD>>?
C>А что тут такого? Разбираем: (x => (y => x*y)) — два вложенных блока.

Ты вырази это дело с it или с их синтаксисом но без скобок.

C>Абсолютно аналогично в С:


Причем тут С? Мы кажется о лямбдах речь вели.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Kotlin - новый язык для JVM
От: Курилка Россия http://kirya.narod.ru/
Дата: 22.07.11 13:35
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Cyberax, Вы писали:


C>>Самый безобидный пример из Specs:

C>>
C>>class helloWorld extends Specification {
C>>  "'hello world' has 11 characters" in {
C>>     "hello world".size must be equalTo(11)
C>>  }
C>>  "'hello world' matches 'h.* w.*'" in {
C>>     "hello world" must be matching("h.* w.*")
C>>  }
C>>}
C>>


VD>Это примерно то что предлагается сделать в Котлин. Проблем две: 1) опять же скорость невысокая, так как интерпретация; 2) выразительные возможности ограниченные.


Влад, откуда ты взял про интерпретацию? "hello world".size must be equalTo(11) — это вполне себе компилируемый кусок кода, а строка выше это описание тесткейса.
Re[15]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 22.07.11 13:46
Оценка:
Здравствуйте, VladD2, Вы писали:

C>>А что тут такого? Разбираем: (x => (y => x*y)) — два вложенных блока.

VD>Ты вырази это дело с it или с их синтаксисом но без скобок.
У них пока нет синтаксиса без скобок.

C>>Абсолютно аналогично в С:

VD>Причем тут С? Мы кажется о лямбдах речь вели.
Про то как можно разрешить проблему со скобочным синтаксисом.
Sapienti sat!
Re[14]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.07.11 13:52
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Влад, откуда ты взял про интерпретацию? "hello world".size must be equalTo(11) — это вполне себе компилируемый кусок кода, а строка выше это описание тесткейса.


Большинство интерпретаторов — это вполне себе компилируемые программы. Только от этого гни интерпретаторами быть не перестают.

Проблема эмулируемых ДСЛ-ей в том, что нет четкой возможности преобразовать исходную программу (описываемую в терминах предметной области) в эффективную целевую программу. Вот погляди, например, на макрос PegGrammar. Его исходный язык — это PEG-грамматика. На выходе у него должна быть эффективная реализация алгоритма рекурсивного спуска с откатами. Это подразумевает, что в конечном коде не должно быть объектов, проверок и т.п. Там должен быть тупой С-ишный код. При этом код должен содержать кучу оптимизаций. Эмулируемые ДСЛ-и не позволяют сгенерировать эффективный код. Выходом является только герерация кода в рантайме средствами вроде генерации байт-кода, генерации исходников и последующей их компиляции, или штучек вроде деревьев выражений в дотнете. Но все это сложно. По сему обычно эффективность таких решений в десятки (а то и сотни) раз медленнее оптимальных.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.07.11 13:55
Оценка:
Здравствуйте, Cyberax, Вы писали:

VD>>Ты вырази это дело с it или с их синтаксисом но без скобок.

C>У них пока нет синтаксиса без скобок.

Дык, потому и нет.

Это рубийное решение. Только вместо { a, b | ... } используется { a, b => ... }

C>>>Абсолютно аналогично в С:

VD>>Причем тут С? Мы кажется о лямбдах речь вели.
C>Про то как можно разрешить проблему со скобочным синтаксисом.

Это проблема не скобок, а приоритетов. Боюсь, что тут так просто ничего не решить. Они не даром выбрали именно такой синтаксис.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.07.11 14:28
Оценка:
Здравствуйте, avpavlov, Вы писали:

A>На самом деле нет ни одной причины не объявить Tree как case class. Так что на мой взгляд он просто привередничает


Одна есть — класс может быть библиотечным.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.07.11 14:31
Оценка:
Здравствуйте, avpavlov, Вы писали:

M>>Можно пример из Kotlin, где left, right не теряются?


A>В Котлин не нужен враппер, поэтому сохраняется исходный тип, как если бы в Скале был case class.


Что-то я не пойму как тип сохраняется. Можно пример матчинга для класса не имеющего дефолтного конструктора?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Kotlin - новый язык для JVM
От: avpavlov  
Дата: 22.07.11 14:32
Оценка:
VD>Одна есть — класс может быть библиотечным.

Это действительно проблема, но Котлин разве её решает?. Точнее решает так же как и Скала — за счёт доп. кода, только называется это здесь decomposer, а в Скале будет implicit def
Re[15]: Kotlin - новый язык для JVM
От: avpavlov  
Дата: 22.07.11 14:38
Оценка:
VD>Что-то я не пойму как тип сохраняется. Можно пример матчинга для класса не имеющего дефолтного конструктора?

Имеется ввиду, что там матчинг можно делать для любого класса с конструктором определённого вида, а в Скала — только для case класса. Соответственно, если есть аллергия на case class, то придётся имплисит ковертор в тупл делать с потерей исходного типа.

В Котле этого якобы не надо — за что он Сайбераксу понравился.

Ну а я считаю, что хочешь делать п.матчинг — ну и поставь case class, делов-то.

А библиотечные Java-классы, которые трогать нельзя и там и там придётся оборачивать вспомогательным кодом, который пишется один раз и всё — тоже не вижу проблемы.
Re[3]: Kotlin - новый язык для JVM
От: avpavlov  
Дата: 22.07.11 14:41
Оценка:
Здравствуйте, QrystaL, Вы писали:

QL>Здравствуйте, Kernan, Вы писали:

K>>Какую конкретно нишу?

QL>The language way simpler than the most mature competitor – Scala.


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

Соответственно, если язык написан от скуки, то они будут его дописывать и дописывать. А значит он будет стремиться к Скале, теряя свою простоту
Re[4]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.07.11 14:42
Оценка:
Здравствуйте, Cyberax, Вы писали:

M>>Почему Option уродский? Почему нельзя нормально использовать для паттерн-матчинга?

C>Option уродский из-за того, что "Some(4)==4" будет false. Без всяких ошибок во время компиляции.

О, как? Это конечно уродство.

C>Это объясняется тем, что Option'ы могут быть вложены друг в друга (абсолютно теоретическая вещь, на практике используется крайне изредка), так что авторазвёртывание Option'ов не стали делать.


Не нужно никакое авторазвертывание. Это был бы еще тот баг в дизайне. А вот выражение "Some(4)==4"
должно давать ошибку времени компиляции, а не false.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.07.11 15:14
Оценка:
Здравствуйте, avpavlov, Вы писали:

A>Имеется ввиду, что там матчинг можно делать для любого класса с конструктором определённого вида, а в Скала — только для case класса. Соответственно, если есть аллергия на case class, то придётся имплисит ковертор в тупл делать с потерей исходного типа.


Ну, это какая-то вкусовщина. Считай что Колтиновские классы с дефолтным конструктором все являются кэйс-классами. Вот и все.

Технически для реализации ПМ нужно не бирка "кэйс", а информация о соответствии параметров конструктора (можно даже выдуманного) полям/свойствам типа (даже классом быть не обязательно). Это нужно так как в ПМ образец описывает объект через его конструктор. Так что нужна любая форма задания этого соответственно. Дефолтный конструктор прекрасно решает эту задачу для описываемых вновь типов.

A>В Котле этого якобы не надо — за что он Сайбераксу понравился.


На мой взгляд без разницы. Все равно МП возможен только для определенного рода типов. По типам Явы он точно будет невозможен.

A>Ну а я считаю, что хочешь делать п.матчинг — ну и поставь case class, делов-то.


Согласен. Хотя лучше было бы предусмотреть возможность делать ПМ по любому типу. В Немрле это возможно, например.

A>А библиотечные Java-классы, которые трогать нельзя и там и там придётся оборачивать вспомогательным кодом, который пишется один раз и всё — тоже не вижу проблемы.


При оборачивании будут потери в скорости и качестве контроля со стороны компилятора. Только для замкнутых кейс-классов (они же варианты немерла или ограниченные объединения МЛ-я) можно обеспечить контроль компилятора. А без этого будет много граблей.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.07.11 15:16
Оценка:
Здравствуйте, avpavlov, Вы писали:


VD>>Одна есть — класс может быть библиотечным.


A>Это действительно проблема, но Котлин разве её решает?.


Нет.

A>Точнее решает так же как и Скала — за счёт доп. кода, только называется это здесь decomposer, а в Скале будет implicit def


+1 Но implicit def это, на мой взгляд, более сложное, а стало быть кривое, решение.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.07.11 15:18
Оценка:
Здравствуйте, avpavlov, Вы писали:

A>Такая меня мысль посетила — сам язык ДжетБрэйну без надобности. Писали значит от скуки — есть ресурсы, есть деньги, давайте из интереса язык напишем.


Ошибочная мысль. Они же свою Идею на Яве пишут. Надоело им она. Вот и решили упростить себе и другим
жизнь.

A>Соответственно, если язык написан от скуки, то они будут его дописывать и дописывать. А значит он будет стремиться к Скале, теряя свою простоту


Там отправные посылки — сделать язык мощнее Явы, похожий на Скалу, но не такой сложный как Скала и с отличной поддержкой ИДЕ (читай Идеи). Так что этого не должно случиться.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Kotlin - новый язык для JVM
От: avpavlov  
Дата: 22.07.11 15:29
Оценка:
VD>Ошибочная мысль. Они же свою Идею на Яве пишут. Надоело им она. Вот и решили упростить себе и другим
VD>жизнь.

Ну не знаю, не знаю. Я вот не в курсе к сожалению, Студию переписали на дотНет?

Да и вообще, целиком переписать — долго.

A>>Соответственно, если язык написан от скуки, то они будут его дописывать и дописывать. А значит он будет стремиться к Скале, теряя свою простоту


VD>но не такой сложный как Скала и с отличной поддержкой ИДЕ (читай Идеи).


Сомневаюсь, что удержатся они на позициях простоты. Когда есть умения и желание и хочется их куда-то приложить, трудно удержаться
Re[6]: Kotlin - новый язык для JVM
От: QrystaL Украина  
Дата: 22.07.11 17:29
Оценка:
Здравствуйте, avpavlov, Вы писали:
A>Студию переписали на дотНет?

Частично. Например, визуальная часть на WPF.
Re[15]: Kotlin - новый язык для JVM
От: Курилка Россия http://kirya.narod.ru/
Дата: 22.07.11 18:25
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Курилка, Вы писали:


К>>Влад, откуда ты взял про интерпретацию? "hello world".size must be equalTo(11) — это вполне себе компилируемый кусок кода, а строка выше это описание тесткейса.


VD>Большинство интерпретаторов — это вполне себе компилируемые программы. Только от этого гни интерпретаторами быть не перестают.


[cut]

По-моему ты на не на мой вопрос отвечаешь, задам тогда попроще: Scala — интерпретатор? (Specs, код для которой был приведён — библиотека на Scala, если что)
Re[7]: Kotlin - новый язык для JVM
От: hattab  
Дата: 22.07.11 18:28
Оценка:
Здравствуйте, QrystaL, Вы писали:

QL> A>Студию переписали на дотНет?


QL> Частично. Например, визуальная часть на WPF.


Частично
avalon 1.0rc3 rev 419, zlib 1.2.3
Re[4]: Kotlin - новый язык для JVM
От: Курилка Россия http://kirya.narod.ru/
Дата: 22.07.11 18:31
Оценка:
Здравствуйте, avpavlov, Вы писали:

A>Здравствуйте, QrystaL, Вы писали:


QL>>Здравствуйте, Kernan, Вы писали:

K>>>Какую конкретно нишу?

QL>>The language way simpler than the most mature competitor – Scala.


A>Такая меня мысль посетила — сам язык ДжетБрэйну без надобности. Писали значит от скуки — есть ресурсы, есть деньги, давайте из интереса язык напишем.


A>Соответственно, если язык написан от скуки, то они будут его дописывать и дописывать. А значит он будет стремиться к Скале, теряя свою простоту



Мы хотим писать идею на котлине сразу же, как только котлин хоть как-то задышит...

коммент от джетбрейновца
Re[6]: Kotlin - новый язык для JVM
От: hardcase Пират http://nemerle.org
Дата: 22.07.11 18:34
Оценка:
Здравствуйте, avpavlov, Вы писали:

VD>>Ошибочная мысль. Они же свою Идею на Яве пишут. Надоело им она. Вот и решили упростить себе и другим

VD>>жизнь.

A>Да и вообще, целиком переписать — долго.


Долго? Это гмм скорее вопрос написания конвертера исходников Java -> Kotlin.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[5]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 22.07.11 20:36
Оценка:
Здравствуйте, VladD2, Вы писали:

M>>>Почему Option уродский? Почему нельзя нормально использовать для паттерн-матчинга?

C>>Option уродский из-за того, что "Some(4)==4" будет false. Без всяких ошибок во время компиляции.
VD>О, как? Это конечно уродство.
Ага. Я на этой ошибке уже кучу отладочного времени потратил.

C>>Это объясняется тем, что Option'ы могут быть вложены друг в друга (абсолютно теоретическая вещь, на практике используется крайне изредка), так что авторазвёртывание Option'ов не стали делать.

VD>Не нужно никакое авторазвертывание.
Почему же? Авторазвёртывание вполне определено и удобно, с семантикой как в SQL'е. В Kotlin'е сделали всё правильно.

А ошибку компиляции здесь сделать трудно, так как equals() обязан работать с объектами разного типа.
Sapienti sat!
Re[6]: Kotlin - новый язык для JVM
От: _nn_ www.nemerleweb.com
Дата: 23.07.11 18:53
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>>>Это объясняется тем, что Option'ы могут быть вложены друг в друга (абсолютно теоретическая вещь, на практике используется крайне изредка), так что авторазвёртывание Option'ов не стали делать.

VD>>Не нужно никакое авторазвертывание.
C>Почему же? Авторазвёртывание вполне определено и удобно, с семантикой как в SQL'е. В Kotlin'е сделали всё правильно.

C>А ошибку компиляции здесь сделать трудно, так как equals() обязан работать с объектами разного типа.


Почему трудно ?
Достаточно запретить автоматическое преобразование в object:

http://ideone.com/TZ6SN
http://ideone.com/gOier
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[7]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 23.07.11 19:54
Оценка:
Здравствуйте, _nn_, Вы писали:

C>>А ошибку компиляции здесь сделать трудно, так как equals() обязан работать с объектами разного типа.

__>Почему трудно ?
__>Достаточно запретить автоматическое преобразование в object:
Каким образом? Метод equals() определён у класса Object, так что можно сделать только хаком для специального случая.
Sapienti sat!
Re[8]: Kotlin - новый язык для JVM
От: _nn_ www.nemerleweb.com
Дата: 24.07.11 06:42
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, _nn_, Вы писали:


C>>>А ошибку компиляции здесь сделать трудно, так как equals() обязан работать с объектами разного типа.

__>>Почему трудно ?
__>>Достаточно запретить автоматическое преобразование в object:
C>Каким образом? Метод equals() определён у класса Object, так что можно сделать только хаком для специального случая.

Если явно привести тип к object, то уже ничего не поделаешь. Вызовется equals, как и хотел автор.
Только при явном указании вызовется equals с object.
Однако если не приводить типы то компилятор выдаст ошибку:

class A {}
class B : A {}

def a = A();
def b = B();

def c = a == b; // Не компилируется в Nemerle, но компилируется в C#
def d = a : object == b; // Компилируется


В Nemerle это как раз позволяет сэкономить ошибки, где в C# на них легко наступить.
Чем такой вариант не устраивает ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[16]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.07.11 09:21
Оценка:
Здравствуйте, Курилка, Вы писали:

К>>>Влад, откуда ты взял про интерпретацию? "hello world".size must be equalTo(11) — это вполне себе компилируемый кусок кода, а строка выше это описание тесткейса.


VD>>Большинство интерпретаторов — это вполне себе компилируемые программы. Только от этого гни интерпретаторами быть не перестают.


К>[cut]


К>По-моему ты на не на мой вопрос отвечаешь, задам тогда попроще: Scala — интерпретатор? (Specs, код для которой был приведён — библиотека на Scala, если что)


Да нет, на твой. Просто ты не понимаешь. Скала то компилятор. Вот только подобные ДСЛ-и выливаются в нтерпретацию. В Скале нет средств сгенерировать по описанию эффективный код.

Простой пример. На скале наверно можно описать регулярные выражения. Но превратить их в эффективный конечный автомат, и тем более сгенерировать switch-реализацию для этого автомата, не удастся.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.07.11 09:24
Оценка:
Здравствуйте, Cyberax, Вы писали:

VD>>Не нужно никакое авторазвертывание.

C>Почему же?

Я тебе написал почему, но ты поскипал.

VD>Авторазвёртывание вполне определено и удобно, с семантикой как в SQL'е. В Kotlin'е сделали всё правильно.


Ничего там не сделано. Там явные гуарды надо писать. И это правлиьно. Все что там сделано — это вместо match используется if.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Kotlin - новый язык для JVM
От: Курилка Россия http://kirya.narod.ru/
Дата: 24.07.11 10:15
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Курилка, Вы писали:


К>>>>Влад, откуда ты взял про интерпретацию? "hello world".size must be equalTo(11) — это вполне себе компилируемый кусок кода, а строка выше это описание тесткейса.


VD>>>Большинство интерпретаторов — это вполне себе компилируемые программы. Только от этого гни интерпретаторами быть не перестают.


К>>[cut]


К>>По-моему ты на не на мой вопрос отвечаешь, задам тогда попроще: Scala — интерпретатор? (Specs, код для которой был приведён — библиотека на Scala, если что)


VD>Да нет, на твой. Просто ты не понимаешь. Скала то компилятор. Вот только подобные ДСЛ-и выливаются в нтерпретацию. В Скале нет средств сгенерировать по описанию эффективный код.


Тебе привели вполне себе компилируемый пример (который по сути есть тупо последовательность вызовов довольно простых методов), но ты приводишь какие-то несколько отчуждённые измышления о вариантах DSL, которые нормальным образом на скалу не ложатся (в отличие от приведённого Cyberax примера):

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


Спорить о том, что не все юзкейсы для DSL можно нормально на скале выразить по-моему довольно глупо
те
Re[18]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.07.11 10:23
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Тебе привели вполне себе компилируемый пример


Мне привели какую-то фигню. Коня вакуумного.

К>(который по сути есть тупо последовательность вызовов довольно простых методов), но ты приводишь какие-то несколько отчуждённые измышления о вариантах DSL, которые нормальным образом на скалу не ложатся (в отличие от приведённого Cyberax примера):


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


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


А что тут спорить то? То что производительности не требует — пройдет. А то что требует — будет тормозить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.07.11 10:35
Оценка:
Здравствуйте, avpavlov, Вы писали:

VD>>Ошибочная мысль. Они же свою Идею на Яве пишут. Надоело им она. Вот и решили упростить себе и другим

VD>>жизнь.

A>Ну не знаю, не знаю. Я вот не в курсе к сожалению, Студию переписали на дотНет?


Причем тут студия? Я же говорю Idea. Это IDE для Явы от JetBrains. Одна из лучший.

A>Да и вообще, целиком переписать — долго.


Что касается студии (т.е. MS VS), то ее таки — да, переписывают по-тихоничку на дотнете. Почти весь GUI уже переписан. Система сборки — тоже (используется MSBuild). Уверен, что в ближайшие 5 лет из студии неуправляемый код исчезнет вовсе.

VD>>но не такой сложный как Скала и с отличной поддержкой ИДЕ (читай Идеи).


A>Сомневаюсь, что удержатся они на позициях простоты. Когда есть умения и желание и хочется их куда-то приложить, трудно удержаться


Есть такое. Но будем надеяться, что удержатся. Потом им простота нужна еще и для того чтобы IDE хорошо работала с этим языком.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.07.11 10:37
Оценка:
Здравствуйте, hattab, Вы писали:

QL>> A>Студию переписали на дотНет?


QL>> Частично. Например, визуальная часть на WPF.


H>Частично


А что ты так нервно моргаешь то? Исходно студия была целиком анменеджед. С каждой версией все больше и больше кода переписывается в менеджед. Понятно что такой объем работы сразу проделать трудно. Ведь еще и о совместимости нужно заботиться.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.07.11 10:38
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Долго? Это гмм скорее вопрос написания конвертера исходников Java -> Kotlin.


А оно надо? Все в итоге в байткод преобурзауется. Будут писать новые модули на новом языке и все. Если старые нужно будет серьезно рефакторить, то тоже самое.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Kotlin - новый язык для JVM
От: avpavlov  
Дата: 24.07.11 11:11
Оценка:
VD>Причем тут студия? Я же говорю Idea. Это IDE для Явы от JetBrains. Одна из лучший.

При том что выход .Net не привёл к переписыванию студии. А прошло уже 9 или 10 лет. Тоже будет и с ИДЕЕЙ — не будут они её брать и переписывать на Котле, как бы изначально не хорохорились на форумах. Просто тупо оценят объём работ и отступятся. Будут новые вещи дописывать, а старые оставят как есть.
Re[9]: Kotlin - новый язык для JVM
От: hattab  
Дата: 24.07.11 12:16
Оценка:
Здравствуйте, VladD2, Вы писали:

VD> QL>> A>Студию переписали на дотНет?


VD> QL>> Частично. Например, визуальная часть на WPF.


VD> H>Частично


VD> А что ты так нервно моргаешь то?


Нервно? Это тебе почудилось

VD> Исходно студия была целиком анменеджед. С каждой версией все больше и больше кода переписывается в менеджед. Понятно что такой объем работы сразу проделать трудно. Ведь еще и о совместимости нужно заботиться.


Да я что, спорю что-ли Однако, того факта, что гуй там только частично на WPF (а тот что на WPF еще имеет вкрапления нативных контролов. Зачем кстати?) это не отменяет. Прикольно будет, если в дальнейшем они решат выкинуть весь WPF и запилят морду на каком нибудь нативном DirectUI
avalon 1.0rc3 rev 419, zlib 1.2.3
Re[8]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.07.11 13:05
Оценка:
Здравствуйте, avpavlov, Вы писали:


VD>>Причем тут студия? Я же говорю Idea. Это IDE для Явы от JetBrains. Одна из лучший.


A>При том что выход .Net не привёл к переписыванию студии. А прошло уже 9 или 10 лет.


Ну, как же не привело, когда процентов 70 кода (по скромным оценкам) уже переписаны?

A>Тоже будет и с ИДЕЕЙ — не будут они её брать и переписывать на Котле, как бы изначально не хорохорились на форумах. Просто тупо оценят объём работ и отступятся. Будут новые вещи дописывать, а старые оставят как есть.


Дык, просто так код никто не переписывает. Переписывают код которые не удовлетворяет тем или иным потребностям. По этому, естественно, с выходом нового языка никто не побежит все переписывать. Но те части которые будут переписываться, будут переписываться уже на новом языке.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.07.11 13:10
Оценка:
Здравствуйте, hattab, Вы писали:

H>Да я что, спорю что-ли


Похоже, что да.

H>Однако, того факта, что гуй там только частично на WPF (а тот что на WPF еще имеет вкрапления нативных контролов. Зачем кстати?) это не отменяет.


GUI там на 99.99 менеджед. Не весь, правда, WPF, но тем не менее менеджед. Единственное что там осталось анменеджед — это контрол с деревом. Говорят что по соображениям совместимости. А там черт его знает.

Но менеджед там далеко не только гуй. Там много всего менедед стало.

H>Прикольно будет, если в дальнейшем они решат выкинуть весь WPF и запилят морду на каком нибудь нативном DirectUI


Ты явно не понимаешь о чем говоришь. Такие объемы кода просто так не выкидываются. Один только редактор кода — это горы кода. Редактор, кстати, получился очень хороший (с точки зрения API).

А анменеджед и так есть. WPF основан на маленькой, но тем не менее нэйтивной библоотеке которая и занимается низкоуровневыми вопросами отрисовки.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.07.11 13:12
Оценка:
Здравствуйте, hattab, Вы писали:

H>Прикольно будет, если в дальнейшем они решат выкинуть весь WPF и запилят морду на каком нибудь нативном DirectUI


Да, кстати, забыл упомянуть одну пикантную подробность. В VS 2010 пакет управленияе проектами С++ был переписан в мендедед виде (скорее всего на шарпе). А пакеты для Шарпа и Васика пока что остались нйэтивными. Вот такие вот казусы случаются.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Kotlin - новый язык для JVM
От: Ziaw Россия  
Дата: 24.07.11 13:46
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Плюс к этому языку будет первоклассная IDE, от лучшего производителя IDE. Для Скалы, насколько мне известно, ничего качественного так и не было сделано.


И это не случайно. К сожалению даже JetBrains не может осилить нормальную поддержку скалы.
Re[12]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.07.11 15:21
Оценка:
Здравствуйте, hattab, Вы писали:

H>На 99.99% это сильно не тянет. Берешь Spy++ и находишь кучу нативных контролов


Да ну?

H>ServerExplorer — дерево нативное, Solution Explorer — дерево нативное, Object browser — дерево нативное (у WPF'а, похоже, совсем туго с деревьями ),


Это все пример одного контрола — дерева. Скорее всего сделали обертку для него на С++ и используют в виде контрола.

H>Properties — винформсовые оберточки


Гы. А что винформс у нас уже нэйтивом стал? Ну-ну.

H> Более того, открываешь диалог Options, а он вообще весь нативный


Это контейнер. Что было старое осталось старым. Но есть там страницы и сделанные в медеджед кода. Это как раз таки новые странички. Открой, например, настройки форматирования для шарпа.

H>Attach to process, Code snippets manager, Add-in manager, External tools это все полностью нативные диалоги. И это мне просто лень все проверять, т.ч. твои 99.99% это красивая фантазия и не более


С диалогами — да. Но это не там много кода. Да и он не сложный. В студии код совершенно в других местах дислоцируется. Скажем огромная часть студии это msenv.dll. Вот там анменеджед-кода полно. И качество его, порой, ужасное. Обработка ошибок на грани фола. Тупо возвращают E_ЧтоТоТам, если что не так. И плевать на то как другие будут ошибки искать.

Что до гуи — то тут основное объем кода — это, как не странно, редатор кода и всякого рода дизайнеры.

Я же имел в виду сам интерфейс студии (окошки).


VD>> Но менеджед там далеко не только гуй. Там много всего менедед стало.


H>Чудно, но я как бы о гуе


Честно говоря не понимаю чем тебе гуй сдался.

VD>> Ты явно не понимаешь о чем говоришь. Такие объемы кода просто так не выкидываются.


H>Нужно же будет куда-то применять DirectUI. WPF вот что-то не пошел совсем. Разгонят одних индусов, наберут других и спираль начнет новых виток


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

В ближайшем будущем, скорее всего, на менеджед код будет переведены сервисы интеграции шарпа и васика, а так же и компилятор шарпа. Ну, а там менедежед-код будет выкидываться еще больше.

И знаешь почему будет выкидываться менеджед код? Потому что он хреновый и очень плохой в поддержке.

Создавать модули интеграции других языков к студии, на сегодня, очень не просто. Анменеджед-интерфейсы — это черные ящики. Получить информацию по ним почти невозможно. Обработка ошибок в них требует море кодирования и потому частенько просто выливается в возврат E_INVALIDARG или чего-то подобного. Так что понять что ты сделал не так в не тривильных случаях почти невозможно. Учитывая, что исходники МС вряд ли откроет — единственный путь сделать студию более дружественной к внешним расширениям — это дальнейший перевод ее на менеджед-код.

В 2010 студии для этого сделано не мало. Новый формат расширений очень красив и позволяет вынести различные фичи интеграции в отдельные, независимые модули. Новый редактор кода имеет продуманное, мощное и хорошее АПИ.

Если все это выбросить и вернуться назад к COM-у и нэйтив-реализации, то это будет огромным шагом назад. Думаю, что на такой глупый шак в МС не пойдут.

Ну, а ГУЙ, особенно какие-то там диалоги настроек — это мелочь на которую лично я даже не обращал внимание. Не они делают погоду. Приделывать же нэйтив-гуй к менеджед-кишкам по меньшей мере странно.

VD>> Один только редактор кода — это горы кода. Редактор, кстати, получился очень хороший (с точки зрения API).


H>Как пользователю, мне чхать на красивое API.


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

Например, новое АПИ позволяет подлкючать расширения редактора кода (вроде интеллисенса) отдельными модулями. При этом все расширения делаются через простой и хорош документированный АПИ, а не через жопу автогеном как это делалось 10 лет назад (в том же Томато, например).

Уже сейчас можно скачать кучу полезных расширений. А 2010-й студии еще нет и года. Сравни это с тем что было в прошлые времена.

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


Гуй как раз работает весьма шустренько. И это не смотря на навороты.

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

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

H>Оно и понятно, куда без натива в нативной то среде


Естественно. Возможно сей факт как-то сгладит батхерт вызываемый у некторых товарищей тем фактом, что доля менеджед-кода в студии с каждым годом увеличивается .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Kotlin - новый язык для JVM
От: hardcase Пират http://nemerle.org
Дата: 24.07.11 20:56
Оценка:
Здравствуйте, hattab, Вы писали:

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


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


H>Возможно у кого то действительно батхерт от сего факта, но лично я тут говорю о гуе, который на WPF лишь частично


Тебе что и говорят — тупо нет ресуров чтобы нафиг все разом на managed-код перевести.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[15]: Kotlin - новый язык для JVM
От: hattab  
Дата: 24.07.11 21:08
Оценка:
Здравствуйте, hardcase, Вы писали:

h> H>Ты хочешь сказать, что отсутствие документации по внутренним интерфейсам это проблема нативного кода? Я тебя правильно понял?


h> Может слышал про рефлектор? Позволяет ходить по управляемому коду без наличия исходников и понять как использовать те или иные интерфейсы при нулевом уровне документации.


Это теперь является оправданием отсутствия документации что-ли?

h> H>Возможно у кого то действительно батхерт от сего факта, но лично я тут говорю о гуе, который на WPF лишь частично


h> Тебе что и говорят — тупо нет ресуров чтобы нафиг все разом на managed-код перевести.


Так прикол же, Object browser менеджед, а дерево и ричедит в нем нативные . То есть на остальные контролы (в Object browser'е) ресурсов хватило, а на эти два нет
avalon 1.0rc3 rev 419, zlib 1.2.3
Re[4]: Kotlin - новый язык для JVM
От: MasterZiv СССР  
Дата: 25.07.11 07:17
Оценка:
On 20.07.2011 22:26, Курилка wrote:

> MZ>Как бы не понравится сложно: Java уже давно

> MZ>плесенью покрылась, и не в один слой.
> MZ>Что там у них Гай Стил делает -- не понимаю.
>
> А ты разве не в курсе? Давно уже Fortress <http://projectfortress.java.net/&gt; делает

OK, ну и где он, этот Fortres ?
Posted via RSDN NNTP Server 2.1 beta
Re[5]: Kotlin - новый язык для JVM
От: Курилка Россия http://kirya.narod.ru/
Дата: 25.07.11 07:28
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>OK, ну и где он, этот Fortres ?


Дык ты Гая спроси
Re[4]: Kotlin - новый язык для JVM
От: mima  
Дата: 25.07.11 12:25
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Option уродский из-за того, что "Some(4)==4" будет false. Без всяких ошибок во время компиляции.


Да, это они зря от Java унаследовали. Ошибка компиляции, или хотя бы предупреждение здесь не помешали бы. А вот писать авторазвёртывание исключительно для Option — переусложнять язык.

C>>>7) Именованные параметры, в том числе для туплов.

M>>Что имеется в виду?
C>
C>//Пример 1
C>def getPoint = (x=1,y=2,z=3)

C>val f = getPoint()
C>println(f.x);

C>//Пример 2
C>case class GeoPosition(val degLat : Int, val degLong : Int, 
C>   val height : Int, val minutesLat : Int, val minutesLong : Int, val ts : Timestamp);

C>x match {
C>    case GeoPosition(_, _, _, 11) => println("Высота 11 метров!!");
C>//Упс. Слегка промахнулись. Это не высота, а минуты широты.
C>...
C>}
C>


def getPoint = new {val x = 1; val y = 2; val z = 3}
val f = getPoint
println(f.x)


Это называется не тапл, а structural type.

Вo втором примере ошибка компиляции: кол-во параметров не совпадает. Но смысл ясен: именованные параметры в pattern matching не используются. Разговоры ходили, но будут делать или нет неясно. Пока же вместо case GeoPosition(height=11) писать case _ if x.height == 11. Ну или миллион других столь же уродливых способов, впрочем худо-бедно решающих свою задачу.

PM синтаксически тяжёл в Scala. Эти лишние case просто выносят мозг, потом невозможность сразу писать PM по аргументам, type inference, который подводит в самых неожиданных местах, приходится дописывать типы. Замечательно, если в Kotlin этого не будет.
Re[16]: Kotlin - новый язык для JVM
От: hardcase Пират http://nemerle.org
Дата: 25.07.11 14:03
Оценка:
Здравствуйте, hattab, Вы писали:

H>Здравствуйте, hardcase, Вы писали:


h>> H>Ты хочешь сказать, что отсутствие документации по внутренним интерфейсам это проблема нативного кода? Я тебя правильно понял?


h>> Может слышал про рефлектор? Позволяет ходить по управляемому коду без наличия исходников и понять как использовать те или иные интерфейсы при нулевом уровне документации.


H>Это теперь является оправданием отсутствия документации что-ли?


Это не является оправданием. Необфусцированный управляемый код вполне способен компенсировать ее отсутствие — ибо легко декомпилируем.

h>> H>Возможно у кого то действительно батхерт от сего факта, но лично я тут говорю о гуе, который на WPF лишь частично


h>> Тебе что и говорят — тупо нет ресуров чтобы нафиг все разом на managed-код перевести.


H>Так прикол же, Object browser менеджед, а дерево и ричедит в нем нативные . То есть на остальные контролы (в Object browser'е) ресурсов хватило, а на эти два нет


Не знаю о чем они там думали и почему так поступили, возможно какой-то внутренний код завязан на этот нативный контрол. Я лично создавал на WPF дерево (визуализация достаточно широкого и глубокого нечта) и косяков с производительностью не замечал.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[8]: Kotlin - новый язык для JVM
От: Jack128  
Дата: 25.07.11 18:05
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, hardcase, Вы писали:


H>>Долго? Это гмм скорее вопрос написания конвертера исходников Java -> Kotlin.


VD>А оно надо? Все в итоге в байткод преобурзауется. Будут писать новые модули на новом языке и все. Если старые нужно будет серьезно рефакторить, то тоже самое.


Надо, не надо — это вопрос. Вот вы например написали парсер шарпа чтобы можно было компилить шарповские и немерливские сорцы внутри одной сборки. Нафиг это надо было если всё равно все в итоге в байткод преобразуется? Нет, мне кажется логичным написать конвертер Java=>Kotlin.
Re[14]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.07.11 20:01
Оценка:
Здравствуйте, Silver_S, Вы писали:

S_S>переписывание всего WinAPI


Ты сам то в этот бред веришь?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: Kotlin - новый язык для JVM
От: Silver_S Ниоткуда  
Дата: 25.07.11 20:35
Оценка:
Здравствуйте, VladD2, Вы писали:

S_S>>переписывание всего WinAPI

VD>Ты сам то в этот бред веришь?
Ну самое нужное и часто используемое наверно осилят, если еще год до релиза. Все что касается GUI точно перепишут.
В сентябре можно будет узнать как быстро процесс продвигается.
Re[16]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.07.11 21:50
Оценка:
Здравствуйте, Silver_S, Вы писали:

S_S> Ну самое нужное и часто используемое наверно осилят, если еще год до релиза. Все что касается GUI точно перепишут.

S_S>В сентябре можно будет узнать как быстро процесс продвигается.

Да причем тут "осилят не осилят"? ВыньАПИ — это платформа. Она обеспечивает обратуню совместимость. Никто его из Винды так быстро не выкинит. Сначала должны вымереть все ВыньАПИ-приложения. А это произойдет еще ой как не скоро.

Никуда в ближайшие 5-10 лет ВыньАПИ не денется. Не выдумывай. И газет советских перед сном не читай.

Про переписывание дотнета в нэйтив — это тоже бред. Может быть создадут облегченный вариант CLR. Но это один фиг не отменяет наличия полного. И это все равно будет безопасный код и GC.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Kotlin - новый язык для JVM
От: Klatu  
Дата: 26.07.11 03:42
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Никуда в ближайшие 5-10 лет ВыньАПИ не денется. Не выдумывай. И газет советских перед сном не читай.


Могут и попытаться, у них там вечно завиральные идеи. Поиграются, набьют шишек и забросят.
Re[8]: Kotlin - новый язык для JVM
От: Klapaucius  
Дата: 26.07.11 07:51
Оценка:
Здравствуйте, Cyberax, Вы писали:

K>>Нет, там сделали какой-то набор ad-hoc подпорок, хотя все это должно решаться средствами языка.

C>Пофиг, зато удобно и практично.

И в чем удобство и практичность заключается? Как, например, сделать "safe call" не только по первому аргументу, а по двум? Т.е. val z = x + y, и чтоб z равнялась x + y если x и y не null и равнялось null в остальных случаях? Почему можно лифтить функции в nullable, а в List, например, нельзя?

K>>Кому он обязан-то? Если в язык вводятся АТД, то и сранение обычно делают структурным, а не ссылочным. В данном случае, разумеется, сравнивать значения разных типов — бессмысленно:

C>Это не очень подходит для ОО-языков.

Не то что не очень подходит — это вообще не ОО. Но это проблема ОО-языков, а не сравнения. Или, может быть, "scala" == "scala" в скале тоже false?
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[9]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 26.07.11 08:24
Оценка:
Здравствуйте, Klapaucius, Вы писали:

C>>Пофиг, зато удобно и практично.

K>И в чем удобство и практичность заключается? Как, например, сделать "safe call" не только по первому аргументу, а по двум? Т.е. val z = x + y, и чтоб z равнялась x + y если x и y не null и равнялось null в остальных случаях?
z= (x!=null && y!=null) ? x + y : null;


K>Почему можно лифтить функции в nullable, а в List, например, нельзя?

То есть?
Sapienti sat!
Re[17]: Kotlin - новый язык для JVM
От: Silver_S Ниоткуда  
Дата: 26.07.11 10:18
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Да причем тут "осилят не осилят"? ВыньАПИ — это платформа. Она обеспечивает обратуню совместимость. Никто его из Винды так быстро

VD>не выкинит. Сначала должны вымереть все ВыньАПИ-приложения. А это произойдет еще ой как не скоро.
VD>Никуда в ближайшие 5-10 лет ВыньАПИ не денется. Не выдумывай. И газет советских перед сном не читай.

Ну например, оставят старый API но объявят его deprecated .
С обратной совместимостью MS всегда старался делать все что возможно.

VD>Про переписывание дотнета в нэйтив — это тоже бред. Может быть создадут облегченный вариант CLR. Но это один фиг не отменяет наличия полного. И это все равно будет безопасный код и GC.


Это и не выглядит как отмена .NET, скорее как отмена/замена того что было полностью unmanaged и не было перспектив, что оно когда нибудь станет managed. Когда на компе работает парочка больших .NET приложений overhead незначительный. А если несколько десятков .NET процессов в виде каких-то мелких утилит, то уже оверхед нехороший.

Для .NET'чиков тут уже большой плюс, к новому API, без рукописных оберток, автоматом прилагаются *.WinMD файлы. На них можно делать ссылки из .NET проектов. Это файлы метаданных в формате .NET прямо на код который по эффективности и оверхеду скорее является unmanaged. Но стандарты оформления API скорее из .NET.
Куча проблем снимаются: Не надо ждать когда напишут рукописную обертку для .NET. При работе с голым COM не расчитанным на работу с .NET , через автоматические InteropAssembly, API может оказаться практически не юзабельным.
Re[11]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 26.07.11 16:04
Оценка:
Здравствуйте, Klapaucius, Вы писали:

C>>
C>>z= (x!=null && y!=null) ? x + y : null;
C>>

K>У этого вашего "удобства" недетское злое лицо. Обычно такое "удобство" называют неудобством. Выделенный жирным шрифтом код совсем не нужен и писать такой код не нужно. Котлин же заставляет писать ненужный код. Это — практично?
Ну можно вот так:
z = x ?+? y

Разбирается так: x? +? (y). Т.е. x? — вернуть null, если x==null. Затем инфиксный метод +?, который вернёт null, если аргумент его равен null'у.

K>Ну, оператор ?. "поднимает" U -> V в "контекст" Nullable и мы получаем по факту Nullable<U> -> Nullable<V> ну или сокращенно U? -> V?. Все это, понятно, в кавычках, потому что он ничего такого он разумеется не делает — это ad-hoc костыль, потому что авторы Котлина не читатели и страдают синдромом Уолта Брайта. Но у читателя возникают некоторые ассоциации. И тут сразу возникает вопрос — а почему только Nullable<_>, а не любой другой функтор? Наверное, когда котлиностроители начнут вставлять в язык какое-нибудь асинхронное программирование они возьмут и вцементируют в язык какой-нибудь оператор ||. или что-то наподобие.

Ты говоришь так, как будто в этом что-то плохое.

Я не против хорошо сделанного языка со специальными случаями.
Sapienti sat!
Re[5]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 26.07.11 16:13
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>Diamond-проблему как раз трейты решают, и это решение модульное, типобезопасное и непротиворечивое (см. статью Scalable component abstractions). Соглашусь, что несколько громоздкое из-за правил линеаризации. И ограничения есть — нетривиальные конструкторы недопустимы. Впрочем, если мы хотим позволить себе конструкторы с параметрами, тогда придётся навернуть систему типов и отношений между классами.

Вот только оно неудобное. Конструкторы реально достают, к примеру.

Diamond-проблема на практике во многом надумана, она встречается раз в пятилетку. Поэтому стоит ввести какое-то поведение для неё, но не трогать самые частые случаи использования наследования — частичные mixin'ы.

LCR>А вот то что я вижу в Котлине вызывает ряд вопросов:

LCR>
LCR>open class A(virtual var v : int)
LCR>open class B(v : Int) : A(v)
LCR>open class C(v : Int) : A(v)

LCR>class D(v : Int) : B(v), C(v) {
LCR>  override var v : Int
LCR>    get() = this<B>.v
LCR>    set(value) { this<B>.v = value }
LCR>}
LCR>


LCR>1. Требуется ли всегда вручную явно указать как разрешать противоречия? (Если да, то печаль.)

Да.

LCR>2. Сколько подобъектов A содержится в D (если 2, то это грабли, и тогда эти сопли не нужны, лучше использовать композицию, если 1, то см ниже.)

LCR>3. Как будем инициализировать подобъект А если напишем
Пока неизвестно.
Sapienti sat!
Re[5]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.07.11 21:18
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>Это как раз случай простого и неправильного решения для сложной проблемы. Вообще, я понимаю, об окончательном решении сейчас рано говорить — язык ещё даже не оформлен, не то что не реализован. Но если эта залепуха (а по другому я это "решение" назвать не могу) останется в релизе, то это будет полнейший фэйспалм. Можно понять Страуструпа — он лепил из того, что было, и опыта хождения по граблям множественного наследования не было никакого. Гослинг (а вслед и Хейлсберг) посмотрели на это, и сказали — нафиг надо и ввели ограничения, так что выразительность упала значительно, но и грабли были убраны. А что мы видим здесь? возврат к старому и злому С++.


А кто тебе сказал, что они не учли грабли С++?

LCR>Diamond-проблему как раз трейты решают, и это решение модульное, типобезопасное и непротиворечивое (см. статью Scalable component abstractions).


По словам авторов, их решение тоже решает эту проблему. И решает очень просто.

Кроме МН они еще отказались от полей. Зачем? Да чтобы не иметь той самой проблемы бриллиантового наследования. Введя одно очень простое правило — если в нескольких супертипах есть члены с одинаковой сигнатурой (независимо от глубины вложенности), то в подтипе эти члены должны быть переопределены. В купе с отсутствием свойств — это решает проблему брилиантового наследования.

LCR>Соглашусь, что несколько громоздкое из-за правил линеаризации.


Вот и авторы Котлина так посчитали.

LCR>И ограничения есть — нетривиальные конструкторы недопустимы.


Что значит нетривиальные?

Ну, да наличие ограничений — это точно не плюс.

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


Насколько я понимаю у этих орлов с конструкторами проблем быть не должно. Хотя нужно в этом разобраться.

LCR>Самый продвинутый известный мне вариант описан в статье CZ:MultipleInheritance Without Diamonds — а именно ввести 2 вида отношений: extends и requires, и разделить понятия subtype и subclass.


Дык, а не это ли делают интерфейсы и одиночное наследование?

LCR>А вот то что я вижу в Котлине вызывает ряд вопросов:

LCR>
LCR>open class A(virtual var v : int)
LCR>open class B(v : Int) : A(v)
LCR>open class C(v : Int) : A(v)

LCR>class D(v : Int) : B(v), C(v) {
LCR>  override var v : Int
LCR>    get() = this<B>.v
LCR>    set(value) { this<B>.v = value }
LCR>}
LCR>

LCR>1. Требуется ли всегда вручную явно указать как разрешать противоречия? (Если да, то печаль.)

В Котлине предлагается переопределять все конфликтующие по имени члены. В принципе разумное требование.

LCR>2. Сколько подобъектов A содержится в D (если 2, то это грабли, и тогда эти сопли не нужны, лучше использовать композицию, если 1, то см ниже.)


Как я понимаю — один.

LCR>3. Как будем инициализировать подобъект А если напишем

LCR>
LCR>open class A(virtual var v : int)
LCR>open class B(v : Int) : A(100)
LCR>open class C(v : Int) : A(200)

LCR>class D(v : Int) : B(v), C(v) { ... }
LCR>

LCR>Сколько раз будем вызывать конструктор для A? Я надеюсь, один раз, но тогда с каким аргументом? (Для Скалы пофиг, у всех трейтов одинаковые то бишь дефолтные конструкторы, поэтому выбор очевиден — вызываем один раз единственно имеющийся конструктор).

Вот это конечно большой вопрос. По идее вызов базового конструктора — это такой же конфликт, так что его нужно точно так же перекрывать.
В общем, надо звать сюда авторов и распрашивать.

LCR>Плюс, в Скале есть мембер-типы и селфтипы, что позволяет элегантно расправиться с Expression Problem. А Котлин?


Никогда не мог понять, что люди понимаю под этим термином.

Как я понимаю реально базовые классы за исключением первого преобразуются в интерфейсы.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.07.11 23:44
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>Самый продвинутый известный мне вариант описан в статье CZ:MultipleInheritance Without Diamonds — а именно ввести 2 вида отношений: extends и requires, и разделить понятия subtype и subclass.

LCR>Вкратце, любые ромбы запрещены, но чтобы сохранить выразительность и переиспользовать функционал, можно ввести отношение requires: C requires A. Означает это, что C становится абстрактным, будет подтипом A (то есть можно приводить ссылки), и конкретные наследники C должны будут также наследовать и от A.

Почитал (бегло). Сдается мне, что описанное по ссылке решение и то что предлагают ДжетБрэйновцы, если не одно и то же, то очень близкие решения.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 27.07.11 12:04
Оценка:
Здравствуйте, Klapaucius, Вы писали:

C>>Ну можно вот так...

K>Как можно, я думаю, все интересующиеся вопросом узнали. Только вот в Котлин, как я понимаю, нельзя, а авторы не особенно вопросами интересуются.
Почему это? Оператор "?" (вызов метода, если не null) в Котлине есть. Инфиксные методы есть. Что ещё нужно для счастья?

C>>Я не против хорошо сделанного языка

K>Никто не против хорошо сделанных языков, вот только встречаются хорошо сделанные языки чуть чаще, чем никогда.
Ну да. Есть Haskell, который идеальный. Но только на нём никто не пишет.

C>>со специальными случаями.

K>Вопрос в том, где остановится со всем этим ползучим частнослученизмом. А то умножать, например, целые числа оператором *, а числа с плавающей точкой — PLEASE MULTIPLY удовольствие сомнительное.
Не так. Если PLEASE MULTIPLY нужно будет использовать для седнионов, но для всех остальных будет "*" — тогда всё ОК. А именно в таком русле, видимо, Котлин и развивается.
Sapienti sat!
Re[14]: Kotlin - новый язык для JVM
От: Klapaucius  
Дата: 27.07.11 12:41
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Почему это? Оператор "?" (вызов метода, если не null) в Котлине есть. Инфиксные методы есть.


А, т.е. это был пример кода на Котлине, а не некий псевдокод с гипотетическим решением проблемы?

C>Что ещё нужно для счастья?


Много чего.

K>>Никто не против хорошо сделанных языков, вот только встречаются хорошо сделанные языки чуть чаще, чем никогда.

C>Ну да. Есть Haskell, который идеальный.

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

C>Но только на нём никто не пишет.


Ну почему же никто? Пишут и намного больше, чем на Котлин.

C>Не так. Если PLEASE MULTIPLY нужно будет использовать для седнионов, но для всех остальных будет "*" — тогда всё ОК. А именно в таком русле, видимо, Котлин и развивается.


Мы вроде-бы только что выяснили, что Котлин предоставляет решение вроде * не для всех остальных, а только для одного единственного случая. Не для такого экзотического, как седнионы, конечно, но, скажем, такого как кватернионы. Для всех остальных будут вариации PLEASE MULTIPLY.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[15]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 27.07.11 12:55
Оценка:
Здравствуйте, Klapaucius, Вы писали:

C>>Почему это? Оператор "?" (вызов метода, если не null) в Котлине есть. Инфиксные методы есть.

K>А, т.е. это был пример кода на Котлине, а не некий псевдокод с гипотетическим решением проблемы?
Я не уверен насчёт возможность определить оператор "+?" (т.е. возможно придётся использовать plus?), но оператор "?" точно в документации есть.

C>>Не так. Если PLEASE MULTIPLY нужно будет использовать для седнионов, но для всех остальных будет "*" — тогда всё ОК. А именно в таком русле, видимо, Котлин и развивается.

K>Мы вроде-бы только что выяснили, что Котлин предоставляет решение вроде * не для всех остальных, а только для одного единственного случая. Не для такого экзотического, как седнионы, конечно, но, скажем, такого как кватернионы. Для всех остальных будут вариации PLEASE MULTIPLY.
Пока что я вижу, что большинство моих личных потребностей Котлин, кажется, решает. И это мне нравится, даже если они реализованы как специальные случаи.

Мне не особо интересно, чтобы язык был полностью вытекающим из общего механизма без всяких исключений. А макросы меня откровенно пугают — я понимаю, что это очень мощная вещь, но я боюсь того, что накосячат на них Джамшуты Рамдисамрутаны.
Sapienti sat!
Re[17]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 27.07.11 13:32
Оценка:
Здравствуйте, Klapaucius, Вы писали:

K>>>А, т.е. это был пример кода на Котлине, а не некий псевдокод с гипотетическим решением проблемы?

C>>Я не уверен насчёт возможность определить оператор "+?" (т.е. возможно придётся использовать plus?),
K>Проблема-то в том, что нужно специальный оператор определять, а нужна возможность обходиться импеющимся.
Ну вмонтируют его в стандартную библиотеку. И что?

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

K>Ну, потребности-то зависят и от информированности в том числе. К примеру, когда ицелоп по ночам бьет — это интуитивно понятный недостаток. А то что радоваться нужно в наморднике — как недостаток может и не осознаваться. Ну привык человек к наморднику, а без намордника людей не видел.
Мы академий не кончали, и всё пишем на каких-то мэйнстримовых языках. Как-то: C++, Java, Scala, Erlang и прочих Питонах. Т.е. мои личные нужды примерно я себе представляю.

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

C>>А макросы меня откровенно пугают — я понимаю, что это очень мощная вещь, но я боюсь того, что накосячат на них Джамшуты Рамдисамрутаны.

K>Ну, допустим, пугают — так тут и без макросов можно обойтись.
Как именно?
Sapienti sat!
Re[6]: Kotlin - новый язык для JVM
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 27.07.11 15:01
Оценка:
VladD2,

LCR>>Самый продвинутый известный мне вариант описан в статье CZ:MultipleInheritance Without Diamonds — а именно ввести 2 вида отношений: extends и requires, и разделить понятия subtype и subclass.

LCR>>Вкратце, любые ромбы запрещены, но чтобы сохранить выразительность и переиспользовать функционал, можно ввести отношение requires: C requires A. Означает это, что C становится абстрактным, будет подтипом A (то есть можно приводить ссылки), и конкретные наследники C должны будут также наследовать и от A.

VD>Почитал (бегло). Сдается мне, что описанное по ссылке решение и то что предлагают ДжетБрэйновцы, если не одно и то же, то очень близкие решения.


Всё же не одно и то же. В Котлине не разделено отношение между классами на subtyping и subclassing и наследоваться можно без ограничений. В статье если A requires B, то наследуясь от A ты должен наследоваться и от B, иначе ошибка компиляции.

Впрочем, черканул им. Подождём ответа.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[18]: Kotlin - новый язык для JVM
От: Klapaucius  
Дата: 28.07.11 08:47
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>>>Я не уверен насчёт возможность определить оператор "+?" (т.е. возможно придётся использовать plus?),

K>>Проблема-то в том, что нужно специальный оператор определять, а нужна возможность обходиться импеющимся.
C>Ну вмонтируют его в стандартную библиотеку. И что?

Да в какую стандартную библиотеку-то? Вы пишете, что использовать готовый оператор (в данном случае +) нельзя, надо будет определять другой.

C>Мы академий не кончали


Ну начинается...

C>всё пишем на каких-то мэйнстримовых языках

C>Scala, Erlang

Вот уж мейнстрим так мейнстрим.

C>Т.е. мои личные нужды примерно я себе представляю.


Писать на каждый чих (x!=null && y!=null) ? : null ? Ну и потребности у вас!

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


Да не надо делать все что угодно, надо делать все что удобно. Ну, допустим, вам удобство написания программ не особо интересно — вы программисту деньги платите а он пусть изворачивается как хочет, но мне непонятна мотивация авторов Котлина — они хотят сделать язык, на котором им будет удобно писать IDEA, но делают они неудобно сами же для себя. Им что, при написании IDEA методы с параметрами не нужно будет вызывать?

C>>>А макросы меня откровенно пугают — я понимаю, что это очень мощная вещь, но я боюсь того, что накосячат на них Джамшуты Рамдисамрутаны.


Да, и кстати, разработчики языка-то кого боятся? Самих себя? IDEA Джамшуты разве пишут?

K>>Ну, допустим, пугают — так тут и без макросов можно обойтись.

C>Как именно?

Да обычными option и синтаксическим сахаром для любых монад/аппликативных функторов. С idiom brackets например, это будет выглядеть как-то так: z = (| x + y |)
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[6]: Kotlin - новый язык для JVM
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 28.07.11 10:09
Оценка:
Cyberax,

LCR>>Diamond-проблему как раз трейты решают, и это решение модульное, типобезопасное и непротиворечивое (см. статью Scalable component abstractions). Соглашусь, что несколько громоздкое из-за правил линеаризации. И ограничения есть — нетривиальные конструкторы недопустимы. Впрочем, если мы хотим позволить себе конструкторы с параметрами, тогда придётся навернуть систему типов и отношений между классами.

C>Вот только оно неудобное. Конструкторы реально достают, к примеру.

Как говаривал Нильс Бор, "Да, согласен, моя теория безнадёжно плохая. Предложите лучше."

На данный момент ввести конструкторы для трейтов (с разрешением вызова в порядке аналогичном линеаризации — это уже неоднократно предлагалось) означало бы поставить крест на дальнейшем развитии. Кто знает, может быть кому-нибудь из команды разработчиков придёт мысль обобщить отношение extends или with так, что проблемы с инициализацией уйдут в небытие По крайней мере, сейчас есть 3.5 известных мне способа обойти проблему с конструкторами в трейтах — можно подобрать подходящий.
(Вон в джаве сплошь и рядом лепят метод initialize, и ничего, считают это паттерном даже...)

C>Diamond-проблема на практике во многом надумана, она встречается раз в пятилетку. Поэтому стоит ввести какое-то поведение для неё, но не трогать самые частые случаи использования наследования — частичные mixin'ы.


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

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

1. Существование интерфейсов как сущности — нафиг бы они сдались, если бы можно было оставить полноценные классы

2. Постоянно встречающийся совершенно дурацкий паттерн MyInterface <- MyInterfaceImpl, с единственной (!) реализацией. А почему нельзя просто использовать класс MyInterfaceImpl? Ну конечно, вдруг получится, что надо наследовать от чего-то ещё и от MyInterfaceImpl, и мы окажемся в неудобном положении тогда.

3. Якобы best practice "никогда не наследуйте реализацию, используйте делегирование". Ребята, а в чём проблема-то, если можно всегда отпочковать наследника, подмешать нужный функционал из других классов, переопределить что надо и вперёд? Увы, с интерфейсами и одиночным наследованием такой фокус не провернёшь, вот и вылезла "бест практика".

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

Дискасс, или всё и так очевидно?
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[19]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 28.07.11 11:09
Оценка:
Здравствуйте, Klapaucius, Вы писали:

K>>>Проблема-то в том, что нужно специальный оператор определять, а нужна возможность обходиться импеющимся.

C>>Ну вмонтируют его в стандартную библиотеку. И что?
K>Да в какую стандартную библиотеку-то? Вы пишете, что использовать готовый оператор (в данном случае +) нельзя, надо будет определять другой.
Естественно, для оператора "+" не определено поведение с nullable-аргументом.

C>>Т.е. мои личные нужды примерно я себе представляю.

K>Писать на каждый чих (x!=null && y!=null) ? : null ? Ну и потребности у вас!
Честно говоря, я не помню, чтобы у меня было много подобного кода. Оператор "?" вот сильно поможет.

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

K>Да не надо делать все что угодно, надо делать все что удобно. Ну, допустим, вам удобство написания программ не особо интересно — вы программисту деньги платите а он пусть изворачивается как хочет, но мне непонятна мотивация авторов Котлина — они хотят сделать язык, на котором им будет удобно писать IDEA, но делают они неудобно сами же для себя. Им что, при написании IDEA методы с параметрами не нужно будет вызывать?
Нужно. Но так, чтобы в месте вызова менять поведение в зависимости от null-абельности аргумента — это вряд ли. Это уже плохой дизайн.

C>>>>А макросы меня откровенно пугают — я понимаю, что это очень мощная вещь, но я боюсь того, что накосячат на них Джамшуты Рамдисамрутаны.

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

K>>>Ну, допустим, пугают — так тут и без макросов можно обойтись.

C>>Как именно?
K>Да обычными option и синтаксическим сахаром для любых монад/аппликативных функторов. С idiom brackets например, это будет выглядеть как-то так: z = (| x + y |)
Во-во. Прекрасная иллюстрация к тому, что Котлин делает правильный выбор.
Sapienti sat!
Re[7]: Kotlin - новый язык для JVM
От: Klapaucius  
Дата: 28.07.11 12:32
Оценка:
Здравствуйте, Lazy Cjow Rhrr

А я вот считаю, что любой сабтайпинг и след. отношение наследования — это грабли. В принципе. И как грабли не перекрашивай — астролябии из них не получить.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[19]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.07.11 14:44
Оценка:
Здравствуйте, Klapaucius, Вы писали:

C>>>>Я не уверен насчёт возможность определить оператор "+?" (т.е. возможно придётся использовать plus?),

K>>>Проблема-то в том, что нужно специальный оператор определять, а нужна возможность обходиться импеющимся.
C>>Ну вмонтируют его в стандартную библиотеку. И что?

K>Да в какую стандартную библиотеку-то? Вы пишете, что использовать готовый оператор (в данном случае +) нельзя, надо будет определять другой.


Кстати, в котлине вроде как список операторов раширять нельзя. Но можно любую бинарную фукнцию как оператор (без приоритета) использовать. Так что +? не прокатит, если сами авторы его не встроят. А значит гарантированно, что всех случаев перекрыто не будет.

C>>всё пишем на каких-то мэйнстримовых языках

C>>Scala, Erlang

K>Вот уж мейнстрим так мейнстрим.


+1

K>Да не надо делать все что угодно, надо делать все что удобно. Ну, допустим, вам удобство написания программ не особо интересно — вы программисту деньги платите а он пусть изворачивается как хочет, но мне непонятна мотивация авторов Котлина — они хотят сделать язык, на котором им будет удобно писать IDEA, но делают они неудобно сами же для себя. Им что, при написании IDEA методы с параметрами не нужно будет вызывать?


Думаю, что они исходят из того, что с null-абл типами им придется иметь дело редко. Вот и наедятся, что встроенная защита от наступания на грабли закроет 99% проблем.

Идея поднимать работу с null в монады конечно красива, но боюсь что это приведет к серьезному снижению производительности при работе с null (а значит почти со всеми классами Явы). Тут нужно чтобы человек мог как-то осознанно выбирать подъем в монаду.

C>>>>А макросы меня откровенно пугают — я понимаю, что это очень мощная вещь, но я боюсь того, что накосячат на них Джамшуты Рамдисамрутаны.


K>Да, и кстати, разработчики языка-то кого боятся? Самих себя? IDEA Джамшуты разве пишут?


Хороший вопрос. Но макросов они реально боятся. Это факт.

K>Да обычными option и синтаксическим сахаром для любых монад/аппликативных функторов. С idiom brackets например, это будет выглядеть как-то так: z = (| x + y |)


+1

Надо будет к немерлу прикрутить
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Kotlin - новый язык для JVM
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 28.07.11 17:35
Оценка:
Cyberax,

C>>>Diamond-проблема на практике во многом надумана, она встречается раз в пятилетку. Поэтому стоит ввести какое-то поведение для неё, но не трогать самые частые случаи использования наследования — частичные mixin'ы.

LCR>>Я бы сказал несколько иначе: мы научились жить в кандалах, однако раз в пятилетку очередная примерка новых кандалов вдруг переполняет чашу терпения.
C>Нет, сложный diamond, как и глубокие иерархии классов вообще, реально не нужны.

Да, мне тоже нравится комбинировать код из небольших самостоятельных кусочков. Но долго оставаться на этом уровне не получится, слишком много ручной работы. Здравый смысл подсказывает вводить новые абстракции, объединять, унифицировать, а значит и строить иерархии. В некоторых предметных областях развесистые иерархии неизбежны. Вон, хотя бы попробуй конфигурацию разложить — сразу выявляются опции самых разных цветов и вкусов, общие куски, зависимости (подчас очень хитрые). Эклипс тот же, там от Reconciler-а столько детей, что...
В-общем, я бы не горячился с подобным заявлением.

C>Обычно интерфейсы сравнительно небольшие по объёму, что не создаёт проблем с их полной реализацией.

Тоже спорное утверждение. Насколько необычны интерфейсы List, Collection, Map? А копнёшь в сторону BeanContextServices, так список методов и на экран не умещщается.

C>Вообще-то, описанное тобой — это антипаттерн. Если есть только одна реализация, то она просто и используется. При необходимости делается рефакторинг.

Да, именно так я сам и стараюсь поступать. Но проблема существует.

LCR>>3. Якобы best practice "никогда не наследуйте реализацию, используйте делегирование". Ребята, а в чём проблема-то, если можно всегда отпочковать наследника, подмешать нужный функционал из других классов, переопределить что надо и вперёд? Увы, с интерфейсами и одиночным наследованием такой фокус не провернёшь, вот и вылезла "бест практика".

C>При том, что имеем сильное связывание между классами. Реально сильное — и очень часто в предке начинает появляться код, специально заточенный на наследников.

Ну соглашусь, да, наследование — вид сильной связи, нужно уменьшать связность. МН делает возможность связать классы ещё крепче, это расплата за возможность комбинироать. Оставляем статус "бест" вышеназванному "практису".

Можно заканчивать, или ещё есть что добавить?
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[8]: Kotlin - новый язык для JVM
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 28.07.11 17:58
Оценка:
VladD2,

VD>По сему, возможно, что все эти разговоры о МН не так уж и актуальны. Правда в Немерле есть средства которые позволяют легко добавлять нужную реализацию куда нужно. Так что возможно, именно это снимает острую необходимость в МН.


Вообще от наследования люди ищут 2 вещи — унификации и повторного использования кода. Унификацию реализуется через интерфейсы, а макросы обладают намного большей гибкостью в смысле повторного использования кода. Где нет макросов, есть только три возможности для повторного использования — наследование кода, вызов кода и использование конструкций языка (для создания своего, тут как бы мы повторно используем if-ы и for-ы). Макросы добавляют четвёртый путь — трансформацию кода. Так что знаешь, Влад, я не удивлён, что тебе МН не понадобилось
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[9]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.07.11 18:47
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>Вообще от наследования люди ищут 2 вещи — унификации и повторного использования кода. Унификацию реализуется через интерфейсы, а макросы обладают намного большей гибкостью в смысле повторного использования кода. Где нет макросов, есть только три возможности для повторного использования — наследование кода, вызов кода и использование конструкций языка (для создания своего, тут как бы мы повторно используем if-ы и for-ы). Макросы добавляют четвёртый путь — трансформацию кода. Так что знаешь, Влад, я не удивлён, что тебе МН не понадобилось


Не то что бы совсем не понадобилось, но острой необходимости не чувствуется.

В прочем, аппетит приходит во время еды. Когда есть фича, то и дизайн идет по-другому.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 28.07.11 18:55
Оценка:
Здравствуйте, Klapaucius, Вы писали:

C>>Естественно, для оператора "+" не определено поведение с nullable-аргументом.

K>Как же так? А почему для метода blahBlahBlah(this, x, y) при таком вот использовании maybenull?.blahBlahBlah(x, y) вдруг — рраз! — и определено такое поведение для первого аргумента, а для всех прочих аргументов вдруг не определено?
Ещё как определено. "maybenull?.blahBlahBlah(isnull, y)" вызовет ошибку времени компиляции, аргументы методов по умолчанию тоже notnull — ровно как и аргумент "this". И для включения null'абельности нужно явно это указывать.

C>>Честно говоря, я не помню, чтобы у меня было много подобного кода. Оператор "?" вот сильно поможет.

K>Если есть общая установка, что такой вот код — это нормально, аналогичный бессмысленный код других видов также будет присутствовать, как же иначе-то?
Нету бессмысленного кода тут. Всё вполне стройно.

K>Котлин белает выбор между

K>z = (x!=null && y!=null) ? x + y : null
K>и
K>z = (| x + y |)
K>в пользу первого.
Варианта тут, как минимум, три. Я уже предложил "z = x ?plus? y", который лично мне более понятен и удобен.
Sapienti sat!
Re[9]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 28.07.11 19:09
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>Да, мне тоже нравится комбинировать код из небольших самостоятельных кусочков. Но долго оставаться на этом уровне не получится, слишком много ручной работы. Здравый смысл подсказывает вводить новые абстракции, объединять, унифицировать, а значит и строить иерархии. В некоторых предметных областях развесистые иерархии неизбежны. Вон, хотя бы попробуй конфигурацию разложить — сразу выявляются опции самых разных цветов и вкусов, общие куски, зависимости (подчас очень хитрые). Эклипс тот же, там от Reconciler-а столько детей, что...

Где именно там глубокие иерархии?

LCR>В-общем, я бы не горячился с подобным заявлением.

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

C>>Обычно интерфейсы сравнительно небольшие по объёму, что не создаёт проблем с их полной реализацией.

LCR>Тоже спорное утверждение. Насколько необычны интерфейсы List, Collection, Map? А копнёшь в сторону BeanContextServices, так список методов и на экран не умещщается.
А это всё из-за неправильного дизайна и отсутствия extension-методов. Очень часто можно реализовать небольшое ядро, на которое уже вешаются куча функций-утиллит. Ну и иногда, действительно, сложность бывает реально нужна.

C>>Вообще-то, описанное тобой — это антипаттерн. Если есть только одна реализация, то она просто и используется. При необходимости делается рефакторинг.

LCR>Да, именно так я сам и стараюсь поступать. Но проблема существует.
Это не повод делать антипаттерн проще в использовании.
Sapienti sat!
Re[9]: Kotlin - новый язык для JVM
От: Klapaucius  
Дата: 29.07.11 10:16
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>Нирвана.


Это, я надеюсь, сарказм.

LCR>Классы типов.


Это штука довольно неплохая, мне нравится, но тут все явно не без проблем. Во-первых, проблема многопараметричности более-менее решается только примерно через 15 лет экспериментов с ними с помощью ассоциированных типов, при том, что не понятно, насколько такое решение вопроса окончательное — потому что предыдущее окончательное решение уже, похоже, отправляется на свалку истории (см. ниже). Вернее все отправляется и отправляется уже который год, потому как полную реализацию TF никак не могут доделать, впрочем, в GHC 7.2, вроде как, реализация будет уже полной.
Во-вторых, все это непродуманное взаимодействие классов типов с системой модулей, из-за которого сейчас некоторые товарищи одно из главных преимуществ классов типов — неинтрузивность — вообще предлагают не использовать, т.е. orphan instances объявляют плохой практикой. И это так, навскидку, если подумать подольше можно и еще что-нибудь вспомнить.

LCR>Функциональные зависимости.


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

С другой стороны, тут хоть какие-то перспективы просматриваются, а сабтайпинг мучают десятилетиями, и всякий раз, когда кажется, что все в порядке, неожиданно появляется ручка грабель и больно бъет по незащищенному месту. (даже грабли без ручки — сабтайпинг без наследования реализации — как-то умудряются ударить, чудеса просто) по-моему, уже пора закапывать давно.

LCR>Типы как первоклассные значения.


Не понял даже, что под этим подразумевается. Исчисление конструкций?

LCR>Типы как теоремы.


Ну, это вообще к предмету обсуждения не относится.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[10]: Kotlin - новый язык для JVM
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 01.08.11 13:43
Оценка:
Cyberax,

LCR>>Да, мне тоже нравится комбинировать код из небольших самостоятельных кусочков. Но долго оставаться на этом уровне не получится, слишком много ручной работы. Здравый смысл подсказывает вводить новые абстракции, объединять, унифицировать, а значит и строить иерархии. В некоторых предметных областях развесистые иерархии неизбежны. Вон, хотя бы попробуй конфигурацию разложить — сразу выявляются опции самых разных цветов и вкусов, общие куски, зависимости (подчас очень хитрые). Эклипс тот же, там от Reconciler-а столько детей, что...

C>Где именно там глубокие иерархии?
В Эклипсе то?! Ну ладно, если тебя забанили в поиске по докам, то держи
org.eclipse.core.commands
org.eclipse.emf.mapping [/utl]<br />
[url=http://help.eclipse.org/galileo/topic/org.eclipse.emf.doc/references/javadoc/org/eclipse/emf/exporter/package-tree.html] org.eclipse.emf.exporter

org.eclipse.emf.importer
org.eclipse.gmf.codegen.gmfgen
Глубина иерархии везде как минимум = 4. Что касается реконсилера, то каждый мало-мальски полезный редактор должен IReconcilingStrategy и IReconcilingStrategyExtension, и чаще всего это один и тот же класс. Вот, собственно, и ромб.

C>>>Обычно интерфейсы сравнительно небольшие по объёму, что не создаёт проблем с их полной реализацией.

LCR>>Тоже спорное утверждение. Насколько необычны интерфейсы List, Collection, Map? А копнёшь в сторону BeanContextServices, так список методов и на экран не умещщается.
C>А это всё из-за неправильного дизайна и отсутствия extension-методов. Очень часто можно реализовать небольшое ядро, на которое уже вешаются куча функций-утиллит. Ну и иногда, действительно, сложность бывает реально нужна.
Неправильный дизайн? Ну я знаю библиотеку коллекций с правильным дизайном: scala collections. Чтобы построить такую библиотеку, extension-методов явно недостаточно. В Скале, как ты скорее всего знаешь, higher-kinded типы появились не из блажи создателей, а из-за потребности подавить дублирование кода, сохранив при этом остальные свойства библиотеки.

Extension-методы есть довольно слабый инструмент абстрагирования. Вот простейший пример:
class A {
  void m1() {}
  void m2() {}
  void m() { m1(); m2() }
}
class B extends A {
  void m1() {}
  void m2() {}
  void m() { m2(); m1() }
}

Метод m() в обоих классах зависит от публичного контракта, но выделить extension нифига не выйдет. Trait-ы мощнее.

C>>>Вообще-то, описанное тобой — это антипаттерн. Если есть только одна реализация, то она просто и используется. При необходимости делается рефакторинг.

LCR>>Да, именно так я сам и стараюсь поступать. Но проблема существует.
C>Это не повод делать антипаттерн проще в использовании.
Логики не понял. МН не делает антипаттерн проще в использовании — он исключает этот антипаттерн. Рефакторинг — это тоже костыль, по большому счёту.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[10]: Kotlin - новый язык для JVM
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 01.08.11 14:55
Оценка:
Klapaucius,

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

K>С другой стороны, тут хоть какие-то перспективы просматриваются, а сабтайпинг мучают десятилетиями, и всякий раз, когда кажется, что все в порядке, неожиданно появляется ручка грабель и больно бъет по незащищенному месту. (даже грабли без ручки — сабтайпинг без наследования реализации — как-то умудряются ударить, чудеса просто) по-моему, уже пора закапывать давно.


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

LCR>>Типы как первоклассные значения.

K>Не понял даже, что под этим подразумевается. Исчисление конструкций?
Я неграмотно выразился. Я имел ввиду, что можно вообразить типы как значения для функций над типами (type functions).

LCR>>Типы как теоремы.

K>Ну, это вообще к предмету обсуждения не относится.
Да, действительно, мы о выразительности вели речь.
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[9]: Kotlin - новый язык для JVM
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 01.08.11 20:33
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А что ты так нервно моргаешь то? Исходно студия была целиком анменеджед.


Не совсем. Некоторые куски, например тулбокс или окно свойств, изначально были managed.
... << RSDN@Home 1.2.0 alpha 5 rev. 1530 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[14]: Kotlin - новый язык для JVM
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 01.08.11 20:33
Оценка:
Здравствуйте, Silver_S, Вы писали:

S_S> До сентября об этом думать рано — о том что будет с нативом,COM,... У MS сейчас в самом разгаре глобальный проект — переписывание всего WinAPI, WinC++, SLR (System Language Rantime — что то среднее между managed и unmanaged).


Это разные департаменты и разные люди. Все эти страсти — это windiv. А студией devdiv занимается. В котором сейчас основной мейнстрим — Roslyn.
... << RSDN@Home 1.2.0 alpha 5 rev. 1530 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[21]: Kotlin - новый язык для JVM
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.08.11 14:15
Оценка:
Здравствуйте, Klapaucius, Вы писали:

K>Ну, я думаю, что они зря на это надеются. Если бы они писали с нуля все библиотеки — nullable был бы только там, где он нужен, а они-то будут вызывать методы джававских библиотек, которые будут им возвращать nullable всегда и везде.


Не совсем так. Стандартные библиотеки можно будет проаннотировать автоматичной тулзой.
... << RSDN@Home 1.2.0 alpha 5 rev. 1530 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[22]: Kotlin - новый язык для JVM
От: Klapaucius  
Дата: 04.08.11 10:44
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Не совсем так. Стандартные библиотеки можно будет проаннотировать автоматичной тулзой.


Да, какую-то часть ненужных nullable можно будет исключить таким способом, но не думаю, что существенную. Если мне не изменяет память, в языке Nice, в котором подход к null был примерно, если не в точности, таким же, как в Котлин, была возможность для программиста вручную проаннотировать таким образом любой внешний Ява-код. Не заметил описания аналогичной возможности в Котлин.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[11]: Kotlin - новый язык для JVM
От: Klapaucius  
Дата: 04.08.11 10:59
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

LCR>В-общем я с тобой согласен, хотя я идеальным вариантом для себя вижу систему типов обобщающую ОО с его сабтайпингом.


Я бы не стал так сразу связывать ООП с сабтайпингом. В случае, скажем так, java-oop, мы конечно говорим ОО — подразумеваем сабтайпинг, но в общем случае это не так.

LCR>Ну просто потому что некоторые задачи довольно естественно решаются с использованием ООП.


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

LCR>Я имел ввиду, что можно вообразить типы как значения для функций над типами (type functions).


А, имеется в виду только омега.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[23]: Kotlin - новый язык для JVM
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 04.08.11 12:00
Оценка:
Здравствуйте, Klapaucius, Вы писали:

K>Не заметил описания аналогичной возможности в Котлин.


О таких технических деталях говорить пока рановато.
... << RSDN@Home 1.2.0 alpha 5 rev. 1530 on Windows 7 6.1.7601.65536>>
AVK Blog
Re[12]: Kotlin - новый язык для JVM
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 04.08.11 14:27
Оценка:
Klapaucius,

LCR>>В-общем я с тобой согласен, хотя я идеальным вариантом для себя вижу систему типов обобщающую ОО с его сабтайпингом.

K>Я бы не стал так сразу связывать ООП с сабтайпингом. В случае, скажем так, java-oop, мы конечно говорим ОО — подразумеваем сабтайпинг, но в общем случае это не так.

Тебе показалось, что я связал ООП с сабтайпингом. Я понимаю, что в общем случае сабтайпинг — это отношение <: между типами, которое можно определять произвольным образом. Хотя чаще всего от этого отношения требуют подстановочность. В той же джаве помимо наследования есть ещё double <: int для некоторых контекстов (поэтому назвали по-другому).


LCR>>Ну просто потому что некоторые задачи довольно естественно решаются с использованием ООП.

K>Например? При этом, интересно узнать примеры именно в контексте полезности сабтайпинга, потому что введение в ООП начинается обычно с описания недостатков сабтайпинга (вроде примеров с наследованием геом. фигур), но с примерами его полезности дела обстоят гораздо хуже.

Чуть позже, ок?
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re: Демка для эксперементов online
От: Jack128  
Дата: 28.12.11 18:57
Оценка:
http://kotlin-demo.jetbrains.com/

Любопытно, что есть даже преальфа компилятора в javascript.
Re[2]: Демка для эксперементов online
От: dotneter  
Дата: 30.12.11 07:51
Оценка:
Здравствуйте, Jack128, Вы писали:


J>Любопытно, что есть даже преальфа компилятора в javascript.

Dart можно смело закапывать.
Talk is cheap. Show me the code.
Re[3]: Демка для эксперементов online
От: Курилка Россия http://kirya.narod.ru/
Дата: 30.12.11 08:14
Оценка:
Здравствуйте, dotneter, Вы писали:

D>Здравствуйте, Jack128, Вы писали:



J>>Любопытно, что есть даже преальфа компилятора в javascript.

D>Dart можно смело закапывать.

У меня демка эта так и не смогла открыться в Chrome, так что закапывать яб не спешил.
Может, конечно, джетбрейновцы байкотируют хром вместе с дартом, но какое-то это, как минимум, странное решение...
Re[4]: Демка для эксперементов online
От: Jack128  
Дата: 30.12.11 08:39
Оценка:
Здравствуйте, Курилка, Вы писали:

К>У меня демка эта так и не смогла открыться в Chrome, так что закапывать яб не спешил.

К>Может, конечно, джетбрейновцы байкотируют хром вместе с дартом, но какое-то это, как минимум, странное решение...

Если хочешь таки поиграться — переключись на компиляцию на серверной стороне. Врядли байкот какой то, скорее всего банальный глюк.
Re[5]: Kotlin - новый язык для JVM
От: A13x США  
Дата: 30.12.11 09:30
Оценка:
Здравствуйте, Jack128, Вы писали:


J>Если ты читал ссылку заглавную, то там написано, что JetBrains 200 мегобайт сорцов на джаве. 200 СОРЦОВ. Это безумная цифра, на самом деле. Скорее всего их реально за№@%ла жаба. ПРи таком кол-ве сорцов и людей, которые более менее в теме языков прог-ния(а сам понимаешь, в компании, которая

делает IDE специалистов по ЯП достаточно) написать новый ЯП под туже платформу — это не самая глупая идея.

Интересно, как же они будут писать IDE на новом языке? БОльшая часть идеи — platform API, которая в общих чертах не сильно меняется, его не трогают, чтобы не порушить совместимость со сторонними плагинами.
Кажется, что такое переписывание, если оно вообще состоится, будет идти довольно медленно — особенно учитывая, что в начале будет крайне небольшое количество программистов на котлине
Re[6]: Kotlin - новый язык для JVM
От: Cyberax Марс  
Дата: 30.12.11 09:33
Оценка:
Здравствуйте, A13x, Вы писали:

A>Кажется, что такое переписывание, если оно вообще состоится, будет идти довольно медленно — особенно учитывая, что в начале будет крайне небольшое количество программистов на котлине

На Котлине, очевидно, будут писать новые плугины. Pattern matching, к примеру, идеально подходит для вещей типа анализаторов кода.
Sapienti sat!
Re[5]: Демка для эксперементов online
От: Курилка Россия http://kirya.narod.ru/
Дата: 30.12.11 09:34
Оценка:
Здравствуйте, Jack128, Вы писали:

J>Здравствуйте, Курилка, Вы писали:


К>>У меня демка эта так и не смогла открыться в Chrome, так что закапывать яб не спешил.

К>>Может, конечно, джетбрейновцы байкотируют хром вместе с дартом, но какое-то это, как минимум, странное решение...

J>Если хочешь таки поиграться — переключись на компиляцию на серверной стороне. Врядли байкот какой то, скорее всего банальный глюк.


Ну в ФФ я это дело запустил, в хроме же (14-м) переключиться возможности вообще нет, оно тупо виснет. Играться желания нет, просто довольно странный косяк.
Re: Kotlin - новый язык для JVM
От: QrystaL Украина  
Дата: 11.01.12 18:31
Оценка:
Обновление:
Веб-редактор кода на Kotlin, с примерами и компиляцией в JavaScript
Re: Kotlin - новый язык для JVM
От: Курилка Россия http://kirya.narod.ru/
Дата: 14.02.12 21:10
Оценка:
Здравствуйте, QrystaL, Вы писали:

QL>Kotlin


QL>Интересно, займет ли он свою нишу?


А вот и исходники для желающих...
Re[2]: Kotlin - новый язык для JVM
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.02.12 04:02
Оценка:
Здравствуйте, Курилка, Вы писали:

К>А вот и исходники для желающих...


Авторы Котлина отказались от множественного наследования в пользу трэйтсов? Вижу в их исходниках трэйтсы и интерфейсы. Вроде как "они были не нужны".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Kotlin - новый язык для JVM
От: Klapaucius  
Дата: 20.02.12 11:18
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

K>>Например? При этом, интересно узнать примеры именно в контексте полезности сабтайпинга, потому что введение в ООП начинается обычно с описания недостатков сабтайпинга (вроде примеров с наследованием геом. фигур), но с примерами его полезности дела обстоят гораздо хуже.


LCR>Чуть позже, ок?


Ну, полгода прошло, как там с примерами полезности сабтайпинга?
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re: Kotlin - новый язык для JVM
От: QrystaL Украина  
Дата: 03.10.12 08:56
Оценка:
Обновление:

Kotlin M3.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.