Skip to content

Under -q (*hush*), SBCL writes pr to file streams but CLISP and ECL silence it #2

Closed

Description

@pyrex41

Summary

The same port behaves differently across its Lisp backends: with *hush* set (-q), pr to an explicitly-opened file stream writes on SBCL but is silenced (zero-byte file) on CLISP and ECL. This is an intra-port inconsistency — the most clear-cut variant of the cross-port *hush*/pr divergence.

Repro

# program: (let S (open "out.txt" out) (do (pr "payload" S) (close S)))
LISP_IMPL=sbcl  bin/sbcl/shen  eval -q -l prog.shen   # out.txt = "payload"
LISP_IMPL=clisp bin/clisp/shen eval -q -l prog.shen   # out.txt = 0 bytes
LISP_IMPL=ecl   bin/ecl/shen   eval -q -l prog.shen   # out.txt = 0 bytes

Observed vs expected

  • SBCL: writes (native pr override ignores *hush*)
  • CLISP, ECL: silenced under *hush* → zero-byte file

Expected: all three backends should behave identically — pr to a non-stdout stream should write regardless of *hush*. SBCL is the correct reference (matches shen-go / ShenScript); CLISP and ECL fall back to the kernel's *hush*-gated path.

Root cause (likely)

shen-cl's native pr override is #+(or ccl sbcl), so CLISP and ECL use the kernel's portable pr, which respects *hush* for all streams. The portable fallback (or these backends' override) should ignore *hush* for non-stdout streams.

How it was found

Caught while building shen-cl's CLI parity tests across LISP_IMPL (sbcl/clisp/ecl) during the 2026-06-13 test build-out, and corroborated by the bifrost harness (hush-file-write case).

Related

Cross-port variant filed at pyrex41/shen-rust#2 and pyrex41/shen-lua#22.

Activity

  1. added a commit that references this issue on Jun 14, 2026
    dbd9e4f
  2. pyrex41 commented on Jun 14, 2026

    @pyrex41
    OwnerAuthor

    Fixed by #6 (merged into kernel-41.2): the native pr override now covers CLISP and ECL, so pr to a file stream writes under -q on all backends.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions