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

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

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

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

64 ответов

94 просмотра

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

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

Согласен про 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>. Нормальный синтаксис. Но надо смотреть, как оно ляжет, это да.

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта