Lisp実装のための型情報のポインタへの埋め込み
Posted: 2016年1月22日(金) 19:06
LispインタプリタをC言語で実装しようとしています。
データの型情報を何処かに保存しなければならないのですが、構造体を作って型番号int typeとデータそのものを構造体のなかに保存する方法のほかに、ポインタにデータを埋め込むという方法があるようなのですが、これがあまりよく理解できません。
http://bis83gb.hatenadiary.jp/entry/2014/01/02/094840
> Lispは動的型付言語なのでポインタに型を持たせる必要があります。
> 現在の計算機だと物理アドレスやOSの仮想アドレスに型が無いのは仕方ないですが、
> 残念ながらC言語のポインタにも実行時型情報は付きません。
> Lispオブジェクトの組み込み型は多くても数十程度なので、
> アドレス値の一部を利用して型情報を埋め込みましょう。
http://blog.bugyo.tk/lyrical/archives/1537
> Lispを作る際にはどこかに型の情報を入れておく必要がありますが、どこにいれるかは、2つのやり方があります。
> ひとつは先程のようにデータと一緒に格納する方法。そしてもうひとつはポインタに格納するという方法です。
どうやらポインタ変数をbitsとして扱い、その一部に型データを埋め込んでいるようなのですが、この方法でポインタのbitsを操作するとポインタの指し示すアドレスが変わってしまうのではないのですか? どのような方法論なのかお教えいただけると幸いです。よろしくお願いします。
データの型情報を何処かに保存しなければならないのですが、構造体を作って型番号int typeとデータそのものを構造体のなかに保存する方法のほかに、ポインタにデータを埋め込むという方法があるようなのですが、これがあまりよく理解できません。
http://bis83gb.hatenadiary.jp/entry/2014/01/02/094840
> Lispは動的型付言語なのでポインタに型を持たせる必要があります。
> 現在の計算機だと物理アドレスやOSの仮想アドレスに型が無いのは仕方ないですが、
> 残念ながらC言語のポインタにも実行時型情報は付きません。
> Lispオブジェクトの組み込み型は多くても数十程度なので、
> アドレス値の一部を利用して型情報を埋め込みましょう。
http://blog.bugyo.tk/lyrical/archives/1537
> Lispを作る際にはどこかに型の情報を入れておく必要がありますが、どこにいれるかは、2つのやり方があります。
> ひとつは先程のようにデータと一緒に格納する方法。そしてもうひとつはポインタに格納するという方法です。
どうやらポインタ変数をbitsとして扱い、その一部に型データを埋め込んでいるようなのですが、この方法でポインタのbitsを操作するとポインタの指し示すアドレスが変わってしまうのではないのですか? どのような方法論なのかお教えいただけると幸いです。よろしくお願いします。