LoginSignup
6
6

More than 3 years have passed since last update.

こりゃ驚いた! 動的コンパイル

Posted at

発端

開発中のElxlog処理系で動的にElixirコードのコンパイルをする必要に迫られました。そんなのできたんだっけ?
そういえばfukuoka.exの人たちにCodeというモジュールがあるよ、と教わったことを思い出しました。

動的コンパイル

それはすっごく簡単にできました。


Code.compile_string(str)

strは文字列です。この文字列に動的コンパイルしたい内容を入れておきます。


iex(1)> Code.compile_string("defmodule Foo do def bar(x) do x+1 end end")
[
  {Foo,
   <<70, 79, 82, 49, 0, 0, 4, 60, 66, 69, 65, 77, 65, 116, 85, 56, 0, 0, 0, 123,
     0, 0, 0, 14, 10, 69, 108, 105, 120, 105, 114, 46, 70, 111, 111, 8, 95, 95,
     105, 110, 102, 111, 95, 95, 7, 99, 111, ...>>}
]
iex(2)> Foo.bar(2)
3

なんとまあ、お手軽! Lispのevalみたいなことができてしまいます。

他にも

Code.eval_string/3 などいろいろとありました。これはコンパイルはせずに値が欲しい時だけみたいです。
https://hexdocs.pm/elixir/Code.html

Lisp並みに遊べますし、実際に使えます。Elixirにさらに惚れ込みました。

6
6
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
6
6