LoginSignup
10
1

【TIPS】幾つかのElixir関数はErlangにインライン展開される

Last updated at Posted at 2023-12-24

この記事は、Elixir Advent Calendar 2023 シリーズ14 の19日目です


【本コラムは、2分で読め、2分で試せます】

piacere です、ご覧いただいてありがとございます :bow:

Elixirの幾つかの関数って、Erlangモジュール関数にインライン展開されるってご存じですか?

Kernel モジュールの関数(演算子含む)

Kernel モジュール関数の幾つかは、Erlang関数にインライン展開されるのですが、これは & とアリティを付けることで確認できます

iex> &Kernel.hd/1     
&:erlang.hd/1
iex> &Kernel.tl/1
&:erlang.tl/1
iex> &Kernel.length/1
&:erlang.length/1

演算子も、Erlang関数にインライン展開されます

iex> &+/1            
&:erlang.+/1
iex> &*/2
&:erlang.*/2

別コラムで紹介したサイズ取得や型チェックも、Erlang関数にインライン展開されます

iex> &byte_size/1
&:erlang.byte_size/1
iex> &bit_size/1 
&:erlang.bit_size/1
iex> &map_size/1
&:erlang.byte_size/1
iex> &tuple_size/1
&:erlang.bit_size/1
iex> &is_binary/1
&:erlang.is_binary/1
iex> &is_list/1
&:erlang.is_list/1
iex> &is_tuple/1
&:erlang.is_tuple/1
iex> &is_number/1
&:erlang.is_number/1

Kernel モジュール以外にもあります

Atom モジュールや String モジュール、List モジュール、Map モジュール、Tuple モジュールなどの型変換も、Erlang関数へのインライン展開で処理されているようです

iex> &Atom.to_string/1
&:erlang.atom_to_binary/1
iex> &String.to_integer/1
&:erlang.binary_to_integer/1
iex> &String.to_float/1
&:erlang.binary_to_float/1
iex> &List.to_float/1
&:erlang.list_to_float/1
iex> &Map.to_list/1
&:maps.to_list/1
iex> &Tuple.to_list/1
&:erlang.tuple_to_list/1

一方、Enum モジュールや Range モジュール、Date モジュール、DateTime モジュールは違うようです

iex> &Enum.to_float/1
&Enum.to_float/1
iex> &Range.to_list/1
&Range.to_list/1
iex> &Date.to_string/1
&Date.to_string/1
iex> &DateTime.to_string/1
&DateTime.to_string/1

実は…

下記にドキュメント化されています

10
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
1