Size: a a a

2020 December 10

DF

Denis Fakhrtdinov in ErlangRus
Волшебная магия не_нужен.
источник

ММ

Михаил Малюк... in ErlangRus
Denis Fakhrtdinov
Это какая-то волшебная магия.
а доставка сообщения не магия?🤷🏻‍♂️в эрланге весь слой межпроцессного взаимодействия - это сплошная магия, спрятанная от глаз, и вроде все только довольны.
источник

ММ

Михаил Малюк... in ErlangRus
я к тому, что если магия "просто работает" по понятным принципам и лечит головную боль, то такую магию нужно приветствовать, а не бегать от нее
источник

ММ

Михаил Малюк... in ErlangRus
то есть все зависит от реализации
источник

DF

Denis Fakhrtdinov in ErlangRus
Я хочу знать, что последовательные запуски сервиса приведут к одинаковому результату при том же конфиге. Если там внутре неонка, это может приводить к магии.
источник

ММ

Михаил Малюк... in ErlangRus
Denis Fakhrtdinov
Я хочу знать, что последовательные запуски сервиса приведут к одинаковому результату при том же конфиге. Если там внутре неонка, это может приводить к магии.
а чт заставляет думать, что результаты могут быть разными?
источник

DF

Denis Fakhrtdinov in ErlangRus
Михаил Малюк
ну, или если обнаружит две и более реализации генсервера, то не взлетит с ошибкой "слишком много вариантов для внедрения зависимости, я не знаю что делать" :D
Вот это.
источник

DF

Denis Fakhrtdinov in ErlangRus
Если нужно уметь переключаться между реализациями, пусть это лежит в конфиге и дергается через apply, например.
источник

ММ

Михаил Малюк... in ErlangRus
Denis Fakhrtdinov
Вот это.
ну так если ты сказал "я буду юзать реализацию поведения А" и сам же дал доступ к двум резным реализациям, то на этой же конфигурации ты будешь гарантированно получать состояние неопределенности и ошибку =)
источник

ММ

Михаил Малюк... in ErlangRus
Denis Fakhrtdinov
Если нужно уметь переключаться между реализациями, пусть это лежит в конфиге и дергается через apply, например.
практика показывает, что не нужно. нужен простой механизм "вынуть реализацию А и на ее место впихнуть реализацию Б не затронув код-потребитель", а совместное использование двух разных реализаций это уже какая-то в общем случае дичь
источник

DF

Denis Fakhrtdinov in ErlangRus
Я не понимаю тогда что значит "вынуть" и "впихнуть".
источник

DF

Denis Fakhrtdinov in ErlangRus
Кто решает что вынуть, а что впихнуть?
источник

ML

Maksim Lapshin in ErlangRus
я тоже перестал понимать
источник

ММ

Михаил Малюк... in ErlangRus
а что именно непонятно? где я запутал?
источник

ML

Maksim Lapshin in ErlangRus
в моём понимании, есть существенная разница между глобальной настройкой (compile time, application env) и динамической передачей поведения в запускаемый код.

Каждому вызову gen_server:start_link мы указываем свой модуль и стартовые данные, а вот логгер мы настраиваем глобально.


Нельзя указать свою имплементацию логгера для конкретного этого ген-сервера
источник

ИИ

Иванов Иванов... in ErlangRus
Михаил Малюк
а что именно непонятно? где я запутал?
ты задрал уровень асбтракции до непонятного
источник

DF

Denis Fakhrtdinov in ErlangRus
> нужен простой механизм "вынуть реализацию А и на ее место впихнуть реализацию Б не затронув код-потребитель"

Вот этот механизм — это конфигурация, которая затем превращается в apply(ConfiguredM, function, Args). Не вижу необходимости придумывать что-то ещё.
Если уж совсем нужно быстро, то можно написать рантайм-генерацию быстрого маппер-модуля, но сомневаюсь что это даст какой-то ощутимый выигрыш, а магии добавит.
источник

ММ

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

совместное и одновременное использование двух реализаций интерфейса А обычно не требуется и не нужно

как-то так
источник

DF

Denis Fakhrtdinov in ErlangRus
Это решается системой контроля версий.
источник

ML

Maksim Lapshin in ErlangRus
Михаил Малюк
есть интерфейс А
есть реализация интерфейса А
код-потребитель использует сущность, реализующую интерфейс А, которую получит при помощи механизма di
в какой-то момент времени выясняется, что существующая реализация интерфейса А полна фатальных недостатков и ее решено переписать
создается вторая версия реализации интерфейса А
первая версия выпиливается и выбрасывается в мусор
в коде-потребителе ничего менять не приходится, потому что новая версия будет все так же найдена механизмом di и внедрена везде, где нужен интерфейс А

совместное и одновременное использование двух реализаций интерфейса А обычно не требуется и не нужно

как-то так
кажется, ты сейчас смешиваешь код потребителя, у которого внутри написано:   Logger:log() и код той системы, которая как раз передаст значение переменной Logger
источник