@proelixir

Страница 920 из 1045
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
вроде потому что консоль не в supervision tree приложения
засунул внутрь функции и :application.get_application(__MODULE__) заработал спасибо

без супервизора и вообще без запуска приложения

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
Такой вариант упадёт со stack overflow
в beam же нет stack overflow, он выжрет всю память и умрёт

Evgeny
28.03.2018
15:17:37
Александр
28.03.2018
15:18:16
а это типа не stack overflow? :)
ошибка stack overflow подразумевает жёсткий лимит, в эликсире его нет

Evgeny
28.03.2018
15:18:16
а типа стек нельзя переполнить, можно память переполнить, понял

Я 1 раз за всю жизнь писал рекурсию в реальном проекте на эликсире
достаточно парсинг какого-нибудь говна сделать и будет тебе рекурсия

или структуры данных вроде деревьев и списков

в целом да, арность должна совпадать, тогда хвостовая рекурсия оптимизируется в цикл

скажем так 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
Да, ты прав.
Нет, стек и вся память разные вещи

Страница 920 из 1045