From: Amirouche <amirouche@hypermove.net>
To: Arne Babenhauserheide <arne_bab@web.de>,
Panicz Maciej Godek <godek.maciek@gmail.com>
Cc: "guile-user@gnu.org" <guile-user@gnu.org>
Subject: Re: How to make GNU Guile more successful
Date: Wed, 1 Mar 2017 20:21:52 +0100 [thread overview]
Message-ID: <3a0a18c5-0110-8e19-33fc-4be07c53b36b@hypermove.net> (raw)
In-Reply-To: <8760kc5ucw.fsf@web.de>
Le 14/02/2017 à 22:35, Arne Babenhauserheide a écrit :
> Panicz Maciej Godek <godek.maciek@gmail.com> writes:
>> There's surely many ways to approach that issue. The point is that for
>> some reason, Schemers from various tribes prefer to reinvent the
>> wheel, rather than use an existing one. (Not that I am any different)
>> However, I also think that these CPAN-alike solutions are far from
>> optimal: ideally, programming could be made an experience similar the
>> game "The Journey" by thatgamecompany (where you travel to your goal
>> and sometimes encounter other players heading the same direction), and
>> the repository itself could look more like Wikipedia (but first we'd
>> need to start perceiveing programming as a compact way of representing
>> knowledge)
> That sounds somehow like stackoverflow. We might already be going there :)
That's a very good idea!
>
>>> Practically put: We need Andy Wingo to nitpick the tutorial about things
>>>>> which will cause overheads the compiler cannot fix easily — including
>>>>> expensive use of macros.
>>>> I definitely oppose. If Chez has something solved better, why not use
>>>> Chez?
>>> It’s not "why not use Chez", but rather "what should I teach new
>>> people?"
>>>
>>> They are already learning a new language. When I now go and point them
>>> towards many different implementations which differ in details of stuff
>>> I teach them, I’m throwing more complexity at them. More things to
>>> understand before even starting to write working code.
>>>
>> I totally agree. Programmers shouldn't be concerned whether they're
>> using Chez or Guile or Gambit or Stalin or whatever else. Ideally, they
>> should do well without even knowing that such things exist.
>> There are Schemes, such as Kawa or Biwa or IronScheme, that are tied
>> to their environment, but most of them just run on the PC
> I think this is a point which cannot be reached, because the design of
> the Scheme system itself must make certain tradeoffs — especially for
> the default environment (what to present a new user). If that is too
> large, then users cannot start quickly. If it is too small, then users
> cannot solve problems easily. But different problem spaces require
> different base tools.
>
> Another points are the basic datastructures: If they are too complex,
> then the system cannot be used easily on tiny computers.
>
> Essentially you have to find reasons for decisions like this:
> https://docs.python.org/3/faq/design.html#how-are-lists-implemented
> and this:
> https://wiki.python.org/moin/TimeComplexity
>
>>> Maybe it would already help to mark the code which will work the same in
>>> all (r7rs) Schemes. Is there stuff which is well optimized in all
>>> Schemes? Who knows that? The r7rs benchmarks look like this is very much
>>> not the case: http://ecraven.github.io/r7rs-benchmarks/benchmark.html
>>>
>>> (Or rather, the benchmarks would ask: "why should I *not* use Chez or
>>> stalin for everything I do?" Because those are the fastest for most
>>> tasks.)
>>>
>>> But that might mean to write less elegant or efficient code to keep it
>>> cross-implementation. Should I rather teach new people to solve a
>>> problem as well as possible, or teach them to solve a problem in a
>>> portable way?
>> I think that in principle, the programmer should only focus on writing
>> most elegant code
> I think there are several different kinds of elegance. There’s technical
> elegance (combining existing things to build something unexpectedly
> powerful with minimal effort), readability (being easy to understand for
> newcomers), minimal code (solving a problem with the minimal amount of
> code — often close to mathematics), uniformity (using the same basic
> structure everywhere), efficiency (solving a problem with minimal
> resource-consumption), ...
> I’m sure we’ll find more.
>
> Sadly these elegances contradict each other in some points.
>
>>> In my case, I decided to use Guile by checking Scheme
>>> implementations. There were three with roughly equal activity and
>>> features. I chose Guile, because it’s a GNU project and it has a long
>>> history of surviving changing maintainers, so my skills are most likely
>>> to stay useful.
>> That's interesting. I chose it by trying to add a scripting language
>> to my game engine written in C++. But I guess that if I was starting
>> now, I'd write the whole engine in Chez (which wasn't opensource until
>> last year)
> Chez becoming free software is an interesting development.
>
>>>> The ultimate goal is not to optimize programs, but programmers.
>>> I’m not sure that I want to optimize them, I want to teach them tools to
>>> be more efficient and enjoy their work more (and teach myself the same).
>> Yeah, maybe I used a harsh word, but I meant exactly optimizing
>> programmers' efficiency (or if it sounds too bad, "giving them tools
>> to be more efficient")
> Sounds good :)
>
>>> I think one important point for Scheme would be to gather some consensus
>>> points. The Zen of Python is part of what made that one community
>>> strong. There is no reason why there should not be a Zen of Scheme,
>>> along with implementation-specific Koans which extend it.
>>>
>>> Do you have ideas for principles which could be shared by most Schemers?
>>>
>>>
>> It depends on the most Schemers, not me :)
> That’s why its a social problem :)
>
> Finding a set of basic koans which most Schemers agree with requires
> talking to and knowing a lot of Schemers.
>
>> However, you can have a look at the (grand scheme) glossary that I've been
>> maintaining for some time:
>>
>> https://github.com/plande/grand-scheme
> This looks interesting.
>
>> of course, the intent is to make the glossary usable for someone else than
>> me,
>> and I can boast that I have at least one user distinct from the maintainer.
>> You can have a look and let me know what you think. (for now it only works
>> with Guile). In particular, are there any factors that could convince you to
>> adapt it as a base for your library, or what would you want changed
>> (I assume you won't stop at the README file).
> I’d mainly need practical examples. Tell me how I’d solve a problem
> with (grand scheme) and how it would be solved without it — showing me
> why using it is better.
>
> That means: Documentation.
>
> Also I’d need to know whether some of these methods have performance
> problems: Will this scale as well as the method without (grand scheme)?
>
>> - functions should be pure
>> - language constructs that cause side-effects should be encapsulated
>> with macros that limit the extent of those side-effects
>> - if possible, use the quasiquote macro, rather than cons, append or list
>> - prefer the use of match <http://synthcode.com/scheme/match.scm> to cond,
>> if the patterns are simple
>> - never use abbreviations
>> - use commented prepositions to separate arguments
> As guidelines for easy-to-use libraries, that sounds good.
>
>> Also, I recently added infix syntax to Scheme, but (unlike in Racket
>> or David Wheeler's solutions) in the way it is still a prefix
>> syntax. So for example, instead of writing (< a b), one ought to write
>> (is a < b). The rationale is that prefix notation is terrible for
>> non-symmetrical binary predicates, because it obscures the roles of
>> respective arguments (in addition, (is a < b <= c) expands to (and (<
>> a b) (<= b c))). I'm still not sure whether it is a good idea, but I
>> have no reasons to think that it is bad either :] [Curiously enough, I
>> think that prefix notation in arithmetic is just fine: (+ a b c) reads
>> as "sum of a, b and c"]
> This is an old idea, but using (is) as prefix looks
> interesting. Typically the prefix was something like (nfx), which
> doesn’t say anything semantic (other than that what follows uses infix
> syntax). It’s like an expanded equal?
>
> (if (is a = 5)
> #t
> #f)
>
> (cond
> ((is q = p)
> q)
> ((is p > 5)
> p)
> (else
> q))
>
> This seems pretty close to natural language. Can I also use (is A 5)
> instead of (equal? A 5)?
>
> Though (is? a = 5) might be closer to canonical Scheme.
>
>> I like it that you and Amirouche look a lot at the sociocultural
>> perspective of programming
> I’m glad to hear that :)
>
>> Yes, to me the ease of understanding is also crucial. (I'd even go
>> further and say that undestranding is the very point of programming)
> I would not go that far: We’re programming both for the future
> maintainers of the code and for the computer. This restricts us in
> expressing things, because we always have to keep two targets audiences
> in mind (many different systems *and* many different people).
>
> Best wishes,
> Arne
next prev parent reply other threads:[~2017-03-01 19:21 UTC|newest]
Thread overview: 131+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-12 23:56 How to make GNU Guile more successful Amirouche
2017-02-13 0:21 ` Amirouche
2017-02-13 11:06 ` Arne Babenhauserheide
2017-02-13 12:14 ` Arne Babenhauserheide
2017-02-13 20:20 ` Amirouche
2017-02-13 23:08 ` Arne Babenhauserheide
2017-02-13 20:28 ` Panicz Maciej Godek
2017-02-13 20:42 ` Amirouche
2017-02-13 22:34 ` Marko Rauhamaa
2017-02-13 23:56 ` Arne Babenhauserheide
2017-02-14 0:18 ` David Kastrup
2017-02-14 22:21 ` Arne Babenhauserheide
2017-02-15 17:03 ` Christopher Allan Webber
2017-02-16 19:18 ` sirgazil
2017-02-16 20:26 ` Amirouche
2017-02-14 5:59 ` Marko Rauhamaa
2017-02-14 19:36 ` Linas Vepstas
2017-02-14 20:54 ` Marko Rauhamaa
2017-02-14 22:20 ` Arne Babenhauserheide
2017-02-13 22:54 ` Arne Babenhauserheide
2017-02-14 9:54 ` Panicz Maciej Godek
2017-02-14 21:35 ` Arne Babenhauserheide
2017-03-01 19:21 ` Amirouche [this message]
2017-03-10 20:23 ` Amirouche
2017-07-14 21:54 ` Linas Vepstas
2017-07-14 21:59 ` Marko Rauhamaa
2017-07-15 10:10 ` Jan Wedekind
2017-07-15 12:55 ` Nala Ginrut
2017-07-15 12:58 ` Nala Ginrut
2017-07-15 22:17 ` Jan Wedekind
2017-07-16 9:54 ` Nala Ginrut
2017-07-17 18:52 ` Arun Isaac
2017-07-18 11:22 ` Ernest Adrogué
2017-07-16 8:30 ` Freja Nordsiek
2017-07-16 9:18 ` Marko Rauhamaa
2017-07-16 10:11 ` Freja Nordsiek
2017-07-16 10:31 ` Marko Rauhamaa
2017-07-16 10:39 ` Freja Nordsiek
2017-07-16 10:45 ` Freja Nordsiek
2017-07-20 15:28 ` Guile bugs Ludovic Courtès
2017-07-20 16:22 ` Marko Rauhamaa
2017-07-20 18:26 ` Taylan Ulrich Bayırlı/Kammer
2017-07-20 18:35 ` Marko Rauhamaa
2017-07-20 20:41 ` Ludovic Courtès
2017-07-20 22:23 ` Marko Rauhamaa
2017-07-21 4:05 ` Mark H Weaver
2017-07-21 6:15 ` Marko Rauhamaa
2017-07-21 8:16 ` Chris Vine
2017-07-21 8:27 ` Marko Rauhamaa
2017-07-21 9:17 ` Mark H Weaver
2017-07-21 10:08 ` Marko Rauhamaa
2017-07-21 10:22 ` David Kastrup
2017-09-09 21:14 ` Linas Vepstas
2017-09-09 22:31 ` Marko Rauhamaa
2017-09-09 23:02 ` Linas Vepstas
2017-07-21 16:33 ` Taylan Ulrich Bayırlı/Kammer
2017-07-21 17:12 ` Marko Rauhamaa
2017-07-21 14:19 ` Matt Wette
2017-09-09 20:30 ` Linas Vepstas
2017-09-10 13:11 ` Ludovic Courtès
2017-09-10 19:56 ` Linas Vepstas
2017-09-11 7:26 ` Ludovic Courtès
2017-09-11 8:10 ` Marko Rauhamaa
2017-09-11 11:34 ` Ludovic Courtès
2017-09-14 17:54 ` Linas Vepstas
2017-09-15 7:56 ` Ludovic Courtès
2017-09-19 11:04 ` Linas Vepstas
2017-09-19 20:18 ` Chris Vine
2017-09-19 20:21 ` Chris Vine
2017-09-19 23:39 ` Nala Ginrut
-- strict thread matches above, loose matches on Subject: below --
2017-02-18 1:04 How to make GNU Guile more successful sirgazil
[not found] ` <6315ebf51aec83aaff1c7fbbec685c0b@openmailbox.org>
2017-02-18 15:29 ` sirgazil
2017-02-18 16:55 ` David Pirotte
2017-02-19 18:09 ` sirgazil
2017-02-20 1:00 ` David Pirotte
2017-02-20 6:05 Michael Vehrs
2017-02-20 20:41 ` Arne Babenhauserheide
2017-02-21 6:01 ` Michael Vehrs
2017-02-21 17:18 ` Arne Babenhauserheide
2017-02-21 18:19 ` Amirouche
2017-02-21 18:31 ` Mike Gran
2017-02-21 18:33 ` Amirouche
2017-02-21 18:41 ` Mike Gran
2017-02-21 18:15 ` Amirouche
2017-02-21 19:25 ` Arne Babenhauserheide
2017-03-01 19:25 ` Amirouche
2017-03-03 5:28 ` Nala Ginrut
2017-03-03 9:18 ` David Kastrup
2017-03-03 11:30 ` Nala Ginrut
2017-03-03 12:19 ` David Kastrup
2017-03-03 13:35 ` Nala Ginrut
2017-03-04 23:44 ` Arne Babenhauserheide
2017-03-05 2:05 ` Thomas Morley
2017-03-05 14:01 ` Thomas Morley
2017-03-05 14:09 ` David Kastrup
2017-03-05 14:13 ` Thomas Morley
2017-03-05 14:27 ` Thomas Morley
2017-03-03 17:21 ` Matt Wette
2017-03-03 19:09 ` Amirouche
2017-03-03 19:16 ` Amirouche
2017-03-03 19:24 ` Mike Gran
2017-03-03 20:10 ` Matt Wette
2017-03-03 20:09 ` Matt Wette
2017-02-22 5:51 ` Michael Vehrs
2017-03-04 23:41 Alejandro Sanchez
2017-03-05 0:23 ` Arne Babenhauserheide
2017-03-05 8:23 ` Thien-Thi Nguyen
2017-03-05 14:19 ` Arne Babenhauserheide
2017-03-05 3:09 ` Erik Edrosa
2017-03-05 11:57 ` Jan Wedekind
2017-03-07 3:29 ` Erik Edrosa
2017-03-05 14:27 ` Arne Babenhauserheide
2017-03-05 16:43 ` Nala Ginrut
2017-03-05 23:46 ` Alejandro Sanchez
2017-03-06 9:00 ` Arne Babenhauserheide
2017-03-06 1:31 ` Matt Wette
2017-03-07 4:07 ` Erik Edrosa
2017-03-05 9:40 ` David Kastrup
2017-03-10 2:08 Vítor De Araújo
2017-03-10 9:55 ` Arne Babenhauserheide
2017-03-10 10:03 ` Panicz Maciej Godek
2017-03-10 14:27 ` vbuaraujo
2017-03-10 15:08 ` Panicz Maciej Godek
2017-03-11 7:19 ` Thien-Thi Nguyen
2017-03-13 15:55 ` Nala Ginrut
2017-03-13 16:14 ` Panicz Maciej Godek
2017-03-10 20:17 ` Amirouche
2017-03-11 0:50 ` Vítor De Araújo
2017-03-11 3:02 ` Vítor De Araújo
2017-03-11 7:42 ` Thien-Thi Nguyen
2017-03-14 3:26 ` Christopher Allan Webber
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3a0a18c5-0110-8e19-33fc-4be07c53b36b@hypermove.net \
--to=amirouche@hypermove.net \
--cc=arne_bab@web.de \
--cc=godek.maciek@gmail.com \
--cc=guile-user@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).