Elixirのアトム
Elixirの「アトム」が、よく分からなかった。
アトムとは?
(p.24)
アトムはある何かの名前を表現する定数だ。
コロン(:)から始まる単一の語、あるいはElixirの演算子がアトムになる。
- アトムは定数
- アトムは、頭に「:」(コロン)を付ける
アトムは定数であり、アトムの記法はコロンを付ける、というところまではOK。
とても単純な話だ。
アトムのコロンの位置は?
ところが、p.28の「キーワードリスト」の説明の中で、「:name」というアトムのシンタックスシュガー(糖衣構文)として「name:」が登場している???
ここで、コロンの位置は「前置」だけでなく「後置」でも良いのか?という疑問が湧いて来た。
で、Google検索してみると…
アトムは自身の名前がそのまま値になる定数です。
Rubyをご存知なら、シンボルと同義になります:
2 基本的な型 - Basic types - Elixir
アトムは名前が自身の値を表わしている定数です.別のいくつかの言語ではこれをシンボルと呼んでいます.
Atoms are constants where their name is their own value. Some other languages call these symbols:
Elixirのアトムは、Rubyのシンボルと同じという情報が得られた。
次は、Rubyのシンボルを検索。
【Ruby入門】コロン記号の意味とシンボルのやさしいまとめ! | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト
前置コロンと後置コロンがある
前章で解説したとおり、コロン記号「:」を文字列に前置するとシンボルになります。
また、以降の章で解説しますが、コロン記号「:」を文字列に「後置」する場合もシンボルとなるケースもあります。
たとえば、ハッシュのキーとしてシンボルを使う際や、キーワード引数を使う際に、コロン記号「:」を後置します。
ただ、通常はコロン記号「:」を文字列に前置することシンボルになるものと考えられてかまいません。
なるほど。Rubyのシンボルは、ハッシュのキーとして使われる場合、コロンを後置できるんだね?
Elixirの例でも同じだった。
…でも、それだったら、わざわざ「アトム」という用語で説明しないで「シンボル」という用語で説明すれば良かったんじゃない?と思うけど、どうなんだろ?
シンボルではなくわざわざアトムという呼び名を付けた意図を聞いてみたい。
アトムはシンボルと何か違う性質や機能が実装されているのかもしれない。
しばらくは、アトムの使い方に注意して、理解できるようにしよう。
アトムの個数の上限
アトムについて調べていたら、豆知識があった。
Erlangではアトムの数が制限されていて(公式ドキュメントによるとデフォルトで1,048,576)、しかもガーベジコレクトされないので、アプリケーションの中で動的にアトムを生成するようなことは避けるべきと書いてありました。
これがElixirにも当てはまるのかどうか検証をしてみたところ、以下のように100万をちょっと超えたところでクラッシュしてしまいました。
1万程度はすでに使われていると想定するとElixirもErlangに準じていると思われます。
ElixirでKey-Valueストアを自作するような時は注意したほうがよさそうですね。
Elixirで100万個以上アトムを作る場合は、クラッシュしないか?注意が必要みたい。
Erlangで作られているElixir
てか、ElixirはErlangで作られたプログラム言語だから、Erlangの仕様に縛られているのは当然なのかも!?
elixir (エリクサー)はErlangで作られた言語だ。
Erlangは1986年にJoe Armstrong, Robert Virding, Mike Williams の3人によって最初のバージョンが作られた。
Erlangの開発は Joe Armstrong 博士が電話交換制御用ソフトウェアを構築するために、Prologをベースに並行プロセスやエラー処理の仕組みを追加したことに端を発している。
取っつきやすければ Erlang のパワーを享受できるようになる。
そういう考えで始まったプロジェクトにはReia Programming Languageという物もある、しかし残念ながらReiaの開発は停止してしまった。
Reiaの後に登場し、後継のプロジェクトに指名され、2014年9月18日にv1.0.0がリリースされたのがelixirなんだ。
最初はPrologがベースだったんだ…。(知らんかった)
Prolog → Erlang → Reia → Elixir という歴史があったんだね!
あ~、Elixirの本を読んだら、次はErlangの本も読んでおかないとあかんな?
パパッと理解できるような、分かりやすい解説本があったら、ありがたいのだけれどw