[climacs-cvs] CVS update: papers/ilc2005/syntax/climacssyntax.bib papers/ilc2005/syntax/climacssyntax.tex papers/ilc2005/syntax/acm_proc_article-sp.cls
Christophe Rhodes
crhodes at common-lisp.net
Tue May 24 09:20:20 UTC 2005
Update of /project/climacs/cvsroot/papers/ilc2005/syntax
In directory common-lisp.net:/tmp/cvs-serv21552
Modified Files:
climacssyntax.bib climacssyntax.tex
Removed Files:
acm_proc_article-sp.cls
Log Message:
Remove acm_proc_article-sp.cls
Add discussion from amb about persistent buffer implementations
Date: Tue May 24 11:20:19 2005
Author: crhodes
Index: papers/ilc2005/syntax/climacssyntax.bib
diff -u papers/ilc2005/syntax/climacssyntax.bib:1.9 papers/ilc2005/syntax/climacssyntax.bib:1.10
--- papers/ilc2005/syntax/climacssyntax.bib:1.9 Mon May 23 15:57:22 2005
+++ papers/ilc2005/syntax/climacssyntax.bib Tue May 24 11:20:19 2005
@@ -152,7 +152,7 @@
title = "{The Craft of Text Editing}",
publisher = {Springer-Verlag},
year = {1991, 1999--},
- note = {http://www.finseth.com/craft}
+ note = {\url{http://www.finseth.com/craft}}
}
@Manual{ISOProlog,
@@ -191,3 +191,28 @@
organization = {International Telecommunication Union},
year = {1999}
}
+
+ at Unpublished{dessy,
+ author = {Robert Will},
+ title = "{Algebraic Collections: A Standard for Functional Data Structures}",
+ note = {\url{http://www.stud.tu-ilmenau.de/~robertw/dessy/fun/}},
+ OPTkey = {},
+ OPTmonth = {},
+ OPTyear = {},
+ OPTannote = {}
+}
+
+ at Article{adams,
+ author = {Stephen Adams},
+ title = "{Functional pearls: Efficient sets -- a balancing act}",
+ journal = {Journal of Functional Programming},
+ year = {1993},
+ OPTkey = {},
+ volume = {3},
+ number = {4},
+ OPTpages = {553--561},
+ OPTmonth = {},
+ OPTnote = {},
+ OPTannote = {}
+}
+
Index: papers/ilc2005/syntax/climacssyntax.tex
diff -u papers/ilc2005/syntax/climacssyntax.tex:1.25 papers/ilc2005/syntax/climacssyntax.tex:1.26
--- papers/ilc2005/syntax/climacssyntax.tex:1.25 Tue May 24 11:08:43 2005
+++ papers/ilc2005/syntax/climacssyntax.tex Tue May 24 11:20:19 2005
@@ -6,6 +6,7 @@
\usepackage[a4paper,textwidth=6.7in,textheight=8.7in]{geometry}
\usepackage{graphics}
+\usepackage{url}
\usepackage{times}
\pagestyle{empty}
@@ -76,12 +77,12 @@
management, incremental redisplay, and syntax analysis. Emacs itself
traces its lineage to TECO, where Emacs was originally implemented as
a set of TECO macros. Climacs is compared to several interesting
-variants of Emacs in Table \ref{table:editorcompare}; more information
+variants of Emacs in table \ref{table:editorcompare}; more information
about text editing in general, and some editors we shall not discuss
further, can be found in \cite{FinsethCraft,greenberg,Pike94,woodZ}
and references therein.
-\begin{figure*}
+\begin{table}
\begin{center}
{\small
\begin{tabular}{|c|c|c|c|c|}
@@ -107,7 +108,7 @@
\caption{Implementation strategies of multiple Emacs variants}
\end{center}
\label{table:editorcompare}
-\end{figure*}
+\end{table}
Climacs' syntax analysis is a flexible protocol which can be
implemented with a full language lexer and parser. GNU Emacs, the most
@@ -174,13 +175,28 @@
the sequence is stored in a separate slot, along with the beginning of
the gap.
-Climacs also provides a buffer implementation utilizing functional
-data structures as the editable sequence representation. This buffer
-implementation provides a low-cost implementation of undo along
-multiple edit histories. (FIXME: a citation, either to something ``in
-preparation'' or to some previous description of the ideas? It would
-help if someone with more understanding than I of this buffer
-implementation would sketch this out.)
+Climacs also provides three purely functional (aka fully persistent)
+buffer implementations, all based on work in progress \cite{dessy} by
+Robert Will in Haskell, which builds upon older work by Stephen Adams
+\cite{adams}. The underlying data structure is a balanced binary tree
+with an abstracted-away rebalancing scheme, supporting sequence
+operations needed by the Climacs buffer protocol at reasonable speed
+($O(\log~N$)). The first implementation, {\tt binseq-buffer}, uses
+one tree whose leaf nodes (buffer elements) can be arbitrary objects.
+An optimized implementation, {\tt obinseq-buffer}, uses less space but
+buffer elements must be non-nil atoms. Finally, {\tt binseq2-buffer}
+combines the previous two implementations, by using a tree whose leaf
+nodes contain the optimized trees representing lines; the benefit of
+this implementation are faster ($O(\log~N)$) operations dealing with
+lines and columns. All the three implementations enable simple and
+inexpensive undo/redo operations because older buffer versions are
+kept as a whole in memory. The space cost of these implementations is
+not negligible, however, significant portions of older buffer versions
+are simply shared with newer buffer versions. Also, it is not
+necessary separately to remember editing operations in undo records,
+in order to preserve precise buffer history. Besides the undo
+operation simplification, the persistent buffer implementations
+facilitate further purely functional operations on Climacs buffers.
Climacs is intended to provide other buffer implementations, one of
which will use a sequence of lines organized into a tree for quick
More information about the Climacs-cvs
mailing list