Hi. I am new in Elixir. I have got to know about two file extensions for Elixir - .ex
and .exs
. Documentation says:
" …In addition to the Elixir file extension .ex
, Elixir also supports .exs
files for scripting. Elixir treats both files exactly the same way, the only difference is in intention. .ex
files are meant to be compiled while .exs
files are used for scripting…"
I created two files (math.ex and math.exs) with the same code:
"
defmodule Math do
def sum(a, b) do
a + b
end
end
IO.puts Math.sum(1, 2)
"
I used commands elixir
and elixirc
on both files, but I have received the same results:
- command
elixirc
created files Elixir.Math.beam
;
- command
elixir
shows result in cmd;
So, I want to know if real difference between these extensions exists.
1 Like
.ex
files compile down to beam files, which can be executed later, while .exs
is compiled into memory and executed on the fly.
.ex
has better runtime performance and it’s easier to include and load other files.
When I’m writing Elixir library or application my source code is written in .ex
files.
I use .exs
for commands, scripts, config files, test or anything else that is short lived. These files don’t have be precompiled and you can just run elixir
on them.
3 Likes
Just to make this clear. The runtime characteristics of the code do not change.
What is different is that loading/including .exs files requires additional compilation, while .beam files don‘t need that. That „performance“ difference affects only initial loading though.
4 Likes
Thank for your answer. Now it is more clear for me, but it is a bit weird, that I make ‘elixirc math.exs’ and also get beam file (on my opinion😅)