elixir-lang / elixir

Elixir is a dynamic, functional language for building scalable and maintainable applications
https://elixir-lang.org/
Apache License 2.0
24.59k stars 3.38k forks source link

Support Erlang/OTP 26 new features #11985

Open josevalim opened 2 years ago

josevalim commented 2 years ago

To be implemented and backported when Erlang 26 is released:

To be implemented when Erlang 26 is released:

To be implemented when we require Erlang 26 exclusively:

Please do not send PRs for those, as it will take a while until we can effectively accept them.

garazdawi commented 2 years ago

If you want to, you may want to check out the new possible return values from edlin_expand:expand/1,2 introduced in https://github.com/erlang/otp/pull/5924.

https://github.com/erlang/otp/blob/master/lib/stdlib/src/edlin_expand.erl#L41-L47

It allows the expand function to return structured data so that you can group completions. In Erlang we use it to make completions like this:

1> h<TAB>
bifs
halt(    hd(
commands
h(          hcb(        help(       history(    ht(
modules
heart:                    http_chunk:               http_request:             
http_response:            http_transport:           http_uri:                 
http_util:                httpc:                    httpc_cookie:             
httpc_handler:            httpc_handler_sup:        httpc_manager:            
httpc_profile_sup:        httpc_request:            httpc_response:           
httpc_sup:                httpd:                    httpd_acceptor:           
httpd_acceptor_sup:       httpd_cgi:                httpd_conf:               
httpd_connection_sup:     httpd_custom:             httpd_custom_api:         
httpd_esi:                httpd_example:            httpd_file:               
httpd_instance_sup:       httpd_log:                httpd_logger:             
httpd_manager:            httpd_misc_sup:           httpd_request:            
httpd_request_handler:    httpd_response:           httpd_script_env:         
httpd_socket:             httpd_sup:                httpd_util:

and like this:

1> ssl:connect(<TAB>
typespecs
ssl:connect(Host, Port, TLSOptions)
ssl:connect(Host, Port, TLSOptions, Timeout)
ssl:host() ::      {0..255, ...}      {0..65535, ...}    
string()
ssl:connect(TCPSocket, TLSOptions)
ssl:connect(TCPSocket, TLSOptions, Timeout)
ssl:socket() ::     {'$inet', ...}      port()
lukaszsamson commented 2 years ago

How about :erlang.nodes/2 added in https://github.com/erlang/otp/pull/6007 and released in OTP 25.1?

epinault commented 1 year ago

hello, I am finding an issue that maybe is something not yet implemented but in OTP 26 the follow code breaks

Mix.Task.get("phx.new").

I had a mix task that tries to detect if phoenix is installed by detecting the mix task above. All worked till OTP 26. but in OTP 26 it cannot find the code being loaded somehow. Any idea ? We are seeing that a lot with atom (to_existiing_atom failing in our code base and having to force loading the module before so the atom are available)

josevalim commented 1 year ago

Hi @epinault, please use the ElixirForum or do a complete bug report, I don't want to sidetrack the existing issues.

epinault commented 1 year ago

done https://github.com/elixir-lang/elixir/issues/13116 (so if people find this they know where I moved the issue to)

michallepicki commented 2 months ago

👋🏻 Hello! I see one point that requires Erlang 26 is ticked off. Does this mean Elixir 1.18 will require 26, and the remaining points can be worked on now, or was werl just deprecated for long enough?

josevalim commented 2 months ago

The rich shell will require 26 on Windows in the new version because maintaining both, and 27, was not possible.