emacs.d/clones/lisp/www.cliki.net/Language extension.html
2022-10-07 15:47:14 +02:00

460 lines
No EOL
24 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>CLiki: language extension</title>
<link rel="alternate" type="application/atom+xml" title="ATOM feed of edits to current article"
href="https://www.cliki.net/site/feed/article.atom?title=language%20extension">
<link rel="stylesheet" href="static/css/style.css">
<link rel="stylesheet" href="static/css/colorize.css">
</head>
<body>
<span class="hidden">CLiki - language extension</span>
<div id="content"><div id="content-area"><div id="article-title">language extension</div><div id="article">Language extensions are libraries that are not domain-specific (that is, just concern themselves with "programming" as opposed to "implementing algorithm/datastructure/service x"), widely usable, and could potentially be candidates for <a href="Proposed&#32;Extensions&#32;To&#32;ANSI.html" class="internal">Proposed Extensions To ANSI</a>, but are wider in scope than <a href="utilities.html" class="internal">utilities</a>. Examples would be new object systems, CPS-transformers, etc.<p>Since Common Lisp is the "programmable programming language," many of these extensions are quite far-reaching.<p><ul>
<li>
<a href="ap5.html" class="internal">ap5</a> -
A mature, embedded, in-memory <a href="Relational.html" class="category">Relational</a> <a href="ObjectStore.html" class="category">ObjectStore</a> and a high-level/declarative/specification language
</li>
<li>
<a href="CAPTURED-STREAM.html" class="internal">CAPTURED-STREAM</a> -
captured-stream is a small Common Lisp library for viewing <a href="stream.html" class="category">stream</a>s as sequences
</li>
<li>
<a href="CL&#32;Enumerations.html" class="internal">CL Enumerations</a> -
A package; an implementation of java.util.Enumeration and java.util.Iterator for Common Lisp
</li>
<li>
<a href="cl-2dsyntax.html" class="internal">cl-2dsyntax</a> -
cl-2dsyntax is an indentation-sensitive syntax system like <a href="http://www.python.org">Python</a> (the programming language, not the <a href="CMUCL.html" class="internal">CMUCL</a>/<a href="SBCL.html" class="internal">SBCL</a> compiler) does
</li>
<li>
<a href="cl-ana.html" class="internal">cl-ana</a> -
<a href="https://github.com/ghollisjr/cl-ana">cl-ana</a> aims to provide the basic tools necessary to analyze large/medium-large datasets
</li>
<li>
<a href="cl-annot.html" class="internal">cl-annot</a> -
cl-annot adds Python-like decorators (or Java-like annotations) to Common Lisp
</li>
<li>
<a href="cl-cont.html" class="internal">cl-cont</a> -
cl-cont is a delimited continuations library for Common Lisp
</li>
<li>
<a href="cl-dsl.html" class="internal">cl-dsl</a> -
Define your Domain Specific Languages in a user-friendly way
</li>
<li>
<a href="cl-events.html" class="internal">cl-events</a> -
Composable events system for Common Lisp
</li>
<li>
<a href="cl-groupby.html" class="internal">cl-groupby</a> -
Short implementation of Scalas groupBy functionality for Common Lisp
</li>
<li>
<a href="cl-hooks.html" class="internal">cl-hooks</a> -
cl-hooks allows the description of extension points in software using a concept of hooks (borrowed from Emacs)
</li>
<li>
<a href="cl-itertools.html" class="internal">cl-itertools</a> -
Write iterators in CL in a way close to Python ones
</li>
<li>
<a href="cl-op.html" class="internal">cl-op</a> -
A partial application library inspired by <a href="http://people.csail.mit.edu/jrb/goo/manual.46/goomanual_15.html#17">Goo's op function</a> and <a href="https://srfi.schemers.org/srfi-26/srfi-26.html">SRFI 26</a>
</li>
<li>
<a href="cl-package-aliases.html" class="internal">cl-package-aliases</a> -
Extends the standard CL package system with the ability to define package-local aliases (nicknames) to other packages in a transparent way
</li>
<li>
<a href="cl-parametric-types.html" class="internal">cl-parametric-types</a> -
[BETA] A tool to repeatedly compile the same source code with different types
</li>
<li>
<a href="cl-read-macro-tokens.html" class="internal">cl-read-macro-tokens</a> -
Modify lisp reader, so that it could dispatch not only on characters, but also on arbitrary symbols in <a href="https://www.cliki.net/site/HyperSpec/Body/acc_carcm_cdr_darcm_cddddr.html" class="hyperspec">CAR</a>
</li>
<li>
<a href="cl-rttemplate.html" class="internal">cl-rttemplate</a> -
cl-rttemplate is a quotation system which works in a similar way like the quasiquotation, but during the read-time
</li>
<li>
<a href="cl-secure-read.html" class="internal">cl-secure-read</a> -
Define constrained versions of READ, READ-PRESERVING-WHITESPACE and READ-FROM-STRING
</li>
<li>
<a href="cl-slice.html" class="internal">cl-slice</a> -
This library was unmaintained for several years
</li>
<li>
<a href="cl-splicing-macro.html" class="internal">cl-splicing-macro</a> -
Define macros, that splice multiple forms directly into body of enclosing macro, without any PROGN's left
</li>
<li>
<a href="cl-typed.html" class="internal">cl-typed</a> -
ML-like syntax for ftypes with library-side type-checking
</li>
<li>
<a href="CLLIB.html" class="internal">CLLIB</a> -
CLLIB is a varied collection of Common lisp tools and routines in <a href="CLOCC.html" class="internal">CLOCC</a>
</li>
<li>
<a href="COLLECTING.html" class="internal">COLLECTING</a> -
Common Lispy ways of collecting values during evaluation are diverse; here we discuss some well established and some proposed
</li>
<li>
<a href="collectors.html" class="internal">collectors</a> -
collectors is a common lisp library that aims to ease accumulating values (similar to loop/iter's collecting / appending clauses)
</li>
<li>
<a href="Common&#32;Lisp&#32;Reasoner.html" class="internal">Common Lisp Reasoner</a> -
<a href="Common&#32;Lisp.html" class="internal">Common Lisp</a> meets <a href="AI.html" class="internal">AI</a> problem-solving meets the <a href="semantic&#32;web.html" class="category">semantic web</a>
</li>
<li>
<a href="comparisons.html" class="internal">comparisons</a> -
Comparison is a simple library adding comparison functions similar to <a href="https://www.cliki.net/site/HyperSpec/Body/fun_equal.html" class="hyperspec">EQUAL</a> and <a href="https://www.cliki.net/site/HyperSpec/Body/fun_equalp.html" class="hyperspec">EQUALP</a>, which handle multiple types gracefully
</li>
<li>
<a href="computed-class.html" class="internal">computed-class</a> -
A class metaobject for computed slot values and more
</li>
<li>
<a href="conduit-packages.html" class="internal">conduit-packages</a> -
<a href="https://github.com/tfeb/conduit-packages">conduit-packages</a> provides some enhancements to <a href="Common&#32;Lisp.html" class="internal">Common Lisp</a>'s package system
</li>
<li>
<a href="Context&#32;Lite.html" class="internal">Context Lite</a> -
Context Lite is a <a href="language&#32;extension.html" class="category">language extension</a> for writing methods that specialize on the values of dynamic/special variables at runtime
</li>
<li>
<a href="ContextL.html" class="internal">ContextL</a> -
<a href="http://common-lisp.net/project/closer/contextl.html">ContextL</a> is a <a href="language&#32;extension.html" class="category">language extension</a> for Context-oriented Programming
</li>
<li>
<a href="data-lens.html" class="internal">data-lens</a> -
This library provides a language for expressing data manipulations as the composition of more primitive operations
</li>
<li>
<a href="DBC.html" class="internal">DBC</a> -
DBC is a library for doing <a href="Design&#32;by&#32;contract.html" class="category">Design by contract</a> ala the Eiffel programming language in Common Lisp
</li>
<li>
<a href="defmacro-enhance.html" class="internal">defmacro-enhance</a> -
Extend <a href="https://www.cliki.net/site/HyperSpec/Body/mac_defmacro.html" class="hyperspec">DEFMACRO</a> facility in spirit of <a href="Let&#32;Over&#32;Lambda.html" class="internal">Let Over Lambda</a>
</li>
<li>
<a href="doplus.html" class="internal">doplus</a> -
<a href="doplus.html" class="internal">doplus</a> is a high-level, lispy, extensible iteration construct for Common Lisp
</li>
<li>
<a href="dynamic-classes.html" class="internal">dynamic-classes</a> -
Lets you specify CLOS classes (e.g., as arguments to make-instance) using parameters at run-time, letting you use mixins more conveniently
</li>
<li>
<a href="fare-quasiquote.html" class="internal">fare-quasiquote</a> -
fare-quasiquote is a portable quasiquote implementation that plays well with pattern-matching
</li>
<li>
<a href="fast-generic-functions.html" class="internal">fast-generic-functions</a> -
Generic functions that can be sealed on certain domains for performance
</li>
<li>
<a href="Filtered&#32;Functions.html" class="internal">Filtered Functions</a> -
filtered-functions implements arbitrary predicate dispatch for <a href="CLOS.html" class="category">CLOS</a>
</li>
<li>
<a href="function-cache.html" class="internal">function-cache</a> -
Function-cache is a Common Lisp function caching / memoization library
</li>
<li>
<a href="gecol.html" class="internal">gecol</a> -
gecol provides bindings to <a href="http://www.gecode.org">GECODE</a> in order to enjoy constraint programming in Lisp
</li>
<li>
<a href="General&#32;accumulator.html" class="internal">General accumulator</a> -
<a href="https://github.com/tlikonen/cl-general-accumulator">General accumulator</a> is a general-purpose, extensible value accumulator library
</li>
<li>
<a href="generators.html" class="internal">generators</a> -
Generators is a library that provides python style generators in common lisp, by using cl-cont delimited continuations
</li>
<li>
<a href="ia-hash-table.html" class="internal">ia-hash-table</a> -
Indifferent access hash-tables for Common Lisp
</li>
<li>
<a href="incognito-keywords.html" class="internal">incognito-keywords</a> -
incognito-keywords introduces a new kind of keyword that looks just like any non-keyword symbol and allows safe usage of convenient but clashy symbol names by multiple libraries without conflicts through sharing
</li>
<li>
<a href="Incongruent&#32;Methods.html" class="internal">Incongruent Methods</a> -
A library that provides methods with incongruent lambda lists
</li>
<li>
<a href="inlined-generic-function.html" class="internal">inlined-generic-function</a> -
A MOP-based implementation of fast inlined generic functions dispatched in compile-time
</li>
<li>
<a href="iterate.html" class="internal">iterate</a> -
<a href="https://gitlab.common-lisp.net/iterate/iterate">iterate</a> is a lispy and extensible replacement for the <a href="https://www.cliki.net/site/HyperSpec/Body/mac_loop.html" class="hyperspec">LOOP</a> macro
</li>
<li>
<a href="iterate-keywords.html" class="internal">iterate-keywords</a> -
Lispy and extensible replacement for the <a href="https://www.cliki.net/site/HyperSpec/Body/mac_loop.html" class="hyperspec">LOOP</a> macro, fork of <a href="iterate.html" class="internal">iterate</a>
</li>
<li>
<a href="lambda-reader.html" class="internal">lambda-reader</a> -
lambda-reader is a <a href="language&#32;extension.html" class="category">language extension</a> that lets you use the Unicode character λ for <a href="https://www.cliki.net/site/HyperSpec/Body/any_lambda.html" class="hyperspec">LAMBDA</a> in the <a href="Lisp.html" class="category">Lisp</a> reader and printer
</li>
<li>
<a href="macrodynamics.html" class="internal">macrodynamics</a> -
Macrodynamics is a <a href="language&#32;extension.html" class="category">language extension</a> that broadens the notion of dynamic scope inside macroexpansion code
</li>
<li>
<a href="memoize.html" class="internal">memoize</a> -
<a href="https://github.com/tfeb/interim-lisp/blob/master/memoize.lisp">Memoize</a> is a small library for performing <a href="memoization.html" class="category">memoization</a>
</li>
<li>
<a href="metacopy.html" class="internal">metacopy</a> -
Metacopy is a library that makes it easy to specify how to make copies of an object
</li>
<li>
<a href="method-versions.html" class="internal">method-versions</a> -
A Common Lisp library for dispatching generic methods based on the value of a global parameter rather than on one of the required parameters
</li>
<li>
<a href="mexpr.html" class="internal">mexpr</a> -
<a href="https://github.com/tmccombs/mexpr">mexpr</a> is an Infix syntax library
</li>
<li>
<a href="modf.html" class="internal">modf</a> -
An immutable setf
</li>
<li>
<a href="Modularize.html" class="internal">Modularize</a> -
Modularize is an attempt at providing a common interface to segregate major application components
</li>
<li>
<a href="MW-EQUIV.html" class="internal">MW-EQUIV</a> -
<a href="http://www.foldr.org/~michaelw/log/programming/lisp/mw-equiv">mw-equiv</a> provides one of many possible equivalence relations between Common Lisp objects, similar to the standard <a href="https://www.cliki.net/site/HyperSpec/Body/fun_equal.html" class="hyperspec">EQUAL</a> function family, but extensible
</li>
<li>
<a href="named-readtables.html" class="internal">named-readtables</a> -
Named-Readtables is a <a href="language&#32;extension.html" class="category">language extension</a> library that provides a namespace for readtables akin to the
</li>
<li>
<a href="package-renaming.html" class="internal">package-renaming</a> -
package-renaming is a library for locally renaming CL packages
</li>
<li>
<a href="place-modifiers.html" class="internal">place-modifiers</a> -
place-modifiers essentially gives access to hundreds of modify-macros through one single macro: modify
</li>
<li>
<a href="prompt-for.html" class="internal">prompt-for</a> -
Prompt the user for input of a particular type, or satisfying some predicate
</li>
<li>
<a href="quid-pro-quo.html" class="internal">quid-pro-quo</a> -
A contract programming library for Common Lisp in the style of Eiffels <a href="Design&#32;by&#32;contract.html" class="category">Design by contract</a>
</li>
<li>
<a href="readable.html" class="internal">readable</a> -
readable adds additional abbreviations in the sexp reader; supports infix, optional standard function call notation, optional indentation
</li>
<li>
<a href="sb-sequence.html" class="internal">sb-sequence</a> -
An <a href="SBCL.html" class="category">SBCL</a> implementation of the protocol for user defined sequences
</li>
<li>
<a href="screamer.html" class="internal">screamer</a> -
Screamer adds support for nondeterministic and constraint programming, including backtracking and undoable side-effects
</li>
<li>
<a href="Series.html" class="internal">Series</a> -
A library providing data structure that combines aspects of sequences, (lazy) streams and loops, using a technique known as “fusion” or “deforestation”
</li>
<li>
<a href="Sheeple.html" class="internal">Sheeple</a> -
Sheeple is a delegative prototype-based object system inspired by <a href="CLOS.html" class="internal">CLOS</a>
</li>
<li>
<a href="snakes.html" class="internal">snakes</a> -
Python style generators for Common Lisp
</li>
<li>
<a href="SRFI.html" class="internal">SRFI</a> -
Scheme Requests for Implementation (<a href="http://srfi.schemers.org/">SRFI</a>) are proposed <a href="language&#32;extension.html" class="category">language extension</a>s to Scheme, but that doesn't stop people from implementing them for Common Lisp
</li>
<li>
<a href="syntax-case.html" class="internal">syntax-case</a> -
SYNTAX-CASE is a system for macros proposed by R
</li>
<li>
<a href="xarray.html" class="internal">xarray</a> -
This package implements a generalized interface for array-like
</li>
</ul><p><b>Pattern matching:</b> (main topic: <a href="pattern&#32;matching.html" class="internal">pattern matching</a>)
<ul>
<li>
<a href="bind.html" class="internal">bind</a> -
Bind combines <a href="https://www.cliki.net/site/HyperSpec/Body/speope_letcm_letst.html" class="hyperspec">let*</a>, <a href="https://www.cliki.net/site/HyperSpec/Body/mac_destructuring-bind.html" class="hyperspec">destructuring-bind</a> and <a href="https://www.cliki.net/site/HyperSpec/Body/mac_multiple-value-bind.html" class="hyperspec">multiple-value-bind</a> into a single form
</li>
<li>
<a href="bpm2.html" class="internal">bpm2</a> -
bpm2 is a <a href="pattern&#32;matching.html" class="category">pattern matching</a> language originally designed for doing code transformation [ie, writing compilers]
</li>
<li>
<a href="cartesian-product-switch.html" class="internal">cartesian-product-switch</a> -
cartesian-product-switch is a macro for choosing the appropriate form to execute according to the combined results of multiple tests
</li>
<li>
<a href="cl-unification.html" class="internal">cl-unification</a> -
Provides unification (as used in Prolog) over fairly arbitrary Common Lisp objects
</li>
<li>
<a href="cl-xmlspam.html" class="internal">cl-xmlspam</a> -
XML Stream PAttern Matcher - concise, regexp-like <a href="pattern&#32;matching.html" class="category">pattern matching</a> on streaming <a href="XML.html" class="category">XML</a>
</li>
<li>
<a href="let-plus.html" class="internal">let-plus</a> -
LET+ extends <a href="https://www.cliki.net/site/HyperSpec/Body/speope_letcm_letst.html" class="hyperspec">let*</a> with destructuring forms, slot access, hash table elements and various other constructs with a consistent interface
</li>
<li>
<a href="MCPat.html" class="internal">MCPat</a> -
MCPat is a meta-circular <a href="pattern&#32;matching.html" class="category">pattern matching</a> library
</li>
<li>
<a href="screamer.html" class="internal">screamer</a> -
Screamer adds support for nondeterministic and constraint programming, including backtracking and undoable side-effects
</li>
<li>
<a href="spath.html" class="internal">spath</a> -
<a href="https://github.com/svetlyak40wt/cl-spath">SPath</a> is a library for running search queries against s-expressions, intended to match parts of them that the user needs
</li>
<li>
<a href="Toadstool.html" class="internal">Toadstool</a> -
Toadstool is a library for <a href="pattern&#32;matching.html" class="category">pattern matching</a>
</li>
<li>
<a href="Trivia.html" class="internal">Trivia</a> -
Trivial <a href="pattern&#32;matching.html" class="category">pattern matching</a> compiler
</li>
<li>
<a href="type-r.html" class="internal">type-r</a> -
The complete collection of accessor functions and patterns to access the elements in a compound type specifier
</li>
</ul><p><b>Metaprogramming:</b> (main topic: <a href="metaprogramming.html" class="internal">metaprogramming</a>)
<ul>
<li>
<a href="agnostic-lizard.html" class="internal">agnostic-lizard</a> -
An almost correct portable code walker for Common Lisp
</li>
<li>
<a href="arrow-macros.html" class="internal">arrow-macros</a> -
Clojure-like arrow macros in Common Lisp
</li>
<li>
<a href="bubble-operator-upwards.html" class="internal">bubble-operator-upwards</a> -
bubble-operator-upwards is a function that "bubbles an operator upwards" in a form, demultiplexing all alternative branches by way of cartesian product
</li>
<li>
<a href="cl-cont.html" class="internal">cl-cont</a> -
cl-cont is a delimited continuations library for Common Lisp
</li>
<li>
<a href="cl-curlex.html" class="internal">cl-curlex</a> -
Leak *LEXENV*, which describes lexical environment, into the runtime
</li>
<li>
<a href="cl-indeterminism.html" class="internal">cl-indeterminism</a> -
Find and manipulate undefined variables and functions in forms
</li>
<li>
<a href="cl-walker.html" class="internal">cl-walker</a> -
<a href="http://dwim.hu/darcsweb/darcsweb.cgi?r=HEAD%20hu.dwim.walker;a=summary">cl-walker</a> implements an sexp → <a href="CLOS.html" class="internal">CLOS</a> AST tree transformation (and vice versa)
</li>
<li>
<a href="Concrete-Syntax-Tree.html" class="internal">Concrete-Syntax-Tree</a> -
<a href="https://github.com/s-expressionists/Concrete-Syntax-Tree">Concrete Syntax Trees</a> represent s-expressions with source information
</li>
<li>
<a href="de.setf.utility.html" class="internal">de.setf.utility</a> -
de setf utility is a collection of Common Lisp <a href="utilities.html" class="category">utilities</a> functions and several purpose-specific libraries
</li>
<li>
<a href="deprecations.html" class="internal">deprecations</a> -
<a href="https://github.com/tfeb/tfeb-lisp-tools/blob/main/deprecations.lisp">deprecations</a> allows you to define functions, generic functions, macros and symbol macros as deprecated
</li>
<li>
<a href="linewise-template.html" class="internal">linewise-template</a> -
A Common Lisp library for processing <a href="text.html" class="category">text</a> files and streams as templates conforming to simple line-based hierarchical formats
</li>
<li>
<a href="macro-eval.html" class="internal">macro-eval</a> -
A kind of <a href="https://www.cliki.net/site/HyperSpec/Body/fun_eval.html" class="hyperspec">eval</a> for use at macro-expansion time (such as for constant-folding purposes)
</li>
<li>
<a href="macroexpand-dammit.html" class="internal">macroexpand-dammit</a> -
macroexpand-dammit is a code walker by John Fremlin
</li>
<li>
<a href="parse-declarations.html" class="internal">parse-declarations</a> -
Parse-Declarations is a <a href="metaprogramming.html" class="category">metaprogramming</a> library to parse, filter, and build Common Lisp declarations (things like (inline foo))
</li>
<li>
<a href="parse-number-range.html" class="internal">parse-number-range</a> -
parse-number-range parses loop's convenient "for-as-arithmetic" syntax into 5 simple values
</li>
<li>
<a href="quasiquote-2.0.html" class="internal">quasiquote-2.0</a> -
An alternative quasiquote syntax aimed at being more suitable for macros that define other macros
</li>
<li>
<a href="reader-interception.html" class="internal">reader-interception</a> -
reader-interception is a library for replacing the lisp reader with your own, so you can define your own syntax or compile other language through Lisp
</li>
<li>
<a href="symbol-namespaces.html" class="internal">symbol-namespaces</a> -
symbol-namespaces defines a new kind of package that's named by a symbol rather than a string
</li>
</ul></div></div>
<div id="footer" class="buttonbar"><ul><li><a href="language&#32;extension.html">Current version</a></li>
<li><a href="https://www.cliki.net/site/history?article=language%20extension">History</a></li>
<li><a href="https://www.cliki.net/site/backlinks?article=language%20extension">Backlinks</a></li><li><a href="https://www.cliki.net/site/edit-article?title=language%20extension&amp;from-revision=3639091305">Edit</a></li><li><a href="https://www.cliki.net/site/edit-article?create=t">Create</a></li></ul></div>
</div>
<div id="header-buttons" class="buttonbar">
<ul>
<li><a href="https://www.cliki.net/">Home</a></li>
<li><a href="https://www.cliki.net/site/recent-changes">Recent Changes</a></li>
<li><a href="CLiki.html">About</a></li>
<li><a href="Text&#32;Formatting.html">Text Formatting</a></li>
<li><a href="https://www.cliki.net/site/tools">Tools</a></li>
</ul>
<div id="search">
<form action="https://www.cliki.net/site/search">
<label for="search_query" class="hidden">Search CLiki</label>
<input type="text" name="query" id="search_query" value="" />
<input type="submit" value="search" />
</form>
</div>
</div>
<div id="pageheader">
<div id="header">
<span id="logo">CLiki</span>
<span id="slogan">the common lisp wiki</span>
<div id="login"><form method="post" action="https://www.cliki.net/site/login">
<label for="login_name" class="hidden">Account name</label>
<input type="text" name="name" id="login_name" class="login_input" />
<label for= "login_password" class="hidden">Password</label>
<input type="password" name="password" id="login_password" class="login_input" />
<input type="submit" name="login" value="login" id="login_submit" /><br />
<div id="register"><a href="https://www.cliki.net/site/register">register</a></div>
<input type="submit" name="reset-pw" value="reset password" id="reset_pw" />
</form>
</div>
</div>
</div>
</body></html>