この記事は適宜、編集を行う予定です。
Nurseryの将来の方向性
Nurseryの現状については、はじめてのNursery その1からはじまる、一連の記事で確認・及び使用方法を知ることが出来ます。
以下は、Nurseryの長期的な目標、中期的な目標、短期的な目標を列挙したもの。
今現在は、短期的な目標の段階にある。長期的な目標及び中期的な目標については、詳細は決めず、短期的な目標を達成しつつ、必要な知識及び技術を学び、中期的な目標、そして、長期的な目標に適宜、反映させて行く。
長期的な目標
Objective-Cコンパイラを実装し、Objective-Cのソースファイル、ソースファイルから生成したトークン列、構文木といった、各段階をオブジェクトとして表現し、メソッドについてもオブジェクトとして永続化を実現する。
これにより、Nurseryの一方のインスタンスから別のインスタンスに、実行時にオブジェクトが持つインスタンスオブジェクトが持つ変数および、クラスオブジェクトが持つメソッドも通常のオブジェクトとして動的に転送し同一ホストあるいは、ネットワーク(LAN, インターネット)越しの別プロセスに動的に機能を追加できる。
また、実行時には実行環境にてネイティブコンパイルを行い、実行できるようにする。
例えば、別プロセスに存在する、Nurseryインスタンスに、ブロックをオブジェクトとして転送し、そのプロセスのオブジェクトグラフに対して、ブロックを実行し、その結果を元のプロセスに、送り返すといったことを実現する。
Foundationにはもともと分散オブジェクトが用意されているが、現在は非推奨とされており、またメソッドをオブジェクトとして転送することはできず、機能が十分ではない。
NSPredicate等の問い合わせ機能は提供されているが、その記述が独自の問い合わせ記法を採用している。ブロックにて処理を渡し、実行するという、より慣れ親しんだ、方法を取りたい。
中期的な目標
Cコンパイラを実装し、Cソースーファイルの構文解析したトークン列、構文木をオブジェクトとして表現する。Cに対する拡張であるblocksの実装もこの段階で行う想定である。長期的な目標同様、Cの関数をオブジェクトとして表現する。Objective-Cのメソッドの実態は、通常のC関数として表現されているので、この段階がある程度達成すれば、長期的な目標の達成に大きく近づくと考えている。もちろん、この段階で必要な知識が足りてないことが発覚する可能性は大いにある。
短期的な目標
Cのサブシステムであるプリプロセッサの実装を行う。現在、進行中である。ごく普通に、再帰下降型のアプローチを取っている。
Cの規格書は有償であり購入する必要があるが、私は常に金欠であり、購入する費用がない。
そのため、過去にダウンロードした正式承認直前のドラフトであるN2176 FDISを参照しているが、現在は閲覧できなくなっている。
まずは、正常系の処理を先行実装し、異常系の処理を後から追加する方針である。
最新の正確な状況はNurseryのcブランチを確認することが確実である。
現時点では、5.1.1.2 Translation phasesの1から3までの正常系の実装がほぼできており(ただし考慮すべきことをシンプルに保つため、文字集合については、ASCIIの範囲しか考慮していない)、4を実装中である。
単一ソースファイルで行うべき処理を優先し、外部ソースファイルの#includeディレクティブはまだ着手していない。単一ソースファイルでおこうなうべき処理が正しく機能するようになれば、#includeディレクティブについては、単純に考えれば再帰的な処理を行うだけであるという想定である。
しかし、マルチスレッド化するべきであると、予想されるため、排他制御については、しっかりと意識する必要はあるだろう。
古典的なNSThread及びNSLock系のクラスを使うべきか、NSOperation系のクラスを使うべきかはまだ判断していない。
現在、6.10 Preprocessing directivesの実装中であり、規則if-groupのconstant-expressionの評価を実装することが、当面の課題である。また、これはプリプロセッサの機能であるが、プリプロセス後のCの式(expression)の構文解析にもまたがり、綺麗に分離されていない。プリプロセスとCの構文解析結果の評価で振る舞いがやや違うということがあり、正直、うんざりである。また、無職になり、何らかの締め切りもなく、やる気が、現在大幅に減退している。
しかし、断続的なものとなるのは、わたしに取っては常であり、いずれは目標を達成するであろう。
それが、1年後か、5年後か、10年後かは、わたしにもわからない。