Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add unreadable-objects survey #44

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions surveys/unreadable-objects.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Unreadable objects

This is a survey of the lexical syntax that the `write` procedure uses
to write unreadable objects.

| Implementation | Syntax | Skippable |
lassik marked this conversation as resolved.
Show resolved Hide resolved
|----------------|----------|-----------|
| Chez Scheme | `#<...>` | no |
| Chibi-Scheme | `#<...>` | no |
| Chicken | `#<...>` | no |
| Gambit | `#<...>` | no |
| Gauche | `#<...>` | no |
| Guile | `#<...>` | no |
| Kawa | `#<...>` | no |
| MIT Scheme | `#[...]` | no |
| Mosh | `#<...>` | no |
| Sagittarius | `#<...>` | no |
| STklos | `#[...]` | YES? |
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, now I see what skippable means!
But... What was the experiment used to conclude that #[...] is skippable in STklos? It does't seem to be:

stklos> display
#[primitive display]
stklos> #[primitive display]
**** Error:
%read: bad sharp syntax in `"#"'
	(type ",help" for more information)
**** Error:
%execute: symbol `primitive' unbound in module `stklos'
	(type ",help" for more information)
stklos> (read-from-string  "#[primitive display]")
**** Error:
read: bad sharp syntax in `"#"'

And from what I remember from the reader code, it's not...

| (Common Lisp) | `#<...>` | no |

**Skippable** means that the written stand-in object can be parsed as
an S-expression (using the syntax of that implementation) and
therefore skipped to find more S-expressions in the same stream.

## Conflicts

Chicken and Gambit support multi-line strings via the following
syntax. (The syntax imitates the Bourne shell, which calls a
multi-line string a "here-document".)

<<end
.
.
.
end

An arbitrary identifier can be used in place of `end`.

lassik marked this conversation as resolved.
Show resolved Hide resolved
SRFI 107 (_XML reader syntax_) uses `#<` for XML tags mixed in with
Scheme code. It is implemented by Kawa. An example of this syntax is
`#<da></da>`.

In both cases there is a syntactic ambiguity. Chicken, Gambit, and
Kawa all use `#<` to write unreadable objects. Since valid Scheme
source code cannot contain unreadable objects, there is no read-time
ambiguity for valid code. The ambiguity does make it harder to deal
with invalid input where an unreadable object may be silently
misinterpreted as some type of readable object or rejected with a
confusing error message.

STklos has a similar syntax `#<<end` but since it does not use
`#<...>` for unreadable data there is no ambiguity.
1 change: 1 addition & 0 deletions www-index.scm
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@
"reader-vertical-bar-concatenated-with-number"
"square-brackets"
"string-symbol-conversion"
"unreadable-objects"
"unsigned-imaginary"
"upper-case-escape"
"vertical-line-symbols")
Expand Down