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

Подскажите, пожалуйста, как работают дженерики? Вот в джаве на полиморфизме и

затирке типов, в расте шаблонизация происходит, а как в скале? Я пытался погуглить, но ничего нужного так и не нашел(

23 ответов

4 просмотра

также как в джаве, можно сказать

У Хорстманна хорошо про это рассказано. Scala for impatients

Скала работает на жвм и подчиняется её правилам, так что увы - type erasure. Но в скале есть хитрые способы подсовывания типов, когда ну очень уж надо. Если интересно - можно погуглить по запросу class tag in scala

Yau Ref
Скала работает на жвм и подчиняется её правилам, т...

А почему "увы"? Вроде затирка типов считалась офигенной штукой и дополнительной гарантией что в рантайме мы всякими ужасами не занимаемся. Или я отстал от жизни опять?

Yau Ref
Скала работает на жвм и подчиняется её правилам, т...

JVM же вроде вообще не имеет понятия о дженериках. Что конкретно мешает имплементировать reified generics на jvm? Насколько я знаю, в скале и джаве вообще используется микс, например, Array специализирован для примитивов. Я что-то упускаю?

unex𝕡ected t𝕪pe
JVM же вроде вообще не имеет понятия о дженериках....

reified generics эмулируются с помощью ClassTag или его более мощных аналогов

Evgenii Kuznetcov
reified generics эмулируются с помощью ClassTag ил...

я бы даже не назвал это эмуляцией. Эмуляция подразумевает, что есть нормальный механизм, а мы используем костыль. Но user-space рефайнменты на самом деле мощнее, чем то, что могли бы запилить джаваны.

Evgenii Kuznetcov
reified generics эмулируются с помощью ClassTag ил...

Я правильно понимаю, что это эмуляция в рантайме с рефлексией? То есть мы берем на себя то, что в reified generics сделал бы безопасно компилятор

unex𝕡ected t𝕪pe
Я правильно понимаю, что это эмуляция в рантайме с...

нет, когда вы пишите val list: List[String] = List("a", "b", "c"), у компилятора или макроса достаточно информации, чтобы в той или иной форме запомнить тип элемента (без рантайм рефлексии).

Python
А почему "увы"? Вроде затирка типов считалась офиг...

Потому, что потеря информации о типах это всегда печально и приводит к неприятным ограничениям https://scastie.scala-lang.org/rvyF2itMTGqM5DGo3J93Gg

∫f(x)dx
Скорее наоборот

Счастье в неведении?)

unex𝕡ected t𝕪pe
JVM же вроде вообще не имеет понятия о дженериках....

Мешает то, что оно уже сделано вот так и переделывать долго, дорого и не понятно зачем, учитывая что все привыкли

Yau Ref
Счастье в неведении?)

Сделать теги, с выразительной способностью системы типов scala приблизительно невозможно. Любые практически теги были бы несовместимы с вариантностью. ( спорно ) Почти никакие работающие в промышленных контурах системы типов с "нестираемыми женериками" не способны в HKT. В разработке мудрость зачастую в неведении, гораздо корректнее признать, что какая-то информация у вас отсутствует, чем пытаться откопать её по косвенным признакам. В данном случае, вам пришлось бы ограничивать либо систему типов, либо рантайм. Языки, с ограниченной системой типов и более развязным рантаймом есть. Но оказалось, что там информация о тайп-параметрах используется крайне редко, считается плохим тоном, хрупким решением и т.п., так что в общем случае можно сказать, что в этом вопросе scala правильное решение приняла

Oleg ℕižnik
Сделать теги, с выразительной способностью системы...

Ага, это интересное замечание. Я подозреваю, что с hkt это таки можно сделать совместимым, но вопрос нужно решать на уровне jvm, а не скалы Ну и опять же, стоит ли оно того, учитывая всё выше сказанное - хз

Yau Ref
Ага, это интересное замечание. Я подозреваю, что с...

Ну многие подозревают, но никто не сделал. Самое главное, если вас не убеждают примеры scala и typescript, потому что форсированы рантаймом, не убеждают примеры haskell, ocaml и rust, потому что слишком не знаю что академичечкие, можете посмотреть на новые generic в голанге, там тоже никакой тайпинформации generic не предоставляет. Поэтому иррелевантные тайп-параметры это естественный стандарт в разработке полиморфизма сегодня

Oleg ℕižnik
Сделать теги, с выразительной способностью системы...

А где-нибудь ещё есть ко-/-контра-/инвариантность типов, кроме Скалы?

LLU
А где-нибудь ещё есть ко-/-контра-/инвариантность ...

А разве она не должна быть у всех языков, у которых есть одновременно наследование и женерики?

Oleg ℕižnik
Ну многие подозревают, но никто не сделал. Самое г...

Не то, чтоб они меня не убеждали, просто это меня не беспокоило, я не пытался сделать собственную реализацию hkt :)

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

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

коллеги, добрый вечер! А никто не знает как модальная форма может себя закрыть? Ну допустим модальная форма определила, что смысла ей работать нет и хочет вернуть modalResult...
Михаил
83
А если изначально бот работал так : есть сайт онлайн школы. У каждого ученика свой кабинет. Где он авторизуется по своим данным. И уже в кабинете, на самом сайте делает оплату...
Денис 💡 Фрилансер
13
Добрый день Хочу начать обучение языку, не являюсь представителем it, буду благодарна за помощь, совсем пока не понимаю ничего) Подскажите, пожалуйста, где можно начать первы...
Sara Lala
20
А что ты вообще делаешь ?
Yesgoter
13
средствами IBX как-то можно выполнить запрос insert ... returning?
Igor
31
На работе пишем распределенное приложение, у которого сотни, если не тысячи настроек. Конфиги написаны на xml, расположены на разных хостах и должны быть согласованы друг с др...
Aleksandr Druzhinin
5
Всем привет 🙂 Какая-то непонятная проблема у меня с видео, раньше такого не было. Загружаю видео с гугл диска именно в видео mp4 и меняю ссылку как положено вот она: https://d...
Ксюша|Верстка на Тильде|Дизайн 🦥
6
Hi there everyone Is there anyone who have not started hamster bot yet? I need only one, I'll be glad if you do this for me DM if you haven't yet
Mehrshad
53
А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
А какие у этого try практические плюсы перед eval?
Oleg Volkov
41
Карта сайта