- 1
хде хруст?
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−6
хде хруст?
Превед, говнокод. Чому нет категории для раста?
PACT 28.07.2022 13:05 # 0
Steve_Brown 28.07.2022 13:39 # −6
Rooster 29.07.2022 10:26 # +1
guest6_uebok 31.07.2022 14:17 # 0
Rooster 29.07.2022 10:27 # 0
CBuHOCO6AKA 29.07.2022 13:01 # 0
PACT 29.07.2022 14:59 # 0
3.14159265 30.07.2022 03:08 # 0
Компиляция рустни длиной почти в вечность, для них это плюс, а не минус.
Никогда не любил сей сцайт c быдлогомиксами, но тут broken watch argument. И там есть пару удачных находок.
Лучшая иллюстрация к аргументу xkcd.com/303 (оно компилируется целый рабочий день, а мы пинаем хуи).
И большинство форсеров рустни... сами на нёй ничего не пишут, а только трындят какой это заебатый язык.
Распространённый на форумах типаж пиздабола-кукаретика.
guest6 30.07.2022 17:30 # +1
А потом мы перешли на котлин, и всё стало намного дольше.
Отличие котлина от любого другого языка программирования в том, что он медленно компилируется, зато потом в рантайме всё тормозит (как всегда в JVM).
guest6 30.07.2022 17:35 # 0
nyTuH_nugop 30.07.2022 18:16 # +1
ISO 31.07.2022 11:53 # +1
guest6 07.01.2023 07:42 # 0
3.14159265 31.07.2022 00:24 # 0
Не от любого другого.
Это прям, слово-в-слово описание Свалки.
https://govnokod.ru/27985#comment761061
Впрочем всё-равно сорта йажи.
3.14159265 31.07.2022 00:42 # +2
Хахаха. Да что вы знаете о «долго»?
Йажа компилируется быстрее крестов. А кресты быстрее дrustни.
Компиляция Гiгетох после перехода на ржавчину могла идти ЧАСАМИ.
При том что рустня изначальна имела в основании крайне шустрый Шланг.
И у неё на шее не висело Сишное легаси, с инклюдами и хедерами.
А была возможность с нуля пилить нормальную мудульную систему.
Тем не менее анскилябры умудрились обделаться даже тут.
CBuHOCO6AKA 31.07.2022 01:42 # 0
guest6 31.07.2022 01:45 # 0
bormand 31.07.2022 08:59 # 0
Они захотели прям на уровне функций инкрементальность, чтобы смотреть на сишников с высока... и обосрались. Походу до сих пор инкрементальные билды крашатся.
guest6 07.01.2023 07:09 # 0
nyTuH_nugop 30.07.2022 18:19 # 0
guest6 07.01.2023 07:40 # 0
зато есть статический полиморфизм (как концепты) ну и динамический тоже есть
Раст это первый хипстерский язык без вонючего ГЦ , а это уже много
guest6 07.01.2023 07:37 # 0
* Перформанс почти как у плюсов
* чек лайфтайма и ссылок в компиляции
* бесплатный API с сями
* крэйт для работы с виндоапи в коплекте
* ключ слово unsafe, и пиши уже как тебе угодно (сырые указатели и пр)
* пакетный менеджер и тесты в комплекте
* неймспейсы и модулми
JloJle4Ka 07.01.2023 15:50 # +1
necKoB 07.01.2023 17:25 # 0
guest6 07.01.2023 18:54 # 0
ну да
тебе небось Java больше нравится...
Desktop 08.01.2023 00:23 # 0
можешь сделать ffi из раста в эйфорию и течь?
guest6 07.01.2023 07:45 # 0
В последнее время популярно асинхронное программирование на корутинах. Никто не хочет проблемы 10K. Никто не хочет десять тыщ тредов, которые висят на медленном сетевом I/O.
Но и ебаться с оверлапами, комплишен портами, кику, асинкио и прочими еполами никому не всралося.
Потому Go сделал горутины, в которых блокированные сисколы заменены на асинхронные и макака может даже не думать про это
В расте вместо этого есть крейт токио (типа торнадо в питоне) где вручную написаны асинхронные версии синхронных колов
так себе решение
ISO 07.01.2023 12:33 # 0
JloJle4Ka 07.01.2023 15:48 # 0
necKoB 07.01.2023 17:27 # +1
guest6 07.01.2023 18:54 # 0
* никаких зависимостей от внешнего говна
* статическая типизация всего вообще
* дешевая асинхронщина и параллельность (нету гила)
Реально, чем это хуже скриптоговна?
ISO 07.01.2023 19:22 # 0
Банальные декораторы, например. Метаклассы.
Хуёвые дженерики.
Вместо простых и удобных (особенно в контексте скриптушни) классов — какая-то лютая поебень со «структурами», «типами», «интерфейсами», «методами»… Нахуя это всё?
Desktop 07.01.2023 20:15 # 0
guest6 07.01.2023 20:21 # 0
guest6 07.01.2023 20:42 # 0
hormand 07.01.2023 20:45 # 0
ISO 07.01.2023 21:23 # 0
guest6 07.01.2023 23:28 # 0
просто не в рантайме навеное
ISO 07.01.2023 21:23 # 0
И да, часть из этого можно сделать простым декоратором (которых в «Го» тоже нет, да), но не всё.
guest6 07.01.2023 23:29 # 0
(это постирония конечно же, я не против волшебства, иначе не любил бы руби)
Fike 07.01.2023 23:41 # 0
это вообще сразу сжечь нахуй
если я в коде проверяю, является ли А наследником Б - А не должен иметь возможности подмухлевать
Soul_re@ver 07.01.2023 23:56 # +1
ХХ:ХХ "Вызов метода pitux с аргументами yayco, gnezdo"
XX:XX "Метод pitux вернул vasilisk"
XX:XX "Доступ к несуществующему полю foo"
Вот ему нужно передавать проверки isinstance классу, который он хранит, потому что он иначе этот класс нигде не будет работать нормально.
Fike 08.01.2023 00:02 # 0
Soul_re@ver 08.01.2023 00:31 # 0
А если ты не хочешь ещё и наследоваться от класса, то модифицировать запросы к isinstance придётся.
Держи класс:
Тебе придётся модифицировать запросы к isinstance, чтобы этот код работал:
Fike 08.01.2023 00:33 # 0
держу, это классический декоратор, почему в питоне с ним должны быть проблемы там, где в других языках их нет?
ISO 08.01.2023 00:38 # 0
Fike 08.01.2023 00:40 # 0
ISO 08.01.2023 00:44 # 0
guest6 08.01.2023 00:46 # 0
ISO 08.01.2023 00:55 # 0
guest6 08.01.2023 01:10 # 0
ISO 08.01.2023 01:17 # 0
И даже в статике всё проверяется!
Fike 08.01.2023 01:24 # 0
> питон
https://i.kym-cdn.com/entries/icons/facebook/000/030/710/dd0.jpg
guest6 08.01.2023 01:24 # +1
guest6 08.01.2023 02:26 # 0
А это просто множественное наследование (хотя и называется оно там миксинами)
ISO 08.01.2023 02:36 # 0
Это тоже можно сделать (по сути простой манкипатчинг), да.
> А это просто множественное наследование (хотя и называется оно там миксинами)
Не совсем. Тут вся фишка в том, что классы-потребители миксина не обязаны наследоваться от Action (это вообще протокол), да и сам Action нужен только для статических проверок. Миксин же позволяет добавить в класс какую-то общую функциональность, основывающуюся на фиксированном наборе (возможно, нулевого размера) атрибутов. По сути миксин — это анти-интерфейс: миксин тоже нельзя инстанциировать напрямую, он тоже требует от класса-потомка реализации каких-то методов, но при этом интерфейс содержит только абстрактные методы, а миксин — только реализации.
guest6 08.01.2023 11:46 # 0
guest6 08.01.2023 11:47 # 0
HoBorogHuu_nemyx 08.01.2023 12:15 # 0
Desktop 08.01.2023 12:17 # 0
guest6 08.01.2023 12:20 # 0
Desktop 08.01.2023 12:21 # 0
HoBorogHuu_nemyx 08.01.2023 12:23 # 0
guest6 08.01.2023 12:32 # 0
guest6 08.01.2023 01:18 # +1
ISO 08.01.2023 01:21 # 0
guest6_uebok 08.01.2023 02:51 # 0
Fike 08.01.2023 01:20 # 0
он показал мне задачу, которая является де-факто декоратором. это не мои паттерны, это его паттерн
> оторая примитивно и обобщённо решается переопределением isinstance в три строки.
которая решается без переопределения вообще в одну: hasattr(x, 'speak') или, если очень нужно, callable(getattr(x, 'speak', None))
но даже если бы она давала бенефит, сама по себе простота не может являться причиной тащить хуйню в язык
ISO 08.01.2023 01:26 # 0
Ну понятно: лучше написать ещё триста тысяч классов, чем решить задачу просто и понятно. Зарплата за количество строк сама себя не нафармит!
Thinking With JAWA.
> которая решается без переопределения вообще в одну: hasattr(x, 'speak') или, если очень нужно, callable(getattr(x, 'speak', None))
1. А вот в его случае надо проверять на честный isinstance(). Например, либа требует Foo, а ей надо передать Foo в обёртке.
2. Нахрюк на протоколы сам по себе нелепый: двадцать нужных методов ручками проверять будешь? А если в каждом надо ещё аргументы проверить — вооружишься inspect и пошло-поехало?
> но даже если бы она давала бенефит, сама по себе простота не может являться причиной тащить хуйню в язык
Для скриптушни это не хуйня, это полезная фича.
Fike 08.01.2023 01:29 # 0
погоди-погоди: классы-протоколы пишешь ты, я предлагаю дактайпинг
ISO 08.01.2023 01:43 # 0
Для прояснения задачи:
Есть внешнаяя либа A, в которой определены:
1. Класс Foo;
2. Функции для его получения get_foo (пример из реальной жизни — либа requests, класс Response и функция requests.get(url, ...));
3. Функции, которые принимают Foo и проверяют isinstance(), например:
Есть класс AccessLogger, который оборачивает объект и логгирует доступ к его полям.
Задача: передать в функцию A.do_govno объект Foo, обёрнутый в AccessLogger:
Как ты собираешься её решать?
Fike 08.01.2023 01:49 # 0
Я предлагаю тот вот AccessLogger выше, который является декоратором и и ничем иным, проверять на соответствие нужному не по номинативной линии, а по структурной
> Есть внешнаяя либа A, в которой определены:
Здесь проблема ровно в том, что сидеть надо либо на номинативном, либо на структурном стуле, и припарки "я не тот класс, я этот" в целом от этого не спасут. Решается это в зависимости от контекста либо выдачей пиздюлей автору библиотеки, которая принимает конкретную имплементацию, а не контракт, либо вопросом а нахуя вам вообще логировать что она внутри делает с объектом, который ровно так же идет из третьей библиотеки requests?
ISO 08.01.2023 01:59 # 0
В точности для этого и нужны манипуляции с isinstance(), да.
> сидеть надо либо на номинативном, либо на структурном стуле
Кто это сказал?
> и припарки "я не тот класс, я этот" в целом от этого не спасут
Всё прекрасно работает. Я уже приводил в начале обсуждения пример протоколов, которые используют «трюки» с isintance/issubclass для обеспечения работы коллекций.
Благодаря тому, что Гнидо думал вне коробки (ДЖАВЫ), в «Питоне» список одновременно является Iterable, Sized, Sequence, Collections (https://docs.python.org/3/library/collections.abc.html) — и при этом не отнаследован от миллиарда интерфейсов.
Ну и да, вводить отдельный оператор для проверки сабтайпинга, и отдельный — для дактайпинга — это говнище. Текущая обобщённая реализация прекрасно работает, и в дополнение к этому позволяет делать дополнительные приятные вещи, вроде AccessLogger'а.
> Решается это в зависимости от контекста либо выдачей пиздюлей автору библиотеки
Понятно.
> либо вопросом а нахуя вам вообще логировать что она внутри делает с объектом
Ясно.
Итог — задача не решена, бизнес стоит, убытки идут, зато ПАТТЕРНЫ не осквернили.
Fike 08.01.2023 02:03 # 0
ISO 08.01.2023 02:12 # 0
Да, это сработало бы, если бы либа позволяла передавать в себя стратегию сборки Foo.
> намонкипатчить
Не вижу, чем манкипатчинг превосходит переопределение поведения isinstance().
> протоколы-интерфейсы
Протоколы — это одно из следствий исходной возможности переопределения поведения isinstance(), от которого ты триггернулся. В задаче и её решении я их не применяю.
guest6 08.01.2023 11:41 # 0
ISO 08.01.2023 01:00 # 0
ISO 08.01.2023 00:35 # 0
guest6 08.01.2023 02:18 # 0
--Джавист-джавист, а как ты логируешь вызовы методов?
--Вручную пишу "log" в начале каждого метода
--Джавист-джавист, а ты слышал про AOP?
--AOP ГОВНО ЕГО НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ
--Но почему?
--ПОТОМУ ЧТО AOP ГОВНО ЕГО НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ
--Но почему?
--ПОТОМУ ЧТО AOP ГОВНО ЕГО НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ
--Но почему?
....
--Джавист-джавист, видал в питоне декораторы?
--Да, прикольно, нам в джаве конечно такого не хватает
ISO 08.01.2023 00:34 # 0
Дано:
Теперь мы совершенно бесплатно получаем:
И нам не надо наследоваться от миллиарда интерфейсов (особенно актуально для библиотечных коллекций), не надо никаких «паттернов»: всё просто работает искаропки за счёт переопределения проверки наследования внутри протокола.
Fike 08.01.2023 00:35 # 0
ISO 08.01.2023 00:37 # 0
Fike 08.01.2023 00:38 # 0
ISO 08.01.2023 00:42 # 0
В теории ему ничего не мешает выполнять и любые другие переопределённые isintance, как на практике — не знаю.
Desktop 08.01.2023 00:36 # 0
guest6 08.01.2023 02:23 # 0
guest6 08.01.2023 11:43 # 0
Desktop 08.01.2023 15:45 # 0
Во-вторых, рациональные аргументы никому не интересны
Fike 08.01.2023 17:32 # 0
https://www.youtube.com/watch?v=QJ7LtnlOobQ
gologub_nugop 08.01.2023 23:25 # 0
o6AMa_4MO 08.01.2023 23:32 # 0
ucnaHckuu_CTblD 08.01.2023 23:35 # 0
guest6 07.01.2023 23:34 # 0
тут есть кое-что и про петухов
o6AMa_4MO 09.01.2023 15:09 # 0