Nendo.TODO RSSPLAIN

Related pages: Nendo Nendo.DONE
55555555555555555555555555555055555555555555555555555555555555555555555554534344515255555555555555555555555555555
5

NendoのTODOリスト(in Japanese)

5

完了した項目はNendo.DONEに移していきます。

5

 

5

 

5

仕様関連

5
TODO マクロ展開過程をデバッグ表示する機能を考える。マクロのデバッグがやりやすくなるかも。
5
 #?=のマクロ版のようなもの。 キーワードは #?. かな…
5
 例:
5
nendo> (define ab (macro a b) #?.(list a b))
5
nendo> (ab (+ 1 2) (+ 3 4))
5
#?."(stdin)":1:#?. (list a b)"
5
#?-    (list (+ 1 2) (+ 3 4))
5
TODO Rubyのincludeに相当する機能の実装方法を検討する。(ネームスペースまわりの対応)
5

例えば、RubyではTokyoCabinetのバインディングを使う場合、

5
require "tokyocabinet"
5
include TokyoCabinet
5

とすることで、TokyoCabinet:: を省略してもTokyoCabinetのモジュール内の定数にアクセス可能となる。

5

Nendoで同様の省略を可能とする仕組みを考える。

5
done (use ライブラリ名) した時の、ファイル検索パスの仕様を決める。
5
 ※ (use ...)は 内部で(load ...)を使用しているので、同様の検索ルールを適用すること。
5
 Rubyの$LOAD_PATHをそのまま使うという案もある。
5
 但し、Nendoで書かれたアプリケーションをgemでインストールした時に、問題なく (use ライブラリ名) できるのがその案の採用条件。
5
done writeは ' ではなく quote で出力する。(chibi-scheme互換)
5
  そうすれば、S式の加工も優しいし、出力結果をそのままevalできる。
5

 

5

 

5

機能追加

5
done nendoコマンドにバージョン表示オプションを付ける。
5
done map filter for-eachなど高階関数を RubyのEnumerable型の継承Classであれば適用可能にする。
0
done Ruby 2.0のEnumerator::Lazy を map filter for-each 等の高階関数に渡せるようにする。
5
TODO Gaucheのobject-apply相当の機能を実装する。
5
TODO 循環リストの外部表現をサポートする。
5

 

5

 

5

ライブラリ  (参考: SRFI 日本語訳EXTGauche ユーザリファレンス: TopEXT)

5
done 例外処理のguard構文をサポートする
5
TODO append関数が3つ以上のリストを受けとれるようにする
5
done debug-print-width関数のAPIをGaucheに合わせる
5
TODO Gaucheと同様のインタフェースでhashやvectorにアクセスできるようなref関数を実装する
5
done define-syntax syntax-rules をサポートする(chibi-scheme 0.3のSchemeコードをポーティング)
5
done let-syntax をサポートする
5
TODO chibi-scheme 0.4のsyntax-rules実装に追従する。
5
TODO letrec-syntax をサポートする
5
done Gaucheのutil.listをポーティングする
5
TODO SRFI 0: フィーチャベースの条件展開EXT
5
done srfi-1 (Olin Shiversのリファレンス実装をポーティング)
5
done srfi-2
5
done srfi-8
5
TODO SRFI 11: 多重値を受け取る構文EXT
5
TODO SRFI 13: 文字列ライブラリEXT
5
TODO SRFI 16: 可変個引数の手続きの構文EXT
5
done srfi-26
5
TODO [http://srfi.schemers.org/srfi-42/srfi-42.html|SRFI[ 42: Eager Comprehensions
5
TODO SRFI 43: Vector LibraryEXT
5
TODO SRFI 44: CollectionsEXT
5
done SRFI 69: Basic hash tablesEXT
5
done JSONのパーサーを追加する
5
done chibi-schemeのmatch.scmをポーティングする(オリジナルはAndrew Wrightのパターンマッチングライブラリ)
5
done Gaucheのutil.combinationsをポーティングする
5
TODO コマンドラインオプション解析ライブラリ整備
5

 

5

 

5

高速化

5
done 固定長引数の関数呼び出しは、末尾再帰呼び出しのトランポリンを経由せずRubyのメソッドを直接呼び出す。
5
 => ビルトイン関数の最適化のみに適用した。
5
 => tak関数で約6.5倍、長さ10000のリストのmap filter for-eachがversion 0.5.1に比べて4倍の高速化。
5
done Nendoの固定長引数の関数呼び出しに限定した最適化を行う。
5

現状:     callProcedure( 'func', @_func, [ a, b, c ].to_list ) 形式は可変長引数でも通用する汎用的過ぎるスタイル。

5

最適化後: 固定長引数の場合は、@_func.call( *[a, b, c] ) というlistを使わない呼びだし形式にする。

5
 => この改善でtak(竹内関数)のベンチマークが半分の処理時間になった。
5

 

5

 

5

バグ修正

4
done letフォームの第一引数にリスト以外を指定すると, improper listというエラーになる。シンタックスをチェックしてほしい。
5
 let1のかわりに letと書くと再現する。 
3
done 以下のlet1フォームで、RubyのSyntaxエラーが出る。
4

NendoのSyntaxチェックが必要。

3
(let1 ((a 1)) (print 1))
4
 => ... evaluator.rb:1120:in `eval':
4
        (stdin):6: syntax error, unexpected '\n', expecting '|' (SyntaxError)
5
done guardのコンディション部分のelseを書き忘れると、どの条件にもマッチしない例外が上位にraiseされない。
1
done #/正規表現/ を含むS式に#?=を付けると、正規表現部分をRubyコードにトランスレートした時に、'|' 文字が混在しSyntaxErrorになる。
5
 例:
2
   #?=(rxmatch #/[a-z]/ "abc")
5
TODO  with-openに (read f)を渡すと、何度も(read f)が呼び出されることがある。
5
 stowspecで~/.stowspec.dbを読み込む時に発生した。 
5
 Nendo 0.5.3と、stowspecのリビジョン dcbb8b39899487e421e9d964717614d6bebfe6ca 、ruby 1.9.2p290 で再現する。
5
done init.nndのmapのリスト引数は1つでないといけないが、2つ以上指定した場合のエラーメッセージがわかりにくい。
5
TODO Nendoランタイムがスレッドセーフでない。マルチスレッドではNendoの関数の走行が止まる。
5
 予想:末尾再帰最適化用のインスタンス変数が壊れる?
5
done  hash-table-get がキーとして nil と false を受けつけない
5
done 正規表現で / をバックスラッシュでエスケープできない
5
nendo> #/[\/]/
5
#/[/]/
5

以下が正解

5
nendo> #/[\/]/
5
#/[\/]/
5
TODO filter-map、append-map、delete-duplicateに長いリストを渡すと stack level too deep が出る。
5
done srfi-1-test.nndのテスト項目のうちfailする項目の調査を行う。
5

 

5

 

5

リファクタリング

5

 

5

 

5

その他

5
done 固定長引数の関数呼出し最適化を行った 0.5.2 以降、例外が発生したユーザー関数とソースファイルの行番号が追跡できなくなった。
5
 変換後のRubyコード上の行番号でなく、Lispコードの行番号がわかるようにする。
5
done Rubyの"stack level too deep"が出た時にどこが問題か簡単に追跡できる手段が欲しい。
5

 

5

 

5

 

5

質問・要望など、コメントおねがいします

5

...comment disabled...