169 похожих чатов

Мне одному показалось, что то, что анонсировал вчера Елизаров -

ну как-то такое себе... Сначала они объявляют нэймспейсы (я не понял, зачем) через очень странный синтаксис ("namespace<Type" очень уж выглядит как функция). Потом также добавляются мультиресиверы, но вместо человеческого "(Type1, Type2)" мы должны сделать обычный экстеншен, но не обычный экстеншен, потому что у него есть "with<Type2>" (и опять выглядит как что-то очень странное) (и вот так куча with, или подтипы через запятую?). Допекли меня декораторы, которые очевидны и легкочитаемы чуть более, чем никак (во всяком случае, мне так кажется). Это при том, что сам по себе декоратор очень легко можно сделать и без дополнительных модификаторов у функции (как мне кажется).

Или это я чего-то не понимаю, и это всё не просто так?

64 ответов

38 просмотров

> Это при том, что сам по себе декоратор очень легко можно сделать и без дополнительных модификаторов у функции Можно, но круто, когда в языке есть поддержка декораторов с ёмким синтаксисом.

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

Согласен про namespace

видать, бреслав там совсем в альтер ушел

Мне ещё интересно, кто это реализовывать будет, если мажорные баги годами висят без решений.

Алексей-Овсянников Автор вопроса
Denys
> Это при том, что сам по себе декоратор очень лег...

Да не, я имею ввиду, что декоратору НЕ обязательно иметь модификатор - он итак же получается принимает на вход лямбду и максимум - один ресивер

Ну и смотреть на синтаксис со слайдов бессмысленно. Эти фичи неизвестно когда будут, будут ли вообще, и уж тем более как именно будут выглядеть.

Mike (деньги не клянчу)
Мне ещё интересно, кто это реализовывать будет, ес...

Давайте тогда на улучшения забьём, пока баги не пофиксят :)

Алексей-Овсянников Автор вопроса
Vladimir Petraković
Вы просто, видимо, не сталкивались с тем, что комб...

сталкивался, но конкретно кейс из презентации - ОЧЕНЬ узкий

Алексей-Овсянников Автор вопроса
Vladimir Petraković
Ну и смотреть на синтаксис со слайдов бессмысленно...

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

Алексей Овсянников
ну я так понимаю, они хотели нескольких зайцев уби...

мне еще показалось что это некий выпад в сторону питонистов мол вот вам декораторы как у вас, переходите к нам

Алексей Овсянников
ну я так понимаю, они хотели нескольких зайцев уби...

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

Алексей Овсянников
сталкивался, но конкретно кейс из презентации - ОЧ...

Там просто нет хорошего примера, как плохо всё может быть

Алексей Овсянников
понял

Александр вот активно учавствует в обсуждениях и к нему прислушиваются. :)

Алексей Овсянников
ну я так понимаю, они хотели нескольких зайцев уби...

Ну да, зачем делать маленькую обособленную фичу, если можно сделать обобщённую и решить сразу несколько проблем

Mike (деньги не клянчу)
Я правда так считаю.

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

Алексей-Овсянников Автор вопроса
Denys
Александр вот активно учавствует в обсуждениях и к...

а ссылки вот на issues не добавили на ютуб

Andrew Mikhaylov
Дык так и происходит сейчас, и выше уже обсудили, ...

Вроде и да, в ченджлоге вижу по сто фиксов на релиз, но до багов, от которых страдаю лично я, как-то не доходит)

Алексей Овсянников
потому что это не всегда хорошо

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

Vladimir Petraković
Ну да, зачем делать маленькую обособленную фичу, е...

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

Алексей-Овсянников Автор вопроса
Vladimir Petraković
Нехорошо - это накидывать много мелких несвязанных...

у тебя есть задача мультиресиверов, а ты делаешь это через декораторы. Это, во-первых, неочевидно, во-вторых - некрасиво (ну серьёзно), в третьих - костыльно:)

Алексей Овсянников
у тебя есть задача мультиресиверов, а ты делаешь э...

Если одно идеально ложится на другое (более обобщённое), как это можно назвать костылём? with() и лямбды с ресивером - это тоже костыль?

Алексей Овсянников
у тебя есть задача мультиресиверов, а ты делаешь э...

> неочевидно Ровно до момента, когда оно в ход пойдёт. > некрасиво Субъективщина и тоже вопрос привычки, КМК > костыльно Тем более субъективщина.

Andrew Mikhaylov
> неочевидно Ровно до момента, когда оно в ход пой...

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

Алексей-Овсянников Автор вопроса
Алексей Овсянников
у тебя есть задача мультиресиверов, а ты делаешь э...

неочевиндо - потому что кто там внутри что ещё будет декарировать и как, не ясно, а тебе НЕ НУЖНО лишнего в функции, если ты ожидаешь в ней два ресивера Некрасиво - потому что это получается как-то сбоку от основного ресивера и риторика мультиресивера, где все ресиверы одинаковые смещается в сторону мультиресивера с primary ресивером (имхо) (классы с primary constructor в пример, но там это было уместно) костыльно - потому что это НЕ аннотация, НЕ функция, НЕ объект, но пишется через @, с типом, но при этом без каких-либо скобочек, а в итоге получается всё равно как-то сбоку

Sergey Barmin
ну насчет некрасиво соглашусь, выглядит больше как...

Ну это ж не финальный вариант, фидбек собирают, вперёд :)

Алексей Овсянников
неочевиндо - потому что кто там внутри что ещё буд...

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

Алексей Овсянников
неочевиндо - потому что кто там внутри что ещё буд...

а вот интересно, как часто нужны одинаково важные ресиверы, по сравнению с решением с primary ресивером чаще всего, доп ресивер нужен для контекста какого-то, а сама уже ф-ию всё же вызывается на каком-то интсансе чаще код будет такой: with(a) { b.foo()} чем такой with(a) { with(b) { foo() } } и тогда, решение с декоратором with выглядит намного логичнее

Алексей-Овсянников Автор вопроса
Oleg Yukhnevich
а вот интересно, как часто нужны одинаково важные ...

я согласен, что с этого ракурса всё ок, НО как декоратор это накладывает главную проблему всех этих apply/run/with - неизвестно, что у тебя в итоге получится в ресиверах и у чего конкретно ты будешь вызывать какой-либо метод

Oleg Yukhnevich
а вот интересно, как часто нужны одинаково важные ...

я конечно хз как для большинства, но почему-то под мультиресиверами я не подразумеваю никогда конструкцию реализуемую через with { with {} } просто чтобы получить два класса в контексе, эта задача то в общем то уже решена и хочется просто упростить запись я почему-то всегда думал что проблема именно в функциональном типе мультиресивера

Sergey Barmin
я конечно хз как для большинства, но почему-то по...

Какие ваши доказательства Елизаров просил накидать им юзкейсов :)

Sergey Barmin
я конечно хз как для большинства, но почему-то по...

эта задача то в общем то уже решена и хочется просто упростить запись - что имеешь в виду?

Sergey Barmin
я конечно хз как для большинства, но почему-то по...

Проблема скорее в невозможности объявления функции, которая должна быть доступна только в контексте более одного ресивера (кроме member extensions)

Sergey Barmin
что with { with{}} можно написать уже сейчас

только если это твой класс - тогда через member extension а если это View андроида, или ещё что?

Oleg Yukhnevich
только если это твой класс - тогда через member ex...

а пример можно? не очень понимаю проблему

Sergey Barmin
а пример можно? не очень понимаю проблему

val (View, Int).dp get() = this * resources.displayMetrics.density

Sergey Barmin
а пример можно? не очень понимаю проблему

Пример со слайда: экстеншен для Float, который должен работать только в контексте View (класс из фреймворка)

Aλex Sokol
val (View, Int).dp get() = this * resources.displa...

классический пример, только его и вижу)

Алексей-Овсянников Автор вопроса
Aλex Sokol
зачем что-то придумывать ?

Справедливости ради, это - новый синтаксис, конфликтующий с компонентами

Aλex Sokol
val (View, Int).dp get() = this * resources.displa...

не очень понтяон в таком коде, что такое this тогда?

Алексей-Овсянников Автор вопроса
Aλex Sokol
зачем что-то придумывать ?

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

Aλex Sokol
this@Int*

а как ты вью умножил на денсити?

Aλex Sokol
this@Int*

а почему int если первым идет view? как это вычисляется?

Pavel Erokhin
а почему int если первым идет view? как это вычисл...

эм with(view) View@ { with(int) Int@ { println(this@Int * resources ...) } }

Aλex Sokol
эм with(view) View@ { with(int) Int@ { ...

да, если в этом виде мы понимаем что происходит, то выше код не очевиден просто

Pavel Erokhin
да, если в этом виде мы понимаем что происходит, т...

почему? запретить просто к this обращаться

Aλex Sokol
почему? запретить просто к this обращаться

прсото надо заставить маркировать то к чему обращаешься

Pavel Erokhin
да, если в этом виде мы понимаем что происходит, т...

Всё так. А в случае декораторов вроде хорошо понятно, что во что nested, и в каком порядке мог бы быть обход this-ов. И то по-моему шла речь, что unqualified this, вероятно, будет запрещён.

Кто мешает @with<Type1, Type2>. Нормальный синтаксис. Но надо смотреть, как оно ляжет, это да.

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
Всем доброго дня! Подскажите может кто использовал связку Pagebuilder + Clientsetting. Сами параметры с типом pagebuilder в модуле Clientsetting работают нормально, можно такж...
Александр Добриков
12
А почему в си некоторые вещи работают с двойными кавычками некоторые с одинарными? Нельзя было все сделать с одними или чтоб работало с разными? например чтоб выводить строки ...
.
15
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Good afternoon, I just started learning php in conjunction with mysql. I am registering a system on a local Mamp server using phpMyAdmin. It seems to be stored normally in the...
ManGo
1
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Добрый день! Такая проблема возникла, написал код на Python, который компилирует, собирает и запускает файлы .s А в случае работы нужно то же самое делать для .asm Чем эти фа...
A Mori
5
Всем привет! procedure TForm1.FormCreate(Sender: TObject); type TStartEnd = record S: Byte; E: Byte; end; var a, b: TStartEnd; begin {1} a.S := 1; {2} a.E := 2; ...
Руслан Михайлович
10
Карта сайта