Generic interfaces
Daphne Preston-Kendal
(23 Jul 2021 11:34 UTC)
|
Re: Generic interfaces
Lassi Kortela
(23 Jul 2021 11:48 UTC)
|
Against hierarchy
Lassi Kortela
(23 Jul 2021 11:56 UTC)
|
Re: Against hierarchy
Marc Nieper-Wißkirchen
(23 Jul 2021 12:05 UTC)
|
Re: Against hierarchy
Lassi Kortela
(23 Jul 2021 12:08 UTC)
|
Re: Against hierarchy
Marc Nieper-Wißkirchen
(23 Jul 2021 12:26 UTC)
|
R6RS exception hierarchy
Lassi Kortela
(23 Jul 2021 12:39 UTC)
|
Re: R6RS exception hierarchy
Marc Nieper-Wißkirchen
(23 Jul 2021 13:09 UTC)
|
Re: R6RS exception hierarchy
Lassi Kortela
(23 Jul 2021 16:05 UTC)
|
Re: R6RS exception hierarchy
Marc Nieper-Wißkirchen
(23 Jul 2021 16:24 UTC)
|
Re: R6RS exception hierarchy
Arthur A. Gleckler
(23 Jul 2021 17:20 UTC)
|
Re: R6RS exception hierarchy
Marc Nieper-Wißkirchen
(23 Jul 2021 17:49 UTC)
|
Re: R6RS exception hierarchy
Arthur A. Gleckler
(23 Jul 2021 19:28 UTC)
|
Re: R6RS exception hierarchy
John Cowan
(26 Jul 2021 21:33 UTC)
|
Re: R6RS exception hierarchy
Marc Nieper-Wißkirchen
(27 Jul 2021 05:46 UTC)
|
Re: Generic interfaces
Daphne Preston-Kendal
(23 Jul 2021 17:47 UTC)
|
Re: Generic interfaces
Marc Nieper-Wißkirchen
(23 Jul 2021 18:18 UTC)
|
Re: Generic interfaces
Adam Nelson
(23 Jul 2021 18:56 UTC)
|
Re: Generic interfaces
Per Bothner
(24 Jul 2021 19:31 UTC)
|
Re: Generic interfaces
John Cowan
(24 Jul 2021 04:28 UTC)
|
Re: Generic interfaces
John Cowan
(24 Jul 2021 04:26 UTC)
|
Re: Generic interfaces
Daphne Preston-Kendal
(25 Jul 2021 09:08 UTC)
|
Re: Generic interfaces Amirouche (25 Jul 2021 14:36 UTC)
|
Re: Generic interfaces
Marc Nieper-Wißkirchen
(23 Jul 2021 12:19 UTC)
|
Re: Generic interfaces
Daphne Preston-Kendal
(23 Jul 2021 17:50 UTC)
|
Re: Generic interfaces
Marc Nieper-Wißkirchen
(23 Jul 2021 17:52 UTC)
|
Re: Generic interfaces
Daphne Preston-Kendal
(23 Jul 2021 18:12 UTC)
|
Re: Generic interfaces
Marc Nieper-Wißkirchen
(23 Jul 2021 18:39 UTC)
|
Re: Generic interfaces
John Cowan
(24 Jul 2021 03:56 UTC)
|
Re: Generic interfaces
John Cowan
(24 Jul 2021 02:22 UTC)
|
Re: Generic interfaces
Jeremy Steward
(24 Jul 2021 03:38 UTC)
|
Re: Generic interfaces
Amirouche
(25 Jul 2021 06:19 UTC)
|
Re: Generic interfaces
Marc Nieper-Wißkirchen
(25 Jul 2021 08:39 UTC)
|
Re: Generic interfaces
Daphne Preston-Kendal
(25 Jul 2021 09:28 UTC)
|
Re: Generic interfaces
Marc Nieper-Wißkirchen
(25 Jul 2021 10:04 UTC)
|
Re: Generic interfaces
Daphne Preston-Kendal
(25 Jul 2021 10:47 UTC)
|
Re: Generic interfaces
Marc Nieper-Wißkirchen
(25 Jul 2021 12:16 UTC)
|
Re: Generic interfaces
Marc Nieper-Wißkirchen
(29 Jul 2021 08:18 UTC)
|
Re: Generic interfaces
John Cowan
(26 Jul 2021 00:04 UTC)
|
Re: Generic interfaces
Marc Nieper-Wißkirchen
(26 Jul 2021 06:25 UTC)
|
Re: Generic interfaces
John Cowan
(26 Jul 2021 12:26 UTC)
|
Re: Generic interfaces
Marc Nieper-Wißkirchen
(26 Jul 2021 13:00 UTC)
|
Re: Generic interfaces
Ray Dillinger
(26 Jul 2021 19:28 UTC)
|
Re: Generic interfaces
John Cowan
(26 Jul 2021 19:53 UTC)
|
Re: Generic interfaces
Arthur A. Gleckler
(26 Jul 2021 22:15 UTC)
|
Re: Generic interfaces
John Cowan
(25 Jul 2021 23:38 UTC)
|
Re: Generic interfaces
Marc Nieper-Wißkirchen
(26 Jul 2021 06:10 UTC)
|
Re: Generic interfaces
John Cowan
(26 Jul 2021 11:43 UTC)
|
Re: Generic interfaces
Marc Nieper-Wißkirchen
(26 Jul 2021 12:09 UTC)
|
Re: Generic interfaces
John Cowan
(26 Jul 2021 13:14 UTC)
|
Re: Generic interfaces
Marc Nieper-Wißkirchen
(26 Jul 2021 13:38 UTC)
|
Re: Generic interfaces
Marc Nieper-Wißkirchen
(16 Nov 2021 18:52 UTC)
|
Re: Generic interfaces
John Cowan
(25 Jul 2021 23:01 UTC)
|
Re: Generic interfaces
Marc Nieper-Wißkirchen
(26 Jul 2021 05:44 UTC)
|
>>> However, generic functions in Scheme have many of the same >>> performance issues as the SRFI 225 (first draft) registration system. >>> Since the only portable typing mechanism we have are predicates, not >>> type descriptors, the only easy way for many implementations to do >>> typing dispatch is calling each predicate in turn. >> >> Fast-generics allows you to specify predicate subsumptions, which is >> isomorphic to subtype relationships. If the predicate P1 subsumes P2, >> then the type of objects satisfying P2 is a subtype of the type of >> objects satisfying P1. So when doing fast-generics on top of a >> JVM/CLR style type tree, we extend the subsumption relation to know >> about its subtypes, and then we can cleverly make use of its built-in >> dispatching. > > Yes, but predicates can be arbitrary Scheme procedures in a way that > type descriptors corresponding to Java classes/etc can't be, making > this trickier. Yes, it is trickier for the compiler. Naive implementations exists, performant implementation are possible. Also, Java classes/etc lack generality compared to predicate-based approach, and are trickier to explain / teach. I also somewhat off-topic to this paragraph, I want to add that at least in Python, inheritance outside the exception hierarchy is seldom used in the stdlib. What is pervasive in Python is protocols also known under the nickname of duck-typing. As far as I know, doing something like duck-typing in Java requires both classes and interface... predicates subsume all of that and are easier to understand [0]. > (I guess we make it ‘an error’ to use a predicate which > isn’t one of a disjoint type That is not necessary to specify that in the standard. Like I wrote above simple approach exists, complex solution are possible. > as defined in the spec or created by > define-record-type or whatever procedural records layer we adopt?) To me the question is more complex than "can it be performant as of today _on top_ of existing implementations" and "what is the favorite paradigm in other languages". I am not saying that what people in this thread wrote or think, but that what comes to my mind when reading. We should aim for perfection in many aspects: performance, ease of understanding and teaching, ease of programming, ease of maintenance of compilers and programs. [0] it is still possible to shoot one-self in the foot in the cases where predicates describes non-disjoint sets, some cases can be statically spotted by the compiler (easier with the help of predicates combinators). Still, the common case is to dispatch based on disjoint types. I guess "great power comes with great responsibility".