История изменений
Исправление byko3y, (текущая версия) :
Проблема в том, что самые примитивные ошибки одинаково успешно отлавливаются как тестами, так и типами
Ага. Экономим время на компиляции, зато тратим его больше на поиск ошибок. Какая крутая фича
Отличная история от апологета ЯП, в котором принято иметь ошибки, проявляющиеся на каждом сотом выполнении теста. Тестирование крестов намного сложнее и замороченнее, и в каком-то смысле я горжусь тем, что умею такие проги писать, но не строю иллюзий по этому поводу.
Чтобы реально экономить время на тестировании за счет более сложной компиляции, нужно прежде всего убрать 70% UB, небезопасных, и просто дебильных фич из крестов. Но этого никто не сделает, потому что путь разработки у крестов только один — больше новых фичей. Я не спорю с тем, что теоретически возможно упростить разработку за счет ловли ошибок при компиляции, но C++ точно не позволяет этого добиться. C++ прежде всего принят индустрией за то, что позволяет автоматизировать написание багов, за счет чего баги получаются более гомогенными и для их исправления нужно смотреть меньше строк кода.
Получается, что вот например ты отстаиваешь то, что js круче c++ потому что проще, нет компиляции и все ошибки в рантайме. Но оказывается есть ts который лучше js потому что компиляция и статические типы
В TS можно писать на голом JS, если чо. Для защиты от джунов есть еще линты. Это просто дополнительные рубежи, как статические анализаторы для C/C++. Я могу придумать подобный JS язык, в котором польза от проверки типов во время компиляции была бы смехотворна, поскольку язык сам по себе безопасен. Но JS такой, какой он есть, потому там в наличии широкий ассортимент граблей, на которые обязательно наступит джун — это не общее свойство динамических языков и отсутствия статических проверок, это свойство конкретно JS.
Фундаментальный букет граблей — это слабая типизация и полиморфность не по делу, который был заложен господом за 10 дней создания изначальной реализации JavaScript. И TS нужен именно для того, чтобы гарантировать мономорфность кода. Исправь эту проблему — и ты устранишь большую часть смысла существования TS.
Обычно в очередных обсуждениях по поводу «нам не фатает статической типизации» я люблю подчеркивать, что на самом деле никому не нужна статическая типизация сама по себе, просто чтобы была. Всем нужна предсказуемость поведения, корректность логики, и если оных можно добиться без статических типов, то статически типы не нужны.
Исходная версия byko3y, :
Проблема в том, что самые примитивные ошибки одинаково успешно отлавливаются как тестами, так и типами
Ага. Экономим время на компиляции, зато тратим его больше на поиск ошибок. Какая крутая фича
Отличная история от апологета ЯП, в котором принято иметь ошибки, проявляющиеся на каждом сотом выполнении теста. Тестирование крестов намного сложнее и замороченнее, и в каком-то смысле я горжусь тем, что умею такие проги писать, но не строю иллюзий по этому поводу.
Чтобы реально экономить время на тестировании за счет более сложной компиляции, нужно прежде всего убрать 70% UB, небезопасных, и просто дебильных фич из крестов. Но этого никто не сделает, потому что путь разработки у крестов только один — больше новых фичей. Я не спорю с тем, что теоретически возможно упростить разработку за счет ловли ошибок при компиляции, но C++ точно не позволяет этого добиться. C++ прежде всего принят индустрией за то, что позволяет автоматизировать написание багов, за счет чего баги получаются более гомогенными и для их исправления нужно смотреть меньше строк кода.
Получается, что вот например ты отстаиваешь то, что js круче c++ потому что проще, нет компиляции и все ошибки в рантайме. Но оказывается есть ts который лучше js потому что компиляция и статические типы
В TS можно писать на голом JS, если чо. Для защиты от джунов есть еще линты. Это просто дополнительные рубежи, как статические анализаторы для C/C++. Я могу придумать подобный JS язык, в котором польза от проверки типов во время компиляции была бы смехотворна, поскольку язык сам по себе безопасен. Но JS такой, какой он есть, потому там в наличии широкий ассортимент граблей, на которые обязательно наступит джун — это не общее свойство динамических языков и отсутствия статических проверок, это свойство конкретно JS.
Фундаментальный букет граблей — это слабая типизация и полиморфность не по делу, который был заложен господом за 10 дней создания изначальной реализации JavaScript. И TS нужен именно для того, чтобы гарантировать мономорфность кода. Исправь эту проблему — и ты устранишь большую часть смысла существования TS.
Обычно в очередных обсуждениях по поводу «нам на фатает статической типизации» я люблю подчеркивать, что на самом деле никому не нужна статическая типизация сама по себе, просто чтобы была. Всем нужна предсказуемость поведения, корректность логики, и если оных можно добиться без статических типов, то статически типы не нужны.