What do you think should be in OTP?

How does that differ from erl_interface? There are also external libraries that do not require the Erlang headers.

I think it is better to have off tree, as SMTP is full of the traps, and off-tree libraries can evolve faster.

5 Likes

I see!
I think Erlang Solutions releases Erlang/OTP packages that can be updated via dnf (or yum), and probably aptitude too.

This I think is not hard to implement. Is there an “enhancement” github request filed for that?

5 Likes

Is RADIUS still needed when we already have Diameter in OTP?

There are external dependencies for RADIUS for this who need it, would that really add value to enough people? Tendency is to rather split out legacy stuff into separate deps

3 Likes

serial (UART)

5 Likes

Currently DIAMETER as RADIUS is used in AAA but they are not interchangeable at least for the moment. Yes, already implemented some libraries but this can be implemented without dependencies, eg. eradius. One dependency is custom dictionaries - but i think it should be easy to get around with some config parameters.

2 Likes

Network traffic analyzer - something like Whireshark(maybe it already exists inside of Erlang, but I don’t know about it :upside_down_face:).

2 Likes

EIDE - Erlang IDE based on Erlang WX :slightly_smiling_face:.

4 Likes

Definitely interesting, but should it actually be a part of OTP? I would keep OTP a bit more basic and have an IDE as a standard tool.

10 Likes

Hard to say, maybe it is worth making a separate tool that will be supported by the OTP team and will be installed with Erlang if config will be set for it. I think as a result, it would be possible to integrate formatters into this EIDE and everything related to the analysis and cleaning of the code etc. Maybe things like xref, dialyzer, wx, debugger etc. can be taken out of OTP but save in EIDE.

2 Likes

Speaking of formatters, etc. Into Erlang LS already integrated a lot of interesting tools, so, EIDE can builded by wx and have Erlang LS integration. :thinking:

3 Likes

ICMP aka ping and traceroute

3 Likes

I have implemented gen_icmp (I still need to publish it on Hex) and I see few problems:

  • Not all systems allow creation of the ICMP sockets as a regular user (AFAIK only Linux and macOS supports that)
  • Even if system support that, then it is not consistent between different OSes
  • It is near to impossible to make reliable tests of such implementation other that manually testing whether it works
  • Such sockets can be very noisy on some OSes (ICMPv6 on macOS is very noisy) and filtering messages is on the “hard” end of the spectrum

So while I understand the will, but it would be maintainability nightmare to have it directly in OTP.

5 Likes

Speaking of bikeshedding. Apart from argparse (which I think OTP should have, not necessarily mine) I have:

  • leader election (gen_leader)
  • suspending scheduler (dynamic dependencies graph execution, when any node in the graph is a function call, which may in turn depend on other nodes being completed - essentially a “build system engine”)
  • parallel map (pmap) - pretty often copied-and-pasted primitive
6 Likes

Reconfigurable supervisors and gen_server.

Right now it is rather useless to provide changeable configuration in start_link because there is no way to change MFA in supervisor.

We’ve tried to make changes to supervisor and $gen protocol for runtime reconfiguration, but didn’t spent too much time on it.

3 Likes

What sort of things would you like to change?

3 Likes

Any kind of configuration of gen_server-ed code.

For example I have a process that caches some values in memory, I want to configure this cache size.

It is configured via gen_server:start_link(?MODULE, [#{size_limit => 1000}]).

How can I increase it to 2000? Code upgrade?

I want to have something like supervisor:update_child(Pid, Child, NewArgs) that will allow to pass to the process new arguments for soft reconfiguration.

3 Likes

That’s interesting. I normally use messages for this- what would this API provide over that?

Server ! {new_size_limit, 2000}.
3 Likes

I guess if your Server crashes and is restarted by supervisor, size_limit will be reset.

In such situations I usually either read application:get_env(my_app, size_limit) in init callback or just on-spot, instead of storign the value in supervisor’s arguments.

7 Likes

Ah that makes a lot of sense. Thank you

4 Likes
  • Saga Pattern (To Process not only HTTP)
  • Process Manager Pattern
4 Likes