SRFI 214: Flexvectors Arthur A. Gleckler (07 Oct 2020 17:10 UTC)
Re: SRFI 214: Flexvectors Marc Nieper-Wißkirchen (08 Oct 2020 09:41 UTC)
Re: SRFI 214: Flexvectors Marc Nieper-Wißkirchen (08 Oct 2020 09:59 UTC)
Re: SRFI 214: Flexvectors Adam Nelson (08 Oct 2020 12:10 UTC)
Nomenclature Lassi Kortela (08 Oct 2020 12:19 UTC)
Re: SRFI 214: Flexvectors Marc Nieper-Wißkirchen (08 Oct 2020 12:19 UTC)
Nomenclature Lassi Kortela (08 Oct 2020 12:26 UTC)
Re: Nomenclature Marc Nieper-Wißkirchen (08 Oct 2020 12:31 UTC)
Re: Nomenclature Lassi Kortela (08 Oct 2020 12:50 UTC)
Re: Nomenclature Marc Nieper-Wißkirchen (08 Oct 2020 13:01 UTC)
Flexvectors vs subtyping Per Bothner (08 Oct 2020 17:23 UTC)
Re: Flexvectors vs subtyping Arthur A. Gleckler (08 Oct 2020 17:29 UTC)
Re: Flexvectors vs subtyping Adam Nelson (08 Oct 2020 17:32 UTC)
Re: Flexvectors vs subtyping Marc Nieper-Wißkirchen (08 Oct 2020 17:46 UTC)
Re: Flexvectors vs subtyping Adam Nelson (08 Oct 2020 17:56 UTC)
Re: Flexvectors vs subtyping Marc Nieper-Wißkirchen (08 Oct 2020 19:21 UTC)
Re: Flexvectors vs subtyping Lassi Kortela (08 Oct 2020 20:09 UTC)
Re: Flexvectors vs subtyping Marc Nieper-Wißkirchen (08 Oct 2020 20:51 UTC)
Re: Flexvectors vs subtyping Lassi Kortela (08 Oct 2020 21:23 UTC)
Re: Flexvectors vs subtyping Arvydas Silanskas (12 Oct 2020 09:58 UTC)
Re: Flexvectors vs subtyping Marc Nieper-Wißkirchen (08 Oct 2020 20:35 UTC)
Re: Flexvectors vs subtyping Per Bothner (08 Oct 2020 17:54 UTC)
Re: Flexvectors vs subtyping Lassi Kortela (08 Oct 2020 20:39 UTC)
Re: SRFI 214: Flexvectors Marc Nieper-Wißkirchen (08 Oct 2020 17:32 UTC)
Re: SRFI 214: Flexvectors Adam Nelson (08 Oct 2020 17:35 UTC)
Re: SRFI 214: Flexvectors Marc Nieper-Wißkirchen (08 Oct 2020 18:05 UTC)
Re: SRFI 214: Flexvectors Adam Nelson (08 Oct 2020 18:34 UTC)
Re: SRFI 214: Flexvectors Marc Nieper-Wißkirchen (08 Oct 2020 18:57 UTC)
Flexvector computational complexity Adam Nelson (08 Oct 2020 17:47 UTC)
Re: Flexvector computational complexity Marc Nieper-Wißkirchen (08 Oct 2020 19:04 UTC)
Re: Flexvector computational complexity John Cowan (08 Oct 2020 19:18 UTC)
Re: Flexvector computational complexity Adam Nelson (08 Oct 2020 19:40 UTC)

Re: Flexvectors vs subtyping Lassi Kortela 08 Oct 2020 20:09 UTC

> (And in fact, I am not very much in favor of
> a static type system because only with dependent typing you can
> express all types.)

What is "all types"? For example, Common Lisp has a `satisfies` type
(http://www.lispworks.com/documentation/HyperSpec/Body/t_satisf.htm)
that checks whether the value satisfies a predicate. The predicate can
in principle be side-effecting, though it probably should not be.

Finding a definition for all types sounds like a problem that would
arrive at a fundamental paradox or ambiguity. Something similar in
spirit to the halting problem or Gödel's incompleteness theorem. (Aren't
some type systems Turing-complete? In that case we're already at the
former.) On top of the technical difficulties with logic there is the
philosophical problem of what a program means, which I assume is
indefinable as well.

> As I said, we should do some research first.

Warmly agreed - a lot of it :)

> For example, one objection against the many exported identifiers of
> the form TYPE-OPERATION (like vector-unfold or generator-map) is the
> duplication of similar identifiers. It would be enough to have general
> "procedures" unfold, map, etc., which takes as their first argument an
> expand-time value that selects the type (at expand-time). E.g.
>
> (map :vector PROC ARG)
>
> or
>
> (unfold :generator STOP? ...)
>
> One would implement (given that R7RS (large) becomes at least as
> expressive as R6RS) map, unfold, etc. as a macro, which checks whether
> the first argument carries a certain SRFI 213 property indicating that
> it specifies a type. If this is the case, the correct procedure is
> selected at expand-time.

The idea is interesting, but aren't these essentially more complex ways
to write vector-map and generator-unfold? Without type inference the
user doesn't save keystrokes.

I fear that if we normalize the use of macros to do something akin to
static analysis or generics, Scheme will cease to be a simple language
and will become something like Rust. When I started finding out about
R7RS-large I got the impression it was meant to be a large language in
the sense of a small core with a large library. If the core language
itself gets very complex, it will be something different in spirit from
classic Scheme. (As we know, many argue R6RS is already a step too far
in that direction; I'm neutral on that.)

(I'm using a layman's definition of simplicity, i.e. things are simple
when they look and feel simple. I strongly believe this is the right one
-- language design is first and foremost design, i.e. making things that
are good to use. Most of the time something is good to use when it's
among the simplest known ways to solve a given problem.)

My personal preference for static analysis would be a real type system
copied from the ML family, with full type inference so one doesn't need
type annotations. It would have to be an opt-in sublanguage; I think
having it opt-in is also the right thing.

The Common Lisp type system is another option. Personally I don't really
like that part of the language. I think bolting on static typing to a
dynamic language will inevitably end up with an inelegant result that is
hard to reason about.

Sorry about the heated tone; it's hard to talk about static types and
complexity on a Scheme list and stay neutral :)