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.
Short history
Originally, 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
CLpackage - 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 REASONABLE-UTILITIES.
Brief description
Included in core
- "Modern" readtable with support for literal syntax for hash-tables, lambdas and heredoc-strings
Basic common control utilities, like
- Common macros like
WITH-GENSYMS,ONCE-ONLY,EVAL-ALWAYSetc. - Basic anaphoric macros
- Symbol manipulation utilities
- List manipulation utilities
- Sequence manipulation utilities (including
SPLIT-SEQUENCE, or rather, simplySPLIT) - Hash-table manipulation utilities
- String manipulation utilities
- Tree manipulation utilities
- A simple pair data structure and accompanying utilities
Included in contrib (RUTILSX)
- generic access to elements of any data structure:
GENERIC-ELT/? ITERmacro with keywords support- generic
BIND - Clojure-style threading macros
->and->>
Explicitly not supported
The following broad topics are not supported by design:
-
Concurrency.
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. -
Functional paradigm.
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.
Look at
FSETandCL-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
CLOSER-MOP.
Technical notes
Dependencies
Exported features
The following symbols are added to *FEATURES*:
:split-sequence(byRUTILS.SEQUENCE,RUTILS, andRUTIL):iter(byRUTILSX.ITERandRUTILSX)
Organizational notes
(c) 2009-2014, Vsevolod Dyomkin vseloved@gmail.com
See LICENSE for usage permissions. See AUTHORS for credits.