Arseniy
вообще не проблема. Забываешь про существование генериков в рантайме, везде ебашишь обжекты, в атрибутах передаёшь метадату
ну так clr тебе не хотспот, он начнет тебе боксить анбоксить, когда декомпильнешь ил код, ты обольешься кровавым слезами. ну и перф будет такой же.
Vladislav
Что его заебало
Doge
Да, интересно, кто первичный автор высера о полезности стирания типов
Все компиляторы в нативный код так работают по очевидным причинам.
Arseniy
я думал, что так исторически сложилось. джава была интерпретируемой и без генериков половину своей истории. потом начали костыли воротить.
Ayrat
Да, интересно, кто первичный автор высера о полезности стирания типов
полезного мало, они в общем никак не мешают, можно и поверх них сделать хкт, так-то. Со стиранием возможно попроще, один транспорт для данных о типах будет - метадата.
Ayrat
Ну не все фичи сишарпа говно. Далеко не все.
Я вот сегодня прочитал опять РФЦ про нулабл реф тайпы в F# (ответ на C#). Долго плакал
Arseniy
это полный отстой
Ayrat
чо там попроще-то? в рантейме можешь совать лист от одного типа в лист другого типа. и все норм.
и тут внезапно есть атрибут с константным хешкодом типа который тут ОЖИДАЕСЯ и особый код компилятора который кидает компайл еррор если хеш код не совпдаает
Ayrat
ИЗИ решено
Doge
Я к тому что на стираемых типах можно и для дотнета запилить с тем же успехом
Основная проблема не стираемых типов в том, что это кардинально усложняет написание компиляторов и интеропа с языки, которые имеют системы типов не выразимые в системе типов платформы.
Bonart
С интеропом будет всё ещё хуже.
Одинаково. Работать будет только там где запилено. Как манглинг у плюсов
Ayrat
Короче, стирани типов плохо только если надо межязыковой интероп серьёзный
Ayrat
если похуй, то можно на откуп компилятора отдать типо-проверки
Ayrat
и похуй что там в рантайме. Главное не подгружать либы написанные не в этом же компиляторе хехехехе
Ayrat
а то рванёт нахуй
Arseniy
и тут внезапно есть атрибут с константным хешкодом типа который тут ОЖИДАЕСЯ и особый код компилятора который кидает компайл еррор если хеш код не совпдаает
ничо не решено. половин скала-либ — это паршивые врапперы над жева библиотеками. из оставшихся либ половина — еще более паршивые попытки написать настояющую скала-имплементацию нужны либ. в итоге все кровит, стреляет черти где, нулы.
Doge
Да неправда это. Стирание поверх заделать без проблем.
Ага, только тебе придется как-то работать с нестертыми типами, которые есть в стандартной библиотеке платформы.
Bonart
Вот когда надо наоборот - стирание лажает без вариантов
Ayrat
в хаскеле это работает потому что у хаскеля есть только хаскель
Ayrat
и он сразу нативчик гонит или ллвмчик
Arseniy
ну сайм дизайнил генерики дотнету. сайм делал фишарп. сайм где-то там сказал, все фичи над типами надо требовать от коре-тим. и в принципе все логично
Bonart
Ага, только тебе придется как-то работать с нестертыми типами, которые есть в стандартной библиотеке платформы.
Придется, ну и что? Стирание это отсутствие возможности. Оно само по себе ничего полезного не дает.
Bonart
Плохому танцору нормальные генерики мешают сильнее яиц
Doge
Придется, ну и что? Стирание это отсутствие возможности. Оно само по себе ничего полезного не дает.
А какие плюсы дает сохранения типов? В случае стирания, вопросы производительности решаются специализацией, передачу точной информации в рантайме о типе можно огранизовать через всякие Typeable или тот же скаловский Manifest. (Ну и да, сложная логика на рефлексии - это зло, удел языков без нормального метапрограммирования)
Danil
Не знаете, в каком году у нас 2.0 версия языка вышла ?
Bonart
Ты эти дженерики можешь в той же скале получить, включив специализацию.
Хрен там. Структур нормальных нет, генериков на них нет.
Bonart
Кастомные струтуры на скале ограничены одним полем примитивного типа
Doge
Кастомные струтуры на скале ограничены одним полем примитивного типа
Отсутствие структур не связано со стрианием типов. Это отдельный вопрос.
Romɑn
5-7 мб
Не, в 7 третий уже был
Romɑn
5 вариарт
Doge
Хрен там. Структур нормальных нет, генериков на них нет.
А вопрос дженериков для них решается через специализацию, я же уже писал о ней.
Doge
(По сути то же самое, как рантайм CLR делает, только в компайл тайме)
Danil
5-7 мб
Mersi, а хеш тейбл в c# в каком году завезли ? Вместе с выходом дженерик коллекций в net framework 2.0 ?
Vladislav
Да
Arseniy
(По сути то же самое, как рантайм CLR делает, только в компайл тайме)
пометь его атрибутом. пометь его еще раз. посмотри как пухнит твой бинаник, что даже хелловорлд не влезает в амазонскую лямбду
Arseniy
каеф
Doge
пометь его атрибутом. пометь его еще раз. посмотри как пухнит твой бинаник, что даже хелловорлд не влезает в амазонскую лямбду
Ну пухнуть у тебя и в шарпе будет, но в меньшем обьеме. От того, что надо генерить реализацию для каждого размера используемых данных ты никуда не денешься.
Bonart
Отсутствие структур не связано со стрианием типов. Это отдельный вопрос.
На самом не отдельный. Генерики на рефах со стиранием и без отличаются несильно. А вот на структурах - небо и земля.
Doge
На самом не отдельный. Генерики на рефах со стиранием и без отличаются несильно. А вот на структурах - небо и земля.
Опять-таки, если в компиляторе языка умеет в специализацию, то разницы особой не будет.
Bonart
Только дженерики не очень спасают, когда тип известен только в рантайме
Почему? Я в рантайме генерики лепил - заработало сразу
Bonart
Вот для скалы если я правильно понял в рантайме без вариантов
Romɑn
Жавасрач напрашивался давно
Arseniy
по имлементации на структуру + один на ссылчные типы. и все это в рантайме. в другой области памяти. а не туда, когда грузится код сборки
Bonart
Опять-таки, если в компиляторе языка умеет в специализацию, то разницы особой не будет.
Разница уже есть. Шарповые генерики одинаковы для всея clr. Скаловые спецификации если я правильно понял - только для скалы же.
Doge
как это. все ссылчные типы будут System.__Canon
Ссылочные да, но ссылочные можно и не специализировать, там jit более-менее оптимизирует и так.
Danil
Почему? Я в рантайме генерики лепил - заработало сразу
Мне приходилось боксить в object и что бы тип мог зарезолвиться в дженерик методе в рантайме(например у контроллера TryUpdateModel) приходилось кастить object к dynamic, здорово, не правда ли ?
Vladislav
Arseniy
Ссылочные да, но ссылочные можно и не специализировать, там jit более-менее оптимизирует и так.
ты вешаешь атрибут на генерик и дальше смотришь, чо там тебе скала нахеачит. если бы это было не больно, они бы все что можно обмазали спецализацией. а они енто экономно пользуют. оно и без того долго компилит, а так-то вообще песня. приходи на работу с сериалами
Bonart
Из джавы ты их можешь вызвать, но будет неудобно, само собой.
Именно. Т.е. весь типа позитивный эффект от стирания типов свелся к тому что еще одна фича из общей стала частной для конкретного языка.
Ilya
Так это где это чо?
https://github.com/dotnet/csharplang/issues/2849
Arseniy
Из джавы ты их можешь вызвать, но будет неудобно, само собой.
не всё. половину того, что сказа компилирует, джава прсто не понимает. пиши уже врапперы из скалы в джаву
Arseniy
кароче, имхо. одерский делал свой экспериментальный язычок. умный мужик, даром что в тапле чуть ли не в каждой главе идет ссылка не его работы. но с точки зрения практики, меня за год так блевать тянуло от этой скалы
Arseniy
что даже сишарп казался нормальным языком
Vladislav
https://github.com/dotnet/csharplang/issues/2849
Нас с @aensidhe там слушать не захотели)
Bonart
Как тайпскрипт - попытка сделать конфету из яваскрипта
Bonart
Но тайпскрипт хотя бы метаданными обильно не пачкает
Диёр