Size: a a a

2020 March 09

EG

Emmanuel Goldstein in rust_offtopic
Stanislav Popov
нет никакой динамики.

автор интерпретируемого языка не захотел/не смог сделать механизм который бы позволял описать очевидное типа конструктор класса N  отдает внезапно обьект класса N.

только потом набежали неграмотные школьники и подумали опа, если я буду тут патчить обьект лишним полем это не обяжет меня патчить его везде, это не баг а фича

а потом выросло поколение "я же знаю что за обьект я отдаю здесь, я же не дурак чтобы понадписывать, иди читай доки/исходники"
А потом выясняется, что иногда действительно проще не разбираться, как в системе типов выразить какое-то нетривиальное утверждение
источник

EG

Emmanuel Goldstein in rust_offtopic
Поэтому в систему типов прорастают interface{}, dyn Any, void* и прочие undefined :: a.
источник

SP

Stanislav Popov in rust_offtopic
окей допустим проще. но от этого страдают тривиальные утверждения.

ты можешь на статике сделать подобие неизвестного обьекта которому будешь посылать команды и траить
источник

EG

Emmanuel Goldstein in rust_offtopic
Простой пример: я дёргаю апишку, которая отдаёт джсон сложной структуры. Мне из него нужно одно поле. В динамическом языке я его паршу в нетипизированную хешмапу, ['пишу']['такое']['выражение'] и получаю.
источник

SP

Stanislav Popov in rust_offtopic
тоесть сложные кейсы оправдывают отказ от типов вообще. и простые кейсы ты вынужден воспринимать как сложные
источник

EG

Emmanuel Goldstein in rust_offtopic
В статической типизации я либо использую костыли вроде «типа» JsonValue, либо описываю сложные вложенные структуры
источник

EG

Emmanuel Goldstein in rust_offtopic
И этот JsonValue нас обратно возвращает к динамической типизации
источник

SP

Stanislav Popov in rust_offtopic
а в статическом языке ты его парсишь в нетипизированный жсон и делаешь obj.get().get().get()
источник

SP

Stanislav Popov in rust_offtopic
так эти костыли это и есть динамика. ты щас динамику костылями назвал
источник

EG

Emmanuel Goldstein in rust_offtopic
Да, это именно то, что я только что сделал. Просто в многих кейсах нужно столько этих костылей, что проще сразу взять динамический язык.
Или взять динамический язык и досыпать к нему статики сбоку где надо. В mypy очень выразительная система типов.
источник

EG

Emmanuel Goldstein in rust_offtopic
В TS, говорят, тоже.
источник

SP

Stanislav Popov in rust_offtopic
эта как раз та нереальная толстота которую я никак понять не могу - если нет типов то самое костыльное и трешовое говно внезапно не говно, потому что там все такое говно
источник

EG

Emmanuel Goldstein in rust_offtopic
В реальном мире всё говно
источник

SP

Stanislav Popov in rust_offtopic
начинается
источник

EG

Emmanuel Goldstein in rust_offtopic
И с реальным миром иногда проще работать используя некорректные, но удобные инструменты
источник

SP

Stanislav Popov in rust_offtopic
>Просто в многих кейсах нужно столько этих костылей, что проще сразу взять динамический язык.

тоесть погоди, ты заявляешь что количество этих костылей явно больше чем то что нормально типизируется?
источник

EG

Emmanuel Goldstein in rust_offtopic
И ты это в любом случае делаешь, просто через прослойку типа JsonValue
источник

EG

Emmanuel Goldstein in rust_offtopic
Stanislav Popov
>Просто в многих кейсах нужно столько этих костылей, что проще сразу взять динамический язык.

тоесть погоди, ты заявляешь что количество этих костылей явно больше чем то что нормально типизируется?
Легко. Особенно если ты изолируешь самые проблемные места в один проект
источник

SP

Stanislav Popov in rust_offtopic
ну тут мало с чем спорить конечно. тоесть позиция ясна и она печальна, конечно. я уверен на очень многих проектах можно прийти и сунуть скриптодауна в его говно и спросить чего он не покрыл тут типом.

ты как бы и сам признаешь что есть мупу, есть тс. ты покрываешь большую часть кода типами а на проблемные места вешаешь any-латки.

я сейчас настаиваю что мест где есть типы гораздо больше чем где их нет. даже в сраной вебне - я даже могу принять что орм код нетипизирован, но при этом всегда моделька и методы модельки типизированы очень хорошо. и вся доменная логика требует нормальной типизации

я даже могу сказать что долбаный жсонобжект можно врапнуть в нормальный класс с нормальными аксессорами, в отличии от скриптов где ты этого просто не можешь сделать в силу бессмысленности
источник

EG

Emmanuel Goldstein in rust_offtopic
Stanislav Popov
ну тут мало с чем спорить конечно. тоесть позиция ясна и она печальна, конечно. я уверен на очень многих проектах можно прийти и сунуть скриптодауна в его говно и спросить чего он не покрыл тут типом.

ты как бы и сам признаешь что есть мупу, есть тс. ты покрываешь большую часть кода типами а на проблемные места вешаешь any-латки.

я сейчас настаиваю что мест где есть типы гораздо больше чем где их нет. даже в сраной вебне - я даже могу принять что орм код нетипизирован, но при этом всегда моделька и методы модельки типизированы очень хорошо. и вся доменная логика требует нормальной типизации

я даже могу сказать что долбаный жсонобжект можно врапнуть в нормальный класс с нормальными аксессорами, в отличии от скриптов где ты этого просто не можешь сделать в силу бессмысленности
Я стараюсь везде вместо Any использовать object. Это гарантирует, что ты не забудешь проверку и при этом ты можешь проверять только те данные, которые используешь.
источник