ну а как это называется? Вначале пошёл типичный лозунг "истина только у нас - все остальные недостойны и не спасутся". Далее пошло совсем плохо, был использован совсем наивный лозунг "где-то там". Где-то там выводится. А что, зачем и почему - ну то не важно.
Ребята, давайте кончайте философствование. Даже трудно уже вникнуть в суть вашего спора.
Ребята, давайте кончайте философствование. Даже трудно уже вникнуть в суть вашего спора.
Ну зашла речь о сигнатурах и была использована отсылка к "святой сигнатуре", т.е. миру, где сигнатура определяет всё. В С++ это не так. На это последовал ответ "святая сигнатура - это круто. Нужно, чтобы все последовали и всё изменится". И уже на это последовал мой ответ о том, что завязка на сигнатуре - это лишь следствие ограниченности возможностей. А комплексный анализ куда более мощный
это как в С++. Была сишка, было разделение. Не было "вывода типов". А в сишке сигнатура - всё. Вот и решили заложиться на сигнатуры и инстанцировать их. После оказалось, что какие-то свойства функции могут выводиться из тела - тот же тип возврата. Всё поломалось. Но какая-то совместимость осталось.
С тем же noexcept уже так не получилось. И теперь мучаемся и пишем то, что могло бы быть выведено. И написание нормальных noexcept-правил это то ещё приключение. А почему? А потому что сигнатура.
это как в С++. Была сишка, было разделение. Не было "вывода типов". А в сишке сигнатура - всё. Вот и решили заложиться на сигнатуры и инстанцировать их. После оказалось, что какие-то свойства функции могут выводиться из тела - тот же тип возврата. Всё поломалось. Но какая-то совместимость осталось.
С тем же noexcept уже так не получилось. И теперь мучаемся и пишем то, что могло бы быть выведено. И написание нормальных noexcept-правил это то ещё приключение. А почему? А потому что сигнатура.
Отвечу подробней. В сишке связывание вызова/тела происходит через таблицу символов. А сам символ - это его имя. Оно не зависит от сигнатуры. В С++ имя символа формуруется из всей сигнатуры, опять для того, чтобы работало сишное "связывание".
И проблема в том, что мы не можем из тела неявно выводить какие-то свойства, потому как имя символа должно генерироваться одинаковое и из сигантуры и из тела.
Интерфейсы именно ограничивают использование набором методов
Нет, так и работает ограничение. Просто все интерфейсы реализованы поверх vtable. Для того они и были созданы. Тип же оригинальный затирается и весь доступ к типу производится только через интерфейс
интерфейсу же будут удовлетворять классы/иные сущности, в которых методов больше, чем определено в нём(интерфейсе)? Это правильно. Нельзя обратиться, но это особенность динамического полиморфизма. Это не свойство ограничения.
Нет, так и работает ограничение. Просто все интерфейсы реализованы поверх vtable. Для того они и были созданы. Тип же оригинальный затирается и весь доступ к типу производится только через интерфейс
Это не совсем так. В качестве контр примера я могу привести раст. Там в "шаблонном" коде можно пользоваться только тем, что определено в "концепте". Это приводит к довольно раздутым сигнатурам.
Это не совсем так. В качестве контр примера я могу привести раст. Там в "шаблонном" коде можно пользоваться только тем, что определено в "концепте". Это приводит к довольно раздутым сигнатурам.
правильно, потому как в расте динамический полиморфизм. Где в бекенде просто просто реализован мономорфизатор, который обязан быть в статическом языке, любом
правильно, потому как в расте динамический полиморфизм. Где в бекенде просто просто реализован мономорфизатор, который обязан быть в статическом языке, любом
Нет. В дженериках (шаблонах по нашему) нет динамического полиморфизма.
Нет. В дженериках (шаблонах по нашему) нет динамического полиморфизма.
Есть. Я написал об этом. Не важно, что написано в методичках. Там чистейший динамический полиморфизм. Но в связи с тем, что язык как бы статический, да и на базе llvm - там нужна монорфизация, которую и впили в бекенд. Это ничего не значит. На уровне языка, его системы типов - полиморфизм динамический
интерфейсу же будут удовлетворять классы/иные сущности, в которых методов больше, чем определено в нём(интерфейсе)? Это правильно. Нельзя обратиться, но это особенность динамического полиморфизма. Это не свойство ограничения.
Дак если ты не укажешь в концепте метод класса, но вызовешь его внутри функции, то получается, что ты обманул вызывающего и вместо Foo концепта ты принимаешь FooAndBar, но вызывающий об этом никак не узнает пока не получит ошибку.