История изменений
Исправление Romaboy, (текущая версия) :
Я немного кодил на кристале, так вот аннотации там ну очень редко нужны.
В современных языках так и делают, например, rust, go, TS. Когда компилятор сам может вывести то выводит, когда нет - то просит писателя кода это сделать. Писать типы руками звучит как пытка для тех кто не пробовал, но на самом деле они делают код понятнее. С чего вы взяли что в rust, go, crystal и других эту фичу просто недоделали потому что дурачки или ленивые, а вот гениальный Matz говорит сто проц скоро вообще любой кейс будет автоматически распознаваться.
Следующий параграф если коротко «как вы представляете угадать рантайм тип умным компилятором?»
Пользователь в рантайме присылает данные, тип этих данных этот гениальный компилятор как узнает? Грузим что-то с third-party, как тип данных узнает «автоматически»? Аргумент метода утиной типизацией проверяется if arg.is_a?(Duck), сам разработчик тут не уверен что пришлют как автоматом узнает? JSON файл с диска прочитали и распарсили, как тип узнать?
И ещё один пример, написали фукнцию с ошибкой, возвращает не то что надо. Этот умный компилятор не может знать что надо, для него что написано то и верно. В аннотации явно программист напишет что хочет вернуть, и если ошибочно поставит early return, допустим, то компилятор напомнит.
Или ещё пример, была колонка в базе string, стала integer, я вообще не представляю как в легаси проекте на руби кто-то осмелится на такое. Как умный компилятор без аннотаций узнает что оно теперь integer?
Исходная версия Romaboy, :
Я немного кодил на кристале, так вот аннотации там ну очень редко нужны.
В современных языках так и делают, например, rust, go, TS. Когда компилятор сам может вывести то выводит, когда нет - то просит писателя кода это сделать. Писать типы руками звучит как пытка для тех кто не пробовал, но на самом деле они делают код понятнее. С чего вы взяли что в rust, go, crystal и других эту фичу просто недоделали потому что дурачки или ленивые, а вот гениальный Matz говорит сто проц скоро вообще любой кейс будет автоматически распознаваться.
Ниже все это один пример «как вы представляете угадать рантайм тип умным компилятором?»
Пользователь в рантайме присылает данные, тип этих данных этот гениальный компилятор как узнает? Грузим что-то с third-party, как тип данных узнает «автоматически»? Аргумент метода утиной типизацией проверяется if arg.is_a?(Duck), сам разработчик тут не уверен что пришлют как автоматом узнает? JSON файл с диска прочитали и распарсили, как тип узнать?
И ещё один пример, написали фукнцию с ошибкой, возвращает не то что надо. Этот умный компилятор не может знать что надо, для него что написано то и верно. В аннотации явно программист напишет что хочет вернуть, и если ошибочно поставит early return, допустим, то компилятор напомнит.
Или ещё пример, была колонка в базе string, стала integer, я вообще не представляю как в легаси проекте на руби кто-то осмелится на такое. Как умный компилятор без аннотаций узнает что оно теперь integer?