* KH-FDPL に関するメモ-0002
-(by [[K]], 2015.01.09)
** 2015.01.09
-とりあえず構造体や配列の代わりになる予定のKVSを作ってみた。これはオンメモリ仕様。
-65536個の要素を登録して、keyから目的のオブジェクトにアクセスするまでの時間を測ってみたら、単純な配列よりも370倍も遅かった。ちなみにkeyは整数値。
-まあ柔軟性の代償だからしょうがないかー。
-いちおう単純配列型も用意するつもり。これはkeyに0~(n-1)までの整数しか使えなくて、サイズも最初に決めたものよりも大きくはできない。
** 2015.01.13
-こんなに遅くなるのがくやしくて少し改良したけど、全く改善しなかった。まあしょうがないかー。
-ちなみに256個の要素を登録して同じベンチマークをした場合は210倍くらい。つまりデータ件数が多いとそれなりに遅くなる。でもNが十分に大きいケースでは、O(logN)なので、基本的には筋は悪くない。
** 2015.01.15
-スタックマシン方式を採用して、インタプリタ部ができてきた。スタックマシンにしたのは、引数が少なくなってパースがしやすいから。それ以上の理由はない。速度とかサイズとかは一切無視。そんなものはあとでいくらでも追及できる。今はコンセプトの確認が最優先。
** 2015.01.16
-アクセス権を導入する予定。これにより自分がmallocしたものはfreeできるが、そうではないものについてはfreeはできない。オブジェクトにライトプロテクトも掛けられる。
-プログラムがmallocすると、アクセス権管理オブジェクトにそれが記録される。freeすれば消える。プログラムが終了するとfreeしてないもののリストとして得られる。親プログラムはこの「権利」を引き取るか、もしくは必要な結果だけを残し、残りはゴミとしてfreeしてしまってもよい。
-この仕組みによって、freeし忘れや間違ったfreeなどに対処する。
** 2015.01.28
-オブジェクトの管理について、リンクカウントを内部に持って、それを増減させて0になったらメモリを解放、みたいなモデルを考えていたけど、それはやめようと思う。
-全てのオブジェクトはオブジェクトパスを必ず1つ持っていて、それはつまりオブジェクトの「実名」で、このオブジェクトパスを削除した場合は実体であるオブジェクトもメモリ解放させることにしようと思う。どれだけ他からリンクされていても、オブジェクトパスが消されたらとにかく消す。
-つまりmallocなどで確保する場合も、とにかく名前が必要になる。名前がなければそれはもはや存在できないから。でも名前を付けるのはそれなりに面倒なので、自動で名前を付ける支援機能を用意する。
-オブジェクトパスは変更できる。たとえばリンクパスのどれかをオブジェクトパスとして設定して、元のオブジェクトパスはリンクパスにするなどができる。これは権利の移譲みたいなものになる。
** 2015.01.29
-現在検討中の仕様ではこんなことができる。
f(1.5) = 3.5;
f(3.5) = 5.5;
f := polynomial(f); // 2点が指定されているので、1次式を仮定.
print f(2.0);
-> 4.0
** 2015.02.04
-いろいろ設計が進んでいるのでまたまとめる。
--(1)この言語は何のための言語なのですか?
---初心者がプログラミングの原理を学ぶためのものです。
---あと性能が問題にならない状況なら、初心者じゃなくてもとても便利に使えるものです。
--(2)この言語にしかできない機能はありますか?
---ありません。基本的には、他の言語であっても手間を惜しまなければ実現できることばかりです。
---そもそもこの言語がC言語で実装されている以上、Cでできないことはできないわけです。
--(3)この言語の特徴は何ですか?
---(a)セキュリティ重視・デバッグ支援
---(b)言語仕様をどんどん拡張していける(はず)
---(c)速度は遅い
---(d)メモリの浪費もかなりひどい
---(e)基本的にインタプリタ
---(f)ファイルシステムと変数システムが融合している
---(g)性能的な限界はすぐにある、大規模化もメモリ不足で難しそう
---(h)実行中に変数値を変更できる、関数内容も変更できる
---(i)実行中に変数名を変更できる、関数名も変更できる
--(4)面白機能を紹介してください。
---(a)アクセス権という概念があります。ある関数がオブジェクトをnewしたとします。そのオブジェクトは誰からでも気軽にdeleteできるわけではありません。newを実行した関数か、もしくはその関数から「権限」を譲ってもらった関数だけです。これにより何を期待するのかというと、プログラムのバグで意図していないオブジェクトをdeleteする事故を減らします。
---(b)代入ログを参照することができます。これはオブジェクトへの代入のログをつけられるということです。デバッグには重宝する予定です。
* こめんと欄
#comment