Информация об изменениях

Сообщение Re[29]: Поругайте TypeScript/node.js от 30.06.2022 10:46

Изменено 30.06.2022 10:49 ·

Re[29]: Поругайте TypeScript/node.js
Здравствуйте, Pauel, Вы писали:

P>·>Так в упомянутых яп (java/c++/c#/haskell) везде ломать надо намеренно. Небольшим исключением является java, т.к. из-за backward compatibility чтобы поломка стала фатальной ошибкой — нужно прописать дополнительные параметры компилятору, что собственно полностью аналогично необходимости прописывать compilerOptions.strict=true в ts. Так что либо мой аргумент валидный, либо твоё утверждение о неявных поломках в других яп — невалидно. Выбирай.

P>В C# буквально не получится тот же вариант, что и в ТС, будет просто ошибка в рантайме т.к. C# хранит типы в рантайме.
Java тоже хранит типы в рантайме. Вариант в C# не получится лишь потому, что там легаси с raw types нет.

P>В Джаве, скажем, если ты не на массивах которые reifable, то из за type erasure случайные "фиксы" то тут, то там.

По-моему ты не очень правильно понимаешь, что такое type erasure.

P>>>Ковариантность-контравариантность штука хорошая. Тебя смущает, что в ТС её добавили позже, чем в джаву, или что?

P>·>Не смущает. Просто говорю, что да, возможно лет через 5 ts станет хорошим яп. Ведь фичу добавили только месяц назад, теперь ведь ещё все либы надо апдейтить...
P>TS это лучший из яп которых пруд пруди в ноде/браузере.
Не спорю. Но явно не лучший в бэке, и именно по той главной причине, что он поверх js.

P>readonly при своей дырявости имеет несколько вариантов для предоставления гарантий. Т.е. не такая это и страшая вещь, как ты тут расписываешь. Это в джаве в норме использовать мутабл дизайн. В динамических языках такое вобщем избегают. Такой вот парадокс.

Можно и иммутабл, просто, как правило, тормознее. Но т.к. нода и так безбожно тормозит, то одним тормозом больше, одним меньше, уже не столь важно.

P>>>ТС вообще появился в тот момент, когда джаве было без малого лет 20.

P>·>Во-во. Уже шли по протоптанной тропке и всё равно дров наломали.
P>Ничего пока что не наломали. Конкуренты типа того же Flow, вот те наломали дров, поскольку взялись именно исправлять жээс.
Не наломали по сравнению с другими js-улучшателями, но не по сравнению с другими яп, типа того же c#.

P>>>Тем не менее, свою долю на бакенде он уже отнял.

P>·>У пхп и перла.
P>И у джавы в т.ч. Веб-приложения, т.е. фронтенд-бакенд большей частью переползают на Fulstack Node с тайпскриптом.
Может быть местами, где деньги на программистах экономят, но вряд ли большей частью.

P>>>Т.е. условно, о чем и речь.

P>·>Ок, можно натянуть сову на джаву, формально. Осталось тебе ещё рассказать такое про с++ и c#.
P>Зачем? С С++ все просто — читай внимательно свою же ссылку.
Там явно написано, что нельзя: No, you cannot convert between vectors of different types.

P>C С# все ровно так же ,как в джаве, только 1 из за отсутствия type erasure ты гарантировано получишь исключение в рантайме в любых типах, а не только массивах, если там не object под капотом

В java ты тоже получишь исключение, только в месте приведения типа элемента взятого из коллекции, а не в момент его добавления. Разберись что такое type erasure.

P>т.е. animals[0] = new Cats() будет иногда работать, а иногда будет кидать исключение

Это не будет кидать исключение. Исключение будет кидать Dog d = dogs[0].

P>2 типы вида IList никто из фремворка не выбросил, а это означает неявный каст к object и всё, приехали.

Не понял, зачем его выбрасывать?

P>Т.е. на мой взгляд и в джаве, и шарпе дженерики надо было добавлять изначально. А так все гарантии в сложных случаях приходится обеспечивать руками, следовательно, время от времени будут дыры. У тебя, понятно, есть скил "писать без багов", судя по прошлой беседе, тут ты сразу начнешь возражать

Таких неявных как в ts дыр — нет. Есть явно протыкаемые дыры как в хаскелле.
Re[29]: Поругайте TypeScript/node.js
Здравствуйте, Pauel, Вы писали:

P>·>Так в упомянутых яп (java/c++/c#/haskell) везде ломать надо намеренно. Небольшим исключением является java, т.к. из-за backward compatibility чтобы поломка стала фатальной ошибкой — нужно прописать дополнительные параметры компилятору, что собственно полностью аналогично необходимости прописывать compilerOptions.strict=true в ts. Так что либо мой аргумент валидный, либо твоё утверждение о неявных поломках в других яп — невалидно. Выбирай.

P>В C# буквально не получится тот же вариант, что и в ТС, будет просто ошибка в рантайме т.к. C# хранит типы в рантайме.
Java тоже хранит типы в рантайме. Вариант в C# не получится лишь потому, что там легаси с raw types нет.

P>В Джаве, скажем, если ты не на массивах которые reifable, то из за type erasure случайные "фиксы" то тут, то там.

По-моему ты не очень правильно понимаешь, что такое type erasure.

P>>>Ковариантность-контравариантность штука хорошая. Тебя смущает, что в ТС её добавили позже, чем в джаву, или что?

P>·>Не смущает. Просто говорю, что да, возможно лет через 5 ts станет хорошим яп. Ведь фичу добавили только месяц назад, теперь ведь ещё все либы надо апдейтить...
P>TS это лучший из яп которых пруд пруди в ноде/браузере.
Не спорю. Но явно не лучший в бэке, и именно по той главной причине, что он поверх js.

P>readonly при своей дырявости имеет несколько вариантов для предоставления гарантий. Т.е. не такая это и страшая вещь, как ты тут расписываешь. Это в джаве в норме использовать мутабл дизайн. В динамических языках такое вобщем избегают. Такой вот парадокс.

Можно и иммутабл, просто, как правило, тормознее. Но т.к. нода и так безбожно тормозит, то одним тормозом больше, одним меньше, уже не столь важно, главное чтобы хоть как-то работало, иначе можно поседеешь на поисках багов.

P>>>ТС вообще появился в тот момент, когда джаве было без малого лет 20.

P>·>Во-во. Уже шли по протоптанной тропке и всё равно дров наломали.
P>Ничего пока что не наломали. Конкуренты типа того же Flow, вот те наломали дров, поскольку взялись именно исправлять жээс.
Не наломали по сравнению с другими js-улучшателями, но не по сравнению с другими яп, типа того же c#.

P>>>Тем не менее, свою долю на бакенде он уже отнял.

P>·>У пхп и перла.
P>И у джавы в т.ч. Веб-приложения, т.е. фронтенд-бакенд большей частью переползают на Fulstack Node с тайпскриптом.
Может быть местами, где деньги на программистах экономят, но вряд ли большей частью.

P>>>Т.е. условно, о чем и речь.

P>·>Ок, можно натянуть сову на джаву, формально. Осталось тебе ещё рассказать такое про с++ и c#.
P>Зачем? С С++ все просто — читай внимательно свою же ссылку.
Там явно написано, что нельзя: No, you cannot convert between vectors of different types.

P>C С# все ровно так же ,как в джаве, только 1 из за отсутствия type erasure ты гарантировано получишь исключение в рантайме в любых типах, а не только массивах, если там не object под капотом

В java ты тоже получишь исключение, только в месте приведения типа элемента взятого из коллекции, а не в момент его добавления. Разберись что такое type erasure.

P>т.е. animals[0] = new Cats() будет иногда работать, а иногда будет кидать исключение

Это не будет кидать исключение. Исключение будет кидать Dog d = dogs[0].

P>2 типы вида IList никто из фремворка не выбросил, а это означает неявный каст к object и всё, приехали.

Не понял, зачем его выбрасывать?

P>Т.е. на мой взгляд и в джаве, и шарпе дженерики надо было добавлять изначально. А так все гарантии в сложных случаях приходится обеспечивать руками, следовательно, время от времени будут дыры. У тебя, понятно, есть скил "писать без багов", судя по прошлой беседе, тут ты сразу начнешь возражать

Таких неявных как в ts дыр — нет. Есть явно протыкаемые дыры как в хаскелле.