Так утверждение «просто на уровне типов нельзя передать 5 вместо Foo и 15 вместо Bar, а получившийся string запихнуть в int.» получается не всегда верно.
Если ты не пишешь в конструкторе explicit, то ты про себя говоришь:«Да, я разрешаю приводится инту к Foo и Bar, а std::string может привестись к mystring».
Ну да, подход питона — упасть в продакшне когда небольшая правка кода для другой фичи сломала что-то ещё, подход языков с нормальным типами (sound type system) — попытаться хоть что-то проверить задолго до этого.
Отсюда и проблемы когда питон пытаются использовать для крупных проектов. Разработчики mercurial говорили, что если бы тот же rust был раньше — вместо питона3 mercurial бы переписали на rust.
Изначально речь была про строгость системы типов. Рухнувший в продакшн питон – это лучше или хуже C++, который продолжает работать с неверным результатом от того что, скажем, где-то double привелся к int?
С учётом того, что конструкторов без explicit хватает и в стандартной библиотеке, о каком-то строгом контроле типов речи не идёт.
Патчи никто не шлет Просто код написанный до, по моему, C++03 начнет сыпаться, так как, возможно, некоторый код надеется на неявное преобразование, а обратная совместимость в плюсах ставится выше.
Причём неизвестно, что хуже, когда как в питоне упадёт при запуске или как в C++ преобразуется в другой тип и как-то выполнится.
Мне кажется то и то плохо - какая разница что произойдет у пользователя, если у него вылетело или некорректно работает приложение из-за того что его картинка с котиком преобразовалась в инт? Хотя, мне кажется, что в компиляторе плюсов есть какая нибудь опция на проверку неявного преобразования типа.
В этом смысле вся надежда на раст с его проверками и отсутствием неявных преобразований, но пока все его только пробуют и плюются
В std по-моему неплохо продумано, что сделать explicit, а что нет. Вообще, в плюсах подход explicit by default. Причем, в отличие от ошибок с типами в Питоне, здесь это контролируется статично, и некоторые линтеры выдают предупреждение, если не написать explicit.
Реально остается проблема со встроенными типами. Хотя они тоже статично проверяются, но проблема хотя бы в том, что на одной платформе сужение произойдет, на на другой (где делался анализ) – нет.
Надо бы strong typedefs, но что-то в языке их нет, только костыли в левых библиотеках.
Рухнувший в продакшн питон – это лучше или хуже C++, который продолжает работать с неверным результатом от того что, скажем, где-то double привелся к int?
Это разные типы. Большинство ситуаций, от которых питон рухнет, в плюсах поймает компилятор и в продакшне их тупо не будет.
И да, питон спокойно даст, например, умножить на double вместо int.
Разработчики mercurial говорили, что если бы тот же rust был раньше — вместо питона3 mercurial бы переписали на rust.
Вот и задача нашлась для лоровских растишек. Все равно mercurial умер, так что никто не пострадает. А вдруг получится убийца гита? Заманчиво. Так что налетай, народ, скоро каникулы как раз.
Большинство ситуаций, от которых питон рухнет, в плюсах поймает компилятор и в продакшне их тупо не будет
Это-то понятно, но там человек говорил что в Питоне строгая типизация, а ты перевел на то что она динамическая. Ясно что лучше быть здоровым и богатым, но уже хорошо, что от каких-то плюсовых (например) ошибок Питон может защитить.