Nendo
Nendo is a dynamic programming language built on top of Ruby environment. It is designed to be a macro language of Ruby. Nendo provides easy access to the whole Ruby environment.
Nendo is a dialect of Lisp. nendo
means clay in Japanese. Lisp programming is reminiscent of a clay craft. I hope you will feel like playing with clay when you use Nendo.
Features
- Scheme-like Syntax: Uses S-expressions to enable true macros that are sealed as forbidden techniques in Ruby
- Direct Ruby Access: Access Ruby's standard libraries and gems using the dot (.) syntax
- List Processing Oriented: Powerful for complex data structures and tree manipulation
- Easy Installation: Pure Ruby implementation - just install the gem
Supported Libraries
SRFIs
- SRFI 1: List Library (map, filter, fold, ...)
- SRFI 2: AND-LET*
- SRFI 8: RECEIVE
- SRFI 9: Defining Record Types
- SRFI 26: Notation for Specializing Parameters (cut, cute)
- SRFI 46: Basic Syntax-rules Extensions
- SRFI 61: A more general COND clause
- SRFI 69: Basic hash tables
Ported from chibi-scheme and Gauche
- text.html-lite - Simple HTML document construction
- text.tree - Lazy text construction
- nendo.test - Unit testing (subset of gauche.test)
- rfc.json - JSON parsing and construction
- util.list - Additional list library
- util.match - Pattern matching (ported from chibi-scheme 0.3)
- util.combinations - Combination library
Installation
Requirements
- Ruby 2.3, 2.4, 2.7, 3.0, 3.1, 3.2, 3.3, 3.4
- JRuby 1.6.2+
Install from RubyGems
gem install nendo
Examples
Hello World
(print (+ "Hello " "World!"))
; => Hello World!
Even numbers filter
(filter
(lambda (n)
(= (% n 2) 0))
'(1 2 3 4 5 6 7 8 9 10))
; => (2 4 6 8 10)
Accessing Ruby libraries
(require "date")
(let1 d (Date.new 0)
(list (d.strftime "%x")
(d.strftime "%s")))
Defining macros
(define when (macro form
`(if ,(car form) (begin ,@(cdr form)))))
For Ruby Users
- S-expression syntax: Enables true macros and powerful DSL construction
- List processing: Ideal for complex data structures where object-oriented approaches fall short
- Seamless Ruby integration: Access the entire Ruby ecosystem
For Lisp Users
- Vast Ruby library ecosystem: Access all gems and Ruby libraries
- Cloud deployment ready: Works on Ruby-based PaaS platforms like Heroku
- Easy installation: Pure Ruby implementation, no complex dependencies
Source Code & Development
Projects Written in Nendo
- sekka - Japanese input method
Documentation
License
This software is open source, covered by a BSD-style license. Please read accompanying file COPYING.