<div dir="ltr">Thank you Björn!<div><br></div><div>Should we expect list_to_binary to work?</div><div><br></div><div><span style="font-size:12.8px">  list_to_binary(atom_to_list(</span><span style="font-size:12.8px">Atom))</span><br style="font-size:12.8px"><span style="font-size:12.8px">  list_to_binary(io_lib:format("</span><span style="font-size:12.8px">~s", [Atom]))</span><br style="font-size:12.8px"></div><div><br></div><div>list_to_binary expects a list of bytes, instead of a list of codepoints, so I would except those cases to always raise for a UTF8 encoded atom. The same way this raises:</div><div><br></div><div><span style="font-size:12.8px">  list_to_binary(io_lib:format("~ts", [<<12494/utf8>>]))</span><br></div><div><br></div><div>On the other hand, the line below works but the result is in the wrong encoding:</div><div><br></div><div><span style="font-size:12.8px">  list_to_binary(io_lib:format("~s", [<<12494/utf8>>])</span><span style="font-size:12.8px">)</span><br></div><div><br></div><div>So I would say list_to_binary is behaving as expected and that it should not change as those "limitations" are there today. Same for port_command, as it expects iodata. Or am I missing something?</div><div><br></div><div>Regarding the raising issue, one possible option is to introduce atom_to_list(Atom, Encoding), similar to atom_to_binary/2, with the default encoding of Latin1. If you call atom_to_list(Atom, latin1) with a UTF-8 encoded atom, it will raise. This way the code semantics won't change and we won't have to worry about UTF-8 atoms creeping in unless explicitly allowed.</div><div><br></div><div><br></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature"><div dir="ltr"><div><div><br></div><div><br></div><div><span style="font-size:13px"><div><span style="font-family:arial,sans-serif;font-size:13px;border-collapse:collapse"><b>José Valim</b></span></div><div><span style="font-family:arial,sans-serif;font-size:13px;border-collapse:collapse"><div><span style="font-family:verdana,sans-serif;font-size:x-small"><a href="http://www.plataformatec.com.br/" style="color:rgb(42,93,176)" target="_blank">www.plataformatec.com.br</a></span></div><div><span style="font-family:verdana,sans-serif;font-size:x-small">Skype: jv.ptec</span></div><div><span style="font-family:verdana,sans-serif;font-size:x-small">Founder and Director of R&D</span></div></span></div></span></div></div></div></div></div>
<br><div class="gmail_quote">On Mon, Feb 1, 2016 at 8:14 AM, Björn Gustavsson <span dir="ltr"><<a href="mailto:bjorn@erlang.org" target="_blank">bjorn@erlang.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Sat, Jan 30, 2016 at 9:04 PM, José Valim<br>
<<a href="mailto:jose.valim@plataformatec.com.br">jose.valim@plataformatec.com.br</a>> wrote:<br>
><br>
> With all that said, are there any plans of supporting UTF-8 encoded atoms on<br>
> Erlang R19? If the feature is desired but not planned, I would love to<br>
> contribute the compiler and bytecode changes above although I will likely<br>
> need some guidance. If that is an option, I would love to get in touch.<br>
><br>
<br>
</span>It is not planned for OTP 19. IMO, the feature is desired,<br>
but it is probably too late for OTP 19.<br>
<br>
Extending the BEAM format is necessary but not sufficient.<br>
It is also necessary to make sure that other code in OTP<br>
doesn't break. For example:<br>
<br>
  list_to_binary(atom_to_list(Atom))<br>
<br>
  list_to_binary(io_lib:format("~s", [Atom]))<br>
<br>
  erlang:port_command(Port, N, atom_to_list(Atom))<br>
<br>
list_to_atom/1 could also potentially be problematic<br>
if the code expects an exception for any non-latin1<br>
characters.<br>
<br>
Other things to be done is to update the documentation<br>
and specs.<br>
<br>
I think that the community could help us there, both<br>
in collecting a list of things that must be fixed<br>
or modified, and also in helping fixing them.<br>
<span class="HOEnZb"><font color="#888888"><br>
/Björn<br>
<br>
--<br>
Björn Gustavsson, Erlang/OTP, Ericsson AB<br>
</font></span></blockquote></div><br></div>