Size: a a a

Kotlin Community

2019 December 11

BP

Bogdan Panchenko in Kotlin Community
Vladimir Petrakovich
HTTP-клиент в java.net.http считается старой либой? А там в реализации вагон package-private классов и методов.
Что-то не сходится 🤔
Она очень старая
источник

QH

Quantum Harmonizer in Kotlin Community
Bogdan Panchenko
Согласен. Но я не думал что приходится объяснять что  private package покрывает маленькую долю юзкейсов и лучше сразу сделать нормально а не городит велосипеды из других языков, private package считается костылём
Не увидел ни одного непредвзятого инженерного аргумента. «Костыли», «велосипеды», «считается». Всё.
источник

VP

Vladimir Petrakovich in Kotlin Community
Bogdan Panchenko
Она очень старая
Настолько старая, что выкатили только в JDK 10
источник

VP

Vladimir Petrakovich in Kotlin Community
Точнее по факту в 11
источник

BP

Bogdan Panchenko in Kotlin Community
Quantum Harmonizer
Не увидел ни одного непредвзятого инженерного аргумента. «Костыли», «велосипеды», «считается». Всё.
А я не услышал аргументов за, кроме твоего одного кейса. Давай не будем подстраивать язык под конкретного человека. Аргументы мне сложно приводит так как с телефона пока пишу
источник

BP

Bogdan Panchenko in Kotlin Community
Vladimir Petrakovich
Настолько старая, что выкатили только в JDK 10
Http клиент в джаве уже очень давно ты о чем?
источник

VP

Vladimir Petrakovich in Kotlin Community
@Harmonizr а я правильно понимаю, что в расте модули иерархичные, прям как пакеты в джаве?
источник

BP

Bogdan Panchenko in Kotlin Community
Vladimir Petrakovich
Точнее по факту в 11
Это ты про реализацию http 2?  Так тут опять привет совместимости
источник

VP

Vladimir Petrakovich in Kotlin Community
Bogdan Panchenko
Http клиент в джаве уже очень давно ты о чем?
источник

QH

Quantum Harmonizer in Kotlin Community
Bogdan Panchenko
Http клиент в джаве уже очень давно ты о чем?
речь про вполне конкретный, новый HTTP-клиент
источник

BP

Bogdan Panchenko in Kotlin Community
Alexander Nozik
Аргумент простой - package private не очень удачное архитектурное решение. Оно как-то неявно подразумевает tight coupling. Кроме того, пораждает всякие ужасти типа split package.
+
источник

QH

Quantum Harmonizer in Kotlin Community
Vladimir Petrakovich
@Harmonizr а я правильно понимаю, что в расте модули иерархичные, прям как пакеты в джаве?
да, вкладываются друг в друга, а аналог джавового модуля — crate
источник

VP

Vladimir Petrakovich in Kotlin Community
Quantum Harmonizer
да, вкладываются друг в друга, а аналог джавового модуля — crate
Вот ведь совпадение, и там костыли!
источник

BP

Bogdan Panchenko in Kotlin Community
Quantum Harmonizer
а private in file не tight coupling?
Про split package я выразился выше — это зло, его надо запретить, package-private должен быть строго уже, чем internal
Но это не решит проблему в целом а покроет пару юзкейзов.
источник

QH

Quantum Harmonizer in Kotlin Community
Bogdan Panchenko
Но это не решит проблему в целом а покроет пару юзкейзов.
Вообще ни одна языковая фича не решит «проблему в целом», потому что они у всех разные.
источник

BP

Bogdan Panchenko in Kotlin Community
Quantum Harmonizer
Вообще ни одна языковая фича не решит «проблему в целом», потому что они у всех разные.
Я имело ввиду "гибкое управлением доступом к элементам программы". Модификаторы доступа работают на одном уровне, на уровне проекта. Модули же это описание доступа и зависимостей между проектами. Так что для создателей либ важней всё-таки модули. А private package занесешь и выпилить его можно будет только в условном Котлин 2
источник

BP

Bogdan Panchenko in Kotlin Community
Перед тем как занести фичу нужно очень много чего обдумать
источник

QH

Quantum Harmonizer in Kotlin Community
Bogdan Panchenko
Я имело ввиду "гибкое управлением доступом к элементам программы". Модификаторы доступа работают на одном уровне, на уровне проекта. Модули же это описание доступа и зависимостей между проектами. Так что для создателей либ важней всё-таки модули. А private package занесешь и выпилить его можно будет только в условном Котлин 2
> Модификаторы доступа работают на одном уровне, на уровне проекта.
private — на уровне файла и класса,
protected — на уровне иерархии наследования
источник

BP

Bogdan Panchenko in Kotlin Community
Vladimir Petrakovich
Вот ведь совпадение, и там костыли!
А в си модульность по неймспейсу (Аля пакеты). Это ошибка выжившего, нет абсолютного плохо но решения, зато есть применения решения в неподходящем месте, которое плохо вписывается
источник

BP

Bogdan Panchenko in Kotlin Community
Quantum Harmonizer
> Модификаторы доступа работают на одном уровне, на уровне проекта.
private — на уровне файла и класса,
protected — на уровне иерархии наследования
Это конкретно в Котлин а я написал в целом
источник