Scheme Requests for Implementation
The purpose of the Scheme Requests for Implementation (SRFI)
process is to help Scheme users write portable, useful code.
We write concrete, detailed proposals and reference
implementations for libraries and other additions to the
Scheme language, and we encourage Scheme implementors to adopt
them.
If you're interested in reading existing proposals, writing a
new one, providing feedback on a draft proposal, helping with
a reference implementation, or reporting a bug, please read
about our process , skim our FAQ , and subscribe to some of our
mailing lists.
Here's a complete list of of more than 150 existing SRFIs:
Sort by
authors
date
name
number
status
0 Feature-based conditional expansion construct by Marc Feeley Final: 1999/5/7
1 List Library by Olin Shivers Final: 1999/10/9
2 AND-LET*: an AND with local bindings, a guarded LET* special form by Oleg Kiselyov Final: 1999/3/1
3 List-Set Library by Olin Shivers Withdrawn: 1999/08/26
4 Homogeneous numeric vector datatypes by Marc Feeley Final: 1999/5/22
5 A compatible let form with signatures and rest arguments by Andy Gaynor Final: 1999/4/26
6 Basic String Ports by William D Clinger Final: 1999/7/1
7 Feature-based program configuration language by Richard Kelsey Final: 1999/8/19
8 receive: Binding to multiple values by John David Stone Final: 1999/8/30
9 Defining Record Types by Richard Kelsey Final: 1999/9/9
10 #, external form by Oleg Kiselyov Final: 2000/1/13
11 Syntax for receiving multiple values by Lars T Hansen Final: 2000/3/15
12 Exception Handling by William Clinger, R. Kent Dybvig, Matthew Flatt, and Marc Feeley Withdrawn: 2000/01/22
13 String Libraries by Olin Shivers Final: 2000/12/28
14 Character-set Library by Olin Shivers Final: 2000/12/28
15 Syntax for dynamic scoping by Lars T Hansen Withdrawn: 2000/03/10
16 Syntax for procedures of variable arity by Lars T Hansen Final: 2000/3/10
17 Generalized set! by Per Bothner Final: 2000/7/24
18 Multithreading support by Marc Feeley Final: 2001/3/14
19 Time Data Types and Procedures by Will Fitzgerald Final: 2000/8/31
20 Simple object system by Christian Queinnec Withdrawn: 2001/04/29
21 Real-time multithreading support by Marc Feeley Final: 2001/3/2
22 Running Scheme Scripts on Unix by Martin Gasbichler and Michael Sperber Final: 2002/1/20
23 Error reporting mechanism by Stephan Houben Final: 2001/6/22
24 Define-syntax in local lexical scopes by Antti Huima Withdrawn: 2002/04/12
25 Multi-dimensional Array Primitives by Jussi Piitulainen Final: 2002/5/21
26 Notation for Specializing Parameters without Currying by Sebastian Egner Final: 2002/2/14
27 Sources of Random Bits by Sebastian Egner Final: 2002/6/3
28 Basic Format Strings by Scott G. Miller Final: 2002/6/25
29 Localization by Scott G. Miller Final: 2002/8/1
30 Nested Multi-line Comments by Martin Gasbichler Final: 2002/8/7
31 A special form `rec' for recursive evaluation by [email protected] Final: 2002/12/2
32 Sort Libraries by Olin Shivers Withdrawn: 2003/07/17
33 Integer Bitwise-operation Library by Olin Shivers Withdrawn: 2003/07/17
34 Exception Handling for Programs by Richard Kelsey and Michael Sperber Final: 2002/12/1
35 Conditions by Richard Kelsey and Michael Sperber Final: 2002/12/1
36 I/O Conditions by Michael Sperber Final: 2002/12/1
37 args-fold: a program argument processor by Anthony Carrico Final: 2003/1/13
38 External Representation for Data With Shared Structure by Ray Dillinger Final: 2003/4/2
39 Parameter objects by Marc Feeley Final: 2003/6/30
40 A Library of Streams by Philip L. Bewig Final: 2004/8/22
41 Streams by Philip L. Bewig Final: 2008/1/24
42 Eager Comprehensions by Sebastian Egner Final: 2003/7/7
43 Vector library by Taylor Campbell Final: 2004/10/26
44 Collections by Scott G. Miller Final: 2004/3/7
45 Primitives for Expressing Iterative Lazy Algorithms by André van Tonder Final: 2004/4/5
46 Basic Syntax-rules Extensions by Taylor Campbell Final: 2005/2/28
47 Array by Aubrey Jaffer Final: 2004/6/14
48 Intermediate Format Strings by Ken Dickey Final: 2004/3/2
49 Indentation-sensitive syntax by Egil Möller Final: 2005/7/22
50 SRFI 50: Mixing Scheme and C by Richard Kelsey and Michael Sperber Withdrawn: 2005/12/20
51 Handling rest list by Joo ChurlSoo Final: 2004/6/7
52 Permitting and Supporting Extended Character Sets by Thomas Lord ([email protected] aka [email protected] ) Withdrawn: 2004/06/17
53 Syntactic computations with computation-rules by André van Tonder Withdrawn: 2004/09/06
54 Formatting by Joo ChurlSoo Final: 2004/6/24
55 require-extension by Felix L. Winkelmann and D.C. Frost Final: 2004/11/5
56 Binary I/O by Alex Shinn Withdrawn: 2005/10/31
57 Records by André van Tonder Final: 2005/3/7
58 Array Notation by Aubrey Jaffer Final: 2005/3/8
59 Vicinity by Aubrey Jaffer Final: 2005/3/8
60 Integers as Bits by Aubrey Jaffer Final: 2005/3/8
61 A more general cond clause by Taylor Campbell Final: 2005/7/21
62 S-expression comments by Taylor Campbell Final: 2005/7/21
63 Homogeneous and Heterogeneous Arrays by Aubrey Jaffer Final: 2005/4/27
64 A Scheme API for test suites by Per Bothner Final: 2006/6/18
65 define-immutable: A Syntax to Define Identifiers With Immutable Values by Andrew Wilcox Withdrawn: 2005/05/17
66 Octet Vectors by Michael Sperber Final: 2005/12/15
67 Compare Procedures by Sebastian Egner and Jens Axel Søgaard Final: 2005/9/11
68 Comprehensive I/O by Michael Sperber Withdrawn: 2005/11/29
69 Basic hash tables by Panu Kalliokoski Final: 2005/9/14
70 Numbers by Aubrey Jaffer Final: 2005/9/11
71 Extended LET-syntax for multiple values by Sebastian Egner Final: 2005/8/12
72 Hygienic macros by André van Tonder Final: 2005/9/21
73 Exact Infinities by Chongkai Zhu Withdrawn: 2005/11/30
74 Octet-Addressed Binary Blocks by Michael Sperber Final: 2005/12/15
75 R6RS Unicode data by Matthew Flatt and Marc Feeley Withdrawn: 2006/05/27
76 R6RS Records by Will Clinger, R. Kent Dybvig, Michael Sperber, Anton van Straaten Withdrawn: 2006/04/24
77 Preliminary Proposal for R6RS Arithmetic by William D Clinger and Michael Sperber Withdrawn: 2006/09/13
78 Lightweight testing by Sebastian Egner Final: 2006/3/6
79 Primitive I/O by Michael Sperber Withdrawn: 2006/11/16
80 Stream I/O by Michael Sperber Withdrawn: 2006/11/20
81 Port I/O by Michael Sperber Withdrawn: 2006/11/20
82 Stream Ports by Michael Sperber Withdrawn: 2006/11/20
83 R6RS Library Syntax by Matthew Flatt and Kent Dybvig Withdrawn: 2006/09/13
84 Universal Identifiers by Andrew Wilcox Withdrawn: 2006/11/09
85 Recursive Equivalence Predicates by William D Clinger Withdrawn: 2006/10/21
86 MU and NU simulating VALUES & CALL-WITH-VALUES, and their related LET-syntax by Joo ChurlSoo Final: 2006/6/20
87 => in case clauses by Chongkai Zhu Final: 2006/10/18
88 Keyword objects by Marc Feeley Final: 2007/7/3
89 Optional positional and named parameters by Marc Feeley Final: 2007/7/10
90 Extensible hash table constructor by Marc Feeley Final: 2007/7/10
91 Extended ports by Marc Feeley Withdrawn: 2007/07/10
92 ALAMBDA and ALAMBDA* by Joo ChurlSoo Withdrawn: 2007/04/09
93 R6RS Syntax-Case Macros by Kent Dybvig Withdrawn: 2006/08/23
94 Type-Restricted Numerical Functions by Aubrey Jaffer Final: 2007/1/30
95 Sorting and Merging by Aubrey Jaffer Final: 2007/1/29
96 SLIB Prerequisites by Aubrey Jaffer Final: 2008/7/7
97 SRFI Libraries by David Van Horn Final: 2008/12/22
98 An interface to access environment variables by Taro Minowa (Higepon) Final: 2008/9/19
99 ERR5RS Records by William D Clinger Final: 2009/10/7
100 define-lambda-object by Joo ChurlSoo Final: 2010/6/21
101 Purely Functional Random-Access Pairs and Lists by David Van Horn Final: 2013/2/24
102 Procedure Arity Inspection by David Van Horn Withdrawn: 2013/02/24
103 Library Files by Derick Eddington Withdrawn: 2013/05/08
104 Library Files Utilities by Derick Eddington Withdrawn: 2010/05/23
105 Curly-infix-expressions by David A. Wheeler, Alan Manuel K. Gloria Final: 2012/11/6
106 Basic socket interface by Takashi Kato Final: 2013/8/20
107 XML reader syntax by Per Bothner Final: 2013/12/22
108 Named quasi-literal constructors by Per Bothner Final: 2013/6/21
109 Extended string quasi-literals by Per Bothner Final: 2013/6/21
110 Sweet-expressions (t-expressions) by David A. Wheeler, Alan Manuel K. Gloria Final: 2013/9/9
111 Boxes by John Cowan Final: 2013/7/3
112 Environment Inquiry by John Cowan Final: 2013/9/12
113 Sets and bags by John Cowan Final: 2014/11/28
114 Comparators by John Cowan Final: 2014/3/31
115 Scheme Regular Expressions by Alex Shinn Final: 2014/7/14
116 Immutable List Library by John Cowan Final: 2014/11/28
117 Mutable Queues by John Cowan Final: 2015/8/25
118 Simple adjustable-size strings by Per Bothner Final: 2015/7/7
119 wisp: simpler indentation-sensitive scheme by Arne Babenhauserheide Final: 2015/6/23
120 Timer APIs by Takashi Kato Final: 2015/8/6
121 Generators by Shiro Kawai, John Cowan, Thomas Gilray Final: 2016/1/18
122 Nonempty Intervals and Generalized Arrays by Bradley J. Lucier Final: 2016/12/24
123 Generic accessor and modifier operators by Taylan Ulrich Bayırlı/Kammer Final: 2015/10/14
124 Ephemerons by John Cowan Final: 2015/11/6
125 Intermediate hash tables by John Cowan, Will Clinger Final: 2015/5/28
126 R6RS-based hashtables by Taylan Ulrich Bayırlı/Kammer Final: 2016/2/1
127 Lazy Sequences by John Cowan Final: 2016/1/18
128 Comparators (reduced) by John Cowan Final: 2016/2/14
129 Titlecase procedures by John Cowan Final: 2016/3/8
130 Cursor-based string library by John Cowan Final: 2016/5/28
131 ERR5RS Record Syntax (reduced) by John Cowan, Will Clinger Final: 2016/2/13
132 Sort Libraries by John Cowan (based on SRFI 32 by Olin Shivers) Final: 2016/4/20
133 Vector Library (R7RS-compatible) by John Cowan (based on SRFI 43 by Taylor Campbell) Final: 2016/3/20
134 Immutable Deques by Kevin Wortman, John Cowan Final: 2016/7/1
135 Immutable Texts by William D Clinger Final: 2016/9/6
136 Extensible record types by Marc Nieper-Wißkirchen Final: 2016/12/25
137 Minimal Unique Types by John Cowan, Marc Nieper-Wißkirchen Final: 2016/10/4
138 Compiling Scheme programs to executables by Marc Nieper-Wißkirchen Final: 2016/9/28
139 Syntax parameters by Marc Nieper-Wißkirchen Final: 2016/10/2
140 Immutable Strings by Per Bothner Draft: 2016/7/11
141 Integer division by Taylor Campbell, John Cowan Final: 2016/12/14
142 Bitwise Operations by John Cowan Draft: 2016/9/20
143 Fixnums by John Cowan Draft: 2016/9/20
144 Flonums by John Cowan Draft: 2016/9/20
145 Assumptions by Marc Nieper-Wißkirchen Draft: 2016/12/18
146 Mappings by Marc Nieper-Wißkirchen Draft: 2016/12/18
147 Custom macro transformers by Marc Nieper-Wißkirchen Draft: 2016/12/24
148 Composable macros by Marc Nieper-Wißkirchen Draft: 2016/12/31
149 Basic Syntax-rules Template Extensions by Marc Nieper-Wißkirchen Draft: 2017/1/1
150 Hygienic ERR5RS Record Syntax (reduced) by Marc Nieper-Wißkirchen Draft: 2017/1/2
In addition to the complete list above, there are detailed
lists of draft , final , and withdrawn SRFIs.
Every SRFI is hosted on Github, but if you'd like a complete
archive of all SRFI documents and code, please download srfi.tgz .
The SRFI process has been important to the development of
some of the official Scheme standards, including R6 RS and R7 RS . It has been
running since 1998 , and there
have been many different editors .
Here's a graph of the total number of SRFIs since SRFI 0 was published
on 1999/1/5:
— the SRFI editors (email)