Size: a a a

2020 March 09

SP

Stanislav Popov in rust_offtopic
вот такое политкорректное адвокатирование динамики оно как бы не спорит по существу, но оно манипулирует отношением кейсов где сложно и где просто.

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

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

SP

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

B

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

EG

Emmanuel Goldstein in rust_offtopic
Stanislav Popov
вот такое политкорректное адвокатирование динамики оно как бы не спорит по существу, но оно манипулирует отношением кейсов где сложно и где просто.

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

не может быть чтобы все было сложно и не выражаемо. у тебя всегда будут функции с четкой сигнатурой, у тебя всегда будут обьекты с каким то ожидаемым шейпом. а динамика я напомню делает из простого кода всегда сложный - у тебя любая функция дженерик, у тебя везде пролезает что угодно. у тебя нет уверенности в нуллабельности обьекта
Есть куча вещей, невыразимых или сложно выразимых в системе типов. Вот, например, теоретический формат апишки: тебе прилетает код ответа и список записей. Каждая запись имеет тип, таймстамп и поля в зависимости от типа. Одним из полей может быть файл, который картинка или аудио. У картинки есть размер, у аудио длина, у обоих путь.
источник

EG

Emmanuel Goldstein in rust_offtopic
Большая часть полей опциональна
источник

SP

Stanislav Popov in rust_offtopic
Emmanuel Goldstein
Есть куча вещей, невыразимых или сложно выразимых в системе типов. Вот, например, теоретический формат апишки: тебе прилетает код ответа и список записей. Каждая запись имеет тип, таймстамп и поля в зависимости от типа. Одним из полей может быть файл, который картинка или аудио. У картинки есть размер, у аудио длина, у обоих путь.
ну то что ты назвал это и есть типизация
источник

EG

Emmanuel Goldstein in rust_offtopic
Stanislav Popov
ну то что ты назвал это и есть типизация
Ты нафиг погрязнешь в десятиуровневых энумах
источник

EG

Emmanuel Goldstein in rust_offtopic
И работать с ними будет крайне неудобно
источник

SP

Stanislav Popov in rust_offtopic
окей вот давай разберем этот пример. вот смотри есть вде либы для клиентов телеграма. возмем например питон. автор одной либы написал её в динамике - тоесть тебе просто приходит "нечто"

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

EG

Emmanuel Goldstein in rust_offtopic
Я сейчас копаюсь с pulldown-cmark, и нет, матчить по десяти уровням энума неэргономично
источник

SP

Stanislav Popov in rust_offtopic
вот чувачки сделали типчики https://github.com/teloxide/teloxide/tree/master/src/types
источник

EG

Emmanuel Goldstein in rust_offtopic
Апи телеграма приятное, да, его можно хорошо типизировать
источник

EG

Emmanuel Goldstein in rust_offtopic
Вот кстати питоновский юнион отчасти решает проблему
источник

SP

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

EG

Emmanuel Goldstein in rust_offtopic
Ну, ты можешь это составить с помощью всяких FileKind, но это будет больно
источник

EG

Emmanuel Goldstein in rust_offtopic
И документацию по этому будет читать больно
источник

SP

Stanislav Popov in rust_offtopic
так смотри всеравно те проверки которые ты описываешь в коде - их можно засунуть в некий враппер который и будет представлять данные
источник

SP

Stanislav Popov in rust_offtopic
ну больно. а в рантайм репле играться с обьектов и писать лесенки из условий менее больнее чтоли?
источник

EG

Emmanuel Goldstein in rust_offtopic
Stanislav Popov
так смотри всеравно те проверки которые ты описываешь в коде - их можно засунуть в некий враппер который и будет представлять данные
Можно, но выразительности растовской системы типов не хватает для этого.
Посмотри на тот же самый pulldown-cmark — ивент, внутри тег, внутри кодблок, внутри кодблоккайнд, внутри строка
источник

EG

Emmanuel Goldstein in rust_offtopic
Stanislav Popov
ну больно. а в рантайм репле играться с обьектов и писать лесенки из условий менее больнее чтоли?
Как раз в статике ты пишешь лесенку условий
В динамике ты ловишь LookupError и логируешь, что из апишки пришло говно
источник