Size: a a a

2020 December 10

DF

Denis Fakhrtdinov in ErlangRus
Так процесс — это объект по Кею. У него есть инит и стейт.
источник

PG

Pig Greenest in ErlangRus
вот
источник

ŹR

Źmićer Rubinštejn in ErlangRus
Denis Fakhrtdinov
Так процесс — это объект по Кею. У него есть инит и стейт.
Ну да, то что я и говорю. Можно сделать DI в генсервер, но не в модуль же
источник

DF

Denis Fakhrtdinov in ErlangRus
Для этого нужно чтобы это происходило в рантайме, да, а все инклуды и импорты — это компайл-тайм.
источник

DF

Denis Fakhrtdinov in ErlangRus
А я что-то не заметил, чтобы apply в среде elixir сильно жаловали.
источник

วโ

วลาดิสลาว โควาเลนโก🐝... in ErlangRus
эрланг ооп язык же, почему вы не хотите говорить про ооп
источник

ММ

Михаил Малюк... in ErlangRus
Źmićer Rubinštejn
Толи я чего-то не понимаю, толи одно из двух. О каких ссылках идёт речь, если это модули а не обьекты??
да это я путаюсь в терминах, скорее всего. короче! суть di в том, что потребитель некоего сервиса может себе позволить не знать откуда этот сервис взять. то есть просто использует его не заботясь о наличии, так? вроде так. сам сервис при этом может себе позволить не знать, кто его использует - он просто существует. так? и тут вроде так. тогда суть di сводится к тому, что бы в какой-то момент времени собрать потребности, и туда где эти потребности есть поместить то, что эти потребности реализует. в любом виде - в виде ссылки, или id в каком-то менеджере сервисов, и так далее. как это могло бы выглядеть в эрланге вопрос открытый, но кто мешает, скажем, в compile time все обращения к, к примеру, gen_server превратить в проксик, в который можно завернуть хоть оригинальный gen_server, хоть любую другую реализацию? интерфейс-то у них один и тот же
источник

ММ

Михаил Малюк... in ErlangRus
где я много наврал? :)
источник

วโ

วลาดิสลาว โควาเลนโก🐝... in ErlangRus
Ну да, здесь получается важное отличие от просто конфига
Ты не знаешь, где взять зависимость свою
источник

ŹR

Źmićer Rubinštejn in ErlangRus
Мне просто кажется что во всяких там «ооп» жабоподобных очень плохо и дорого с макросами и рефлексией, поэтому там придумали такую кухню.
В «других языках» модуль может и сам знать на этапе компиляции, откуда ему брать зависимости эти самые. Другое дело - как это все писать.

Если логгер не написан в Эрланге через интерфейс - то хрен что сделаешь уже
источник

ММ

Михаил Малюк... in ErlangRus
วลาดิสลาว โควาเลนโก🐝
Ну да, здесь получается важное отличие от просто конфига
Ты не знаешь, где взять зависимость свою
так это и есть самое ценное. можно даже не знать, что зависимость нужна. вот взять логгер тот же - докинул новую либу для логгирования, и она используется, а не докинул, и божественный разум за тебя сам решил, что можно взять то дефолтное, что встроено в язык. и все работает, все довольны
источник

ММ

Михаил Малюк... in ErlangRus
Źmićer Rubinštejn
Мне просто кажется что во всяких там «ооп» жабоподобных очень плохо и дорого с макросами и рефлексией, поэтому там придумали такую кухню.
В «других языках» модуль может и сам знать на этапе компиляции, откуда ему брать зависимости эти самые. Другое дело - как это все писать.

Если логгер не написан в Эрланге через интерфейс - то хрен что сделаешь уже
самый популярный жабный di фреймворк Spring работает на той самой рефлексии, собирает зависимости в рантайме на старте приложения  и отлично себя чувствует
источник

ММ

Михаил Малюк... in ErlangRus
» В «других языках» модуль может и сам знать на этапе компиляции, откуда ему брать зависимости эти самые.
сама суть di в том, что задача разворачивается из проекции "где взять" в проекцию "куда инжектнуть". так что модуль как раз не должен знать где взять, это какой-то сверхразум либо в компилтайме, либо в рантайме должен собрать модули с потребностями и раздать им реализацию этих потребностей
источник

ŹR

Źmićer Rubinštejn in ErlangRus
Все равно каждый модуль должен задекларировать «мне нужно то-то и то-то» иначе никакой сверхразум этого не поймёт
источник

ŹR

Źmićer Rubinštejn in ErlangRus
А если так - то разницы между «я скажу сверхразуму что мне нужно» или «сверхразум спросит у меня что мне нужно» я не вижу
источник

ML

Maksim Lapshin in ErlangRus
Михаил Малюк
да это я путаюсь в терминах, скорее всего. короче! суть di в том, что потребитель некоего сервиса может себе позволить не знать откуда этот сервис взять. то есть просто использует его не заботясь о наличии, так? вроде так. сам сервис при этом может себе позволить не знать, кто его использует - он просто существует. так? и тут вроде так. тогда суть di сводится к тому, что бы в какой-то момент времени собрать потребности, и туда где эти потребности есть поместить то, что эти потребности реализует. в любом виде - в виде ссылки, или id в каком-то менеджере сервисов, и так далее. как это могло бы выглядеть в эрланге вопрос открытый, но кто мешает, скажем, в compile time все обращения к, к примеру, gen_server превратить в проксик, в который можно завернуть хоть оригинальный gen_server, хоть любую другую реализацию? интерфейс-то у них один и тот же
ну всё именно так.

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


Так, например, классический код на реакте — плохо тестируемый хлам, потому что его только мокать можно.

Код на ангуляре все внешние зависимости явно декларирует и просит ему их передать
источник

ММ

Михаил Малюк... in ErlangRus
Źmićer Rubinštejn
Все равно каждый модуль должен задекларировать «мне нужно то-то и то-то» иначе никакой сверхразум этого не поймёт
в принципе любое использование gen_server:call() является декларацией такого намерения и такой нужды. при этом держим в голове, что генсервер это поведение, суть интерфейс, а значит у него может быть много реализаций, и написуя конкретный модуль юзающий генсервер ты можешь позволить себе даже не задумываться каая реализация будет использована - какая-то будет, этого достаточно
источник

ММ

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

ММ

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

DF

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