(Indeed, the first thing I thought
when I heard that this might happen was, did I make a mistake in
shifting my work to Racket? It is unlikely I would have come to
Racket if there wasn't an equivalent amount of elegance.)
--
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 racket-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/a63d9bdb-4d5d-49e8-9451-d6524ac24752%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Jack,
the word “diversity” is inherently political. It is designed as a wedge, a tool to separate people into groups and then from each other. It is used as a kudgel by one side of the political spectrum to relentlessly hit the other side. It was bad enough to have been told that there were too many “cis-gendered white males” at RacketCon.
[...]
I do not wish to see this mailing list turn into another political echo chamber, because then I have to remove myself from it and the public Racket community. [...]
— Matthias
> On Jul 15, 2019, at 1:06 PM, Jack Firth <jackh...@gmail.com> wrote:
>
> Matthias, I ask that you please not respond to discussion about the diversity of the Racket community by saying it's a political topic and politics have no place here. That statement alone is political and makes many people feel unwelcome, including me.
>
> On the topic of a new syntax: I am strongly in favor. I think it will remove barriers to entry that have deterred many potential Racketeers. And if there's one community I trust to put care and thoughtfulness into a surface syntax design, it's the Racket community.
>
> On Monday, July 15, 2019 at 10:19:16 AM UTC-6, Matthias Felleisen wrote:
>
>
> > On Jul 14, 2019, at 1:44 PM, someone wrote:
> >
> > - I am indeed very for growth in the community, though my main interest
> > in growth is in seeing a wider diversity of participants than just
> > raw numbers. Obviously other peoples' mileage may vary.
>
>
> This is politics and politics has no business whatsoever on this mailing list. I believe there are things such as Facebook, Instagram and other Web-chambers where political opinions are welcome and echoes will always confirm your opinions.
>
> ;; - - -
>
> Our policy has always been that everyone, absolutely everyone, is welcome on this technical list to discuss technical issues. We don’t exclude anyone. And everyone gets treated the same and gets productive responses if possible. In particular, politics stays off this list; it’s divisive enough in the rest of the world.
>
> Thank you — Matthias
>
>
> --
> 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 racket-users...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/a63d9bdb-4d5d-49e8-9451-d6524ac24752%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
--
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 racket-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/87B3D875-42D4-4951-B08D-96BF28468EF8%40felleisen.org.
On 07 15 19, at 10:55 AM, Matthias Felleisen <matt...@felleisen.org> wrote:
the word “diversity” is inherently political. It is designed as a wedge, a tool to separate people into groups and then from each other. It is used as a kudgel by one side of the political spectrum to relentlessly hit the other side. It was bad enough to have been told that there were too many “cis-gendered white males” at RacketCon.
I do not wish to see this mailing list turn into another political echo chamber, because then I have to remove myself from it and the public Racket community. If people wish to discuss the politics of diversity in the Racket community, please create a Facebook group and go there.
--
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 racket-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/B7391FF7-FDE7-42A5-921D-BA9B78B463C9%40felleisen.org.
For more options, visit https://groups.google.com/d/optout.
--
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 racket-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/B7391FF7-FDE7-42A5-921D-BA9B78B463C9%40felleisen.org.
[...]
- Nonetheless, assumptions that various math operators should be infix
is understandable because that's what people see today.
--
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 racket-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/c6319b95-b166-e29b-9d0d-2f1f2a3bd774%40fastmail.net.
The context of this email is the proposal by Matthew Flatt that we move
to an easier-to-accept surface syntax for #lang racket2.
Matthew Flatt has heard more than enough from me of concern about this
proposal. But I should indicate that I'm highly sympathetic to the
goal. I would like to lay out the following observations:
- The challenge with s-expressions is largely in anxiety with something
that looks extremely alien. I suspect there's more fear from
instructors than students in encountering a lisp syntax; my
experience is that introducing someone who doesn't know differently
to a parenthetical syntax isn't scary for them, and they tend to like
it. But people who have *started out* with experience in a non-lispy
language tend to find it scary.
- Nonetheless, assumptions that various math operators should be infix
is understandable because that's what people see today.
- I am indeed very for growth in the community, though my main interest
in growth is in seeing a wider diversity of participants than just
raw numbers. Obviously other peoples' mileage may vary.
- We are at serious risk in this pivot of losing some key things:
- Many communities I have been in that have undertaken such a large
pivot to increase popularity expend enormous energy in the move to
the new thing, and in that process, the project actually collapses.
What I'm trying to say is that a pivot is a gamble; we should
calculate our odds carefully. (Indeed, the first thing I thought
when I heard that this might happen was, did I make a mistake in
shifting my work to Racket? It is unlikely I would have come to
Racket if there wasn't an equivalent amount of elegance.)
- I'm not sure if I could have understood Racket Week with a syntax
that didn't have the elegance of s-expressions. This is not to say
that *no* syntax can have that level of elegance where things can
be so clear, however.
IIRC Matthew's proposal for "#lang racket2" was something like the
following:
a) function(args ...) should work.
b) infix is necessary for math, such as 3 + 4
c) parentheses should be possible for grouping
The weird thing about the last one being that this is already kind of
true in s-expressions, but by ~default this also results in application.
Let me add one more suggested design goal:
- the new syntax should must not be significantly less elegant than
s-expressions.
Is there a way to achieve this? I actually think the best path forward
is to have a surface syntax that actually maps completely to
s-expressions, which is in fact universal that it can work with *any*
s-expression syntax.
I would suggest starting with Wisp as the basis for examining this:
https://dustycloud.org/blog/wisp-lisp-alternative/
https://srfi.schemers.org/srfi-119/srfi-119.html
Sweet-expressions may also be an alternative to explore. However, I
think Wisp is a more elegant base; it can transform *any* wisp code into
s-exp code. Not discussed in my blogpost about Wisp is that it also
supports infix via {3 + 4}. So ok, now we have that. And we can still
group:
{3 + {8 + 4}}
So that's points b) and c), but we don't have a) yet. Could we add it?
I think we can extend wisp with one thing and get everything we want: if
you have func(arg1 arg2 arg3) where the parenthesis comes *immediately*
after the symbol, that is rewritten to (func arg1 arg2 arg3). I will
call this version ~Wisp.
With all this, observe the following code rewritten from Scheme to ~Wisp:
(define (rgb-maker mk)
(lambda (sz)
(vc-append (colorize (mk sz) "red")
(colorize (mk sz) "green")
(colorize (mk sz) "blue"))))
define rgb-maker(mk)
lambda(sz)
vc-append(colorize(mk(sz) "red")
colorize(mk(sz) "green")
colorize(mk(sz) "blue"))
Here is another chunk of code, taken from HTdP2:
(and (or (= (string-length "hello world")
(string->number "11"))
(string=? "hello world" "good morning"))
(>= (+ (string-length "hello world") 60) 80))
To:
and(or({string-length("hello world") = string->number("11")}
string=?("hello world" "good morning"))
{{(string-length "hello world") + 60} >= 80})
And in fact the latter can transform itself *directly* into the former.
And the former technically is also still valid Wisp: you can embed
s-expressions into it and they still work.
I think this satisfies the requirements that Matthew laid out.
There's another major advantage of this. We can now write languages
that work either like:
#lang s-exp "mylang.rkt"
or:
#lang wisp "mylang.rkt"
The main thing that Wisp is missing right now is editor tooling so that
doing indentation is convenient. But that's more than feasible to add,
imo.
I think this is the best way to move forward without creating
significant divisions, throwing out valuable things we have, or making
future Racket Week courses all that much harder. What do people think?
- Chris
--
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 racket-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/87wogkqzo0.fsf%40dustycloud.org.
I always imagined racket2 as racket with a few minor backward incompatible changes, for example make `length` generic, drop `struct`, remove guarantees about freshness of results. I.E. Most of https://github.com/racket/racket/wiki/Racket2
To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/CAPaha9Nr9V38bXLbq%3DDf8195ur2udyk0WzWS-OjMpFgh8Vdb%2Bg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
On Jul 16, 2019, at 15:32, rocketnia <rok...@gmail.com> wrote:
I find it worrying that racket2 would be kicked off with infix syntax (something which I think of as an unnecessary sticking point in the way of prospective macro writers and language designers, and hence a move *toward* elitism *as opposed to* welcoming everyone)
So instead of thinking about all the ways Matthew’s proposed syntax is a compromise that necessarily comes with certain downsides, think of it as a challenge: how do we take all the lovely things we’ve come to enjoy and take for granted in #lang racket and do them in a language with a less regular syntactic structure? How do we make writing great macros as easy in #lang racket2 as it already is in #lang racket?
--
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 racket-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/CAFKxZVV-njHNCCLDP-RsDq%2BjbXrOGpOnaEp9Ob4ugTbdtmckAw%40mail.gmail.com.
The other thing I'd like to see would be the option to return nothing. Not #<void>, '(), or #f. Nothing. It's useful e.g. when you want to simultaneously transform and filter a list.
Would (values)
satisfy your criteria?
#lang racket
(define (my-filter-map proc xs)
(match xs
['() '()]
[(cons x xs)
(call-with-values
(thunk (proc x))
(case-lambda
[() (my-filter-map proc xs)]
[(x) (cons x (my-filter-map proc xs))]))]))
(my-filter-map (λ (x) (if (odd? x) (values) (add1 x))) '(1 2 3 4)) ;=> '(3 5)
One thing I don’t like about it is that zero values (and multiple values in general) are really unwieldy to work with and doesn’t compose well with the rest of Racket. You can for example translate v >>= f
in Haskell to just (and v (f v))
in Racket. But trying to do the same thing with zero values is a headache.
--On Wed, Jul 17, 2019 at 11:50 PM Daniel Prager <daniel....@gmail.com> wrote:--I'm confused on one point.
Why would a new canonical notation be preferable to, say, also fully supporting an alternative general notation (like Shriram's p4p, or a derivative thereof) or even multiple notations in addition to retaining good old s-expressions?
The idea would be that you could transform freely and readably between alternative notations, enabling round-tripping without degradation.
I imagine that effectively providing tooling, syntax-extension, good error messages, and documentation across multiple notations would be (ahem) challenging, but so long as we're dreaming big ...Dan
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 racket-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/CAFKxZVV-njHNCCLDP-RsDq%2BjbXrOGpOnaEp9Ob4ugTbdtmckAw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
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 racket-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/CAE8gKodKrWNeL3tJQ5uO4X64jKzBVmYY2P9BgLsd%3Dqh8bhSQyw%40mail.gmail.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/CADcueguTp19B7Yqb9nZM%3DJfiofWU4-JBdC-aaoFXq4vthUe3NQ%40mail.gmail.com.
(string (string-ref (person-first john) 0)
(string-ref (person-middle john) 0)
(string-ref (person-last john) 0))
There's a load of cognitive and syntactic overhead compared to something like:
john.first[0] + john.middle[0] + john.last[0]
(define (get-initial str)
(string-ref str 0))
(define (first-initial person)
(get-initial (person-first person)))
(define (middle-initial person)
(get-initial (person-middle person)))
(define (last-initial person)
(get-initial (person-last person)))
(define (get-initials person)
(string
(first-initial person)
(middle-initial person)
(last-initial person)))
> Improved tooling also seems high-effort -- medium-risk --
> medium-reward. I'll defer to those who concentrate more on tools,
> including the author of Racket mode for Emacs, to suggest a priority
> for this one.
Speaking of that, I had some plans what to do next. Even explore some
modest open-source funding. But Sunday morning hit the Pause button.
On Twitter I'm seeing some parody of old, sour, inflexible lispers who
only love sexprs. You know, fighting the inevitable electric car, which
is apparently on their lawn. Funny and unfair, both.
Although there are many ways and reasons to caricature me -- and I
heartily encourage anyone to do so, it's great fun! -- this doesn't
happen to be one of them. I spent a couple decades with C/C++. As my
mid-life crisis, instead of buying a sports car I learned Racket and
Emacs. Sexprs weren't a big deal; the new (to me) concepts were. Yes,
I've grown to really enjoy sexprs for editing (paredit), richer
identifier names, and not needing to check the tiresome board game rules
for operator precedence. But it's not like I can't use C or JS or Rust
or Haskell or Python or whatever syntax productively, especially when
not creating macros. In fact I can use those syntaxes by, say, using
those languages.
So for me, it's more like, "Well. If Racket will change that way, and
I'm skeptical it will help adoption, that feels like an inflection
point; a nudge to look around. Maybe spend more time with Rust or
Haskell or X, for the next ~10 years."
I'm not saying this is strictly logical. It's how I feel now. I'm also
not claiming it should be any input whatsoever into decisions made,
except maybe to the extent I'm representative of more people (and maybe
not even then).
Even if I decided to spend less time with Racket, I expect it would be
more like a slow cross-fade. This is not an abrupt, "So Long and Thanks
for All the Standard-Fish" announcement. :)
But seriously I feel like I need to wait for the dust to settle, digest,
understand where things will be in a couple years.
--
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 racket-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/5d34617a.1c69fb81.383c7.0155SMTPIN_ADDED_MISSING%40gmr-mx.google.com.
The context of this email is the proposal by Matthew Flatt that we move
to an easier-to-accept surface syntax for #lang racket2.
Matthew Flatt has heard more than enough from me of concern about this
proposal. But I should indicate that I'm highly sympathetic to the
goal. I would like to lay out the following observations:
- The challenge with s-expressions is largely in anxiety with something
that looks extremely alien. I suspect there's more fear from
instructors than students in encountering a lisp syntax; my
experience is that introducing someone who doesn't know differently
to a parenthetical syntax isn't scary for them, and they tend to like
it. But people who have *started out* with experience in a non-lispy
language tend to find it scary.
- Nonetheless, assumptions that various math operators should be infix
is understandable because that's what people see today.
- I am indeed very for growth in the community, though my main interest
in growth is in seeing a wider diversity of participants than just
raw numbers. Obviously other peoples' mileage may vary.
- We are at serious risk in this pivot of losing some key things:
- Many communities I have been in that have undertaken such a large
pivot to increase popularity expend enormous energy in the move to
the new thing, and in that process, the project actually collapses.
What I'm trying to say is that a pivot is a gamble; we should
calculate our odds carefully. (Indeed, the first thing I thought
when I heard that this might happen was, did I make a mistake in
shifting my work to Racket? It is unlikely I would have come to
Racket if there wasn't an equivalent amount of elegance.)
- I'm not sure if I could have understood Racket Week with a syntax
that didn't have the elegance of s-expressions. This is not to say
that *no* syntax can have that level of elegance where things can
be so clear, however.
IIRC Matthew's proposal for "#lang racket2" was something like the
following:
a) function(args ...) should work.
b) infix is necessary for math, such as 3 + 4
c) parentheses should be possible for grouping
The weird thing about the last one being that this is already kind of
true in s-expressions, but by ~default this also results in application.
Let me add one more suggested design goal:
- the new syntax should must not be significantly less elegant than
s-expressions.
Is there a way to achieve this? I actually think the best path forward
is to have a surface syntax that actually maps completely to
s-expressions, which is in fact universal that it can work with *any*
s-expression syntax.
I would suggest starting with Wisp as the basis for examining this:
https://dustycloud.org/blog/wisp-lisp-alternative/
https://srfi.schemers.org/srfi-119/srfi-119.html
Sweet-expressions may also be an alternative to explore. However, I
think Wisp is a more elegant base; it can transform *any* wisp code into
s-exp code. Not discussed in my blogpost about Wisp is that it also
supports infix via {3 + 4}. So ok, now we have that. And we can still
group:
{3 + {8 + 4}}
So that's points b) and c), but we don't have a) yet. Could we add it?
I think we can extend wisp with one thing and get everything we want: if
you have func(arg1 arg2 arg3) where the parenthesis comes *immediately*
after the symbol, that is rewritten to (func arg1 arg2 arg3). I will
call this version ~Wisp.
With all this, observe the following code rewritten from Scheme to ~Wisp:
(define (rgb-maker mk)
(lambda (sz)
(vc-append (colorize (mk sz) "red")
(colorize (mk sz) "green")
(colorize (mk sz) "blue"))))
define rgb-maker(mk)
lambda(sz)
vc-append(colorize(mk(sz) "red")
colorize(mk(sz) "green")
colorize(mk(sz) "blue"))
Here is another chunk of code, taken from HTdP2:
(and (or (= (string-length "hello world")
(string->number "11"))
(string=? "hello world" "good morning"))
(>= (+ (string-length "hello world") 60) 80))
To:
and(or({string-length("hello world") = string->number("11")}
string=?("hello world" "good morning"))
{{(string-length "hello world") + 60} >= 80})
And in fact the latter can transform itself *directly* into the former.
And the former technically is also still valid Wisp: you can embed
s-expressions into it and they still work.
I think this satisfies the requirements that Matthew laid out.
There's another major advantage of this. We can now write languages
that work either like:
#lang s-exp "mylang.rkt"
or:
#lang wisp "mylang.rkt"
The main thing that Wisp is missing right now is editor tooling so that
doing indentation is convenient. But that's more than feasible to add,
imo.
I think this is the best way to move forward without creating
significant divisions, throwing out valuable things we have, or making
future Racket Week courses all that much harder. What do people think?
- Chris
--
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 racket-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/20190724204753.dwvr6ji5nzbfd7jr%40topoi.pooq.com.
Pyret was a pain. Error messages were not clear and the whole change confused students.
Two language features caused us trouble, being the cause of impenetrable bugs in student code:
(a) Implicit begin .. end in function body. I have been writing Scheme for 20 years, and I **didn't know this existed**, always writing begin .. end in the very rare cases it was needed.
Beginner Student (imho correctly) treats this as an error. I would be happy if advanced Racket also treated it as an error. You can end up with bizarre results if it is allowed and you don't notice what you have done. It allows, encourages even, paranthesis errors.
(b) Conds allowed without else. Even beginner student allows this. It causes bugs. In htdp/universe you can end up with a void universe or a void somewhere in univers. the error emerges a long distance in space and time from the code that causes it. Make else clauses compulsory.
Pyret was a pain. Error messages were not clear and the whole change confused students.Can you elaborate more on this? My personal experience with Pyret is that it has an exceptionally good error message, except when an internal error occurs (which should not happen).
--
You received this message because you are subscribed to a topic in the Google Groups "Racket Users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/racket-users/ewWuCvbe93k/unsubscribe.
To unsubscribe from this group and all its topics, send an email to racket-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/bae23873-6837-415c-97ff-d7c0879873ad%40googlegroups.com.
--
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 racket-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/a8dd208d-dd3f-a2a7-3d20-3c1027932ac9%40comcast.net.