Andrey
а то все спору уровня религии и терминов
Alexander
так же не можешь как в динамике сделать exhaustive match по объекту
Andrey
а по-русски это что?
Alexander
ты сознательно игнорируешь эту фразу, которую я писал ещё неделю назад?
Alexander
!
Alexander
получив объект ты не можешь покрыть все возможные варианты его типа
Andrey
у меня конечное число классов загружено лоадером
Andrey
и я могу их перебрать
Alexander
т.е. ты не можешь сделать case typeOf object of Int -> .. ; String -> Abstract
Andrey
вот именно что могу - но это и не требуется обычно
Alexander
Foo<Int,String> все?
Alexander
которые стираются
Andrey
нас уже двое могут )
Слава
В с# не стираются
Alexander
у тебя их бесконечное множество, (во всяком случае в нормальном языке)
Слава
как?
Ну да, с дженериками в джаве позор
Alexander
в java с type erasure сложнее
Слава
Для чего нужен такой перебор?
Alexander
там формально не конечное, наверное
Andrey
в языке - да. но мы про конкретную программу, где весьма конечное
Alexander
для того, что в динамическом языке есть свойство, что любой объект находится в Universe и ты можешь посмотреть тег и работать с ним
Alexander
обобщенно
Alexander
в коде с typeable/reflection мы можем делать только сравнение и каст к ограниченному числу типов
Слава
Любой класс сводится к object
Alexander
это в любом языке с обобщенным представлением объектов
Alexander
например Haskell
Alexander
если забыть о # что мы сделали для Java, то любой объект представлен одинаково
Слава
Откуда у нас в программе, в рантайме возьмутся типы, неизвестные программисту? Мы тут ole пишем?
Andrey
но в Джаве я могу легко сделать коллекцию Объектов а в Хаскеле - только с бубнами
Andrey
и вернуть из функции тоже
Andrey
и принять в функцию
Alexander
в Java вы только с бубнами можете делать что-то с объектами достанными из коллекции
Andrey
мы знаем ВСЕ типы в нашей программе - см выше
Alexander
для того, чтобы это решить степень бубновости - одинаковая
Alexander
ну да, в java нету классов типов, чтобы из функции можно было получить бесконечность типов
Слава
Зачем нам коллекция неизвестных объектов?
Andrey
ну Динамик в сабже - бубен таки побольше и тормознее
Alexander
это динамистам надо
Слава
А им это зачем?
Alexander
ну Динамик в сабже - бубен таки побольше и тормознее
я могу прокибербулить, а могу попросить вас объяснить почему побольше или почему тормознее?
Alexander
что выбираете
Andrey
Им не это надо а простая человеческая гетерогенность
Alexander
(хотя это примерно одно и тоже)
Alexander
А им это зачем?
общее объяснение т.к. мир такой и мы не можем контролировать input
Слава
Гетерогенность в, например, COM, ограничивается потомками IUnknown
Andrey
Побольше - по необходимости записи в синтаксисе - тормознее - по реализации (насколько я понимаю). Потому что в Джаве типы все равно стираются после компиляции и лежат одни объекты - и это бесплатно
Слава
общее объяснение т.к. мир такой и мы не можем контролировать input
Но мы должны контролировать input. Это знать надо, это классика
Alexander
а как производится type check в java?
Anonymous
Потомки IUnknown являются открытым моножеством, к слову говоря
Слава
ты это не мне а динамистам объясняй
А их надо слать к книжке "Защищенный код".
Alexander
давайте разбираться
Andrey
Давайте ) я не против
Alexander
Int foo(Object foo) { Int bar =(Int)foo ; return bar }
Слава
@jey_lee, приди
Alexander
вот как это сработает?
Alexander
если сработает (как хорошо что java отлично выветривается за 5 лет)
Andrey
ну так нельня кастить без проверок
Andrey
к Инту приводдить не спросив
Слава
Сработает, если в foo лежит Integer
Andrey
надо узнать инстансе ов
Andrey
но если мы знаем что там Интегер - то и принять надо его
Alexander
если не проверять, что будет?
Andrey
а если не знаем - то проверяем и кастим
Alexander
Слава
А зачем узнавать? Чтобы ошибку вернуть - так она и без того будет
Andrey
либо компилятор не пропустит либо в рантайме свалится - одно из двух
Andrey
точно так же как и в Хаскеле 1/ 0
Слава
Компилятор пропустит, кмк
Alexander
ok, сделали проверку if (foo instanceOf Integer) { .... }
Andrey
тогда ок
Слава
Я такого дурного кода не писал, сказать не смогу наверняка
Alexander
Компилятор пропустит, кмк
современный не должен
Andrey
я писал и все отлично )
Alexander
тогда ок
и как эта проверка работает если информация стирается?
Слава
современный не должен
Это нужно Святое Писание читать, а я этого делать не хочу. Warning будет
Andrey
ты меня тычешь все что не стирается - ну ок, не стирается )