
Alex
28.03.2018
13:04:31
Для релизов в том числе

Evgeny
28.03.2018
13:15:20
а как получить название пакета?
того самого :app_name, чтобы не хардкодить

Google

Vladimir
28.03.2018
13:17:05
может так? application:get_application(self())
или модуль вместо self()

Evgeny
28.03.2018
13:17:57
:undefined возвращает
из iex -S mix
Mix.Project.get.project[:app]
такой есть вариант

Alex
28.03.2018
13:21:05
из iex -S mix
вроде потому что консоль не в supervision tree приложения

Evgeny
28.03.2018
13:24:22
без супервизора и вообще без запуска приложения

Alex
28.03.2018
13:26:02
о, и вправду, так тоже можно.

Mi
28.03.2018
13:26:21
а какой супервизор самый прикольный?

Evgeny
28.03.2018
13:26:39
правда работает только в рантайме

Google

Mi
28.03.2018
13:27:31

Evgeny
28.03.2018
13:27:48

Mi
28.03.2018
13:28:10
ну да

Evgeny
28.03.2018
13:28:23
ну так вот, меня прикалывают черные и серебристые

Mi
28.03.2018
13:28:26
qemu прикольный супервизор?

Evgeny
28.03.2018
13:28:54
qemu - это гипервизор каг-бэ

Mi
28.03.2018
13:29:27
а какой гипервизор самый прикольный?

Evgeny
28.03.2018
13:30:06
KVM/LXC

Mi
28.03.2018
13:30:33
LXC же не то

Evgeny
28.03.2018
13:30:39
хотя нет, это классные гипервизоры, а самый прикольный - это Xen

Mi
28.03.2018
13:31:03
а поч хен прикольнее kvm?

Evgeny
28.03.2018
13:31:36
ну "ксен" или "зен" звучит прикольнее чем какое-то там "кавээм"

Mi
28.03.2018
13:32:33
и панда красивая
но я не понял этот xen
какой dom0 домен вообще ставить и почему

Evgeny
28.03.2018
13:33:26
не, я только по прикольности специалист

Mi
28.03.2018
13:33:50
простите

Evgeny
28.03.2018
14:56:45
скажите пож, а хвостовая рекурсия будет оптимизироваться если рекурсивно вызывается функция другой арности?

Dmitry
28.03.2018
14:57:44
Да, только это не рекурсия

Google

Evgeny
28.03.2018
14:58:58
вот типа такого
def foo(a, b) do
foo(a + b)
end
def foo(i) do
if i > 1_000_000 do
i
else
foo(i + 1, i + 1)
end
end

Dmitry
28.03.2018
14:59:44
Хз.
По определению рекурсия - это когда функция вызывает саму себя

Evgeny
28.03.2018
15:00:19

Dmitry
28.03.2018
15:00:30
Точно

Evgeny
28.03.2018
15:00:43
значит ли это, что вышеприведенный пример может свалится с переполнением стека?
и таки это рекурсия

Aldar
28.03.2018
15:01:39
Тут же экспоненциальная функция получается

Dmitry
28.03.2018
15:01:45
Этот пример вообще не имеет смысла

Aldar
28.03.2018
15:01:48
Она довольно быстро возрастает

Evgeny
28.03.2018
15:03:13
господа, отвечайте по существу, пожалуйста, будет ли эта рекурсия оптимизирована в цикл или нет? То что пример синтетический, это и ежу ясно.

Dmitry
28.03.2018
15:03:25
Нет конечно

Evgeny
28.03.2018
15:04:46
то есть данная рекурсия - не хвостовая, печаль

Aldar
28.03.2018
15:05:38
Можно переделать в хвостовую, вместо if сделать guard

Evgeny
28.03.2018
15:06:04
Скорее вот так:
def foo({i, i}) do
foo(i + i)
end
def foo({i}) do
if i > 1_000_000 do
i
else
foo({i + 1, i + 1})
end
end
это будет соптимизировано? теперь арность-то одинаковая

Dmitry
28.03.2018
15:06:56
Упадёт с ошибкой

Aldar
28.03.2018
15:06:59
def foo(I) when I < 1000_000 do ...

Dmitry
28.03.2018
15:08:35
Верхний кейс не имеет смысла

Google

Dmitry
28.03.2018
15:08:49
Нет смысла обсуждать синтетический пример, короче говоря

Evgeny
28.03.2018
15:08:58
Упадёт с ошибкой
упс, вот так
def foo({a, b}) do
foo(a + b)
end
def foo({i}) do
if i > 1_000_000 do
i
else
foo({i + 1, i + 1})
end
end

Dmitry
28.03.2018
15:11:14
def foo(a, b), do: do_foo(a+b)
defp do_foo(x) when x > 1_000_000, do: x
defp do_foo(x), do: do_foo(2*x+2)

Vasily
28.03.2018
15:12:14

Dmitry
28.03.2018
15:12:15
В книжке так будет написано

Evgeny
28.03.2018
15:12:32
ну я скобки забываю поставить, фак

Vasily
28.03.2018
15:13:00
паттерн матчинг тут нинужен вроде

Evgeny
28.03.2018
15:13:17
а, ты схитрил

Dmitry
28.03.2018
15:13:45
Всмысле схитрил?
Я решил задачу с помощью прямой хвостовой рекурсии

Evgeny
28.03.2018
15:14:02
ты изменил порядок вызовов, мне не нужно реально это считать

Dmitry
28.03.2018
15:14:03
Это ты пытаешься схитрить

Evgeny
28.03.2018
15:14:05
задача липовая

Dmitry
28.03.2018
15:14:06
И её обмануть

Vasily
28.03.2018
15:14:34
оптимизация это как я понимаю если допустим на тупом фибоначчи при глубине вызовов больше 256 какой-нибудь пхп тупо умрет

Dmitry
28.03.2018
15:14:36
Я выдвигаю теорию, что любую такую реальную задачу можно превратить в мою липовую реализацию

Vasily
28.03.2018
15:14:51
без этой самой оптимизации

Alex
28.03.2018
15:15:33
https://pragprog.com/book/wwgraphql/craft-graphql-apis-in-elixir-with-absinthe

Evgeny
28.03.2018
15:16:01
перефразирую, а то походу коряво выразился. вот такой вариант
def foo(a, b) do
...
foo(a)
end
def foo(a) do
...
foo(a, b)
end

Google

Evgeny
28.03.2018
15:16:25
и гле-то там в троеточиях выход из рекурсии

Dmitry
28.03.2018
15:16:27
Такой вариант упадёт со stack overflow

Vasily
28.03.2018
15:16:34
где терминатор

Dmitry
28.03.2018
15:17:07
Я 1 раз за всю жизнь писал рекурсию в реальном проекте на эликсире

Александр
28.03.2018
15:17:09

Evgeny
28.03.2018
15:17:37

Dmitry
28.03.2018
15:17:46

Александр
28.03.2018
15:18:16

Evgeny
28.03.2018
15:18:16
а типа стек нельзя переполнить, можно память переполнить, понял
или структуры данных вроде деревьев и списков
в целом да, арность должна совпадать, тогда хвостовая рекурсия оптимизируется в цикл
скажем так
def foo({a, b}) do
...
foo({a})
end
def foo({a}) do
...
foo({a, b})
end
если нет выхода из рекурсии, то это будет крутиться вечно.

Dmitry
28.03.2018
15:25:47
Так и работает gen_server
def loop do
receive do
...
end
loop()
end

Daniel
28.03.2018
15:26:13

Evgeny
28.03.2018
15:31:47
пишу тут парсинг Valve Data Format, вот и возник вопрос по ТСО

Aldar
28.03.2018
15:33:18