|
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)
|
Am Do., 8. Okt. 2020 um 22:09 Uhr schrieb Lassi Kortela <xxxxxx@lassi.io>:
>
> > (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.
That can truly model all (decidable) types and thus all dependent
types. But you can hardly reason with it (think of a static analyzer).
> 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.
Yes, typing becomes undecidable in the more general type systems. You
have to supply proof that your program is well-typed. This, however,
limits the expressibility of your language because you can no longer
write non-halting programs. :)
> > 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.
Well, you can easily switch from some implementation to the other in your code:
(define-syntax frobnicate
(syntax-rules ()
((_ :type arg* ...)
(begin
(map :type arg* ...)
(unfold :type ...)
(improve :type ...)))))
Then you can do
(frobnicate :vector ...)
when you want to frob vectors, or you can do (frobnicate :list ...)
when you have to frob lists.
(Of course, we need some syntax to make this easy and so that an
identifier reference of frobnicate returns a proper procedure.)
Think of
(matrix* :gaussian-integers m1 m2).
We only want to write matrix multiplication once but we mustn't have
any runtime-type dispatching overhead in some numerical code.
> 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
Rust is not bad, not at all, in my opinion. But that's not relevant here.
> 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.)
The macros I mentioned are not to be written by an everyday user but
by a library writer. For the consumer, things can nevertheless become
simpler.
> Sorry about the heated tone; it's hard to talk about static types and
> complexity on a Scheme list and stay neutral :)
I didn't mention static types initially. :) I am more interested in
the reification of runtime-time types in expand-time (or vice versa)
to make efficient compilation possible.