Nendo.ReleaseNote RSSPLAIN

Related pages: !kiyoka.blog.2011_06 !kiyoka.blog.2011_04 !kiyoka.blog.2011_01 !kiyoka.blog.2010_11 !kiyoka.blog.2010_10 !kiyoka.blog.2010_09 !kiyoka.blog.2010_07 !kiyoka.blog.2010_05 !kiyoka.blog.2010_04 !kiyoka.blog.2010_03
5500000000000000011112222222333333444444455555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
5

Release note of Nendo programming language.

5

 

0

version 0.8.0

0
Better Nendo backtrace. (correct line number which error occured.)
0
 sourcecode t.nnd:
0
 (define (func arg1)
0
   arg2)
0
 
0
 (func 1)
0
 
0
 $ nendo t.nnd
0
 -------------- Nendo backtrace ---------------
0
 t.nnd:4: Error: undefined variable arg2
0
        from t.nnd:4:in `func' <nendo function> (compiled lineno=453)
0
 
0

 

0

 

1

version 0.7.4

1
Fixed for CRuby 2.4.0 Integer class.
1

 

1

 

2

version 0.7.3

2
Nendo use runtime check enabled library by default.
2
Nendo use runtime check disabled library by -d option.
2
Detect nil function as error.
2
Added rfc.yaml library.
2

 

2

 

3

version 0.7.2

3
Supported srfi-9 
3
Added -I option.
3
 append path to *load-path* variable.
3

 

3

 

4

version 0.7.1

4
Optimized code generator ( x2 faster! on micro benchmarks )
4
Removed unnecessary  begin ... end  block.
4
These operators  + - * <= < > =>  are expanded to the ruby expressions instead of inciting calls.
4
Support JRuby 1.7.16, because it can handle utf-8 string literal.
4

 

4

 

5

version 0.7.0

5
Bugfix: definitions of eq?, eqv?, equal?, =, functions were incorrect.
5
 NG:
5
  ev?    is Ruby's == method
5
  eqv?   is Ruby's === method
5
  equal? is Ruby's === method
5

 

5
 OK:
5
  eq?    is Ruby's equal? method
5
  eqv?   is Ruby's == method
5
  equal? is Ruby's == method
5

 

5

 

5

version 0.6.8

5
Bugfix: `=' function missing to compare. (Enbuged on 0.6.7 to support CRuby 2.1.0)
5

 

5

 

5

version 0.6.7

5
Support CRuby 2.1.0
5

 

5

 

5

version 0.6.6

5
Add nendo's command line option '-d' ( disable runtime check )
5
It is useful for generating compiled nendo files.
5
How to use
5
$ nendo -d -c source.nnd > source.nndc
5
Bundle faster libraries. All Nendo's libraries (*.nndc) are compiled without runtime check.
5

 

5

 

5

version 0.6.5

5
Add `ruby-lazy function for specifing Ruby 2.0's Enumerable#lazy.
5
How to use
5
 This code 
5
 (ruby-lazy '#(1 2 3))
5
 is identical to this ruby code.
5
 [1,2,3].lazy
5
`ruby-lazy' has no affect on Ruby 1.9.x platform.
5
Only four functions can be taken a lazy vector value as a argument.
5
 for-each
5
 map
5
 filter
5
 fold
5

 

5
Add functions for IO read
5
(readlines io)
5

`readlines' can read lines as vector object from ruby's IO object. `readlines' returns lazy vector on Ruby 2.0.x platform.

5
(readchars io)
5

`readchars' can read chars as vector object from ruby's IO object. `readlines' returns lazy vector on Ruby 2.0.x platform.

5

 

5

 

5

version 0.6.4

5
Added debug.null library for inhibiting to display debug message.
5
Added COPYING and README to gem.
5
Refactored Rakefile.
5
    Divided task `test' into `test1' and `test2'
5
    Renamed task `test2' to `test3'
5
    Removed arrays of command string.
5

 

5

 

5

version 0.6.3

5
Removed gem dependency for `jeweler' and `ruby-prof'.
5
Changed install path of library files written in nendo. like
5
    *.nnd             =>  nendo/*.nnd
5
    debug/*.nnd       =>  nendo/debug/*.nnd
5
    nendo/*.nnd       =>  nendo/nendo/*.nnd
5
    rfc/*.nnd         =>  nendo/rfc/*.nnd
5
    text/*.nnd        =>  nendo/text/*.nnd
5
    util/*.nnd        =>  nendo/util/*.nnd
5

 

5

 

5

version 0.6.2

5
Supported testable gem
5
   Please install rubygems-test and "gem test".
5
Modified Rakefile to build the debian package.
5
   to invoke rspec with "ruby `which rspec` ..." instead of "rspec ..."
5
Changed dependency rules of gemspec.
5

 

5

 

5

version 0.6.1

5
バグ修正:
5
guardのコンディション比較にelseを書かない場合でも、全ての例外が捕捉されてしまうバグを修正した。
5
 以下のコードはTypeErrorが発生するが、それがguardの上位にraiseされないバグ。
5
 (guard (exc (exc.is_a? (print "[RuntimeError]")))
5
   (+ (Array.new) 1.1))
5
letフォームのシンタックスチェックが抜けていたのを修正した。
5
 例えば、正しいlet1フォームのlet1をletに書き換えと、improper listというエラーになる。
5
let1フォームのシンタックスチェックが抜けていたのを修正した。
5
 以下のコードが、生成後のRubyコードでSyntaxError例外が発生していた。
5
(let1 ((a 1)) (print 1))
5
#/正規表現/ を含むS式に#?=を付けると不正なシンタックスのRubyコードが生成される
5
 以下のコードがSyntaxErrorになる。
5
 #?=(rxmatch #/[a-z]/ "abc")
5
 #正規表現/ の外部表現の出力に間違いがあったのが原因。
5

 

5

 

5

version 0.6.0

5
nendo.rbを機能ブロックごとに以下のファイルに分割した。
5
  ruby/types.rb
5
  ruby/reader.rb
5
  ruby/builtin_functions.rb
5
  ruby/evaluator.rb
5
  ruby/printer.rb
5
  ruby/core.rb
5
  ruby/out_of_module.rb
5

 

5

 

5

version 0.5.4

5
guardフォームをサポートした。
5
unwind-protectフォームをサポートした。
5
raiseフォームの引数を可変長引数にした。
5
 Gauche 0.9.2の仕様に似せた。
5
テストフレームワーク nendo.test に期待した例外が上がるかどうかテストする機能を追加した。
5
 Gauche 0.9.1に付属のgauche.testをポーティングし、(test-error <例外>)関数などを実現した。
5
util.listのテストケースにRuntimeErrorが発生するテストケースを追加した。
5
 Nendo 0.5.3まではコメントアウトしていたもの。
5

 

5

 

5

version 0.5.3

5
map filter for-each の第二引数に RubyのEnumerable型を渡せるようにした。
5
 例)
5
nendo> (map (lambda (x) (+ x 1)) '#( 10 20 30 ))
5
#(11 21 31)
5
nendo> (define f (.open "VERSION.yml"))
5
#<File:0x84b74d8>
5
nendo> (map (lambda (x) (+ "# " (x.chomp))) f)
5
#("# ---" "# :major: 0" "# :minor: 5" "# :patch: 3")
5
例外が発生したソースファイルと行番号が正確にbacktrace表示されるようにした。
5
 但し、0.5.2から実行速度が後退した(約1/2程度)
5
以下のバグを修正した。
5
引数ゼロの関数に、1つ以上の引数を渡した時、Nendo::Nilが引数に渡される。
5
  ArgumentError例外で引数の指定個数に謝りがあることを通知するようにした。
5
JRuby1.6.xで通らないいくつかのテストケースを修正した。
5

 

5

 

5

version 0.5.2

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

 

5

 

5

version 0.5.1

5
chibi-scheme 0.3のmatch.scmをポーティングした。
5
   (オリジナルはAndrew Wrightのパターンマッチングライブラリ)
5
Gauche 0.9.1のutil.combinationsをポーティングした。
5
syntax-rulesのsyntax-quoteの特別扱いを止めた。(chibi-schemeから変更なしになった)
5
equal?の判定ロジックを効率化した。
5
writeは関数でのS式出力フォーマットでは ' ではなく、quote や quasiquote というシンボルで出力するようにした。
5
   chibi-schemeと互換にし、出力結果をchibi-schemeとベリファイするため。
5
関数strip-syntactic-closureをRubyで書きなおした。
5
コアに関数を追加した。
5
push!
5
string=?
5
symbol-include?
5
以下のバグを修正した。
5
let-syntax、syntax-rulesの多くのバグを修正した。
5
  match.scmとutil.combinationsを修正無しで動かなかった多くの問題を修正。
5
(cdr '(a)) が Nil型のインスタンスを返しちたのを Cell.new() を返すようにした。
5
  結果、list*の動作が正常になった。
5
    NG: (list* 1 (cdr '(a))) → (1)
5
    OK: (list* 1 (cdr '(a))) → (1 '())
5
(%tailcall ((lambda (x) ..))) というフォームをRubyコードに変換できないバグを修正した。
5

 

5

 

5

version 0.5.0

5
define-syntaxをサポート
5
define-rulesをサポート (chibi-scheme 0.3からポーティングした)
5
:optional によるオプショナル引数に対応した
5
error関数の第二引数にS式を取れるようにした chibi-scheme 0.3と互換。
5
if beginなどのコアライブラリは /nendo/core/if などのようなエイリアスを作成した。
5
 将来の最適化用。コアライブラリがオーバーライドされてい間は、個別に最適化可能になる。
5
以下のライブラリ追加
5
srfi-2 (chibi-scheme 0.3からポーティングした)
5
srfi-26
5
Gaucheのutil.listをポーティング
5
以下の下位互換性を失なう変更を行った
5
alist->hash-tableとhash-table->alistをビルトイン関数から削除した(util.listに含まれるため)
5
hash-table関数の引数をGaucheに合わせた。(Nendo 0.4.1と非互換となるので注意)
5
debug-print-width関数のAPIをGaucheに合わせた(parameterライクにした)
5
(debug-print-width 100) ;; 表示幅を100文字に変更
5
コアに以下の関数を追加した
5
string-append
5
number->string
5
make-syntactic-procedure
5
以下のバグを修正した
5
'() 同士の比較で#fを返す場合があった
5
 Nendoには'()の内部表現が Cell.new と Nil.new の二種類あるが、それを同一と見做していなかった。
5
memq memv memberが '(a b c . d)のような最後がドットペアで終わるリストを正しく処理できなかった
5
anyの挙動がfindと同じであった。 anyの挙動をsrfi-1の定義通りにした。
5

 

5

 

5

version 0.4.1

5
Rubyの"stack level too deep"が出た時の情報を出力する機能を追加した。
5
 関数ごとの詰み上がったstackの深さを深さ順にランキング表示する
5
JSONライブラリ rfc.json を追加した。
5
 Gaucheのrfc.jsonに近いAPIにした
5
バグ修正
5
正規表現で / をバックスラッシュでエスケープできないバグを修正
5
nendo> #/[\/]/
5
#/[/]/
5

以下が正解

5
nendo> #/[\/]/
5
#/[\/]/
5
hash-table-get がキーとして nil と false を受けつけないバグを修正
5

 

5

 

5

version 0.4.0

5
ロードパス周辺を整理した
5
グローバル変数 *load-path* を追加した
5
load関数がグローバル変数 *load-path* からロードすべきファイルを検索するようにした
5
add-load-path関数を追加した (*load-path* にパスを追加するもの)
5
load-library関数を廃止した
5
Nendoのバージョン表示オプションを追加した
5
$ nendo -V
5
Nendo 0.4.0
5

 

5

 

5

version 0.3.5

5
パフォーマンスチューニング (tak関数で約3倍の速度改善)
5
NendoからRubyへのシンボル名変換をランタイム時からコンパイル時に移した。
5
引数の受け渡しに使う型をListからArrayに変更した。
5
関数 read-from-string を追加。
5
バグ修正
5
eqv?が複数定義されていたのを修正
5
equal? がNendo内部のString型(LispString)とString型では常に #f と判定していたのを修正
5
string?がNendo内部のString型(LispString)を#fと判定していたのを修正
5
case構文のバグを修正した
5
(case (car '(a b c d))
5
  ((a) 'a)
5
  ((b) 'b))
5
 正常:
5
   => a
5
 バグ:
5
   => Error: undefined variable _a
5

 

5

 

5

version 0.3.4

5
Gaucheのように(use ライブラリ名) でライブラリの読み込みをできるようにした。
5
 例:
5
(use text.tree)
5
Rubyのブロックを (&block (引数) body) という構文で生成できるようにした。
5
 例: 
5
open {|f| f.readline.puts }
5

上記のRubyコードは下記のようにNendoで記述できる。

5
(open (&block (f) (f.readline.puts)))
5
sort、sort-by関数を追加した。
5
KyotoCabinetを使ったベンチマークサンプルコードを追加した。
5
hash-table-* 系関数の引数の型チェックを外した。(KCのようなHashクラスをDuckTypingしたクラスも扱えるように)
5
#/xxxx/ 形式の正規表現リテラルをサポートした。
5
GaucheのライブラリAPI互換のregex-* 関数群を追加した。
5
Gaucheのgauche.testをポーティングした。(但し、例外サポートを外したためgauche.testのサブセットとなっている)
5
disasm関数をサポートした。(関数のマクロ展開結果や、Rubyコードへの変換結果を出力することができる)
5
map、for-each、filter、filter-map に大きなリストを渡してもStackOverflowしないようにした。(単一リストを受けた場合に限る)
5
メソッド名を変更した。Core#replStr → Core#evalStr
5
Lispの定義可能を export-to-ruby でRubyの世界にエクスポートできるようにした。
5
括弧の対応がマッチしないエラーに、問題のソースファイル名と行番号を表示するようにした。
5
ローカル関数が末尾再帰最適化されないバグを修正した。
5
以下の関数やマクロを追加した。
5
string-length
5
pretty-print-to-string … S式のプリティプリントを文字列として出力する。
5
if-let1
5
その他、バグを修正した。
5

 

5

 

5

version 0.3.3

5
Nendo本体をNendoモジュール化した。 (Nendoというネームスペースに入れた)
5
リファクタリング: nendo.rb内のrepl部分の重複コードをまとめた。
5
リファクタリング: nendo.rb内のmacroexpandとmacroexpand-1の重複コードをまとめた。
5
末尾再帰最適化をサポートした。 (nendo -O 0  オプションで最適化無効にもできる)
5
コンパイルフェーズをNendo自身で記述できる仕組みを追加した。(init.nnd内の %compile-phase 関数)
5
Nendoのトップレベル関数をRubyの特異関数化し、RubyのバックトレースでNendoの関数を追えるようにした。
5
新しい関数の追加: quotient  remainder  modulo  set-car!  set-cdr!  integer? など
5
srfi-1をサポート。(Olin Shiversのリファレンス実装をポーティングした)
5

以下のコードで利用可能。

5
 (load-library "srfi-1")
5
その他、多くのバグを修正した。
5

 

5

 

5

version 0.3.2

5
全ソースコードのヘッダに修正BSDライセンス条項を付けた。
5
ユーザースクリプトに対するコマンドライン引数を *argv* で参照できるようにした。
5
vectorをサポートした。
5
  #( ... ) 構文で RubyのArrayが生成できる。
5
  vector-xxxx 関数群を定義した。
5
S式の外部表現ではtrueとfalseはSchemeと同じ #t #f にした。
5
  他のScheme処理系でそのまま読みこめるチャンスを増やすため
5
2,8,16,10進数の基数ノーテーション #b #o #d #x をサポートした。
5
ユーザースクリプト中にmain関数があれば、スクリプトのロード直後に呼出される様にした。(Gaucheと同様)
5
文字列出力で ["] 文字自身のエスケープを忘れていたのを修正した。
5
NendoのスクリプトファイルをRubyスクリプトにプリコンパイルするオプションを追加した。"nendo -c"
5
JRuby 1.5.0をサポートした。
5
その他、多くのバグを修正した。
5

 

5

 

5

version 0.3.1

5
処理系のバージョン文字列を示す変数 *nendo-version* を追加した。
5
ライブラリファイルdebug/syslogを追加した。(#?=の出力先を syslogに切り替えるもの)
5
rubyに-W0オプションを指定するのをやめた。(危険なコードを生成する部分を排除した)
5
関数hash-table-push!`を追加した。
5
パフォーマンスチューニングを実施(マクロ展開部分とグローバル変数の動的未定義チェック部分)
5
マクロ展開中にraiseされた場合でも、ソースコード上の行番号をエラー表示できるようにした。
5

 

5

 

5

version 0.3.0

5
識別子にR5RSで定義された拡張アルファベット文字をサポートした。
5
  以下はR5RSに記載された拡張アルファベット文字
5
  ! $ % & * + - . / : < = > ? @ ^ _ ~
5
    => 例外として1文字の . と 2文字以上連続する :: と _ は無変換で通すようにした。
5
    => それ以外は NendoからRubyに変換する時に _XXMARK という文字列に置換する。
5
パース: '[' ']' を '(' ')' 同様の扱いとした。
5
多値をサポートした。 (追加した関数群 values  call-with-values  receive)
5
Gaucheと同様のkeywordをサポートした。
5
RubyのHashへのアクセスをGaucheのhash-tableライブラリと同様のAPIでマップした。
5
Gaucheのtext/html-liteのポーティングを行なった。
5
Gaucheのtext/treeのポーティングを行なった。
5
Nendoのソースコードのエンコーディングはutf-8固定とした。
5
関数の追加: nil? to-i global-variables string->symbol symbol->string x->string
5
その他、多くのバグを修正した。
5

 

5

 

5

version 0.2.0

5
機能追加
5
Gaucheの #?= のようなデバッグ表示の仕組を追加。
5
letrecを実装。
5
ローカル関数をletrecに変換する仕組を組み。
5
pretty-print関数をサポート。
5

 

5
高速化
5
コンパイル済みNendoプログラム(Rubyコード) .nndc をロード出来るようにし、起動時間を短縮した。
5

 

5
バグ修正
5
set!が正常にグローバル変数に代入できない。
5
named letが正しく動かない。
5
apply が正しく動かない。
5

 

5

 

5

version 0.1.0

5
初回リリース
5