3 ms·
I am curious why iPython-like tools are not possible in Erlang. As far as long you have a REPL, is that not a solid base to start an iPython like project in an
by 616c 12y ago
I am curious why iPython-like tools are not possible in Erlang. As far as long you have a REPL, is that not a solid base to start an iPython like project in any language?
(Notice I said base, not the whole enchilada; I recognize that would be going too far.)
- rdtsc 12y agoThe first hurdle is that Erlang works on modules by default. Those are expected to be compiled from a file. Now Elixir fixed that problem. For Erlang, it is probably doable via a compile-reload cycle hack. I guess it just hasn't been a priority. Maybe it should be...
- derefr 12y agoModules don't need to be compiled from files; there's just no batteries-included "eval these lines into a module" by default. But it's not hard: parse_form(Form) when is_list(Form) -> {ok, Tokens, _} = erl_scan:string(Form), {ok, AST} = erl_parse:parse_form(Tokens), AST. load_module(FormStrs) -> FormASTs = lists:map(fun parse_form/1, FormStrs), {ok, ModName, ModBin} = compile:forms(FormASTs), {module, ModName} = code:load_binary(ModName, "nofile", ModBin), {ok, ModName}. Note that even an "anonymous" module must have a name, to serve as a handle for the VM. But you can do something like: gensym() -> {MT, T, UT} = erlang:now(), io_lib:format("~p_~p.~p.~p", [node(), MT, T, UT]). load_anonymous_module(FormStrs) -> ModNameFormStr = lists:flatten("-module(", gensym(), ")."), load_module([ModNameFormStr | FormStrs]).