Words which create objects corresponding to external resources should always be used with
with-disposal. The following code is wrong:
<external-resource> ... do stuff ... dispose
The reason being that if
do stuff throws an error, the resource will not be disposed of. The most important case where this can occur is with I/O streams, and the correct solution is to always use
with-input-stream and
with-output-stream; see
Default input and output streams for details.