elixir – ピン演算子とガベージコレクタ

ピンとは

elixirにはピン演算子というものがあって、これがいまいちピン(!)と来ない。

というわけでいろいろ試してみた。

ピン演算子^は変数の再束縛ではなく以前にマッチした値とのマッチングをしたい場合に使われます

この一文を呼んで、『?』ってなったので、早速試してみる。

これはいわゆる、変数の再束縛だ。

前回も図にして説明したとおり。

tmp00014

最初にxは1になり、次にxは2になる。

この状態でピン演算子を使ってみる。

おや?マッチングエラーだぞ!?評価じゃなくて束縛したつもりなんだけど、どういうこと?

ここで一文を思い出してみる。

以前にマッチした値とマッチングをしたい

別に今そんなことしたくないけど、以前にマッチした値ってのは、この場合は2になる。
じゃぁこういうこと?

ほほぅ。

でも、以前というより、最後に、ということではないのかな?

とりあえずよくわからないときは、そういうものなんだなって覚えるようにしてる。
ソレが新しい言語を覚えるときのコツだ。とにかくよし。

20110119220407

どういうときにつかうんだ?

『elixirの変数は再束縛が可能だけど、再束縛したくないときに使うんだろうな。』

っておもったけど、ちょっと待て。ピン演算子って束縛じゃなくて評価だよな?
だから失敗したらマッチングエラーになる。

ということは、今xは2なので、

と評価したい時に、右辺と左辺を逆にする場合に使えるな。

でもそんなことする必要あるのかな?
ワンライナーじゃなくスクリプトとして書くときには案外多用するものなのかな?

まだ俺にはよくわからんが、とにかくこういうものだということを覚えておく事にとどめておくわ。

とにかくピン演算子は束縛じゃなくて評価ってことね。演算子だもんね。そうだよね。なんか勘違いしてた。

ガベージコレクタ

変数の再束縛で気になった点。

俺はZ80時代とかからプログラミングしてたので、メモリとかを気にするおっさんである。

この話をするともしかしたら君は涙するかもしれないけど、俺が初めて所有したコンピュータはメモリが512バイトしか無かった(kbではない。bだ)。

つまり512文字(厳密にかそれ以下)しかプログラミング出来ない。そんな中、省略できるものはすべて省略して記述し、どうにかゲームを作ったりしてた。

だからガベージコレクタとか案外気にする。

aに1を束縛し、その後2を束縛したら、代入ではないので1は残ったままになる。これはガベージだ。

そしてこのどこからも束縛されてない1は、いつか消えなければ行けない。
消えなければヒープ領域を圧迫するワルモノになってしまう。

elixirのガベージコレクタってどうなってるの?とおもってしらべてみたら、なんてことはない。別にこんなガベージは放置されるようだ。

なぜ?

それは、マルチプロセスだからって書いてあった。

elixirでは軽量スレッドであるプロセス毎にヒープを持ってるので、ガベージができる前にプロセスが終わればそもそもガベージコレクター自体が必要ないし、ガベージが溜まっててもプロセスがが終わったらヒープごと全部消されるんで、残ってたものがあろうがなかろうが、いちいち全部がきれいになるそうだ。

一般的なプログラミング言語だとゴミが残り続けたりするが、elixirは短い軽量スレッドなプロセスがこまめに動く言語なので、そんなことはそもそも気にしてはいけないということらしい。

11876

わかった理解。そう覚えるよ。

だから安心。

おわり

次はリストとかタプル、文字列なんかをやってみようと思う。