Size: a a a

Compiler Development

2020 February 27

FO

FORTRAN ONE LOVE in Compiler Development
Т-34 85
А как компилятор узнает, метод чьего класса я хочу вызвать, если он виртуальный?
можно по дальнейшему использованию детектить
источник

E

EgorBo in Compiler Development
Т-34 85
А как компилятор узнает, метод чьего класса я хочу вызвать, если он виртуальный?
ээ как обычно, пойдет в методтейбл -_-
источник

А

Алексей in Compiler Development
Т-34 85
А как компилятор узнает, метод чьего класса я хочу вызвать, если он виртуальный?
виртуальные и так в рантайме
источник

А

Алексей in Compiler Development
в этом случае уже даже не особо важно какой именно тип вывел, в рантайме всё равно нужный метод вызовется
источник

K

Kakadu in Compiler Development
Т-34 85
А как компилятор узнает, метод чьего класса я хочу вызвать, если он виртуальный?
А никак. С номинальной типизацией объектов это не сделать. Со структурной как в камле — пожалуйста. Потому я и написал, что камл может чаще выводить типы, чем F#
источник

Т8

Т-34 85 in Compiler Development
Алексей
виртуальные и так в рантайме
А можно было при компиляции получить ошибку...
источник

M

MaxGraey in Compiler Development
Т-34 85
А можно было при компиляции получить ошибку...
Это как?
источник

Т8

Т-34 85 in Compiler Development
Kakadu
А никак. С номинальной типизацией объектов это не сделать. Со структурной как в камле — пожалуйста. Потому я и написал, что камл может чаще выводить типы, чем F#
Понял
источник

А

Алексей in Compiler Development
так
источник

А

Алексей in Compiler Development
кто-то что-то путает
источник

M

MaxGraey in Compiler Development
Если метод диспатчитться динамически
источник

Т8

Т-34 85 in Compiler Development
MaxGraey
Это как?
Это когда явно указываешь тип, который принимаешь
источник

А

Алексей in Compiler Development
как раз с невиртуальными методами могут быть проблемы
источник

M

MaxGraey in Compiler Development
Алексей
как раз с невиртуальными методами могут быть проблемы
В рантайме?)
источник

Т8

Т-34 85 in Compiler Development
Алексей
как раз с невиртуальными методами могут быть проблемы
Да, ты прав, перепутал
источник

А

Алексей in Compiler Development
MaxGraey
В рантайме?)
да
источник

А

Алексей in Compiler Development
если в двух классах-родственниках невиртуальный метод с разным поведением, плюс из-за вывода типа программист думает что вызывается метод одного класса, а на самом деле метод другого
источник

А

Алексей in Compiler Development
но на самом деле лучше такого изначально не допускать конечно
источник

E

EgorBo in Compiler Development
Алексей
если в двух классах-родственниках невиртуальный метод с разным поведением, плюс из-за вывода типа программист думает что вызывается метод одного класса, а на самом деле метод другого
1) C# покажет ворнинг если у тебя есть невиртуальные одинаковые по сигнатуре методы в иерархии, попросит тебя вручную добавить ключевое слово = подпись что ты согласен с тем, что хочешь отстрелить ногу
2) мне не ясно когда автовод может запутать программиста и вызвать не то что он хочет
источник

M

MaxGraey in Compiler Development
Алексей
если в двух классах-родственниках невиртуальный метод с разным поведением, плюс из-за вывода типа программист думает что вызывается метод одного класса, а на самом деле метод другого
Обычно такое ловиться во время компиляции если конечно Overriding (не путать с Overloading) не «фича» ЯП как в Java =)
источник