
Vladimir
03.07.2018
10:43:35

dimiii
03.07.2018
10:45:19
*богомерзкой грыдлы

Sergey
03.07.2018
10:45:41
В гредле есть пробемы с инкрементальной сборкой многомодульных проектов. Во первых - долгие up-to-date чеки (он всегда считает хэш всех джарников), во вторых - инкрементальная компиляция не всегда работает между модулями (из за того что api гредла не позволяет по хорошему определить что кокнретно изменилось в джарнике). В JPS таких проблем нет (JPS - это внутреняя собиралка в идее)

Google

dimiii
03.07.2018
10:45:56
гредл и есть проблема

Sergey
03.07.2018
10:46:15
например есть проект где сборка в гредле при любом изменении занимает несколько минут. В JPS аналогичная сборка - несколько секунд

Alexander
03.07.2018
10:46:30
Я бы посмотрел как вы получите повторяемые сборки без gradle

Sergey
03.07.2018
10:46:55
кстате про котлин: начиная с 1.2.60 (который пока eap), jps поддерживает мультиплатформенный котлин (common, jvm, js)
в том числе инкрементально (с некоторыми нюансами)

dimiii
03.07.2018
10:58:54

Sergey
03.07.2018
11:04:58
Как у него с документацией?
Немного документация есть в help-е идеи, но врядли она нужна. А работает это как обычно: импортируем проект из гредла и запускаем make project. (Галка Delegate build / run actions to gradle при этом должна быть снята, но она снята по умолчанию).
до 1.2.60, make project для MPP проектов всегда собирал через гредл, независимо от галки описанной выше. Теперь галка (снова) учитвается.

dimiii
03.07.2018
11:07:12

Sergey
03.07.2018
11:07:33
есть ?

dimiii
03.07.2018
11:07:44
?

Sergey
03.07.2018
11:08:42
недавно был хакатон, как раз был проект который для временного решения: kts скрипт который описывает идеевский проект, чтобы можно было его настроить и собрать без гредла. но это чисто временное и очень ограниченно решение. не знаю правда будет ли он публично доступен

Evgeny
03.07.2018
11:33:51

Google

Alexander
03.07.2018
11:34:37
Я время от времени пользуюсь внутренней сборкой идеи, но честно говоря, я совершенно не готов рассматривать всерьез систему сборки без декларативного dsl.

Sergey
03.07.2018
11:36:49
вот как пример

Alexander
03.07.2018
11:40:34
Ну там в скрипте есть всякие lazy - это уже немного напрягает.
Кроме того, в градле главное - задачи и их зависимости. Опять же, без этого никуда.

Виталий
03.07.2018
11:41:32
Что делает * когда я передаю vararg принятый классом в функцию?
оно работает )) но что именно он делает ?

Alexander
03.07.2018
11:42:04
Он превращает массив в то, что можно скормить vararg

Виталий
03.07.2018
11:42:08
class UserMenu(private val data: GeneralData, vararg text: AppText) {
val actor = create(*text)

Alexander
03.07.2018
11:42:32
Масив делает вид, что он просто параметры, переданные через запятую.

Виталий
03.07.2018
11:42:36

Alexander
03.07.2018
11:43:05
Типа того. Я не знаю, что там внутри творится, но с точки зрения кода - да

Виталий
03.07.2018
11:43:27

Konstantin
03.07.2018
13:47:13
привет. вопрос - почему лямбда в качестве последнего аргумента функции может выноситься за скобки? меня смущает синтаксис
чем обосновано
когда 1 аргумент выглядит симпатично, вместо func( { a } ) = func{ a }, но func( a, {b} ) = func (a){b} ?

Alexander
03.07.2018
13:49:32

Maxim
03.07.2018
13:49:45
Вероятно сделано так, чтобы в случае многострочной лямбды не тащить куда-то вниз закрывающую круглую скобку.

Bogdan
03.07.2018
13:50:03

Google

Konstantin
03.07.2018
13:50:11
глядя на код я вижу метод с 1 аргументом. печаль

Alexander
03.07.2018
13:51:01

Bogdan
03.07.2018
13:51:03

Alexander
03.07.2018
13:52:46

Konstantin
03.07.2018
13:53:07
а несколько выносятся?
a, {b}, {c} ?

Alexander
03.07.2018
13:53:57
Только последняя. И тут уже действительно валидный кейс, чтобы не выносить вообще.

Konstantin
03.07.2018
13:54:08
ясн, спасибо за прояснение

Alexander
03.07.2018
14:13:56
Там огромный пласт задач по генерации DSL с помощью этих лямбд вынесенных решается
Когда несколько лямбд лучше не выносить, а еще лучше имена явным образом писать

Bogdan
03.07.2018
14:15:40

Alexander
03.07.2018
14:17:31
Вот только что писал такой код. Все равно путанница возникает. Лучше каждый параметр на отдельной строке и закрывающую круглую скобку тоже.

Ilya
03.07.2018
14:47:00
Что взять под REST API ktor или spring и почему?

Quantum Harmonizer
03.07.2018
14:47:36

Kirill
03.07.2018
14:50:32
val a = Array(N) { Array(N) { (0..9).random() } }
5 5 5 5 5 5 5 5 5 5
4 4 4 4 4 4 4 4 4 4
1 1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0
3 3 3 3 3 3 3 3 3 3
8 8 8 8 8 8 8 8 8 8
4 4 4 4 4 4 4 4 4 4
6 6 6 6 6 6 6 6 6 6
1 1 1 1 1 1 1 1 1 1
4 4 4 4 4 4 4 4 4 4

Ilya
03.07.2018
14:50:43

Kirill
03.07.2018
14:50:50
Как сделать чтобы вызвал 100 раз, а не 10?

Google

Quantum Harmonizer
03.07.2018
14:51:21

Ilya
03.07.2018
14:52:43

Quantum Harmonizer
03.07.2018
14:52:49

Alexander
03.07.2018
14:53:02
Если совсем без бэкграунда, то да

Ilya
03.07.2018
14:53:03

Alexander
03.07.2018
14:53:13
Спринг - это такая вещь с большим наследием

Igor
03.07.2018
14:59:51

Kirill
03.07.2018
15:00:19
Не, то же самое. Функция вот так выглядит:

Kirill
03.07.2018
15:03:19
на ktor.io :)
а гибернейт с ним норм работает или там лучше другую ормку подыскать?

Quantum Harmonizer
03.07.2018
15:03:36
я брал kwery, но пришлось форкнуть и допилить


Andrey
03.07.2018
15:04:14
привет. вопрос - почему лямбда в качестве последнего аргумента функции может выноситься за скобки? меня смущает синтаксис
Скорее всего пришло из функциональных ЯП. Чего-нибудь типа Haskell. Там функции каррированные всегда, а применение функции к аргументу обозначается пробелом.
Например f 1 обозначает применение функции f к литералу 1
В Kotlin такой синтаксис возможен только для лямбд, притом несколько негомогенно:
fun <A, B, C> compose(f: (A) -> B): ((B) -> C) -> (A) -> C = { g -> { g(f(it)) } }
fun main(args: Array<String>) = println(
compose<String, Int, String> { it.length }() { it.toString() }("foo")
)
Если убрать () из строки compose<String, Int, String> { it.length }() { it.toString() }("foo"), то не скомпилируется, хотя анализатор кода в IDEA говорит, что () не нужны.

Kirill
03.07.2018
15:04:51
проверенный временем и вск такое не?)

Quantum Harmonizer
03.07.2018
15:05:04
почему?
генерация кода, конфиги, вот это всё

Bogdan
03.07.2018
15:09:05
так ты опять каждый раз создаешь новый рандом, вынеси его за лямду

Alexander
03.07.2018
15:10:21

Google

Bogdan
03.07.2018
15:10:21

Kirill
03.07.2018
15:10:39

Bogdan
03.07.2018
15:11:06

Konstantin
03.07.2018
15:11:45
Скорее всего пришло из функциональных ЯП. Чего-нибудь типа Haskell. Там функции каррированные всегда, а применение функции к аргументу обозначается пробелом.
Например f 1 обозначает применение функции f к литералу 1
В Kotlin такой синтаксис возможен только для лямбд, притом несколько негомогенно:
fun <A, B, C> compose(f: (A) -> B): ((B) -> C) -> (A) -> C = { g -> { g(f(it)) } }
fun main(args: Array<String>) = println(
compose<String, Int, String> { it.length }() { it.toString() }("foo")
)
Если убрать () из строки compose<String, Int, String> { it.length }() { it.toString() }("foo"), то не скомпилируется, хотя анализатор кода в IDEA говорит, что () не нужны.
я для людей стараюсь писать а не для роботов которые классы в голове могут откомпилировать
но спасибо за объясняшки
пытался как то хаскель попробовать, пару раз даже, но дальше 3-й страницы ниразу не ушел


Mikhail
03.07.2018
15:13:39
Именно поэтому лямбды имеют такой клевый синтаксис
что позволяет писать очень красивый код

Alexander
03.07.2018
15:13:56

Mikhail
03.07.2018
15:15:46
А насчет хаскелл - если не ударяться в теорию и плагины для компилятора достаточно простой язык, не сложнее джавы, на мой взгляд

Kirill
03.07.2018
15:16:05
А что у ктора с di?

Bogdan
03.07.2018
15:16:57

Andrey
03.07.2018
15:17:35

Alexander
03.07.2018
15:17:59
Я не пробовал всерьез, но у меня друг на нем работает. В общем, там как вода и масло, джависты плюются от хаскела и наоборот. С нашей точки зрения у них синтаксис упоротый и возможности сильно ограничены, а им без паттерн матчинга вообще жизнь не мила.
Совершенно разный стиль и разные задачи