
Mayor
22.03.2018
22:32:57
рил удобно

balolam
22.03.2018
22:33:07
Народ, у вас оффтоп пошел, конфа по Kotlin. Пишите хотя бы в одно сообщение)

Va
22.03.2018
22:33:11
вообще, оффтопим

Google

Va
22.03.2018
22:33:41
нельзя так

Ivan
22.03.2018
23:32:35

Тимур
23.03.2018
05:58:30
Можно все автогенеренные методы на этот механизм перевести, включая data.toString и data.equals
Вдруг тебе не подходит стандартный паттерн toString, взял и сделал свой.

Boris
23.03.2018
06:05:28
тут такое дело, что в теории это звучит очень разумно, но нужно понимать, что для такого механизма на порядок сложнее делать тулинг и повышается сложность языка. Я так думаю, что из за этого и макросы не завозят. Хотя какой-то инструмент генерации как плагин к компилятору, но сгенерированный код будет сложно поддерживать в иде, автодополения всякие и тд

Тимур
23.03.2018
06:20:41
Imho это не намного сложнее уже существующего annotation processing. По сути это очень схожий механизм, но дающий большую гибкость и удобство.
Проблема с макросами, что они могут встретиться где угодно и загрязняют весь язык. Сложно бороться с языком, где можно написать #define true false.
А тут все достаточно аккуратно локализовано. Ну да, есть такой-то метод equals, он генерится по такому то шаблону, а не написан руками, но это его личные особенности. Это никак не влияет на весь остальной код, который как вызывал этот equals, так и вызывает, и ему по барабану что у него внутри.

Boris
23.03.2018
06:25:25
так аннотойшн процессинг и не поддерживается в общем случае
нигде
про макросы: нет, про такие макросы даже речи нет, никто в здравом уме не будет делать такие макросы в современном языке, речь исклюительно и типизированных возможно основанных на аст и тд макросах

Тимур
23.03.2018
06:29:40
Проблема существующих языков, по крайней мере с теми, с которыми я сталкивался, что они имеют крайне слабые возможности для метапрограммирования.
По сути даже сериализацию нельзя сделать с существующими языковыми возможностями, приходится наворачивать внешние тулы.
И annotation processing из существующих тулов в этом плане выглядит самым удобным и разумным подходом. Но у него, к сожалению, ограниченные возможности.
Если б был такой механизм с аннотациями, то в плане метапрограммирования это был бы просто космос.

Boris
23.03.2018
06:31:10
ну вроде обещают что-то на независимом от платформы уровне сделать
со временем

Quantum Harmonizer
23.03.2018
07:06:57
вот, блин, на гомоиконных языках это, наверное, не проблема

Igor
23.03.2018
07:23:56
Ну да макросы там писать хорошо, а вот все остальное… “на любителя”

Google

Alexey
23.03.2018
07:31:05
Imho это не намного сложнее уже существующего annotation processing. По сути это очень схожий механизм, но дающий большую гибкость и удобство.
Проблема с макросами, что они могут встретиться где угодно и загрязняют весь язык. Сложно бороться с языком, где можно написать #define true false.
А тут все достаточно аккуратно локализовано. Ну да, есть такой-то метод equals, он генерится по такому то шаблону, а не написан руками, но это его личные особенности. Это никак не влияет на весь остальной код, который как вызывал этот equals, так и вызывает, и ему по барабану что у него внутри.
А если делать макросы как в скалке сделали? Мол все локализовано в одном месте и нельзя сделать что то типа #define true false.
В итоге макрос можно рассматривать как чистую функцию.
А вот с аннотациями надо еше писать плагины к ide
Ну вобщем с аннотациями и у нам те же проблемы


Тимур
23.03.2018
07:36:43
Если кодогенерация на аннотациях будет проходить как одна из фаз обычной компиляции, то не надо никаких плагинов.

Alexey
23.03.2018
07:46:09

Mikhail
23.03.2018
07:48:03
а потом еще че нить куда нибудь не так сгенерируется - и привет clean build, прощай фокус на задаче и непрерывный workflow

Boris
23.03.2018
07:51:28
Да, понятно почему этого нет в языке
Инлайн функции очень лайтовый вариант макросов
К слову, кодогенерировать лучше на лету, тогда всё гарантии интерфейсов сохраняются, а генерируешь реализацию
Нет проблем с иде
Можно и во время компиляции, но все равно придерживаться этого правила: генерировать только реализацию и никогда интерфейсы и всё будет ок

Alexey
23.03.2018
07:57:04
А как сказать идеи что тут будет сгенерирована реализация?

Boris
23.03.2018
07:57:15
А зачем?

Тимур
23.03.2018
07:57:45

Boris
23.03.2018
07:58:03
Реализацию не надо инстанцировать руками

Vladimir
23.03.2018
07:58:15
На android всякие Room и Dagger же так и работают?

Boris
23.03.2018
07:58:33

Тимур
23.03.2018
07:59:26

Alexey
23.03.2018
08:01:28

Google

Mikhail
23.03.2018
08:06:52
На android всякие Room и Dagger же так и работают?
но все равно, в Room, Dagger, Autovalue и иже с ними есть момент, когда надо сгенерированную реализацию связать с интерфейсом. В Dagger это биндинг DaggerApplicationComponent как минимум, в AutoValue - указание AutoValue_<имя обьекта> в фабричных методах. В Room тоже где-то такое есть

Тимур
23.03.2018
08:08:28


Alexey
23.03.2018
08:30:15
Я не очень в курсе что там в скале
Что мне нравится в кодогенерации на основе аннотаций - что этот подход не требует вносить какую-то сложную поддержку в язык, никаких марсианских конструкций, сложных для парсинга человеками
Вместо сложной языковой фичи, просто отдельная штука, прикрученная сбоку, которая выдает тебе незатейливые структуры с метаинфой
И ты на обычном языке обычными if-ами и for-ами генеришь то что тебе надо
И все это просто, как табуретка: делай раз, делай два, делай три.
Тот же reflection, только в complie time.
Ну так и есть вобщем то в скале, reflection api только на уровне компиляции

Boris
23.03.2018
08:48:46

Тимур
23.03.2018
09:09:00
Тимур Бухараев:
Ну она будет знать, что если такая-то аннотация стоит, то такой то метод будет сгенерирован и не надо ругаться на его отсутствие.
Она может запустить код генератора и посмотреть на результат.

Денис
23.03.2018
09:10:15
Только как иде поймет генерацию?
Для идеи есть ломбок-плагин же, например.
Мне не очень нравится усложнение тулинга, которое следует за этим подходом, но это решаемо на практике, и примеры есть.

Тимур
23.03.2018
09:12:24
Если ограничить scope куда генератор может дотянуться, чтобы он не лазил куда попало, а видел только мету и outputstream для будущего тела метода, то запустить генератор можно быстро и просто.

Maxim
23.03.2018
09:15:30

Alexey
23.03.2018
09:17:30

Maxim
23.03.2018
09:18:23

Mayor
23.03.2018
09:18:27

Alexey
23.03.2018
09:18:56

Mayor
23.03.2018
09:19:08
у меня с iOS клики прилетают с 1-2.50$ за 1 клик)

Dmitry
23.03.2018
09:19:10

Quantum Harmonizer
23.03.2018
09:20:09

Sergey
23.03.2018
09:20:27

Mayor
23.03.2018
09:21:11
люди просто зачастую и покупают андроид-телефоны чтоб скачивать бесплатно апкшечки с хрома

Maxim
23.03.2018
09:21:12
Я о том, что принятие решения о том, саппортить или нет не стоит исходя из статистики.
Если лень саппортить, то не надо искать причин.

Boris
23.03.2018
09:21:12

Google

Костя
23.03.2018
09:21:20

Mayor
23.03.2018
09:21:22
не считаю это плюсом для разработчиков

Костя
23.03.2018
09:21:26
просто интерес

Quantum Harmonizer
23.03.2018
09:21:31
это какой ?
Nexus 5X. Понятно, что он из прошлого, но это лучше любого последнего самсунга или чего-то такого.

Mayor
23.03.2018
09:22:47
да, самсунг вообще не понятно зачем покупают

Костя
23.03.2018
09:23:00
у меня был он, крутой девайс, мне очень нравился, жалко только словил бутлуп
там бывает у них это (

Quantum Harmonizer
23.03.2018
09:23:11

Mayor
23.03.2018
09:23:24
лежит рядом S6 галактика, работает хуже чем 5й айфон

Boris
23.03.2018
09:23:39

Mayor
23.03.2018
09:23:56
а приложения которые были вшиты вендором начали скачивать сами по себе хрен пойми что, и добавили рекламу на экран блокировки

Boris
23.03.2018
09:24:06
Правда к котлину никакого отношения не имеет

Mikhail
23.03.2018
09:24:18

Quantum Harmonizer
23.03.2018
09:24:38

Vitalii
23.03.2018
09:24:50

Mayor
23.03.2018
09:24:52
я сам 6м пользуюсь))

Денис
23.03.2018
09:24:55

Mayor
23.03.2018
09:25:15
не могу не согласится что он дитчайше лагает

Konstantin
23.03.2018
09:25:18

Google

Boris
23.03.2018
09:25:43

Mayor
23.03.2018
09:25:44
но глянуть на S6 того же года (а вроде и позже), начинаешь понимать что лагает уже и не так дико

Костя
23.03.2018
09:25:52

Mikhail
23.03.2018
09:25:56
Лг этим вообще грешит
Это проблема была 6P и 5X нексусов, у меня 6P вон сгорел также. Гуглы даже тем кто из их стора покупал эти девайсы меняли на пиксели первого поколения

Konstantin
23.03.2018
09:26:14

Mayor
23.03.2018
09:26:46
6/6плюс вообще такие переходные телефоны, я изначально не видел в них смысла
до сих пор не могу пользоватся одной левой рукой телефоном, пока ем например

Sergey
23.03.2018
09:28:20
@kotlin_mobile <- welcome

Boris
23.03.2018
09:28:32
Думаю телефоны можно обсуждать в мобильном чате ?

Mikhail
23.03.2018
09:30:16
ну чтож вы так плохо к оффтопу относитесь? Тут же не слак с каналами на любой вкус

Boris
23.03.2018
09:31:20

Mikhail
23.03.2018
09:35:35

Sergey
23.03.2018
09:37:39
а чо бекендеры в мобилках не шарят? ?

Mikhail
23.03.2018
09:38:28

Alexandr
23.03.2018
09:49:16
Всем привет. У меня есть пара Pair<ArrayList<Assessment>, ArrayList<Assessment». Можно как-то в одном цикле пройти сначала по first, а потом по second ??

Руслан
23.03.2018
09:50:43
(pair.first + pair.second).map {}

Vyacheslav
23.03.2018
09:52:58
Парни, начал фигачить проект на джаве, оказалось нужно было на котле
как быстро его переевести в котл

Руслан
23.03.2018
09:53:19
ctrl+shift+k