ELSEIF
Your brief EB
352 stories from 93 feeds 192 clusters Refreshed 10 minutes ago next pull 02:21

TECH Signal 612 2 feeds carried it

Chicken Scheme 6.0 released

Illustration only Photo by Mitchell Luo on Unsplash

Chicken Scheme 6.0 is a breaking release that realigns the implementation with R7RS-small, switches internal strings to UTF-8, and removes a long list of Chicken-specific aliases and APIs.

WHY IT MATTERS

This is a major version bump with pervasive breaking changes, not a drop-in upgrade: module names are renamed, several Chicken-only primitives disappear, string indexing semantics change, and system interfaces are reworked. Existing codebases should be treated as needing a planned migration. The payoff is a much smaller Chicken-specific surface and closer alignment with the R7RS ecosystem, but the cost is real and the release notes do not describe a compatibility shim layer.

Written by elseif from the cluster below · every claim links back to a source

The three things worth knowing

01

Internal strings are now UTF-8 and fully Unicode-capable, with locatives on strings now indexed by code point rather than byte, breaking any code that hand-indexes by byte offset.

02

Several Chicken-specific modules and read syntaxes have been removed in favor of R7RS equivalents, including the srfi-0/6/9/11/23/39/98 aliases, the r4rs/r5rs module names, the #ci/#cs syntax, and the #${...} blob read syntax.

03

System interfaces have been reworked: process calls now return process objects instead of PIDs, file locking is rebuilt on flock(2) and is now thread-safe, and make-pathname and library path procedures always use forward slashes regardless of platform.

THE READ

What the cluster adds up to.

ORIGINAL ANALYSIS

The dominant theme of 6.0 is a hard pivot toward R7RS-small. Primitives that historically lived in (chicken base) and (chicken io) have been moved into (scheme base), the legacy r4rs/r5rs module names are renamed, and the SRFI aliases that those standards used to expose (srfi-0, srfi-6, srfi-9, srfi-11, srfi-23, srfi-39, srfi-98) are deleted because R7RS now covers them. For an engineer, the practical consequence is a wide import-and-rename pass: module names shift, and any code that imported via the old aliases or relied on non-standard locations will not load against the new core libraries.

The UTF-8 string representation is the deepest change. Strings become fully Unicode-capable, but locatives on strings now index by code point rather than byte, and the file and random APIs that used to take string arguments for byte data (file-read, file-write, set-pseudo-random-seed!, random-bytes) now require bytevectors. The blob read syntax (#${...}) is removed outright, so code that parsed with it will fail at read time rather than runtime. The bytevector story does clean up in parallel: (chicken blob) is gone, replaced by (chicken bytevector), and bytevectors are now fully equivalent to SRFI-4 u8vectors, with read-bytevector and write-bytevector added to (chicken io).

System-interface changes are narrower but consequential. The process API (process-fork, process-run, process, process*) now returns a process object instead of a raw PID, so callers must use the new record accessors to get exit status and the input/output ports; process-wait and process-signal accept either. File locking in (chicken file posix) is rebuilt on flock(2), operates over whole files, and is thread-safe, with file-test-lock removed. Path handling is also normalized: library procedures that return paths and make-pathname now always use forward slashes, which is a deliberate choice on Windows that may surprise code that does string-level path manipulation on platform-specific separators.

Smaller breaking changes are scattered through the release. The #ci and #cs read syntaxes are removed in favor of #![no-]fold-case markers. Hexadecimal escape sequences in strings and extended symbols must now be terminated by a semicolon to follow R7RS. define-record-type is now generative per R7RS, which is a semantic shift for any code that depended on record-type identity across compilation units. number->string now accepts bases up to 36 instead of 16. These are individually small, but they add up: a migration script that just renames modules will still miss them, and they are not the kind of change a compiler will flag for you.

Only one feed (Lobsters) carried this event, and the headline framing there was minimal, the summary field reads 'Comments', so there is no editorial angle to corroborate against or contrast with. The note above is built from the release notes extract alone, which limits how much framing can be reported. What can be said is that the adoption cost is meaningful: anything beyond a toy program will need a real migration pass, and the upside is a noticeably smaller Chicken-specific API surface in exchange.

Written by elseif from the cluster below · checked for specifics the sources never contained

THE CLUSTER

Same story, 2 feeds.

ORDERED BY FIRST SEEN
Lobsters Chicken Scheme 6.0 released Open ↗
Hacker News Chicken Scheme 6.0 Released Open ↗