I'm looking for some feedback... should sweet-expressions be adjusted to handle
really long Common Lisp loop statements?
Sweet-expressions work just great with relatively short Common Lisp loop
statements. But here's an example from hunchentoot version 1.2.18 file
request.lisp line 176+:
(loop with buffer = (make-array +buffer-length+ :element-type 'octet)
with content = (make-array 0 :element-type 'octet :adjustable t)
for index = 0 then (+ index pos)
for pos = (read-sequence buffer content-stream)
do (adjust-array content (+ index pos))
(replace content buffer :start1 index :end2 pos)
while (= pos +buffer-length+)
finally (return content))
So... what should be done with really LONG loop expressions like this?
The best approach I've found currently is to just use parens to disable indent
processing:
(loop with buffer = make-array(+buffer-length+ :element-type 'octet)
with content = make-array(0 :element-type 'octet :adjustable t)
for index = 0 then {index + pos}
for pos = read-sequence(buffer content-stream)
do adjust-array(content {index + pos})
replace(content buffer :start1 index :end2 pos)
while {pos = +buffer-length+}
finally return(content))
That actually isn't bad; you still have neoteric-expressions.
That could be annoying, though, if the "do" body is long.
Using "\\" between parameters works find if there are pairs
(e.g., keywords paired with data), but not well with:
with \\ content \\ = \\ make-array(0 :element-type 'octet :adjustable t)
The one alternative approach I can think of is "\\"-at-the-end, a dropped
proposal
to allow line splicing if "\\" is at the end of a line with at least 1
neoteric-expression
is on its left. Then you can do:
loop with buffer = make-array(+buffer-length+ :element-type 'octet) \\
with content = make-array(0 :element-type 'octet :adjustable t) \\
for index = 0 then {index + pos}
...
So... is this a problem that needs solving? Is it adequately handled already?
If not, are there suggestions for solving it?
Comments welcome. I'd like to finish SRFI-110, but now's the time to know
if there's a weakness that needs addressing.
--- David A. Wheeler
------------------------------------------------------------------------------
AlienVault Unified Security Management (USM) platform delivers complete
security visibility with the essential security capabilities. Easily and
efficiently configure, manage, and operate all of your security controls
from a single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d
_______________________________________________
Readable-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/readable-discuss