Nendo RSSPLAIN

Related pages: !kiyoka.blog.2005_04 !kiyoka.blog.2005_03 !kiyoka.blog.2005_02 !kiyoka.blog.2005_01 !kiyoka.blog.2004_12 !kiyoka.blog.2004_11 !kiyoka.blog.2004_10 !kiyoka.blog.2004_09 !kiyoka.blog.2004_08 !kiyoka.blog.2004_07
544523555555555255555555055555555555555555555555555555555555555555555555555555555555551555550555555555555555555555555555555555555555555555555
5

Nendo programming language

4

Nendo is a dynamic programming language built on top of Ruby environment. It is designed to be a macro language of Ruby.

4

Nendo provides easy access to the whole Ruby environment.

5

 

2
 iStock_000019986662XSmall
3

 

5

Nendo is a dialect of Lisp.

5

`nendo' means clay in Japanese. Lisp programming is reminiscent of a clay craft.

5

I hope you will feel like playing with clay when you use Nendo.

5

 

5

NendoはLisp方言のひとつです。

5

NendoはRuby上に構築された動的言語です。Ruby用のマクロ言語になるようにデザインされています。

5

作者(kiyoka)はLispが『粘土』を触っている時の感覚を思い起こさせることからNendoと命名しました。粘土細工のように自由に楽しんでNendoプログラミングして下さい。

5

 

5

Source Code & CI

2
 Octocat  kiyoka/nendo - GitHubEXT
5
 twitter.icon_reasonably_small  Travis CI - Distributed build platform for the Ruby communityEXT
5

 

5

 

5

Supported Libraries

5
SRFIs
5
SRFI 1: List LibraryEXT ( map filter fold ... )
5
SRFI 2: AND-LET*: an AND with local bindings, a guarded LET* special formEXT
5
SRFI 8: RECEIVE: Binding to multiple valuesEXT
0
SRFI 9: Defining Record TypesEXT
5
SRFI 26: Notation for Specializing Parameters without CurryingEXT ( cut cute )
5
SRFI 46: Basic Syntax-rules ExtensionsEXT
5
SRFI 61: A more general COND clauseEXT ( => in cond )
5
SRFI 69: Basic hash tablesEXT
5

 

5
ported from chibi-scheme and Gauche
5
Gauche Users' Reference: text.html-lite - Simple HTML document constructionEXT
5
Gauche Users' Reference: text.tree - Lazy text constructionEXT
5
nendo.test ( subset of Gauche Users' Reference: gauche.test - Unit TestingEXT )
5
Gauche Users' Reference: rfc.json - JSON parsing and constructionEXT
5
Gauche Users' Reference: util.list - Additional list libraryEXT
5
Gauche Users' Reference: util.match - Pattern matchingEXT ( ported from chibi-scheme 0.3 )
5
Gauche Users' Reference: util.combinations - Combination libraryEXT
5

 

5

 

5

特徴

5
Schemeに近いシンタックス
5

Rubyとの親和性を壊さない限りにおいて、なるべくR5RS Schemeのシンタックスに近くなるようにデザインされています。

5

シンタックスをS式にすることにより、Rubyでは禁じ手として封印されていた本物のmacroが使えます。

5
(define when (macro form
5
    `(if ,(car form) (begin ,@(cdr form)))))
5

Rubyのメタプログラミングを窮屈と感じた方にぴったりです。

5

macroの達人になればRubyよりもさらに高いコード圧縮率を達成できるはずです。

5

 

5
Rubyへの直接アクセス
5

専用のシンタックス(.)ドットで、Rubyの標準添付ライブラリやgemsで公開されている多くのライブラリを利用できます。

5
(require "date")
5
(let1 d (Date.new 0)
5
  (list (d.strftime "%x")
5
        (d.strftime "%s")))
5

 

5
Rubyのモジュールへのコンパイル(予定)
5

ユーザーがNendoで開発したプログラムはRubyのモジュールにコンパイルすることができます。(予定)

5

中身は100% Rubyのコードに変換済になるため生成されたモジュールはPure Rubyに近い速度で走ります。(予定)

5

 

5

 

5

Rubyユーザから見たNendo

5

 

5

構文がS式

5

構文はS式であるためLisp系言語の本物のmacroを使うことができます。DSLもマクロで構築可能です。

5

RubyのDSLに限界を感じた方は、Rubyでは禁じ手として封印されていた本物のmacroでのコード圧縮が可能です。

5

 

5

リスト処理向き

5

ツリー構造を操作するような複雑なデータ構造にはRubyのオブジェクト指向的アプローチが向かないこともあります。

5

その部分に限定してリスト処理を得意とするNendoを使えば強力な武器になります。

5

 

5

 

5

Lispユーザから見たNendo

5

 

5

Rubyの膨大なライブラリが使える

5

Ruby上にインタプリタを構築しているため、gemの資産が全て使えます。

5

多くのSchemeやCommon Lisp処理系では人手の問題で、最新のWebAPIやデータベースへのアダプタの整備が遅れがちです。

5
 ※ Gauche + dyncompの組みあわせを使っても、人間がRuby専用にデザインし
5
 たAPIの使いやすさには及びません。
5

 

5

Cloud環境で使える(予定)

5

HerokuEXTなどのRubyをベースとしたPaaS環境でS式によるWebアプリケーション開発が可能です。(予定)

5

多くのSchemeやCommon Lisp処理系はPaaS環境でサポートされていないため、Amazon EC2などのIaaS(仮想環境)を使わざるを得ません。

5

 

5

インストールが容易

5

NendoはPureRubyでできています。

1

Ruby 1.9系環境で nendoのgemを追加インストールするだけです。

5

 

5

 

5

Install

5

 

5

required software

0
Ruby  1.9.3  2.0.0  2.1.0 2.2.0 nendo
5
JRuby 1.6.2
5

 

5

how to install

5
$ gem search -r nendo
5
gem search -r nendo
5
5
*** REMOTE GEMS ***
5
5
nendo (0.5.3)
5
5
$ gem install nendo
5
gem install nendo
5
Successfully installed nendo-0.5.3
5
1 gem installed
5
Installing ri documentation for nendo-0.5.3...
5
Installing RDoc documentation for nendo-0.5.3...
5

 

5

Samples

5
Hello World
5
(print (+ "Hello " "World!"))
5
   => Hello World!
5

 

5
even numbers filter
5
(filter
5
 (lambda (n)
5
   (= (% n 2) 0))
5
 '(1 2 3 4 5 6 7 8 9 10))
5
   => (2 4 6 8 10)
5

 

5

Documents

5

Nendo.Tutorial             (in Japanese)

5

Nendo.ReferenceManual      (in Japanese)

5

Nendo.ReleaseNote          (in Japanese)

5

Nendo.TODO                 (in Japanese)

5

 

5

Slides

5
"Lisp + Ruby = Nendo" at Kansai RubyKaigi03 EXT(in Japanese)
5
    NendoAtKansaiRubyKaigi03.page1
5

 

5

Source code

5

kiyoka/nendo - GitHubEXT

5

 

5

Written in Nendo

5

kiyoka/sekka - GitHubEXT

5

kiyoka/stowspec - GitHubEXT

5

kiyoka/dekamoji - GitHubEXT

5

 

5

...comment disabled...