On Sun, Sep 23, 2018 at 6:41 PM Neil Van Dyke <[email protected]> wrote:
> Laurent wrote on 9/19/18 8:29 AM: > > I don't mind `#:`, but I'd prefer to write `[#:foo 5]` rather than > > `#:foo [foo 5]`, that is, I don't like the repetition of the name (I > > first came to Racket precisely to avoid repeating code). > > [...] > So... What do people think of a `#lang` that is mostly `racket/base`, > but with a few additions, maybe something like the following? > > * Symbols that start with `:` (and aren't `:` exactly) read as keywords. > -1, I'm fine with reader syntax '#'. > * The popular `lambda`-ish and `define`-ish forms add support for [what > Laurent said above] > +1 * The `let`-ish forms add terse support for frequent multiple-value LHS > (without burdening single-value LHS, nor increasing rightward drift). > +1, yes please. * The `struct` definition forms also generate constructors with keyword > arguments for fields. > +1, or by symbol (but keyword is easier to check for correctness at compile time maybe). > * Support for embedded documentation for pro (ideally, also `provide`d > by the module for both Scribble complete document generation and perhaps > online help fragments), together with shorthand for define+provide+doc > (and maybe contracts too). > +1, I think. > * Support for terse embedded unit tests (e.g., you don't have to type > out `(module+ test` all the time), and some standard lightweight unit > test definitions (maybe not RackUnit nor Overeasy, since we can improve > upon both) that work with the Racket package CI stuff. > Dunno, maybe. > * Maybe have a small language tweak to try to encourage people to know > what they're doing before they use `eval`, and/or to make the use of > such a powerful and oft-misused feature by a module more prominent. > That might just need a documentation tweak, like a margin note saying "Warning: Very often people think of using eval when better, faster and safer solution are available but depend on the case. Ask for help on the mailing list <...@...> if your unsure."? > * Look at making the "info.rkt" metadata optionally embeddable in > single-source-file packages. I can talk more about why one might want > this sometime, but one of the big cases involves lightweight and > interface-oriented modularity practices by default for well-engineered > closed-source systems, and low-friction selective open sourcing. (I > think this also requires tweaking more than just the `#lang` itself.) > Maybe as a submodule? I'd be happy with a one-file package; I firmly believe in the path-of-least-resistance philosophy (allow for quick and dirty first, but equally importantly also to easily gradually improve). > * Look at richer version/compatibility specification and confidence for > package dependencies, and possibly also add in simultaneous multiple > version support and/or other ways of providing backward compatibility. > Dunno, maybe. There are pros and cons, in terms of complexity. > * Tolerate square brackets, unless and until we someday find a much > better use for them (replacing `send` isn't good enough, but maybe > someday for vectors/arrays in dense numerical work). :) > Not sure what you mean. I use square brackets a lot in `let`, `cond` and friends. That makes reading much easier to me. For vectors I sometimes use `@` or `@?` for vector-ref, `!` or `@!` for vector-set!, and `@?!` for a vector-update!: (@?! my-vector index λ(x)(+ (* 2 x) 3)) is even simpler than my_vector[index] = 2 * my_vector[index]) + 3 Maybe @ variant should be generics though. While we're on the wish-list: * Use '_' in place of '-' for word symbol appending. I've grown unfond of '-' word separators, and I heretically prefer '_' because I find it visually easier to group words with '_', and '-' also clashes with the minus sign, which makes it harder to read calculations. But I usually don't use '_' to avoid being frown upon too much :-/ -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.

