Hi Volker, On Mon, Oct 22, 2018 at 10:57 AM Volker Dobler <dr.volker.dob...@gmail.com> wrote:
> The Go 2 draft generics draft has been discussed a lot, > especially contracts have drawn a lot of attention and > other ways to limit the set of possible type were suggested. > > Most discussions orbited around very basic polymorphic > functions like polymorphic Min or a Map functions. I do consider > a polymorphic Min function to be nothing more than a > litmus test to generics: If a generic/polymorphic Min cannot > be written the proposal is insufficient. But I probably would > never write a polymorphic Min as a type specific Min is > 3 lines and basically impossible to get wrong and just because > Min looks nice under a proposal does not mean that the > proposed solution will lead to good code where generic or > polymorphic code would actually be beneficial: For complicated > data structures and algorithms. > > At least the original proposal mentions a generic Graph > data structure. Still without showing how e.g. DFS, BFS, > Shortest Paths would be a) implemented and b) used. > > I think it would be good if we could see how different proposals > (and especially the official one) would affect how generic code > is written and used. Especially code which is hard to get right > and really benefits from a "generic" implementation. > > I'd like to see generic/polymorphic: > - Image manipulation (scaling, convolution, etc.) for various color models > - Balanced trees (AVL or Red-Black) > - Matrices of bool, int, float32/64, complex with inversion, > LR-decomposition, eigenvalues > - Fast Fourier Transformation (with ints, float32/64, complex64/128 and > my float24 inputs) > - Graph algorithms (DFS, BFS, Dijkstra, Bellman-Ford, Floyd-Warshall) > (feel free to add stuff from your field here). > > How would a package graph with a generic Graph data structure > and accompanying algorithms look like? How would I use such > a generic algorithm with nodes of my own type? > > How would I be using a generic 2d FFT package when my inputs > is complex128 and how if inputs are float32? > > I think that answers to these questions would be much more > helpful in evaluating generics than the current focus on the > syntax of Min and whether contracts can be done trough interfaces. > > Let's start with Dijkstra and the Graph example of the > original proposal: How would the implementation look like > and how would my code use this implementation? > I agree. I had started something like this, there: - https://github.com/sbinet/go2-test/blob/master/ndarray/nd.go (my pet peeve is inter-operability with Python's protocol buffers and NumPy n-dim arrays in particular) it would be great to have a code generator that takes e.g. Go-generics draft-proposal code, and generates Go-1 compatible code (or, at the very least a gofmt command that can make sure the code parses ok.) -s -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.