Type strategy for Scheme
Lassi Kortela
(09 Nov 2022 22:54 UTC)
|
Re: Type strategy for Scheme
Marc Nieper-Wißkirchen
(10 Nov 2022 07:07 UTC)
|
Re: Type strategy for Scheme Marc Nieper-Wißkirchen (10 Nov 2022 07:42 UTC)
|
Re: Type strategy for Scheme
Peter Bex
(10 Nov 2022 08:05 UTC)
|
Re: Type strategy for Scheme
Philip McGrath
(10 Nov 2022 08:54 UTC)
|
Re: Type strategy for Scheme
Lassi Kortela
(10 Nov 2022 09:49 UTC)
|
Re: Type strategy for Scheme
Lassi Kortela
(10 Nov 2022 09:08 UTC)
|
Re: Type strategy for Scheme
Marc Feeley
(10 Nov 2022 23:34 UTC)
|
Re: Type strategy for Scheme
Lassi Kortela
(11 Nov 2022 19:17 UTC)
|
Re: Type strategy for Scheme
Marc Feeley
(11 Nov 2022 21:34 UTC)
|
Re: Type strategy for Scheme
Lassi Kortela
(12 Nov 2022 21:58 UTC)
|
Re: Type strategy for Scheme
Marc Nieper-Wißkirchen
(12 Nov 2022 22:52 UTC)
|
Re: Type strategy for Scheme
Lassi Kortela
(12 Nov 2022 23:14 UTC)
|
Re: Type strategy for Scheme
Marc Nieper-Wißkirchen
(13 Nov 2022 09:41 UTC)
|
Re: Type strategy for Scheme
Lassi Kortela
(13 Nov 2022 11:59 UTC)
|
Re: Type strategy for Scheme
John Cowan
(13 Nov 2022 19:52 UTC)
|
Re: Type strategy for Scheme
Lassi Kortela
(13 Nov 2022 20:22 UTC)
|
Re: Type strategy for Scheme
Marc Nieper-Wißkirchen
(13 Nov 2022 20:35 UTC)
|
Re: Type strategy for Scheme
Lassi Kortela
(13 Nov 2022 21:41 UTC)
|
Re: Type strategy for Scheme
Marc Feeley
(14 Nov 2022 00:03 UTC)
|
Re: Type strategy for Scheme
Lassi Kortela
(14 Nov 2022 09:36 UTC)
|
Re: Type strategy for Scheme
Marc Feeley
(14 Nov 2022 16:27 UTC)
|
Re: Type strategy for Scheme
Lassi Kortela
(14 Nov 2022 19:58 UTC)
|
Re: Type strategy for Scheme
John Cowan
(13 Nov 2022 20:40 UTC)
|
Re: Type strategy for Scheme
Marc Nieper-Wißkirchen
(13 Nov 2022 20:42 UTC)
|
Re: Type strategy for Scheme
Panicz Maciej Godek
(20 Nov 2022 21:59 UTC)
|
Re: Type strategy for Scheme
Per Bothner
(20 Nov 2022 22:58 UTC)
|
PS Trying to find types of the following should also be done when evaluating type systems: (vector 1 'foo '()) #0=(#0#) (syntax (let ((x 1)) (+ x x))) Am Do., 10. Nov. 2022 um 08:06 Uhr schrieb Marc Nieper-Wißkirchen <xxxxxx@gmail.com>: > > Starting by trying to describe types for what's already in Scheme > sounds like a good idea. I would start with the basics: > > Be creative and try to think of what should be the types of the > following expressions: > > + > > 0 > > #i0 > > (<operator> <operand> ...) > > (<keyword> <datum> ...) > > call/cc > > (lambda (x) > "converts seconds to minutes" > (/ x 60)) > > (raise (make-assertion-violation)) > > (case-lambda > [() 42] > [(x) (when (symbol=? 'x 'german) "zweiundvierzig"]) > > (let* () > (define-record-type pair (fields x y)) > make-pair) > > (values 1 2 3) > > values > > "string" > > (string-copy "string") > > Am Mi., 9. Nov. 2022 um 23:54 Uhr schrieb Lassi Kortela <xxxxxx@lassi.io>: > > > > Scheme is a dynamically typed language and should stay that way. > > > > Nevertheless, static types are irresistible in some of the application > > areas that are of the greatest personal interest to me. > > > > The most important one is code sharing. Useful software systems involve > > a lot of unimaginative work implementing well known algorithms, formats, > > and protocols. Language enthusiasts often act like there are good > > reasons to have 100 slightly different variations of this stuff but I > > don't buy any of those reasons. I want less variety and more re-use. > > > > When thinking of code re-use, we should think first about execution > > models. A dynamic language can support virtually the same execution > > model as a static language. I think this should be exploited by writing > > most of the unexciting code in the static language, then translating to > > the dynamic one by throwing away the type restrictions. (Likewise code > > can be written in a language with macros, and the expanded code > > translated into a language without macros that has a similar execution > > model.) > > > > Observe that the converse does not work: translating a dynamic language > > into a static one is a scruffy Artificial Intelligence problem. Any > > formalism you could invent to solve it would itself be a type system. > > > > The reason I didn't quit Scheme after a few months as I initially > > expected is that it's still the best core for algorithmic programming. > > You get the lambda calculus with an arbitrarily extensible syntax that > > can be used to add types, constraints, and whatever else you need on the > > side. For as long as we'll represent programs as trees and not as more > > general graphs, this is where it's at. > > > > So if we add types to Scheme, that gives a language which translates > > easily enough into any language with a lambda calculus based execution > > model and either dynamic types or compatible static types. > > > > This ties into a big and evolving web I have in my mind about how to > > organize the social and technical aspects of programming for maximum > > productivity in the next decade or two. There's much more to be said on > > that later. For now, I'd like to remark that no one has the moral > > authority to step up and say "this is the kind of type system that > > Statically Typed Scheme (TM) should have". A standardized, dynamically > > typed language has dynamic types, and any static complement is just > > someone's opinion. > > > > That being said, it would be a tragedy if different groups of people go > > off and over time make 3 or 5 different type systems for Scheme with no > > possibility of code re-use between them. > > > > I'd like to make an attempt to avoid that fate early by surveying the > > kinds of type systems available, with a view to finding equivalences and > > automatic conversions between them. We should find ways to express > > algorithms and interfaces that solve practical problems in Scheme, such > > that the same surface syntax can automatically be turned into the > > dynamically type Scheme we have now as well as any nascent typed > > flavors. Ideally the surface syntax will be something as similar as > > possible to dynamic Scheme, which would make it painless to copy/paste > > code between them. Type inference the gateway. > > > > Personally I like my type systems the way I like my memory management: > > invisible. To that end, I'll pursue simplicity with maximum inference. > > If others are inspired to look into something heavier like effects or > > dependent types, that's fine. We should find ways to interface our work. > > There still is the https://github.com/pre-srfi/static-scheme repo which > > I kind of bowed out of since the proposed system got too complex for me. > > Maybe some of you will want to run with that and see where it goes. > > > > But I didn't fully realize back when we started the repo that "Typed > > Scheme" should intrinsically be a network of type systems with > > translation pathways between them, sharing as much surface syntax and > > nomenclature as possible. If memory serves, we started a kind of rivalry > > about what kind of type system would "win", but there should be no winner. > > > > The way to start the long trek toward types is bottom up: Find practical > > problems, then say "here's how I would express this using my favorite > > type system". Compare solutions. As the first order of business, we > > should write types for the procedures in RnRS and the most popular SRFIs. > > > > While these "Typed Schemes" will take a decade to mature into something > > canonical, I think the problem is urgent because it may guide the > > evolution of dynamic Scheme. My ideal is not the "gradual typing" found > > in Common Lisp and Racket, but "twin typing" where there are separate > > dynamic and static languages, and the surface syntax is as compatible as > > possible to the point that you hardly have to care which one you're > > using at any given time. > > > > Comments are welcome, but above all, please help me write down type > > signatures for the Scheme canon. There are bound to be many surprises, > > both pleasant and vexing.