История изменений
Исправление DarkEld3r, (текущая версия) :
Так что анализ программы усложняется, тут нечего даже обсуждать.
просто пока я не убеждён в том, что нововведение оказалось удачным
Я всё-таки повторю свой аргумент. Вывод типов появляется даже в «старых» языках типа С++, он есть во вполне «практичных» (в смысле, не экспериментальных/экзотичных/маргинальных и т.д.) - том же С#. Новый язык без вывода типов вообще, наверное, сложно будет найти - те же раст, ним, Go. Кстати, про Go - язык-то сделан намеренно простым, без всяких «сложностeй», но вывод типов есть.
По смыслу: два типа, для которых определены одинаковые методы с одинаковыми параметрами. Далее программист неверно парсит auto и думает, что он имеет дело с одним типом, а на самом деле тип другой.
Дык, если мы говорим об ИДЕ нормальных, то можно перейти к определению функции/метода и мы попадём к тому определению, которое относится к нужному типу. То есть всё так же просто.
Кстати, если говорить об С++, то там «перейти к определению типа» для встроенных типов не сработает. Это к аргументу про int.
Ну и возвращаясь к твоему примеру - я всё равно плохо представляю откуда тут могут быть проблемы. Возьмём дурацкую ситуацию - пусть у нас есть boost::path для которого переопределён оператор / («деление», в данном случае - конкатенация путей), а программист думает, что это не path, а число. И значит его ничего не смущает: ни название переменных, ни название функции, ни сама логика кода. Пусть так. Ну ошибся и что дальше? Какие модификации кода приведут к чему-то более плохому чем ошибка компиляции?
Это то, с чем я столкнулся в лиспе: глядя на сигнатуру функции, нельзя узнать, что ей нужно передать.
Это всё-таки динамический язык. Даже в хаскеле, где есть «полный вывод типов» явные сигнатуры функциям прописывать очень рекомендуют. В С++ этого просто нельзя не сделать. В расте (относительно новый язык) так же решили - сигнатуры у функций обязательны, а локальный вывод есть. Кстати, во всех трёх языках для локальных функций (лямбд) типы не указывать можно, как раз потому что это удобно.
В С++ правда эта возможность появилась аж в 14 стандарте, но её весьма не хватало раньше.
Ну и даже если у нас есть типы, то в доку всё равно желательно посмотреть.
но само по себе присутствие минусов в любой неявности не подлежит сомнению.
Мне это не очевидно. Тем более, что различной неявности и так полно. Возвращаясь к злосчастному инту - его размер тоже явно не указан в коде.
Исходная версия DarkEld3r, :
Так что анализ программы усложняется, тут нечего даже обсуждать.
просто пока я не убеждён в том, что нововведение оказалось удачным
Я всё-таки повторю свой аргумент. Вывод типов появляется даже в «старых» языках типа С++, он есть во вполне «практичных» (в смысле, не экспериментальных/экзотичных/маргинальных и т.д.) - том же С#. Новый язык без вывода типов вообще, наверное, сложно будет найти - те же раст, ним, Go. Кстати, про Go - язык-то сделан намеренно простым, без всяких «сложностый», но вывод типов есть.
По смыслу: два типа, для которых определены одинаковые методы с одинаковыми параметрами. Далее программист неверно парсит auto и думает, что он имеет дело с одним типом, а на самом деле тип другой.
Дык, если мы говорим об ИДЕ нормальных, то можно перейти к определению функции/метода и мы попадём к тому определению, которое относится к нужному типу. То есть всё так же просто.
Кстати, если говорить об С++, то там «перейти к определению типа» для встроенных типов не сработает. Это к аргументу про int.
Ну и возвращаясь к твоему примеру - я всё равно плохо представляю откуда тут могут быть проблемы. Возьмём дурацкую ситуацию - пусть у нас есть boost::path для которого переопределён оператор / («деление», в данном случае - конкатенация путей), а программист думает, что это не path, а число. И значит его ничего не смущает: ни название переменных, ни название функции, ни сама логика кода. Пусть так. Ну ошибся и что дальше? Какие модификации кода приведут к чему-то более плохому чем ошибка компиляции?
Это то, с чем я столкнулся в лиспе: глядя на сигнатуру функции, нельзя узнать, что ей нужно передать.
Это всё-таки динамический язык. Даже в хаскеле, где есть «полный вывод типов» явные сигнатуры функциям прописывать очень рекомендуют. В С++ этого просто нельзя не сделать. В расте (относительно новый язык) так же решили - сигнатуры у функций обязательны, а локальный вывод есть. Кстати, во всех трёх языках для локальных функций (лямбд) типы не указывать можно, как раз потому что это удобно.
В С++ правда эта возможность появилась аж в 14 стандарте, но её весьма не хватало раньше.
Ну и даже если у нас есть типы, то в доку всё равно желательно посмотреть.
но само по себе присутствие минусов в любой неявности не подлежит сомнению.
Мне это не очевидно. Тем более, что различной неявности и так полно. Возвращаясь к злосчастному инту - его размер тоже явно не указан в коде.