Please change the name Lassi Kortela (21 Oct 2022 11:12 UTC)
Re: Please change the name Marc Nieper-Wißkirchen (21 Oct 2022 11:54 UTC)
Re: Please change the name Lassi Kortela (21 Oct 2022 13:03 UTC)
Re: Please change the name Marc Nieper-Wißkirchen (21 Oct 2022 13:16 UTC)
Re: Please change the name Lassi Kortela (21 Oct 2022 14:31 UTC)
Re: Please change the name Marc Nieper-Wißkirchen (21 Oct 2022 15:00 UTC)
Re: Please change the name Lassi Kortela (21 Oct 2022 16:25 UTC)
Re: Please change the name Marc Nieper-Wißkirchen (21 Oct 2022 17:43 UTC)
Re: Please change the name Marc Nieper-Wißkirchen (21 Oct 2022 18:10 UTC)
Re: Please change the name Lassi Kortela (21 Oct 2022 22:32 UTC)
Re: Please change the name Marc Nieper-Wißkirchen (22 Oct 2022 08:03 UTC)
Re: Please change the name Lassi Kortela (22 Oct 2022 11:30 UTC)
Re: Please change the name Marc Nieper-Wißkirchen (22 Oct 2022 11:39 UTC)
Re: Please change the name Marc Nieper-Wißkirchen (22 Oct 2022 11:53 UTC)
Re: Please change the name Marc Feeley (22 Oct 2022 12:19 UTC)
Re: Please change the name Marc Nieper-Wißkirchen (22 Oct 2022 12:29 UTC)
Re: Please change the name Lassi Kortela (22 Oct 2022 13:17 UTC)
Re: Please change the name Marc Nieper-Wißkirchen (22 Oct 2022 13:26 UTC)
Re: Please change the name Marc Feeley (21 Oct 2022 13:17 UTC)
Re: Please change the name Marc Nieper-Wißkirchen (21 Oct 2022 13:26 UTC)

Re: Please change the name Marc Nieper-Wißkirchen 21 Oct 2022 17:43 UTC

Am Fr., 21. Okt. 2022 um 18:25 Uhr schrieb Lassi Kortela <xxxxxx@lassi.io>:
>
> >> Common Lisp guarantees a left-to-right order for evaluation
>
> > It leads to an over-specification, which is, in my point of view, bad.
> >
> > In the case of `let` and `letrec`, Scheme also allows arbitrary
> > evaluation orders. From a theoretical point of view, this is great
> > because it makes Scheme more expressive. This may not be important for
> > every programmer, but at least for me, as a mathematician, it is.
>
> The point of a high-level language is not to permit all expressions, but
> to permit the kinds of expressions that are easy to use correctly.

I don't think that you can sort every concept into black and white here.

Actually, my idea of the "perform" form was born from problems arising
from a piece of imperative code, which would have benefited - at least
in my mind - from a perform form.  Most forms of imperative code are
not easy to use correctly, but only a few programming languages are as
radical as Haskell.

Or take first-class continuations (delimited or not).  They make code
hard to reason about, but (as I think) they have their niche in
well-encapsulated modules.

Or take things like "unfold" from SRFI 1. Probably harder to use
correctly than a hand-written loop, but when done well makes the
programmer's intention (and the mathematical concept behind) much
clearer.

> Things that are hard to reason about are only excused by optimization,
> and should be tucked into an "unsafe" corner of the language which is
> ordinarily out of reach. As CL does: (declare (optimize (safety 0))).
>
> What's hard to reason about is mainly choices of different kinds, and
> arbitrarily varying choices are hardest of all.

Here we have to agree that we disagree.  I find it harder to reason
when superficial assumptions are made (like the order of evaluation
when it doesn't matter).

> > If you prescribe the evaluation order, you make some kinds of tests
> > impossible (see my previous post).
>
> Building programs out of features that are hard to reason about is what
> makes heavy testing necessary. There's no upper limit to how many tests
> you need if the tools and standards are tricky enough. Fuzz testing is
> largely profitable because C is too expressive for the problems people
> apply it to, and internet standards are too complex and made out of
> unreliable parts (e.g. subtle parsing).

The existence of a "perform" form does not increase the need for
tests.  But it does allow for logic tests that weren't possible
beforehand.

> No program is a mathematically (let alone philosophically) pure
> description of how to solve a problem. Every program is encoded for a
> particular abstract machine. IMHO it's not generally useful to point out
> all the ways in which the description could be different while still
> working correctly. There are arbitrarily many of them.

Sure, there are limits. But one of Scheme's virtues is that it is
amongst the most expressive languages (where expressiveness matter).

> > My point is a different one. My point is that it is bad if you have no
> > idea why a certain order is important but happen to find that a
> > particular order enclosed in "begin" just works.
>
> Good programmers rarely code by guesswork. As for documentation, I
> haven't seen evidence that more detailed comments and annotations lead
> to better code. In my experience code is either inspired or not, and
> annotating bad code does not make it better.

Good code can be even better if the programming language removes the
need to obscure the algorithmic idea behind the code.

In any case, we probably fundamentally disagree on that part of
Scheme, which is touched by this SRFI.  Thus, it is probably pointless
to carry this discussion further.  If I understand you, you think it
is best to withdraw this SRFI.  From my point of view, many points you
raised speak actually for this SRFI.