Объясните, люди действительно такие мазохисты? Вот нахуя нужна эта статическая типизация? Это говно принципиально не вклинивается в реальный мир. Посудите сами. Допустим я делаю библиотеку для создания парсеров, допустим я делаю это на nim(типичный статик тайп яп). Это омерзительно. Вместо того, чтобы писать код, я описываю типы на каждый ебучий чих, блядь. Схуяли я вообще должен их указывать. Если я хочу, чтобы функция возращала или false(boolean) или массив и любых значений. Массивы в nim - отдельный пиздец. Забудьте про парсинг в nim, здесь вы без костылей AST не построите.
Нахуя нужны типы в принципе, когда есть объекты, классы, компоненты, которые гибче, лучше, и вообще позволяют писать без еботни?
Статическая типизация позволяет исключить некоторые трудновылавливаемые ошибки, которые возможны при работе с динамической типизацией. Если программу пишет новичёк и использует язык с динамической типизацей, то код очень часто превращается в говно.
>>1946 >Статическая типизация позволяет исключить некоторые трудновылавливаемые ошибки, которые возможны при работе с динамической типизацией. Что мешает их вылавливать функциями типа mustbe? mustbe(myVar,string) // если myVar есть строчка - все ок, иначе TypeError
>>1948 >Это что ещё за костыли? Зачем их вылавливать, когда можно просто объявить им тип? В итоге ты так больше костылей наплодишь. Ибо напоминаю, в большинстве случаев в массивах находятся разнородная информация, а функции могут(и должны) возращать значения разных типов. Ни один статически типизированный язык не умеет так: function HelloWorld(arg) { switch(arg) { case "Hello": return "World" case "Bye": return "bye-bye" default: return false } }
>>1949 >в большинстве случаев в массивах находятся разнородная информация Значит беда с архитектурой приложения. В массивах надо стараться хранить значения одинаковых типов, как и функция должна возвращать значение определённого типа. Твой пример выше, когда в случае по умолчанию возвращается false, исключение - это иногда бывает удобно. Я говорю про случаи, когда функция возвращает в одном случае строку, в другом - массив или чило, вот это зло и антипаттерн, так делать не надо.
>>1945 (OP) > нахуя нужна эта статическая типизация? Чтобы при каждой операции со значениями не дрочить хитровыебанную логику выяснения способа реализации этой операции в зависимости от типа значения, а сразу её делать не глядя. Чтобы каждую переменную хранить не как значение + описание, а просто как значение.
Чтобы вкурить программирование не поверхностно, рано или поздно нужно обязательно пройти на нижний уровень и разобраться с тем, как всё это делает процессор, научиться основам языка ассемблера.
>>1952 > Чтобы вкурить программирование не поверхностно, рано или поздно нужно обязательно пройти на нижний уровень и разобраться с тем, как всё это делает процессор, научиться основам языка ассемблера. Это собственно и делаю. Изучаю nim, тк он самый приятный из байтоебских императивных языков. Но система типов это ужас какой-то. А ведь в nim они даже не выводятся(как в хаскелле). Я так привык, что везде основа - объект / функция, что с этими типами я век не сдружусь.
>>1945 (OP) У ЯП без и со статической типизацией есть свои преимущества и недостатки. Аноны выше (в т. ч. и ты) уже их описали. От себя добавлю, что при статической типизации может быть удобно работать с большими массивами однотипных данных типа картинок, видео, потому что быстро.
>>1974 Если ты про лайси, то там скорее всего можно было бы сделать что-то типа hashtable(valuetype,keytype) dict := [a : b,c : d]; Это статическая типизация и придётся выбрать тип для значения и ключа. Вместо hashtable мог бы быть также какое-нибудь дерево или другой ассоциативный массив.
>>1949 Я кроме как в LUA нигде с таким не сталкивался, и мне на первый взгляд - 1 медленно в рантайме, 2 приходится смотреть тело функции чтобы понять, что ожидать от функции и что же она хочет вообще. А если в сложной программе я вижу что получаю непонятный результат непонятного типа, то мне немного плохеет. Вопрос тебе - IDE может показать что возвращает эта функция, или рельно самому смотреть надо?
>>1949 Зачем это нужно? Как предлагается обрабатывать результат такой функции? В каждой функции идёт проверка на тип, или для всех типов определены операторы приведения?
>Ни один статически типизированный язык С++ сойдёт за статически типизированный язык? Отказываюсь показывать код, потому что стесняюсь своих шаблонов.
>>1945 (OP) >Статическая типизация - нахуя? Что-бы писать меньше тестов. А написание тестов, так-то, занимает времени поболее, чем написание функционала.
Подумайте сами, какой из вариантов объявления функции будет лучше, и что будет, если случайно при написании вызова такой функции, поменять аргументы местами? foo(a, b, с, d)
foo(bool a, bool b, bool с, bool d)
foo(UseToToSeTo a, INadoEtoDelat b, EscheChtoTo с, INeZabytEto d)
>>2222 >раз-два в REPL потестил, и заебись Подходит только для маленьких кусков кода. В крупных пректах надо еще монструозное окружение поднимать и приводить его в нужное состояние.