Nendo 0.3.4 リリース
[Nendo] 0.3.4をリリースしました。(リリースノート: [Nendo.ReleaseNote])
チュートリアルと、リファレンスマニュアルを少し加筆しました。
まだまだ ##(todo)項目が多いですが、最低限の情報は記載したつもりです。(それから、そのうち英語版も作らないといけないですね…)
かなりの部分で、[Gauche]のAPIを参考にしているので迷ったらGaucheのユーザリファレンスを参照していただくと解決すると思います(笑)
[Nendo.Tutorial] [Nendo.ReferenceManual]
今回のポイントはgemライブラリを利用する上で全般的に足りなかった機能が追加されたことでしょう。 0.3.3以後はKyoto Cabinetを使った[Sekka]という日本語入力メソッドを作りながら足りない部分を補いました。
中でも、 (&block …)構文は重要な機能追加です。 (&block …) 構文を使えば、Rubyのブロックその物が生成可能です。 &block構文を用意した理由は、多くのRuby gemライブラリがブロックを引数に取るメソッドを持っているためです。
例えば、入力テキストsample.rb の全行をコメントアウトするプログラムは以下のように書くことができます。 Ruby
open ("sample.rb" ) {|f|
f.readlines.each {|line|
puts "# " + line.chop
}
}
Nendo
(.open "sampel.rb"
(&block (f)
(f.readlines.each
(&block (line)
(print ("# " + (line.chop)))))))
次は、Kyoto CabinetのAPIを使う例です。 Ruby
#!/usr/local/bin/ruby
# -*- coding: utf-8 -*-
require 'kyotocabinet'
include KyotoCabinet
db = DB::new
# データベースを開く
unless db.open('numbers.kch', DB::OWRITER | DB::OCREATE)
printf("open error: %s\n", db.error)
end
# 書きこみ
(0..99999).each { |num|
db* num * = num
}
p db*1000*
p db*10000*
Nendo
#!/bin/sh
:; #-*- mode: nendo; syntax: scheme -*-;;
:; exec /usr/local/bin/nendo $0 $*
(require "kyotocabinet")
(define db (KyotoCabinet::DB.new))
(define (main argv)
(define (_create)
(if (not (db.open "numbers.kch" (+ KyotoCabinet::DB::OWRITER KyotoCabinet::DB::OCREATE)))
(printf "open error: %s\n" db.error)
;; 書きこみ
(Range.new 0 99999
(&block (num)
(db.store num num)))))
(_create)
(print (hash-table-get db 1000))
(print (hash-table-get db 10000)))
何とか、使える処理系に近づいてきた気がしませんか?(速度は別にして…) 今後もアプリケーションを作りながら、少しづつ実用的な処理系にしていく予定です。