|
Anyone to help with .sls/.sld files?
Artyom Bologov
(30 Aug 2024 13:29 UTC)
|
|
Re: Anyone to help with .sls/.sld files?
Amirouche
(30 Aug 2024 14:32 UTC)
|
|
Re: Anyone to help with .sls/.sld files?
Lassi Kortela
(30 Aug 2024 15:45 UTC)
|
|
Re: Anyone to help with .sls/.sld files? Artyom Bologov (30 Aug 2024 18:27 UTC)
|
|
Re: Anyone to help with .sls/.sld files?
Lassi Kortela
(30 Aug 2024 19:29 UTC)
|
|
Re: Anyone to help with .sls/.sld files?
Lassi Kortela
(30 Aug 2024 20:50 UTC)
|
|
Re: Anyone to help with .sls/.sld files?
Artyom Bologov
(31 Aug 2024 00:03 UTC)
|
|
Re: Anyone to help with .sls/.sld files?
Retropikzel
(31 Aug 2024 14:17 UTC)
|
|
Re: Anyone to help with .sls/.sld files?
Arthur A. Gleckler
(31 Aug 2024 16:02 UTC)
|
Hi Amirouche,
(CC Lassi, scroll down)
> What is the problem with the libraries?
Gambit can't find the library:
> (load "253.sld")
"/home/aartaka/git/srfi-253/srfi/253.sld"
> (import (srfi 253))
*** ERROR IN (stdin)@2.9 -- Cannot find library (srfi 253)
Gerbil complains about syntax:
$ gerbil 253.sld
*** ERROR IN gx#stx-map1 --
*** ERROR IN "253.sld"@26.3-29.31
--- Syntax Error: Bad syntax; illegal expression
... form: (export check-arg
values-checked
let-checked
lambda-checked
define-checked
opt-lambda-checked
define-optionals-checked
case-lambda-checked)
... detail: (%#export check-arg values-checked let-checked lambda-checked define-checked opt-lambda-checked define-optionals-checked case-lambda-checked) at "253.sld"@26.3-29.31
Gauche does not accept rest arguments in macros, but that's a different problem.
Chicken:
$ csi 253.sld
...
Error: unbound variable: define-library
STklos cannot import SRFI-227:
$ stklos -l 253.sld
**** Error while loading file "253.sld"
Where: in error
Reason: bad import clause (srfi 227)
Lots of things, ahah.
> Why test.scm does not import (srfi 253)?
Indeed! I'm sending a pull request with this and other fixes:
https://github.com/scheme-requests-for-implementation/srfi-253/pull/15
>
> By the way, an alternative form of:
>
> ;; It's possible that there are *no* audio devices available, in
> ;; which case open-device throws an exception. In that case, return
> ;; #f.
> (let ((device (false-if-exception (openal:open-device))))
> (and device
> (%make-sound-system device ...)))
>
> ref: https://github.com/scheme-requests-for-implementation/srfi-253/blob/master/existing-practice.scm#L293
>
> It is possible to use and=> from the builtin guile env, and srfi-26 cut:
>
> (and=> (false-if-exception (openal:open-device))) (cut (sound-system <> ...)))
>
> ref: https://www.gnu.org/software/guile/manual/html_node/Higher_002dOrder-Functions.html#index-and_003d_003e
>
> In that particular case, it is easier to do:
>
> (guard (ex (else #f))
> (sound-system (openal:open-device) ...))
>
> The form and=> is terse, handy, less general form of and-let*:
>
> (and-let* ((device (false-if-exception ...)) (sound-system (make-sound-system device ...))) sound-system))
>
> ref: https://srfi.schemers.org/srfi-2/
existing-practice.scm is a mishmash of code taken from other codebases
as a way to highlight existing practices. It's not meant to be executed,
it's merely there for illustrative purposes.
Hi Lassi,
> The file names need to be consistent with the library names used in
> the source code. srfi/srfi.sld should be srfi/253.sld
> instead. srfi/srfi.sls is more complicated, as R6RS file naming
> conventions are a mess.
I've seen the :253.sls, but that's breaking Emacs, so I'm not risking
naming it this way. I'll call it 253.sls for now.
> Write (define-library (srfi 253) ...) and (library (srfi :253) ...)
> respectively.
Yes, thanks! I've already compiled a patch!
> Using `export` inside `cond-expand` is an anti-pattern. A library
> should export the same set of identifiers in all cases.
Okay. Let it be this way, even if they end up unbound.
> (cond-expand ... (else)) is probably not appropriate here. It may
> cause an unsupported implementation to silently import the library
> until the user attempts to call one of the non-existent procedures. If
> you leave out the `else` branch, a well-behaved Scheme implementation
> will raise an error at import time.
No, the (else) part makes sense here: implementation-specific files are
extensions over the impl.generic.scm, adding things on top of an
otherwise self-sufficient base library. So the empty (else) is simply
sticking with defaults.
> In (library ...) [i.e. R6RS], (include "...") is non-standard and is
> probably best avoided.
So I should include all the code in the (begin ...) inside library?
That's bad, no wonder many abandon the R6RS-specific library files.
I'll think whether I should too.
Thanks a lot!
--
Artyom Bologov
https://aartaka.me