Size: a a a

2019 February 12

SZ

Sergey Zolotov in Kotlin JVM
Victor Alenkov
просто там выше написали, что мол если нужен rest, то берите ktor. Вот и стало интересно - почему именно ktor, а не что-то другое... чем он лучше, что так однозначно
ktor это либа поверх netty/CIO/undertow движков, которая от себя дает удобный DSL для роутинга, пайплайны и пару приятных зависимостей типа конфигов
источник

VP

Vladimir Petrakovich in Kotlin JVM
Victor Alenkov
просто там выше написали, что мол если нужен rest, то берите ktor. Вот и стало интересно - почему именно ktor, а не что-то другое... чем он лучше, что так однозначно
Ну там вопрос стоял, брать ktor или нет.
Сравнивать интерфейсы проблематично, но только в ktor всё сделано на корутинах "нативно".
А так конечно для этой роли вариантов много в JVM-мире.
источник

VA

Victor Alenkov in Kotlin JVM
Sergey Zolotov
ktor это либа поверх netty/CIO/undertow движков, которая от себя дает удобный DSL для роутинга, пайплайны и пару приятных зависимостей типа конфигов
поверх undertow пока не получается: https://github.com/ktorio/ktor/issues/178
не влили ещё
источник

RI

Ruslan Ibragimov in Kotlin JVM
Я упёрся на уровне http/2
источник

RI

Ruslan Ibragimov in Kotlin JVM
Не хватает знаний, надо ещё один заход сделать
источник

ТБ

Тимур Бухараев in Kotlin JVM
В котлине вот так реализован getOrPut для ConcurrentMap
/**
* Concurrent getOrPut, that is safe for concurrent maps.
*
* Returns the value for the given [key]. If the key is not found in the map, calls the [defaultValue] function,
* puts its result into the map under the given key and returns it.
*
* This method guarantees not to put the value into the map if the key is already there,
* but the [defaultValue] function may be invoked even if the key is already in the map.
*/
public inline fun <K, V> ConcurrentMap<K, V>.getOrPut(key: K, defaultValue: () -> V): V {
   // Do not use computeIfAbsent on JVM8 as it would change locking behavior
   return this.get(key)
           ?: defaultValue().let { default -> this.putIfAbsent(key, default) ?: default }

}

И написано что не используйте computeIfAbsent.
Вот интересно, почему?
источник

RI

Ruslan Ibragimov in Kotlin JVM
Тимур Бухараев
В котлине вот так реализован getOrPut для ConcurrentMap
/**
* Concurrent getOrPut, that is safe for concurrent maps.
*
* Returns the value for the given [key]. If the key is not found in the map, calls the [defaultValue] function,
* puts its result into the map under the given key and returns it.
*
* This method guarantees not to put the value into the map if the key is already there,
* but the [defaultValue] function may be invoked even if the key is already in the map.
*/
public inline fun <K, V> ConcurrentMap<K, V>.getOrPut(key: K, defaultValue: () -> V): V {
   // Do not use computeIfAbsent on JVM8 as it would change locking behavior
   return this.get(key)
           ?: defaultValue().let { default -> this.putIfAbsent(key, default) ?: default }

}

И написано что не используйте computeIfAbsent.
Вот интересно, почему?
java6?
источник

ТБ

Тимур Бухараев in Kotlin JVM
что java6?
источник

RI

Ruslan Ibragimov in Kotlin JVM
Kotlin по умолчанию работает поверх апи и байткода jdk6
источник

RI

Ruslan Ibragimov in Kotlin JVM
А, сорри, читаю коммент
источник

VP

Vladimir Petrakovich in Kotlin JVM
Тимур Бухараев
В котлине вот так реализован getOrPut для ConcurrentMap
/**
* Concurrent getOrPut, that is safe for concurrent maps.
*
* Returns the value for the given [key]. If the key is not found in the map, calls the [defaultValue] function,
* puts its result into the map under the given key and returns it.
*
* This method guarantees not to put the value into the map if the key is already there,
* but the [defaultValue] function may be invoked even if the key is already in the map.
*/
public inline fun <K, V> ConcurrentMap<K, V>.getOrPut(key: K, defaultValue: () -> V): V {
   // Do not use computeIfAbsent on JVM8 as it would change locking behavior
   return this.get(key)
           ?: defaultValue().let { default -> this.putIfAbsent(key, default) ?: default }

}

И написано что не используйте computeIfAbsent.
Вот интересно, почему?
Чтобы поведение не отличалось на разных JVM
источник

ТБ

Тимур Бухараев in Kotlin JVM
а, то есть это для совместимости?
а если работаешь сразу на java8, то разумнее все таки использовать computeIfAbsent, получается?
источник

ТБ

Тимур Бухараев in Kotlin JVM
да, очень похоже на правду, спасибо
источник

VP

Vladimir Petrakovich in Kotlin JVM
Тимур Бухараев
а, то есть это для совместимости?
а если работаешь сразу на java8, то разумнее все таки использовать computeIfAbsent, получается?
Да. Разве что getOrPut не сгенерит лямбду, но я не думаю, что где-то это может быть критичным
источник
2019 February 15

А

Андрей in Kotlin JVM
Подскажите пожалуйста, что я делаю не так? Ktor не хочет передавать content length?
источник

В

Вафель in Kotlin JVM
Андрей
Подскажите пожалуйста, что я делаю не так? Ktor не хочет передавать content length?
А это нормально что у вас идея HttpClient не видит?...
источник

В

Вафель in Kotlin JVM
Хотя тип выводит правильно... Странно
источник

А

Андрей in Kotlin JVM
Вафель
А это нормально что у вас идея HttpClient не видит?...
Видит, только почему-то красным отображает
источник

В

Вафель in Kotlin JVM
А, стоп, так это же ваше апи возвращает 411, ктор тут не причём
источник

А

Андрей in Kotlin JVM
Да, но почему такое может быть? Ktor может не передавать content-length?
источник