unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
From: Panicz Maciej Godek <godek.maciek@gmail.com>
To: "Taylan Ulrich B." <taylanbayirli@gmail.com>
Cc: guile-user <guile-user@gnu.org>
Subject: Re: guile-json 0.2.0 released
Date: Sun, 7 Apr 2013 13:40:48 +0200	[thread overview]
Message-ID: <CAMFYt2Y52Gui6BAZc73-O5+c_2UMCVgcq4zEv2QQcsJu1rGRLg@mail.gmail.com> (raw)
In-Reply-To: <8738v63pj4.fsf@taylan.dyndns.org>

[-- Attachment #1: Type: text/plain, Size: 7449 bytes --]

2013/4/5 Taylan Ulrich B. <taylanbayirli@gmail.com>


> > All in all, you don't write vector->list and list->vector to get a
>  > nice printable representation of vectors -- there was an issue, and it
> > has been solved. Racket has its printable representation of hashes,
> > which is much nicer than the one of guile (although still not
> > perfect).
>
> How important these matters are is very subjective I guess.  To be
> honest, I don't have a strong opinion at all, but was writing what I
> believe would be the stance of most Guile developers.  If you believe
> these features to be important for the larger Guile user-base, you might
> want to bring that to the attention of developers (perhaps already
> achieved with these mails), or send patches. :)


Well, actually I was hoping to bring attention of developers :)
After the discussion I agree that ordered hashes aren't so important, but
the printable representation and read syntax for hashes (or at least some
sort of hashes) and unordered sets would be comfortable and I believe it
wouldn't hurt (although Daniel Hartwig in one of this posts' follow-ups
claims that it could be misleading, but I'm not sure if we understood each
other entirely)

> Judging by the speed at which subsequent Reports on algorithmic
> > language Scheme are released, schemers don't seem know the word
> > "urgent" :) Which is good.
> > However, I think it is an important matter. I also think that it is no
> > good for scheme implementations to diverge from one another, if there
> > is no good reason for that.
>
> Yet you seem to be recommending highly non-standard features.  Or did I
> misinterpret something?


Well, I don't know how you interpreted that :) If it comes to applicable
objects, then I think that it should remain guile-specific, but it would
harmonize with the spirit of GOOPS. If it comes to syntax/representation of
hash tables, then it is non-standard, but mainly because it's not
standardized -- SRFI-69, which defines hash tables, says nothing about it's
display format, so the implementations are free to choose whichever format
they like. And if it is so, why shouldn't it be a useful and informative
format? And why couldn't it be made in such a way that it could become a
read-syntax at once?

> Note that easy-to-use hash tables are what win the market for PHP,
> > despite many drawbacks of that language.
>
> What I know about PHP associative-arrays is that they are created by
> using the pseudo-function array(), with an alternative syntax, and are
> in many ways indistinguishable from normal arrays, which I seem to
> remember had bit me already one of the few times I had to use PHP.  As
> someone with a generic sense for consistency and orthogonality, I found
> all that very distasteful.  If PHP wins "the market" with such an
> implementation, then there's probably something wrong with the market.
> (There is, indeed, I believe.)


I agree. But Adam Smith would say that it's the market who says what's
right and what's wrong ;)
And when it comes to PHP, it's true that it's an extremely incoherent and
clumsy language, but fortunately it's semantics diverges towards that of
lexically scoped lisps, so php 5.3 allows to create closures. And if it
comes to collections, normal arrays are mixed with associative arrays,
which is sound in a way, because they share a common interface. And they
are way simpler than, for instance, in perl, although (or because) perl
forces a programmer to know what he's doing.

> I know of no other implementation of Scheme than Guile which supports
> > SRFI-105. And I guess that the implementators will remain reluctant
> > with regard to it, as it introduces more randomness to the way the
> > code can be written.
>
> It's a relatively young SRFI.  It's very well-thought-out though in my
> opinion, and offers a *generic* solution to the kind of problem you
> described.  It doesn't introduce "randomness," it introduces
> well-defined extensions to the reader-syntax.  I'd urge you to read it
> if you haven't already.
>
>
I've read about it even before it became an SRFI draft, at David Wheeler's
website, so I know the idea quite well. When I say about randomness, I'm
not saying that it's not well-defined, but that it's conceptually or
cognitively incoherent. First, there's the idea of having an infix
notation. In a way I can understand it, because we're all educated to write
"two plus two" instead of "add two to two". But once the infix notation is
available, am I obliged to write {2 + 2}, or can I mix it with (+ 2 2)
freely? That's the unnecessary choice that I need to make. But I can
swallow that. However, since the infix notation is available, how will a
common infix expression like {2 * 3 + 4 / 5} behave? As expected? Nope. And
inside curly braces, do round parentheses behave as precedence operators,
or as they behave outside curly braces? And what about curly braces? Let's
look at some examples:
30. {(map - ns)} => (map - ns)
31. {map(- ns)} => (map - ns) as well
Why on earth would anyone want to write {(map - ns)} instead of (map - ns)?
And why is it cooler to write {f{x}} or {f(x)} instead of (f x)? Because it
somehow resembles the notation used by mathematicians? So it's because of
an idol! And why {f{- x}} maps to (f (- x)), while {f (- x)} maps to (f -
x), and not the other way around? And why do I have to remember that?!
I could go on like that. As you can see, a lot of arbitrary choices were
made in this SRFI, which were justified in this way or the other. And I
think that ony a few persons in the world will ever know all of those
justifications. For the remaining ones, reading code that uses "curly
infix" extensively will be a nightmare. Besides, it's so un-scheme if there
are a few people who know better than you how you are going to use the
language -- it would be sufficient if the reader transformed {...} into
(curly ...) or something like that, because then the programmer could
utilize the curly braces any way he wanted to using plain scheme macros,
whether it be an infix notation (either with or without precedence) or list
comprehensions, or lazy evaluation, or function composition, or
currying/binding, or indexing, or whatever.

> On the other hand, what are the argumets against making hash-tables,
> > vectors et al. applicable, assuming that "programming languages should
> > be designed not by piling feature on top of feature, but by removing
> > the weaknesses and restrictions that make additional features appear
> > necessary"?
>
> I don't have any arguments against that; in fact I just learned what it
> means for an object to be applicable.  Seems like a nice idea on the
> surface, and I can't think of any immediate draw-backs.  I'm not sure if
> it might be confusing to have more than two types of applicable objects
> (syntax-keywords and procedures), and I could probably only answer that
> question for myself after having written some code using that feature.
> Would be interested in hearing other people's opinion on this...


Me too, and that's why I posted this suggestion ;)
From David Wheeler's perspective, the advantage would be that, if he wished
to, he could make numbers also applicable, and have an infix notation in
round parentheses, if that's so important to him. From my perspective, it
would inrease the number of possible usages of langugage, and -- in
particular -- could help with array/hash indexing.

Best regards!
M.

[-- Attachment #2: Type: text/html, Size: 10235 bytes --]

  parent reply	other threads:[~2013-04-07 11:40 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-02  7:08 guile-json 0.2.0 released Aleix Conchillo Flaqué
2013-04-04  9:11 ` Panicz Maciej Godek
2013-04-04 10:15   ` Taylan Ulrich B.
2013-04-04 12:06     ` Panicz Maciej Godek
2013-04-04 22:21       ` Taylan Ulrich B.
2013-04-04 22:59         ` Aleix Conchillo Flaqué
2013-04-05  7:35           ` Panicz Maciej Godek
2013-04-04 23:39         ` Daniel Hartwig
2013-04-07 11:40         ` Panicz Maciej Godek [this message]
2013-04-07 20:38           ` Taylan Ulrich B.
2013-04-08  1:51             ` Daniel Hartwig
2013-04-08  2:11           ` Daniel Hartwig
2013-04-05  0:17       ` Daniel Hartwig
2013-04-05  2:47         ` Noah Lavine
2013-04-05  9:35           ` Daniel Hartwig
2013-04-05 13:18             ` Noah Lavine
2013-04-05  9:41         ` Panicz Maciej Godek
     [not found]     ` <CAPjoZodAaHLfPGb+XiUhoMJD7J4_kYrjRmYP+p1S5w5yuPgLEg@mail.gmail.com>
     [not found]       ` <CAPjoZoc12W4usGnkwSZG2zNqe8xF6C4hWWZgq+-Nc8HMg_Xw4Q@mail.gmail.com>
2013-04-04 15:11         ` Nala Ginrut

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=CAMFYt2Y52Gui6BAZc73-O5+c_2UMCVgcq4zEv2QQcsJu1rGRLg@mail.gmail.com \
    --to=godek.maciek@gmail.com \
    --cc=guile-user@gnu.org \
    --cc=taylanbayirli@gmail.com \
    /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).