Pull to refresh
35
0
Илья Сазонов@poxvuibr

Software developer

Send message

Что такого может рассказать спикер, чего не расскажет DeepSeek?

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

чтобы потребитель мог не знать о реализации и не иметь зависимости от пакета с ней

А приём со структурой, который вы описали не даёт такой возможности?

Экспортируемые методы реализации это и есть контракт. Интерфейс тут ничего не улучшит.

А для чего тогда вообще интерфейсы нужны?

ну Михайл написал, что файнал можно менять всегда и любым способом

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

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

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

Мне кажется, правильнее было бы сделать настройку для модулей запрещающую изменение файналов или даже применение рефлексий, а не наоборот все ломать одним махом

Сложный вопрос. Но вот sun.misc.unsafe постепенно убирают насовсем, тут наверное та же история будет

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

Ну он никуда не делся ))

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

Да, об этом есть замечание в статье

Но зато безопасники будут рады.

Безопасники вообще не знают что это всё такое. Рады будут разработчики, которые будут знать, что если они написали final, то это настоящий final, а не final курильщика

кстати, странно что для Михаила не стала откровением полная изменяемость ссылочных типов объявленных как final

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

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

Когда мы говорим про десериализацию, то имеется в виду модификатор final на полях объектов, а не модификатор final на локальных переменных.

И конкретно речь то том, что модификатор final на поле объекта не даст нам написать код, который может поменять значение поля после создания объекта. Но при этом мы можем поменять значение этого поля с помощью рефлекшна в любой момент. Вот эту возможность хотят потихоньку удалить

Статью надо было назвать Честный final!

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

Integrity by Default в этой статье означает, что final в коде это действительно должен быть честный final, значение которого совершенно честно нельзя изменить никак и никому. Честность по умолчанию! Я бы перевёл так, жаль возможность упущена.

Хороший, кстати, вопрос. Можете кого-нибудь порекомендовать?

Ну и вот холивары не нужны. Ничего полезного кроме поднятия своего ЧСВ оно не даёт и то только тому кто якобы победил.

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

Итого: final нужно тогда когда нужно.
Не final нужно тогда когда нужно.

Если так, то перед каждым классом или переменной нужно либо поставить модификатор non-final, либо final. Без модификатора код компилироваться не должен.

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

Это сложно, мало кто умеет. Поэтому ограничения в виде приватных классов и тому подобного можно встретить во многих популярных фреймворках. Вот с Спринге например

Нравится вам или нет, но наследование является неотъемлимым и одним из ключевых свойств ООП.

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

Ну когда я делал дома ремонт, то да, этого вполне достаточно

Внезапно

с учётом инженерного образования в вузе и базового знания электротехники и свойств материалов

Я думаю, что впринципе если ты умеешь программировать, то ты сможешь работать программистом, да )))

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

Будет-ли в доступен для установке через winget?

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

Релизы JDK 25ой появиятся в списке доступных для скачивания в настройках JDK не раньше чем Axiom JDK 25?

Уже есть, я только что скачал ))

Вероятность коллизий UUIDv7, сгенерерованных в рамках одного бэкенда

А тут по бэкендом имеется в виду один бэкенд-процесс или один сервер с Postgresql?

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

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

Не, типовая будет while(inProgress) . Но вообще сам поисковый запрос несколько безумен и количество результатов мало о чём говорит. while false даст их всего в два раза меньше

Оно неполное. Надо кидать эксепшн, если цикл зашёл за 256, тогда будет лучше. А цифра, конечно, произвольно выбирается. Какая - то цифра за которую цикл точно не должен зайти.

А как насчёт тех нормальных людей, который используют интернет с ноутбука? Им как? Можно подключаться с ноутбука к публичному вайфаю?

Тоже самое могу сказать про entity framework без него вся логика фреймворка лежала бы в приложении а не библиотеке

Я процитирую кусок из статьи

А значит, выбор будет между полноценным, зрелым и мощным решением вроде Hibernate — и… собственным самодельным ORM, к которому я неизбежно приду в попытках решить те же задачи.

Так что то, о чём вы говорите есть прямо в тексте статьи

Промпт всё равно выбирает автор

Вот пусть он промпт и публикует

1
23 ...

Information

Rating
6,708-th
Works in
Date of birth
Registered
Activity