言語の妄想
長らく言語について妄想をしているので,とりあえず公開状態で書きとめておく.定期的に追記.
Web サーバーとしての機能
- 超軽量スレッド
- プログラムは自前のスレッドで動かし,I/O 待ちや Time.Sleep による待ちで切り替える.必要に応じて時間によっても切り替える.また実行時間を取ることによりそのタスクが処理した正確な時間を取得することにより,昔の Google App Engine のような課金体制 (つまり実行した時間分だけ課金がされる体制) を取ることができるようにする.
- メモリ管理の精密化
- 大量の軽量スレッドを保持できるようにするということはメモリがかなり細分化されるということを意味するので細かな管理を行う.自前のページング機能を実装し長い文字列は分割して持つなどしながら無駄がなるべく無いようにする.
言語としての機能
- 機能別のネームスペース
- System, sys, os 等のわかりにくいものを使わず,ファイル系の処理であれば File,配列系であれば Array クラスの下に置く.名前は基本的に冗長に書く.
- 部分的に型を導入
- 引数や変数に型を導入し自動的なチェック機構を入れる.(e.g.
function Test(input: String): String {}) - 最近の LL にある機能の導入
- 継続,タプル,ラムダ等の導入
- プロトタイプチェーンの採用
- 継承はプロトタイプチェーンで実装し,多重継承は mixin によって行う.
- NULL 値の選択
- 型の最後に ? をつけると NULL を許し,型の最後に ! をつけると暗黙の型変換を許さない.
- for/then/else/finally, try/then/catch(exception)/finally 構文の追加
- for 文の場合,一度以上回った場合は then,回らなければ else,そして最終的には finally を実行する.try 文の場合はつつがなく終わりまでいった場合は then (ここで発生した例外はこの try では受け取らない),catch(exception) は例外を検出した場合,そして最終的には finally を実行する.
- グローバル変数に関して宣言を要求
- 代入や参照を行う場合,globalで予め宣言するか別の方法で取得する.
- constant function
- 並列化の支援のため,外部変数をいじらない関数を用意する.
データー構造
- 順序を保持した Dictionary の導入
- 挿入された順序を持ち続ける Dictionary の導入.
- 文字列(+immutableな型)のハッシュ化
- 文字列は必ずハッシュ化して保存する.ハッシュの長さは 64 ビット程度で衝突した場合も想定する.これにより文字列の等価比較が O(1) になり,同じ文字列を大量に生成する場合に効率化される.


