A collection of basic utilities for syntactic extension and basic data structure handling, developed over the years of CL history by efforts of different individuals, and gathered under the unbrella of a hierarchy of packages which can be used on-demand.
RUTILS is a syntactic utilities package for Common Lisp
(that aims to radically simplify the Lisp programmer's life both in the REPL and in large system development)
RUTILS stands for RADICAL-UTILITIES :)
See the announcement.
RUTILS stood for
REASONABLE-UTILITIES, but now I
switched to calling them
RADICAL-UTILITIES, because they make
some uncommon and not generally acceptable choices in terms of style
of CL development. Namely:
- Introducing several literal notations for anonymous functions, hash-tables, heredoc-strings etc.
- Adding a lot of abbreviations of long symbols from the
- Having several versions of the same utilities with different names
But, what's more important, they aim to radically simplify Lisp programming in the small (with a special accent on simplifying REPL-driven development).
See the original rationale for
The current version is 5.0.0.
- "Modern" readtable with support for literal syntax for hash-tables, lambdas and heredoc-strings
- Common macros like
EVAL-ALWAYSetc. and other symbol manipulation utilities
- Basic anaphoric macros
- A simple pair data structure and accompanying utilities
- List manipulation utilities
- Hash-table manipulation utilities
- Hash-set manipulation utilities
- Sequence manipulation utilities (including
SPLIT-SEQUENCE, or rather, simply
- Array manipulation utilities
- String manipulation utilities
- Tree manipulation utilities
- generic access to elements of any data structure:
ITERmacro with keywords support
- Clojure-style threading macros
Explicitly not supported
The following broad topics are not supported by design:
The reason is not that I consider this not useful or general-purpose enough, but rather, that it's a whole new paradigm, and the scope of
RUTILSis too small to comfortably accommodate it.
As in the above, it's as well a whole other paradigm. It has a limited, but reasonable support in CL. Other features should be unified in it's own package, and maybe
RUTILScan serve as a model for such package or even accommodate it in the future.
Advanced collections are as well a separate area in CS, so it requires a lot of effort to maintain and develop a comprehensive package in it.
CL-CONTAINERSfor such things.
MOP. MOP abstraction layer is a CDR and it is as well an essential part of CL. It is implemented and well supported by
The following symbols are added to
(c) 2009-2019, Vsevolod Dyomkin email@example.com
See LICENSE for usage permissions. See AUTHORS for credits.